diff --git a/framework/YiiBase.php b/framework/YiiBase.php index e4486dc..0069436 100644 --- a/framework/YiiBase.php +++ b/framework/YiiBase.php @@ -80,7 +80,7 @@ class YiiBase */ public static function getVersion() { - return '1.1.14'; + return '1.1.16'; } /** @@ -299,7 +299,8 @@ public static function import($alias,$forceInclude=false) if(($pos=strrpos($alias,'.'))===false) // a simple class name { - if($forceInclude && self::autoload($alias)) + // try to autoload the class with an autoloader if $forceInclude is true + if($forceInclude && (Yii::autoload($alias,true) || class_exists($alias,true))) self::$_imports[$alias]=$alias; return $alias; } @@ -392,15 +393,19 @@ public static function setPathOfAlias($alias,$path) * Class autoload loader. * This method is provided to be invoked within an __autoload() magic method. * @param string $className class name + * @param bool $classMapOnly whether to load classes via classmap only * @return boolean whether the class has been loaded successfully + * @throws CException When class name does not match class file in debug mode. */ - public static function autoload($className) + public static function autoload($className,$classMapOnly=false) { // use include so that the error PHP file may appear if(isset(self::$classMap[$className])) include(self::$classMap[$className]); elseif(isset(self::$_coreClasses[$className])) include(YII_PATH.self::$_coreClasses[$className]); + elseif($classMapOnly) + return false; else { // include class file relying on include_path @@ -709,6 +714,9 @@ public static function registerAutoloader($callback, $append=false) 'CDbExpression' => '/db/schema/CDbExpression.php', 'CDbSchema' => '/db/schema/CDbSchema.php', 'CDbTableSchema' => '/db/schema/CDbTableSchema.php', + 'CCubridColumnSchema' => '/db/schema/cubrid/CCubridColumnSchema.php', + 'CCubridSchema' => '/db/schema/cubrid/CCubridSchema.php', + 'CCubridTableSchema' => '/db/schema/cubrid/CCubridTableSchema.php', 'CMssqlColumnSchema' => '/db/schema/mssql/CMssqlColumnSchema.php', 'CMssqlCommandBuilder' => '/db/schema/mssql/CMssqlCommandBuilder.php', 'CMssqlPdoAdapter' => '/db/schema/mssql/CMssqlPdoAdapter.php', @@ -750,6 +758,7 @@ public static function registerAutoloader($callback, $append=false) 'CLogRouter' => '/logging/CLogRouter.php', 'CLogger' => '/logging/CLogger.php', 'CProfileLogRoute' => '/logging/CProfileLogRoute.php', + 'CSysLogRoute' => '/logging/CSysLogRoute.php', 'CWebLogRoute' => '/logging/CWebLogRoute.php', 'CDateTimeParser' => '/utils/CDateTimeParser.php', 'CFileHelper' => '/utils/CFileHelper.php', diff --git a/framework/base/CApplication.php b/framework/base/CApplication.php index 0219478..bb2e409 100644 --- a/framework/base/CApplication.php +++ b/framework/base/CApplication.php @@ -42,7 +42,7 @@ * CApplication will undergo the following lifecycles when processing a user request: *
    *
  1. load application configuration;
  2. - *
  3. set up class autoloader and error handling;
  4. + *
  5. set up error handling;
  6. *
  7. load static application components;
  8. *
  9. {@link onBeginRequest}: preprocess the user request;
  10. *
  11. {@link processRequest}: process the user request;
  12. @@ -97,6 +97,10 @@ abstract class CApplication extends CModule * the language that the messages and view files are in. Defaults to 'en_us' (US English). */ public $sourceLanguage='en_us'; + /** + * @var string the class used to get locale data. Defaults to 'CLocale'. + */ + public $localeClass='CLocale'; private $_id; private $_basePath; @@ -395,11 +399,11 @@ public function findLocalizedFile($srcFile,$srcLanguage=null,$language=null) /** * Returns the locale instance. * @param string $localeID the locale ID (e.g. en_US). If null, the {@link getLanguage application language ID} will be used. - * @return CLocale the locale instance + * @return an instance of CLocale */ public function getLocale($localeID=null) { - return CLocale::getInstance($localeID===null?$this->getLanguage():$localeID); + return call_user_func_array(array($this->localeClass, 'getInstance'),array($localeID===null?$this->getLanguage():$localeID)); } /** @@ -409,7 +413,10 @@ public function getLocale($localeID=null) */ public function getLocaleDataPath() { - return CLocale::$dataPath===null ? Yii::getPathOfAlias('system.i18n.data') : CLocale::$dataPath; + $vars=get_class_vars($this->localeClass); + if(empty($vars['dataPath'])) + return Yii::getPathOfAlias('system.i18n.data'); + return $vars['dataPath']; } /** @@ -419,7 +426,8 @@ public function getLocaleDataPath() */ public function setLocaleDataPath($value) { - CLocale::$dataPath=$value; + $property=new ReflectionProperty($this->localeClass,'dataPath'); + $property->setValue($value); } /** @@ -937,7 +945,7 @@ public function displayException($exception) } /** - * Initializes the class autoloader and error handlers. + * Initializes the error handlers. */ protected function initSystemHandlers() { diff --git a/framework/base/CComponent.php b/framework/base/CComponent.php index 103be35..13d81f5 100644 --- a/framework/base/CComponent.php +++ b/framework/base/CComponent.php @@ -261,7 +261,7 @@ public function __call($name,$parameters) return call_user_func_array(array($object,$name),$parameters); } } - if(class_exists('Closure', false) && $this->canGetProperty($name) && $this->$name instanceof Closure) + if(class_exists('Closure', false) && ($this->canGetProperty($name) || property_exists($this, $name)) && $this->$name instanceof Closure) return call_user_func_array($this->$name, $parameters); throw new CException(Yii::t('yii','{class} and its behaviors do not have a method or closure named "{name}".', array('{class}'=>get_class($this), '{name}'=>$name))); @@ -499,7 +499,7 @@ public function getEventHandlers($name) * $component->getEventHandlers($eventName)->add($eventHandler); * * - * Using {@link getEventHandlers}, one can also specify the excution order + * Using {@link getEventHandlers}, one can also specify the execution order * of multiple handlers attaching to the same event. For example: *
     	 * $component->getEventHandlers($eventName)->insertAt(0,$eventHandler);
    diff --git a/framework/base/CErrorHandler.php b/framework/base/CErrorHandler.php
    index 3ece1b2..f6b0ca5 100644
    --- a/framework/base/CErrorHandler.php
    +++ b/framework/base/CErrorHandler.php
    @@ -48,6 +48,7 @@
      * {@link CApplication::getErrorHandler()}.
      *
      * @property array $error The error details. Null if there is no error.
    + * @property Exception|null $exception exception instance. Null if there is no exception.
      *
      * @author Qiang Xue 
      * @package system.base
    @@ -82,6 +83,7 @@ class CErrorHandler extends CApplicationComponent
     	public $errorAction;
     
     	private $_error;
    +	private $_exception;
     
     	/**
     	 * Handles the exception/error event.
    @@ -150,6 +152,15 @@ public function getError()
     		return $this->_error;
     	}
     
    +	/**
    +	 * Returns the instance of the exception that is currently being handled.
    +	 * @return Exception|null exception instance. Null if there is no exception.
    +	 */
    +	public function getException()
    +	{
    +		return $this->_exception;
    +	}
    +
     	/**
     	 * Handles the exception.
     	 * @param Exception $exception the exception captured
    @@ -186,6 +197,7 @@ protected function handleException($exception)
     				unset($trace[$i]['object']);
     			}
     
    +			$this->_exception=$exception;
     			$this->_error=$data=array(
     				'code'=>($exception instanceof CHttpException)?$exception->statusCode:500,
     				'type'=>get_class($exception),
    @@ -198,17 +210,12 @@ protected function handleException($exception)
     			);
     
     			if(!headers_sent())
    -				header("HTTP/1.0 {$data['code']} ".$this->getHttpHeader($data['code'], get_class($exception)));
    -
    -			if($exception instanceof CHttpException || !YII_DEBUG)
    -				$this->render('error',$data);
    -			else
     			{
    -				if($this->isAjaxRequest())
    -					$app->displayException($exception);
    -				else
    -					$this->render('exception',$data);
    +				$httpVersion=Yii::app()->request->getHttpVersion();
    +				header("HTTP/$httpVersion {$data['code']} ".$this->getHttpHeader($data['code'], get_class($exception)));
     			}
    +
    +			$this->renderException();
     		}
     		else
     			$app->displayException($exception);
    @@ -270,7 +277,8 @@ protected function handleError($event)
     				default:
     					$type = 'PHP error';
     			}
    -			$this->_error=$data=array(
    +			$this->_exception=null;
    +			$this->_error=array(
     				'code'=>500,
     				'type'=>$type,
     				'message'=>$event->message,
    @@ -280,13 +288,12 @@ protected function handleError($event)
     				'traces'=>$trace,
     			);
     			if(!headers_sent())
    -				header("HTTP/1.0 500 Internal Server Error");
    -			if($this->isAjaxRequest())
    -				$app->displayError($event->code,$event->message,$event->file,$event->line);
    -			elseif(YII_DEBUG)
    -				$this->render('exception',$data);
    -			else
    -				$this->render('error',$data);
    +			{
    +				$httpVersion=Yii::app()->request->getHttpVersion();
    +				header("HTTP/$httpVersion 500 Internal Server Error");
    +			}
    +
    +			$this->renderError();
     		}
     		else
     			$app->displayError($event->code,$event->message,$event->file,$event->line);
    @@ -327,15 +334,47 @@ protected function getExactTrace($exception)
     	 */
     	protected function render($view,$data)
     	{
    -		if($view==='error' && $this->errorAction!==null)
    +		$data['version']=$this->getVersionInfo();
    +		$data['time']=time();
    +		$data['admin']=$this->adminInfo;
    +		include($this->getViewFile($view,$data['code']));
    +	}
    +
    +	/**
    +	 * Renders the exception information.
    +	 * This method will display information from current {@link error} value.
    +	 */
    +	protected function renderException()
    +	{
    +		$exception=$this->getException();
    +		if($exception instanceof CHttpException || !YII_DEBUG)
    +			$this->renderError();
    +		else
    +		{
    +			if($this->isAjaxRequest())
    +				Yii::app()->displayException($exception);
    +			else
    +				$this->render('exception',$this->getError());
    +		}
    +	}
    +
    +	/**
    +	 * Renders the current error information.
    +	 * This method will display information from current {@link error} value.
    +	 */
    +	protected function renderError()
    +	{
    +		if($this->errorAction!==null)
     			Yii::app()->runController($this->errorAction);
     		else
     		{
    -			// additional information to be passed to view
    -			$data['version']=$this->getVersionInfo();
    -			$data['time']=time();
    -			$data['admin']=$this->adminInfo;
    -			include($this->getViewFile($view,$data['code']));
    +			$data=$this->getError();
    +			if($this->isAjaxRequest())
    +				Yii::app()->displayError($data['code'],$data['message'],$data['file'],$data['line']);
    +			elseif(YII_DEBUG)
    +				$this->render('exception',$data);
    +			else
    +				$this->render('error',$data);
     		}
     	}
     
    diff --git a/framework/base/CModel.php b/framework/base/CModel.php
    index 4eb2589..3bdef04 100644
    --- a/framework/base/CModel.php
    +++ b/framework/base/CModel.php
    @@ -64,7 +64,7 @@ abstract public function attributeNames();
     	 * 
  13. except: this specifies the scenarios when the validation rule should not be performed. * Separate different scenarios with commas. Please see {@link scenario} for more details about this option.
  14. *
  15. additional parameters are used to initialize the corresponding validator properties. - * Please refer to individal validator class API for possible properties.
  16. + * Please refer to individual validator class API for possible properties. * * * The following are some examples: diff --git a/framework/base/CModule.php b/framework/base/CModule.php index 30b3fbe..b81b2bd 100644 --- a/framework/base/CModule.php +++ b/framework/base/CModule.php @@ -332,8 +332,13 @@ public function getModules() * You may also enable or disable a module by specifying the 'enabled' option in the configuration. * * @param array $modules module configurations. + * @param boolean $merge whether to merge the new module configuration + * with the existing one. Defaults to true, meaning the previously registered + * module configuration with the same ID will be merged with the new configuration. + * If set to false, the existing configuration will be replaced completely. + * This parameter is available since 1.1.16. */ - public function setModules($modules) + public function setModules($modules,$merge=true) { foreach($modules as $id=>$module) { @@ -342,16 +347,18 @@ public function setModules($modules) $id=$module; $module=array(); } - if(!isset($module['class'])) - { - Yii::setPathOfAlias($id,$this->getModulePath().DIRECTORY_SEPARATOR.$id); - $module['class']=$id.'.'.ucfirst($id).'Module'; - } - - if(isset($this->_moduleConfig[$id])) + if(isset($this->_moduleConfig[$id]) && $merge) $this->_moduleConfig[$id]=CMap::mergeArray($this->_moduleConfig[$id],$module); else + { + if(!isset($module['class'])) + { + if (Yii::getPathOfAlias($id)===false) + Yii::setPathOfAlias($id,$this->getModulePath().DIRECTORY_SEPARATOR.$id); + $module['class']=$id.'.'.ucfirst($id).'Module'; + } $this->_moduleConfig[$id]=$module; + } } } diff --git a/framework/base/CSecurityManager.php b/framework/base/CSecurityManager.php index e4c4640..a285ceb 100644 --- a/framework/base/CSecurityManager.php +++ b/framework/base/CSecurityManager.php @@ -48,6 +48,20 @@ class CSecurityManager extends CApplicationComponent const STATE_VALIDATION_KEY='Yii.CSecurityManager.validationkey'; const STATE_ENCRYPTION_KEY='Yii.CSecurityManager.encryptionkey'; + /** + * @var array known minimum lengths per encryption algorithm + */ + protected static $encryptionKeyMinimumLengths=array( + 'blowfish'=>4, + 'arcfour'=>5, + 'rc2'=>5, + ); + + /** + * @var boolean if encryption key should be validated + */ + public $validateEncryptionKey=true; + /** * @var string the name of the hashing algorithm to be used by {@link computeHMAC}. * See {@link http://php.net/manual/en/function.hash-algos.php hash-algos} for the list of possible @@ -62,12 +76,20 @@ class CSecurityManager extends CApplicationComponent * This will be passed as the first parameter to {@link http://php.net/manual/en/function.mcrypt-module-open.php mcrypt_module_open}. * * This property can also be configured as an array. In this case, the array elements will be passed in order - * as parameters to mcrypt_module_open. For example, array('rijndael-256', '', 'ofb', ''). + * as parameters to mcrypt_module_open. For example, array('rijndael-128', '', 'ofb', ''). + * + * Defaults to AES + * + * Note: MCRYPT_RIJNDAEL_192 and MCRYPT_RIJNDAEL_256 are *not* AES-192 and AES-256. The numbers of the MCRYPT_RIJNDAEL + * constants refer to the block size, whereas the numbers of the AES variants refer to the key length. AES is Rijndael + * with a block size of 128 bits and a key length of 128 bits, 192 bits or 256 bits. So to use AES in Mcrypt, you need + * MCRYPT_RIJNDAEL_128 and a key with 16 bytes (AES-128), 24 bytes (AES-192) or 32 bytes (AES-256). The other two + * Rijndael variants in Mcrypt should be avoided, because they're not standardized and have been analyzed much less + * than AES. * - * Defaults to 'des', meaning using DES crypt algorithm. * @since 1.1.3 */ - public $cryptAlgorithm='des'; + public $cryptAlgorithm='rijndael-128'; private $_validationKey; private $_encryptionKey; @@ -158,10 +180,8 @@ public function getEncryptionKey() */ public function setEncryptionKey($value) { - if(!empty($value)) - $this->_encryptionKey=$value; - else - throw new CException(Yii::t('yii','CSecurityManager.encryptionKey cannot be empty.')); + $this->validateEncryptionKey($value); + $this->_encryptionKey=$value; } /** @@ -191,12 +211,14 @@ public function setValidation($value) * @param string $data data to be encrypted. * @param string $key the decryption key. This defaults to null, meaning using {@link getEncryptionKey EncryptionKey}. * @return string the encrypted data - * @throws CException if PHP Mcrypt extension is not loaded + * @throws CException if PHP Mcrypt extension is not loaded or key is invalid */ public function encrypt($data,$key=null) { + if($key===null) + $key=$this->getEncryptionKey(); + $this->validateEncryptionKey($key); $module=$this->openCryptModule(); - $key=$this->substr($key===null ? md5($this->getEncryptionKey()) : $key,0,mcrypt_enc_get_key_size($module)); srand(); $iv=mcrypt_create_iv(mcrypt_enc_get_iv_size($module), MCRYPT_RAND); mcrypt_generic_init($module,$key,$iv); @@ -211,12 +233,14 @@ public function encrypt($data,$key=null) * @param string $data data to be decrypted. * @param string $key the decryption key. This defaults to null, meaning using {@link getEncryptionKey EncryptionKey}. * @return string the decrypted data - * @throws CException if PHP Mcrypt extension is not loaded + * @throws CException if PHP Mcrypt extension is not loaded or key is invalid */ public function decrypt($data,$key=null) { + if($key===null) + $key=$this->getEncryptionKey(); + $this->validateEncryptionKey($key); $module=$this->openCryptModule(); - $key=$this->substr($key===null ? md5($this->getEncryptionKey()) : $key,0,mcrypt_enc_get_key_size($module)); $ivSize=mcrypt_enc_get_iv_size($module); $iv=$this->substr($data,0,$ivSize); mcrypt_generic_init($module,$key,$iv); @@ -271,12 +295,15 @@ public function hashData($data,$key=null) */ public function validateData($data,$key=null) { + if (!is_string($data)) + return false; + $len=$this->strlen($this->computeHMAC('test')); if($this->strlen($data)>=$len) { $hmac=$this->substr($data,0,$len); $data2=$this->substr($data,$len,$this->strlen($data)); - return $hmac===$this->computeHMAC($data2,$key)?$data2:false; + return $this->compareString($hmac,$this->computeHMAC($data2,$key))?$data2:false; } else return false; @@ -489,4 +516,97 @@ private function substr($string,$start,$length) { return $this->_mbstring ? mb_substr($string,$start,$length,'8bit') : substr($string,$start,$length); } + + /** + * Checks if a key is valid for {@link cryptAlgorithm}. + * @param string $key the key to check + * @return boolean the validation result + * @throws CException if the supported key lengths of the cipher are unknown + */ + protected function validateEncryptionKey($key) + { + if(is_string($key)) + { + $supportedKeyLengths=mcrypt_module_get_supported_key_sizes($this->cryptAlgorithm); + + if($supportedKeyLengths) + { + if(!in_array($this->strlen($key),$supportedKeyLengths)) { + throw new CException(Yii::t('yii','Encryption key length can be {keyLengths}',array('{keyLengths}'=>implode(',',$supportedKeyLengths).'.'))); + } + } + elseif(isset(self::$encryptionKeyMinimumLengths[$this->cryptAlgorithm])) + { + $minLength=self::$encryptionKeyMinimumLengths[$this->cryptAlgorithm]; + $maxLength=mcrypt_module_get_algo_key_size($this->cryptAlgorithm); + if($this->strlen($key)<$minLength || $this->strlen($key)>$maxLength) + throw new CException(Yii::t('yii','Encryption key length must be between {minLength} and {maxLength}.',array('{minLength}'=>$minLength,'{maxLength}'=>$maxLength))); + } + else + throw new CException(Yii::t('yii','Failed to validate key. Supported key lengths of cipher not known.')); + } + else + throw new CException(Yii::t('yii','Encryption key should be a string.')); + } + + /** + * Decrypts legacy ciphertext which was produced by the old, broken implementation of encrypt(). + * @deprecated use only to convert data encrypted prior to 1.1.16 + * @param string $data data to be decrypted. + * @param string $key the decryption key. This defaults to null, meaning the key should be loaded from persistent storage. + * @param string|array $cipher the algorithm to be used + * @return string the decrypted data + * @throws CException if PHP Mcrypt extension is not loaded + * @throws CException if the key is missing + */ + public function legacyDecrypt($data,$key=null,$cipher='des') + { + if (!$key) + { + $key=Yii::app()->getGlobalState(self::STATE_ENCRYPTION_KEY); + if(!$key) + throw new CException(Yii::t('yii','No encryption key specified.')); + } + + if(extension_loaded('mcrypt')) + { + if(is_array($cipher)) + $module=@call_user_func_array('mcrypt_module_open',$cipher); + else + $module=@mcrypt_module_open($cipher,'', MCRYPT_MODE_CBC,''); + + if($module===false) + throw new CException(Yii::t('yii','Failed to initialize the mcrypt module.')); + } + else + throw new CException(Yii::t('yii','CSecurityManager requires PHP mcrypt extension to be loaded in order to use data encryption feature.')); + + $derivedKey=$this->substr(md5($key),0,mcrypt_enc_get_key_size($module)); + $ivSize=mcrypt_enc_get_iv_size($module); + $iv=$this->substr($data,0,$ivSize); + mcrypt_generic_init($module,$derivedKey,$iv); + $decrypted=mdecrypt_generic($module,$this->substr($data,$ivSize,$this->strlen($data))); + mcrypt_generic_deinit($module); + mcrypt_module_close($module); + return rtrim($decrypted,"\0"); + } + + /** + * Performs string comparison using timing attack resistant approach. + * @see http://codereview.stackexchange.com/questions/13512 + * @param string $expected string to compare. + * @param string $actual user-supplied string. + * @return boolean whether strings are equal. + */ + public function compareString($expected,$actual) + { + $expected.="\0"; + $actual.="\0"; + $expectedLength=$this->strlen($expected); + $actualLength=$this->strlen($actual); + $diff=$expectedLength-$actualLength; + for($i=0;$i<$actualLength;$i++) + $diff|=(ord($actual[$i])^ord($expected[$i%$expectedLength])); + return $diff===0; + } } diff --git a/framework/base/interfaces.php b/framework/base/interfaces.php index d879d07..052992c 100644 --- a/framework/base/interfaces.php +++ b/framework/base/interfaces.php @@ -350,7 +350,7 @@ public function checkAccess($itemName,$userId,$params=array()); * Creates an authorization item. * An authorization item represents an action permission (e.g. creating a post). * It has three types: operation, task and role. - * Authorization items form a hierarchy. Higher level items inheirt permissions representing + * Authorization items form a hierarchy. Higher level items inherit permissions representing * by lower level items. * @param string $name the item name. This must be a unique identifier. * @param integer $type the item type (0: operation, 1: task, 2: role). diff --git a/framework/caching/CApcCache.php b/framework/caching/CApcCache.php index ffc3235..0fbbb1f 100644 --- a/framework/caching/CApcCache.php +++ b/framework/caching/CApcCache.php @@ -103,6 +103,9 @@ protected function deleteValue($key) */ protected function flushValues() { + if(extension_loaded('apcu')) + return apc_clear_cache(); + return apc_clear_cache('user'); } } diff --git a/framework/caching/CFileCache.php b/framework/caching/CFileCache.php index f8ed789..330e74d 100644 --- a/framework/caching/CFileCache.php +++ b/framework/caching/CFileCache.php @@ -30,10 +30,24 @@ class CFileCache extends CCache * using 'protected/runtime/cache' as the directory. */ public $cachePath; + /** + * @var integer the permission to be set for directory to store cache files + * This value will be used by PHP chmod function. + * Defaults to 0777, meaning the directory can be read, written and executed by all users. + * @since 1.1.16 + */ + public $cachePathMode=0777; /** * @var string cache file suffix. Defaults to '.bin'. */ public $cacheFileSuffix='.bin'; + /** + * @var integer the permission to be set for new cache files. + * This value will be used by PHP chmod function. + * Defaults to 0666, meaning the file is read-writable by all users. + * @since 1.1.16 + */ + public $cacheFileMode=0666; /** * @var integer the level of sub-directories to store cache files. Defaults to 0, * meaning no sub-directories. If the system has huge number of cache files (e.g. 10K+), @@ -64,7 +78,10 @@ public function init() if($this->cachePath===null) $this->cachePath=Yii::app()->getRuntimePath().DIRECTORY_SEPARATOR.'cache'; if(!is_dir($this->cachePath)) - mkdir($this->cachePath,0777,true); + { + mkdir($this->cachePath,$this->cachePathMode,true); + chmod($this->cachePath,$this->cachePathMode); + } } /** @@ -142,10 +159,14 @@ protected function setValue($key,$value,$expire) $cacheFile=$this->getCacheFile($key); if($this->directoryLevel>0) - @mkdir(dirname($cacheFile),0777,true); + { + $cacheDir=dirname($cacheFile); + @mkdir($cacheDir,$this->cachePathMode,true); + @chmod($cacheDir,$this->cachePathMode); + } if(@file_put_contents($cacheFile,$this->embedExpiry ? $expire.$value : $value,LOCK_EX)!==false) { - @chmod($cacheFile,0777); + @chmod($cacheFile,$this->cacheFileMode); return $this->embedExpiry ? true : @touch($cacheFile,$expire); } else diff --git a/framework/caching/CRedisCache.php b/framework/caching/CRedisCache.php index 844d850..56b347a 100644 --- a/framework/caching/CRedisCache.php +++ b/framework/caching/CRedisCache.php @@ -108,7 +108,7 @@ protected function connect() * * See {@link http://redis.io/topics/protocol redis protocol description} * for details on the mentioned reply types. - * @trows CException for commands that return {@link http://redis.io/topics/protocol#error-reply error reply}. + * @throws CException for commands that return {@link http://redis.io/topics/protocol#error-reply error reply}. */ public function executeCommand($name,$params=array()) { diff --git a/framework/cli/commands/MessageCommand.php b/framework/cli/commands/MessageCommand.php index d4d7be6..d1e0e2c 100644 --- a/framework/cli/commands/MessageCommand.php +++ b/framework/cli/commands/MessageCommand.php @@ -61,6 +61,9 @@ public function getHelp() instead of being enclosed between a pair of '@@' marks. - sort: sort messages by key when merging, regardless of their translation state (new, obsolete, translated.) + - fileHeader: A boolean indicating whether the file should contain a default + comment that explains the message file or a string representing + some PHP code or comment to add before the return tag in the message file. EOD; } @@ -98,6 +101,9 @@ public function run($args) if(!isset($sort)) $sort = false; + if(!isset($fileHeader)) + $fileHeader = true; + $options=array(); if(isset($fileTypes)) $options['fileTypes']=$fileTypes; @@ -117,7 +123,7 @@ public function run($args) foreach($messages as $category=>$msgs) { $msgs=array_values(array_unique($msgs)); - $this->generateMessageFile($msgs,$dir.DIRECTORY_SEPARATOR.$category.'.php',$overwrite,$removeOld,$sort); + $this->generateMessageFile($msgs,$dir.DIRECTORY_SEPARATOR.$category.'.php',$overwrite,$removeOld,$sort,$fileHeader); } } } @@ -147,7 +153,7 @@ protected function extractMessages($fileName,$translator) return $messages; } - protected function generateMessageFile($messages,$fileName,$overwrite,$removeOld,$sort) + protected function generateMessageFile($messages,$fileName,$overwrite,$removeOld,$sort,$fileHeader) { echo "Saving messages to $fileName..."; if(is_file($fileName)) @@ -201,8 +207,8 @@ protected function generateMessageFile($messages,$fileName,$overwrite,$removeOld echo "saved.\n"; } $array=str_replace("\r",'',var_export($merged,true)); - $content=<<usageError('Please specify which version, timestamp or datetime to migrate to.'); + + if((string)(int)$args[0]==$args[0]) + return $this->migrateToTime($args[0]); + elseif(($time=strtotime($args[0]))!==false) + return $this->migrateToTime($time); + else + return $this->migrateToVersion($args[0]); + } + + private function migrateToTime($time) + { + $data=$this->getDbConnection()->createCommand() + ->select('version,apply_time') + ->from($this->migrationTable) + ->where('apply_time<=:time',array(':time'=>$time)) + ->order('apply_time DESC') + ->limit(1) + ->queryRow(); + + if($data===false) + { + echo "Error: Unable to find a version before ".date('Y-m-d H:i:s',$time).".\n"; + return 1; + } else - $this->usageError('Please specify which version to migrate to.'); + { + echo "Found version ".$data['version']." applied at ".date('Y-m-d H:i:s',$data['apply_time']).", it is before ".date('Y-m-d H:i:s',$time).".\n"; + return $this->migrateToVersion(substr($data['version'],1,13)); + } + } + private function migrateToVersion($version) + { $originalVersion=$version; if(preg_match('/^m?(\d{6}_\d{6})(_.*?)?$/',$version,$matches)) $version='m'.$matches[1]; @@ -466,7 +496,7 @@ protected function createMigrationHistoryTable() $db=$this->getDbConnection(); echo 'Creating migration history table "'.$this->migrationTable.'"...'; $db->createCommand()->createTable($this->migrationTable,array( - 'version'=>'string NOT NULL PRIMARY KEY', + 'version'=>'varchar(180) NOT NULL PRIMARY KEY', 'apply_time'=>'integer', )); $db->createCommand()->insert($this->migrationTable,array( @@ -530,6 +560,16 @@ public function getHelp() * yiic migrate to 101129_185401 Migrates up or down to version 101129_185401. + * yiic migrate to 1392447720 + Migrates to the given UNIX timestamp. This means that all the versions + applied after the specified timestamp will be reverted. Versions applied + before won't be touched. + + * yiic migrate to "2014-02-15 13:00:50" + Migrates to the given datetime parseable by the strtotime() function. + This means that all the versions applied after the specified datetime + will be reverted. Versions applied before won't be touched. + * yiic migrate mark 101129_185401 Modifies the migration history up or down to version 101129_185401. No actual migration will be performed. diff --git a/framework/cli/commands/ShellCommand.php b/framework/cli/commands/ShellCommand.php index 3aed3f1..5855f26 100644 --- a/framework/cli/commands/ShellCommand.php +++ b/framework/cli/commands/ShellCommand.php @@ -104,11 +104,8 @@ protected function runShell() // disable E_NOTICE so that the shell is more friendly error_reporting(E_ALL ^ E_NOTICE); - $_runner_=new CConsoleCommandRunner; - $_runner_->addCommands(dirname(__FILE__).'/shell'); - $_runner_->addCommands(Yii::getPathOfAlias('application.commands.shell')); - if(($_path_=@getenv('YIIC_SHELL_COMMAND_PATH'))!==false) - $_runner_->addCommands($_path_); + $_runner_=$this->createCommandRunner(); + $this->addCommands($_runner_); $_commands_=$_runner_->commands; $log=Yii::app()->log; @@ -139,6 +136,29 @@ protected function runShell() } } } + + /** + * Creates a commands runner + * @return CConsoleCommandRunner + * @since 1.1.16 + */ + protected function createCommandRunner() + { + return new CConsoleCommandRunner; + } + + /** + * Adds commands to runner + * @param CConsoleCommandRunner $runner + * @since 1.1.16 + */ + protected function addCommands(CConsoleCommandRunner $runner) + { + $runner->addCommands(Yii::getPathOfAlias('system.cli.commands.shell')); + $runner->addCommands(Yii::getPathOfAlias('application.commands.shell')); + if(($_path_=@getenv('YIIC_SHELL_COMMAND_PATH'))!==false) + $runner->addCommands($_path_); + } } class ShellException extends CException diff --git a/framework/cli/views/shell/crud/view.php b/framework/cli/views/shell/crud/view.php index 692b328..fc32d93 100644 --- a/framework/cli/views/shell/crud/view.php +++ b/framework/cli/views/shell/crud/view.php @@ -21,7 +21,7 @@ array('label'=>'List ', 'url'=>array('index')), array('label'=>'Create ', 'url'=>array('create')), array('label'=>'Update ', 'url'=>array('update', 'id'=>$model->)), - array('label'=>'Delete ', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$model->),'confirm'=>'Are you sure you want to delete this item?')), + array('label'=>'Delete ', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$model->),'confirm'=>Yii::t('zii','Are you sure you want to delete this item?'))), array('label'=>'Manage ', 'url'=>array('admin')), ); ?> diff --git a/framework/cli/views/webapp/protected/config/console.php b/framework/cli/views/webapp/protected/config/console.php index 346a976..dd3b3bc 100644 --- a/framework/cli/views/webapp/protected/config/console.php +++ b/framework/cli/views/webapp/protected/config/console.php @@ -11,19 +11,10 @@ // application components 'components'=>array( - 'db'=>array( - 'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db', - ), - // uncomment the following to use a MySQL database - /* - 'db'=>array( - 'connectionString' => 'mysql:host=localhost;dbname=testdrive', - 'emulatePrepare' => true, - 'username' => 'root', - 'password' => '', - 'charset' => 'utf8', - ), - */ + + // database settings are configured in database.php + 'db'=>require(dirname(__FILE__).'/database.php'), + 'log'=>array( 'class'=>'CLogRouter', 'routes'=>array( @@ -33,5 +24,6 @@ ), ), ), + ), -); \ No newline at end of file +); diff --git a/framework/cli/views/webapp/protected/config/database.php b/framework/cli/views/webapp/protected/config/database.php new file mode 100644 index 0000000..02f9aad --- /dev/null +++ b/framework/cli/views/webapp/protected/config/database.php @@ -0,0 +1,14 @@ + 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db', + // uncomment the following lines to use a MySQL database + /* + 'connectionString' => 'mysql:host=localhost;dbname=testdrive', + 'emulatePrepare' => true, + 'username' => 'root', + 'password' => '', + 'charset' => 'utf8', + */ +); \ No newline at end of file diff --git a/framework/cli/views/webapp/protected/config/main.php b/framework/cli/views/webapp/protected/config/main.php index 6919c74..052c5ec 100644 --- a/framework/cli/views/webapp/protected/config/main.php +++ b/framework/cli/views/webapp/protected/config/main.php @@ -32,10 +32,12 @@ // application components 'components'=>array( + 'user'=>array( // enable cookie-based authentication 'allowAutoLogin'=>true, ), + // uncomment the following to enable URLs in path-format /* 'urlManager'=>array( @@ -47,23 +49,15 @@ ), ), */ - 'db'=>array( - 'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db', - ), - // uncomment the following to use a MySQL database - /* - 'db'=>array( - 'connectionString' => 'mysql:host=localhost;dbname=testdrive', - 'emulatePrepare' => true, - 'username' => 'root', - 'password' => '', - 'charset' => 'utf8', - ), - */ + + // database settings are configured in database.php + 'db'=>require(dirname(__FILE__).'/database.php'), + 'errorHandler'=>array( // use 'site/error' action to display errors 'errorAction'=>'site/error', ), + 'log'=>array( 'class'=>'CLogRouter', 'routes'=>array( @@ -79,6 +73,7 @@ */ ), ), + ), // application-level parameters that can be accessed @@ -87,4 +82,4 @@ // this is used in contact page 'adminEmail'=>'webmaster@example.com', ), -); \ No newline at end of file +); diff --git a/framework/cli/views/webapp/protected/runtime/git-gitignore b/framework/cli/views/webapp/protected/runtime/git-gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/framework/cli/views/webapp/protected/runtime/git-gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/framework/cli/views/webapp/protected/runtime/hg-hgkeep b/framework/cli/views/webapp/protected/runtime/hg-hgkeep new file mode 100644 index 0000000..e69de29 diff --git a/framework/cli/views/webapp/protected/views/layouts/main.php b/framework/cli/views/webapp/protected/views/layouts/main.php index daf905e..a8533ae 100644 --- a/framework/cli/views/webapp/protected/views/layouts/main.php +++ b/framework/cli/views/webapp/protected/views/layouts/main.php @@ -1,19 +1,19 @@ - - + + - - + + - - + + - - + + <?php echo CHtml::encode($this->pageTitle); ?> diff --git a/framework/console/CConsoleApplication.php b/framework/console/CConsoleApplication.php index 078696a..04700ee 100644 --- a/framework/console/CConsoleApplication.php +++ b/framework/console/CConsoleApplication.php @@ -75,7 +75,7 @@ class CConsoleApplication extends CApplication protected function init() { parent::init(); - if(!isset($_SERVER['argv'])) // || strncasecmp(php_sapi_name(),'cli',3)) + if(empty($_SERVER['argv'])) die('This script must be run from the command line.'); $this->_runner=$this->createCommandRunner(); $this->_runner->commands=$this->commandMap; diff --git a/framework/console/CConsoleCommand.php b/framework/console/CConsoleCommand.php index 34e2945..d29c4a0 100644 --- a/framework/console/CConsoleCommand.php +++ b/framework/console/CConsoleCommand.php @@ -362,8 +362,8 @@ public function copyFiles($fileList) $overwriteAll=false; foreach($fileList as $name=>$file) { - $source=strtr($file['source'],'/\\',DIRECTORY_SEPARATOR); - $target=strtr($file['target'],'/\\',DIRECTORY_SEPARATOR); + $source=strtr($file['source'],'/\\',DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR); + $target=strtr($file['target'],'/\\',DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR); $callback=isset($file['callback']) ? $file['callback'] : null; $params=isset($file['params']) ? $file['params'] : null; diff --git a/framework/db/CDbCommand.php b/framework/db/CDbCommand.php index 04d2c19..3bd1d85 100644 --- a/framework/db/CDbCommand.php +++ b/framework/db/CDbCommand.php @@ -122,7 +122,7 @@ public function __sleep() /** * Set the default fetch mode for this statement * @param mixed $mode fetch mode - * @return CDbCommand + * @return static * @see http://www.php.net/manual/en/function.PDOStatement-setFetchMode.php * @since 1.1.7 */ @@ -138,7 +138,7 @@ public function setFetchMode($mode) * This method is mainly used when a command object is being reused * multiple times for building different queries. * Calling this method will clean up all internal states of the command object. - * @return CDbCommand this command instance + * @return static this command instance * @since 1.1.6 */ public function reset() @@ -165,7 +165,7 @@ public function getText() * Specifies the SQL statement to be executed. * Any previous execution will be terminated or cancel. * @param string $value the SQL statement to be executed - * @return CDbCommand this command instance + * @return static this command instance */ public function setText($value) { @@ -239,7 +239,7 @@ public function cancel() * @param integer $dataType SQL data type of the parameter. If null, the type is determined by the PHP type of the value. * @param integer $length length of the data type * @param mixed $driverOptions the driver-specific options (this is available since version 1.1.6) - * @return CDbCommand the current command being executed + * @return static the current command being executed * @see http://www.php.net/manual/en/function.PDOStatement-bindParam.php */ public function bindParam($name, &$value, $dataType=null, $length=null, $driverOptions=null) @@ -265,7 +265,7 @@ public function bindParam($name, &$value, $dataType=null, $length=null, $driverO * placeholders, this will be the 1-indexed position of the parameter. * @param mixed $value The value to bind to the parameter * @param integer $dataType SQL data type of the parameter. If null, the type is determined by the PHP type of the value. - * @return CDbCommand the current command being executed + * @return static the current command being executed * @see http://www.php.net/manual/en/function.PDOStatement-bindValue.php */ public function bindValue($name, $value, $dataType=null) @@ -286,7 +286,7 @@ public function bindValue($name, $value, $dataType=null) * @param array $values the values to be bound. This must be given in terms of an associative * array with array keys being the parameter names, and array values the corresponding parameter values. * For example, array(':name'=>'John', ':age'=>25). - * @return CDbCommand the current command being executed + * @return static the current command being executed * @since 1.1.5 */ public function bindValues($values) @@ -489,7 +489,7 @@ private function queryInternal($method,$mode,$params=array()) && ($cache=Yii::app()->getComponent($this->_connection->queryCacheID))!==null) { $this->_connection->queryCachingCount--; - $cacheKey='yii:dbquery'.$this->_connection->connectionString.':'.$this->_connection->username; + $cacheKey='yii:dbquery'.':'.$method.':'.$this->_connection->connectionString.':'.$this->_connection->username; $cacheKey.=':'.$this->getText().':'.serialize(array_merge($this->_paramLog,$params)); if(($result=$cache->get($cacheKey))!==false) { @@ -562,8 +562,6 @@ public function buildQuery($query) if(!empty($query['from'])) $sql.="\nFROM ".$query['from']; - else - throw new CDbException(Yii::t('yii','The DB query must contain the "from" portion.')); if(!empty($query['join'])) $sql.="\n".(is_array($query['join']) ? implode("\n",$query['join']) : $query['join']); @@ -600,7 +598,7 @@ public function buildQuery($query) * (which means the column contains a DB expression). * @param string $option additional option that should be appended to the 'SELECT' keyword. For example, * in MySQL, the option 'SQL_CALC_FOUND_ROWS' can be used. This parameter is supported since version 1.1.8. - * @return CDbCommand the command object itself + * @return static the command object itself * @since 1.1.6 */ public function select($columns='*', $option='') @@ -692,7 +690,7 @@ public function setDistinct($value) * Table names can contain schema prefixes (e.g. 'public.tbl_user') and/or table aliases (e.g. 'tbl_user u'). * The method will automatically quote the table names unless it contains some parenthesis * (which means the table is given as a sub-query or DB expression). - * @return CDbCommand the command object itself + * @return static the command object itself * @since 1.1.6 */ public function from($tables) @@ -774,7 +772,7 @@ public function setFrom($value) * * @param mixed $conditions the conditions that should be put in the WHERE part. * @param array $params the parameters (name=>value) to be bound to the query - * @return CDbCommand the command object itself + * @return static the command object itself * @since 1.1.6 */ public function where($conditions, $params=array()) @@ -795,7 +793,7 @@ public function where($conditions, $params=array()) * * @param mixed $conditions the conditions that should be appended to the WHERE part. * @param array $params the parameters (name=>value) to be bound to the query. - * @return CDbCommand the command object itself. + * @return static the command object itself. * @since 1.1.13 */ public function andWhere($conditions,$params=array()) @@ -819,7 +817,7 @@ public function andWhere($conditions,$params=array()) * * @param mixed $conditions the conditions that should be appended to the WHERE part. * @param array $params the parameters (name=>value) to be bound to the query. - * @return CDbCommand the command object itself. + * @return static the command object itself. * @since 1.1.13 */ public function orWhere($conditions,$params=array()) @@ -875,7 +873,7 @@ public function join($table, $conditions, $params=array()) /** * Returns the join part in the query. * @return mixed the join part in the query. This can be an array representing - * multiple join fragments, or a string representing a single jojin fragment. + * multiple join fragments, or a string representing a single join fragment. * Each join fragment will contain the proper join operator (e.g. LEFT JOIN). * @since 1.1.6 */ @@ -960,13 +958,43 @@ public function naturalJoin($table) return $this->joinInternal('natural join', $table); } + /** + * Appends a NATURAL LEFT JOIN part to the query. + * Note that not all DBMS support NATURAL LEFT JOIN. + * @param string $table the table to be joined. + * Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u'). + * The method will automatically quote the table name unless it contains some parenthesis + * (which means the table is given as a sub-query or DB expression). + * @return CDbCommand the command object itself + * @since 1.1.16 + */ + public function naturalLeftJoin($table) + { + return $this->joinInternal('natural left join', $table); + } + + /** + * Appends a NATURAL RIGHT JOIN part to the query. + * Note that not all DBMS support NATURAL RIGHT JOIN. + * @param string $table the table to be joined. + * Table name can contain schema prefix (e.g. 'public.tbl_user') and/or table alias (e.g. 'tbl_user u'). + * The method will automatically quote the table name unless it contains some parenthesis + * (which means the table is given as a sub-query or DB expression). + * @return CDbCommand the command object itself + * @since 1.1.16 + */ + public function naturalRightJoin($table) + { + return $this->joinInternal('natural right join', $table); + } + /** * Sets the GROUP BY part of the query. * @param mixed $columns the columns to be grouped by. * Columns can be specified in either a string (e.g. "id, name") or an array (e.g. array('id', 'name')). * The method will automatically quote the column names unless a column contains some parenthesis * (which means the column contains a DB expression). - * @return CDbCommand the command object itself + * @return static the command object itself * @since 1.1.6 */ public function group($columns) @@ -1015,7 +1043,7 @@ public function setGroup($value) * @param mixed $conditions the conditions to be put after HAVING. * Please refer to {@link where} on how to specify conditions. * @param array $params the parameters (name=>value) to be bound to the query - * @return CDbCommand the command object itself + * @return static the command object itself * @since 1.1.6 */ public function having($conditions, $params=array()) @@ -1060,7 +1088,7 @@ public function setHaving($value) * $criteria->order('(1)'); *
    * - * @return CDbCommand the command object itself + * @return static the command object itself * @since 1.1.6 */ public function order($columns) @@ -1113,7 +1141,7 @@ public function setOrder($value) * Sets the LIMIT part of the query. * @param integer $limit the limit * @param integer $offset the offset - * @return CDbCommand the command object itself + * @return static the command object itself * @since 1.1.6 */ public function limit($limit, $offset=null) @@ -1148,7 +1176,7 @@ public function setLimit($value) /** * Sets the OFFSET part of the query. * @param integer $offset the offset - * @return CDbCommand the command object itself + * @return static the command object itself * @since 1.1.6 */ public function offset($offset) @@ -1181,7 +1209,7 @@ public function setOffset($value) /** * Appends a SQL statement using UNION operator. * @param string $sql the SQL statement to be appended using UNION - * @return CDbCommand the command object itself + * @return static the command object itself * @since 1.1.6 */ public function union($sql) @@ -1422,9 +1450,9 @@ public function alterColumn($table, $column, $type) * The method will properly quote the table and column names. * @param string $name the name of the foreign key constraint. * @param string $table the table that the foreign key constraint will be added to. - * @param string $columns the name of the column to that the constraint will be added on. If there are multiple columns, separate them with commas. + * @param string|array $columns the name of the column to that the constraint will be added on. If there are multiple columns, separate them with commas or pass as an array of column names. * @param string $refTable the table that the foreign key references to. - * @param string $refColumns the name of the column that the foreign key references to. If there are multiple columns, separate them with commas. + * @param string|array $refColumns the name of the column that the foreign key references to. If there are multiple columns, separate them with commas or pass as an array of column names. * @param string $delete the ON DELETE option. Most DBMS support these options: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL * @param string $update the ON UPDATE option. Most DBMS support these options: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL * @return integer number of rows affected by the execution. @@ -1451,15 +1479,15 @@ public function dropForeignKey($name, $table) * Builds and executes a SQL statement for creating a new index. * @param string $name the name of the index. The name will be properly quoted by the method. * @param string $table the table that the new index will be created for. The table name will be properly quoted by the method. - * @param string $column the column(s) that should be included in the index. If there are multiple columns, please separate them - * by commas. The column names will be properly quoted by the method. + * @param string|array $columns the column(s) that should be included in the index. If there are multiple columns, please separate them + * by commas or pass as an array of column names. Each column name will be properly quoted by the method, unless a parenthesis is found in the name. * @param boolean $unique whether to add UNIQUE constraint on the created index. * @return integer number of rows affected by the execution. * @since 1.1.6 */ - public function createIndex($name, $table, $column, $unique=false) + public function createIndex($name, $table, $columns, $unique=false) { - return $this->setText($this->getConnection()->getSchema()->createIndex($name, $table, $column, $unique))->execute(); + return $this->setText($this->getConnection()->getSchema()->createIndex($name, $table, $columns, $unique))->execute(); } /** @@ -1556,7 +1584,7 @@ private function processConditions($conditions) * @param mixed $conditions the join condition that should appear in the ON part. * Please refer to {@link where} on how to specify conditions. * @param array $params the parameters (name=>value) to be bound to the query - * @return CDbCommand the command object itself + * @return static the command object itself * @since 1.1.6 */ private function joinInternal($type, $table, $conditions='', $params=array()) @@ -1587,7 +1615,8 @@ private function joinInternal($type, $table, $conditions='', $params=array()) * Builds a SQL statement for creating a primary key constraint. * @param string $name the name of the primary key constraint to be created. The name will be properly quoted by the method. * @param string $table the table who will be inheriting the primary key. The name will be properly quoted by the method. - * @param string $columns the column/s where the primary key will be effected. The name will be properly quoted by the method. + * @param string|array $columns comma separated string or array of columns that the primary key will consist of. + * Array value can be passed since 1.1.14. * @return integer number of rows affected by the execution. * @since 1.1.13 */ diff --git a/framework/db/CDbConnection.php b/framework/db/CDbConnection.php index 4390ca7..3fd88d8 100644 --- a/framework/db/CDbConnection.php +++ b/framework/db/CDbConnection.php @@ -78,6 +78,20 @@ * ) * * + * Use the {@link driverName} property if you want to force the DB connection to use a particular driver + * by the given name, disregarding of what was set in the {@link connectionString} property. This might + * be useful when working with ODBC connections. Sample code: + * + *
    + * 'db'=>array(
    + *     'class'=>'CDbConnection',
    + *     'driverName'=>'mysql',
    + *     'connectionString'=>'odbc:Driver={MySQL};Server=127.0.0.1;Database=test',
    + *     'username'=>'',
    + *     'password'=>'',
    + * ),
    + * 
    + * * @property boolean $active Whether the DB connection is established. * @property PDO $pdoInstance The PDO instance, null if the connection is not established yet. * @property CDbTransaction $currentTransaction The currently active transaction. Null if no active transaction. @@ -88,7 +102,8 @@ * @property mixed $nullConversion How the null and empty strings are converted. * @property boolean $autoCommit Whether creating or updating a DB record will be automatically committed. * @property boolean $persistent Whether the connection is persistent or not. - * @property string $driverName Name of the DB driver. + * @property string $driverName Name of the DB driver. This property is read-write since 1.1.16. + * Before 1.1.15 it was read-only. * @property string $clientVersion The version information of the DB driver. * @property string $connectionStatus The status of the connection. * @property boolean $prefetch Whether the connection performs data prefetching. @@ -185,7 +200,7 @@ class CDbConnection extends CApplicationComponent public $autoConnect=true; /** * @var string the charset used for database connection. The property is only used - * for MySQL and PostgreSQL databases. Defaults to null, meaning using default charset + * for MySQL, MariaDB and PostgreSQL databases. Defaults to null, meaning using default charset * as specified by the database. * * Note that if you're using GBK or BIG5 then it's highly recommended to @@ -233,9 +248,10 @@ class CDbConnection extends CApplicationComponent * @since 1.1.6 */ public $driverMap=array( + 'cubrid'=>'CCubridSchema', // CUBRID 'pgsql'=>'CPgsqlSchema', // PostgreSQL 'mysqli'=>'CMysqlSchema', // MySQL - 'mysql'=>'CMysqlSchema', // MySQL + 'mysql'=>'CMysqlSchema', // MySQL,MariaDB 'sqlite'=>'CSqliteSchema', // sqlite 3 'sqlite2'=>'CSqliteSchema', // sqlite 2 'mssql'=>'CMssqlSchema', // Mssql driver on windows hosts @@ -250,6 +266,7 @@ class CDbConnection extends CApplicationComponent */ public $pdoClass = 'PDO'; + private $_driverName; private $_attributes=array(); private $_active=false; private $_pdo; @@ -347,7 +364,7 @@ public function setActive($value) * the query results into cache. * @param integer $queryCount number of SQL queries that need to be cached after calling this method. Defaults to 1, * meaning that the next SQL query will be cached. - * @return CDbConnection the connection instance itself. + * @return static the connection instance itself. * @since 1.1.7 */ public function cache($duration, $dependency=null, $queryCount=1) @@ -413,9 +430,8 @@ protected function close() protected function createPdoInstance() { $pdoClass=$this->pdoClass; - if(($pos=strpos($this->connectionString,':'))!==false) + if(($driver=$this->getDriverName())!==null) { - $driver=strtolower(substr($this->connectionString,0,$pos)); if($driver==='mssql' || $driver==='dblib') $pdoClass='CMssqlPdoAdapter'; elseif($driver==='sqlsrv') @@ -437,7 +453,7 @@ protected function createPdoInstance() /** * Initializes the open db connection. * This method is invoked right after the db connection is established. - * The default implementation is to set the charset for MySQL and PostgreSQL database connections. + * The default implementation is to set the charset for MySQL, MariaDB and PostgreSQL database connections. * @param PDO $pdo the PDO instance */ protected function initConnection($pdo) @@ -687,14 +703,29 @@ public function setPersistent($value) } /** - * Returns the name of the DB driver - * @return string name of the DB driver + * Returns the name of the DB driver. + * @return string name of the DB driver. */ public function getDriverName() { - if(($pos=strpos($this->connectionString, ':'))!==false) - return strtolower(substr($this->connectionString, 0, $pos)); - // return $this->getAttribute(PDO::ATTR_DRIVER_NAME); + if($this->_driverName!==null) + return $this->_driverName; + elseif(($pos=strpos($this->connectionString,':'))!==false) + return $this->_driverName=strtolower(substr($this->connectionString,0,$pos)); + //return $this->getAttribute(PDO::ATTR_DRIVER_NAME); + } + + /** + * Changes the name of the DB driver. Overrides value extracted from the {@link connectionString}, + * which is behavior by default. + * @param string $driverName to be set. Valid values are the keys from the {@link driverMap} property. + * @see getDriverName + * @see driverName + * @since 1.1.16 + */ + public function setDriverName($driverName) + { + $this->_driverName=strtolower($driverName); } /** diff --git a/framework/db/CDbMigration.php b/framework/db/CDbMigration.php index 9849060..05d6077 100644 --- a/framework/db/CDbMigration.php +++ b/framework/db/CDbMigration.php @@ -179,6 +179,23 @@ public function insert($table, $columns) echo " done (time: ".sprintf('%.3f', microtime(true)-$time)."s)\n"; } + /** + * Creates and executes an INSERT SQL statement with multiple data. + * The method will properly escape the column names, and bind the values to be inserted. + * @param string $table the table that new rows will be inserted into. + * @param array $data an array of various column data (name=>value) to be inserted into the table. + * @since 1.1.16 + */ + public function insertMultiple($table, $data) + { + echo " > insert into $table ..."; + $time=microtime(true); + $builder=$this->getDbConnection()->getSchema()->getCommandBuilder(); + $command=$builder->createMultipleInsertCommand($table,$data); + $command->execute(); + echo " done (time: ".sprintf('%.3f', microtime(true)-$time)."s)\n"; + } + /** * Creates and executes an UPDATE SQL statement. * The method will properly escape the column names and bind the values to be updated. @@ -335,15 +352,16 @@ public function alterColumn($table, $column, $type) * The method will properly quote the table and column names. * @param string $name the name of the foreign key constraint. * @param string $table the table that the foreign key constraint will be added to. - * @param string $columns the name of the column to that the constraint will be added on. If there are multiple columns, separate them with commas. + * @param string|array $columns the name of the column to that the constraint will be added on. If there are multiple columns, separate them with commas or pass as an array of column names. * @param string $refTable the table that the foreign key references to. - * @param string $refColumns the name of the column that the foreign key references to. If there are multiple columns, separate them with commas. + * @param string|array $refColumns the name of the column that the foreign key references to. If there are multiple columns, separate them with commas or pass as an array of column names. * @param string $delete the ON DELETE option. Most DBMS support these options: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL * @param string $update the ON UPDATE option. Most DBMS support these options: RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL */ public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete=null, $update=null) { - echo " > add foreign key $name: $table ($columns) references $refTable ($refColumns) ..."; + echo " > add foreign key $name: $table (".(is_array($columns) ? implode(',', $columns) : $columns). + ") references $refTable (".(is_array($refColumns) ? implode(',', $refColumns) : $refColumns).") ..."; $time=microtime(true); $this->getDbConnection()->createCommand()->addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete, $update); echo " done (time: ".sprintf('%.3f', microtime(true)-$time)."s)\n"; @@ -366,15 +384,15 @@ public function dropForeignKey($name, $table) * Builds and executes a SQL statement for creating a new index. * @param string $name the name of the index. The name will be properly quoted by the method. * @param string $table the table that the new index will be created for. The table name will be properly quoted by the method. - * @param string $column the column(s) that should be included in the index. If there are multiple columns, please separate them - * by commas. The column names will be properly quoted by the method. + * @param string|array $columns the column(s) that should be included in the index. If there are multiple columns, please separate them + * by commas or pass as an array of column names. Each column name will be properly quoted by the method, unless a parenthesis is found in the name. * @param boolean $unique whether to add UNIQUE constraint on the created index. */ - public function createIndex($name, $table, $column, $unique=false) + public function createIndex($name, $table, $columns, $unique=false) { - echo " > create".($unique ? ' unique':'')." index $name on $table ($column) ..."; + echo " > create".($unique ? ' unique':'')." index $name on $table (".(is_array($columns) ? implode(',', $columns) : $columns).") ..."; $time=microtime(true); - $this->getDbConnection()->createCommand()->createIndex($name, $table, $column, $unique); + $this->getDbConnection()->createCommand()->createIndex($name, $table, $columns, $unique); echo " done (time: ".sprintf('%.3f', microtime(true)-$time)."s)\n"; } @@ -408,12 +426,13 @@ public function refreshTableSchema($table) * Builds and executes a SQL statement for creating a primary key, supports composite primary keys. * @param string $name name of the primary key constraint to add * @param string $table name of the table to add primary key to - * @param string $columns name of the column to utilise as primary key. If there are multiple columns, separate them with commas. + * @param string|array $columns comma separated string or array of columns that the primary key will consist of. + * Array value can be passed since 1.1.14. * @since 1.1.13 */ public function addPrimaryKey($name,$table,$columns) { - echo " > alter table $table add constraint $name primary key ($columns) ..."; + echo " > alter table $table add constraint $name primary key (".(is_array($columns) ? implode(',', $columns) : $columns).") ..."; $time=microtime(true); $this->getDbConnection()->createCommand()->addPrimaryKey($name,$table,$columns); echo " done (time: ".sprintf('%.3f', microtime(true)-$time)."s)\n"; diff --git a/framework/db/ar/CActiveFinder.php b/framework/db/ar/CActiveFinder.php index a93fd3b..58a3936 100644 --- a/framework/db/ar/CActiveFinder.php +++ b/framework/db/ar/CActiveFinder.php @@ -246,6 +246,9 @@ private function buildJoinTree($parent,$with,$options=null) if(!empty($options['scopes'])) $scopes=array_merge($scopes,(array)$options['scopes']); // no need for complex merging + if(!empty($options['joinOptions'])) + $relation->joinOptions=$options['joinOptions']; + $model->resetScope(false); $criteria=$model->getDbCriteria(); $criteria->scopes=$scopes; @@ -482,7 +485,6 @@ public function lazyFind($baseRecord) $query=new CJoinQuery($child); $query->selects=array($child->getColumnSelect($child->relation->select)); $query->conditions=array( - $child->relation->condition, $child->relation->on, ); $query->groups[]=$child->relation->group; @@ -537,6 +539,9 @@ private function applyLazyCondition($query,$record) $parent=$this->_parent; if($this->relation instanceof CManyManyRelation) { + $query->conditions=array( + $this->relation->condition, + ); $joinTableName=$this->relation->getJunctionTableName(); if(($joinTable=$schema->getTable($joinTableName))===null) throw new CDbException(Yii::t('yii','The relation "{relation}" in active record class "{class}" is not specified correctly: the join table "{joinTable}" given in the foreign key cannot be found in the database.', @@ -742,7 +747,7 @@ public function count($criteria=null) else { $select=is_array($criteria->select) ? implode(',',$criteria->select) : $criteria->select; - if($select!=='*' && !strncasecmp($select,'count',5)) + if($select!=='*' && preg_match('/^count\s*\(/',trim($select))) $query->selects=array($select); elseif(is_string($this->_table->primaryKey)) { @@ -965,9 +970,9 @@ public function getColumnSelect($select='*') $columns[]=$prefix.$schema->quoteColumnName($this->_table->primaryKey).' AS '.$schema->quoteColumnName($this->_pkAlias); elseif(is_array($this->_pkAlias)) { - foreach($this->_table->primaryKey as $name) - if(!isset($selected[$name])) - $columns[]=$prefix.$schema->quoteColumnName($name).' AS '.$schema->quoteColumnName($this->_pkAlias[$name]); + foreach($this->_pkAlias as $name=>$alias) + if(!isset($selected[$alias])) + $columns[]=$prefix.$schema->quoteColumnName($name).' AS '.$schema->quoteColumnName($alias); } } @@ -1113,7 +1118,12 @@ private function joinOneMany($fke,$fks,$pke,$parent) } if(!empty($this->relation->on)) $joins[]=$this->relation->on; - return $this->relation->joinType . ' ' . $this->getTableNameWithAlias() . ' ON (' . implode(') AND (',$joins).')'; + + if(!empty($this->relation->joinOptions) && is_string($this->relation->joinOptions)) + return $this->relation->joinType.' '.$this->getTableNameWithAlias().' '.$this->relation->joinOptions. + ' ON ('.implode(') AND (',$joins).')'; + else + return $this->relation->joinType.' '.$this->getTableNameWithAlias().' ON ('.implode(') AND (',$joins).')'; } /** @@ -1181,8 +1191,20 @@ private function joinManyMany($joinTable,$fks,$parent) if($parentCondition!==array() && $childCondition!==array()) { $join=$this->relation->joinType.' '.$joinTable->rawName.' '.$joinAlias; + + if(is_array($this->relation->joinOptions) && isset($this->relation->joinOptions[0]) && + is_string($this->relation->joinOptions[0])) + $join.=' '.$this->relation->joinOptions[0]; + elseif(!empty($this->relation->joinOptions) && is_string($this->relation->joinOptions)) + $join.=' '.$this->relation->joinOptions; + $join.=' ON ('.implode(') AND (',$parentCondition).')'; $join.=' '.$this->relation->joinType.' '.$this->getTableNameWithAlias(); + + if(is_array($this->relation->joinOptions) && isset($this->relation->joinOptions[1]) && + is_string($this->relation->joinOptions[1])) + $join.=' '.$this->relation->joinOptions[1]; + $join.=' ON ('.implode(') AND (',$childCondition).')'; if(!empty($this->relation->on)) $join.=' AND ('.$this->relation->on.')'; @@ -1315,7 +1337,7 @@ public function join($element) public function createCommand($builder) { $sql=($this->distinct ? 'SELECT DISTINCT ':'SELECT ') . implode(', ',$this->selects); - $sql.=' FROM ' . implode(' ',$this->joins); + $sql.=' FROM ' . implode(' ',array_unique($this->joins)); $conditions=array(); foreach($this->conditions as $condition) @@ -1501,9 +1523,10 @@ private function queryOneMany() $record->addRelatedRecord($relation->name,isset($stats[$pk])?$stats[$pk]:$relation->defaultValue,false); } - /* + /** * @param string $joinTableName jointablename * @param string $keys keys + * @throws CDbException */ private function queryManyMany($joinTableName,$keys) { diff --git a/framework/db/ar/CActiveRecord.php b/framework/db/ar/CActiveRecord.php index c40c5b8..fe9f125 100644 --- a/framework/db/ar/CActiveRecord.php +++ b/framework/db/ar/CActiveRecord.php @@ -105,7 +105,7 @@ public function init() * the query results into cache. * @param integer $queryCount number of SQL queries that need to be cached after calling this method. Defaults to 1, * meaning that the next SQL query will be cached. - * @return CActiveRecord the active record instance itself. + * @return static the active record instance itself. * @since 1.1.7 */ public function cache($duration, $dependency=null, $queryCount=1) @@ -357,7 +357,7 @@ public function defaultScope() * Resets all scopes and criterias applied. * * @param boolean $resetDefault including default scope. This parameter available since 1.1.12 - * @return CActiveRecord + * @return static the AR instance itself * @since 1.1.2 */ public function resetScope($resetDefault=true) @@ -384,7 +384,7 @@ public function resetScope($resetDefault=true) * * * @param string $className active record class name. - * @return CActiveRecord active record model instance. + * @return static active record model instance. */ public static function model($className=__CLASS__) { @@ -435,7 +435,10 @@ public function refreshMetaData() */ public function tableName() { - return get_class($this); + $tableName = get_class($this); + if(($pos=strrpos($tableName,'\\')) !== false) + return substr($tableName,$pos+1); + return $tableName; } /** @@ -1072,7 +1075,7 @@ public function insert($attributes=null) { Yii::trace(get_class($this).'.insert()','system.db.ar.CActiveRecord'); $builder=$this->getCommandBuilder(); - $table=$this->getMetaData()->tableSchema; + $table=$this->getTableSchema(); $command=$builder->createInsertCommand($table,$this->getAttributes($attributes)); if($command->execute()) { @@ -1146,7 +1149,9 @@ public function update($attributes=null) * or an attribute value indexed by its name. If the latter, the record's * attribute will be changed accordingly before saving. * @throws CDbException if the record is new - * @return boolean whether the update is successful + * @return boolean whether the update is successful. Note that false is also returned if the saving + * was successfull but no attributes had changed and the database driver returns 0 for the number + * of updated records. */ public function saveAttributes($attributes) { @@ -1272,7 +1277,7 @@ public function equals($record) */ public function getPrimaryKey() { - $table=$this->getMetaData()->tableSchema; + $table=$this->getTableSchema(); if(is_string($table->primaryKey)) return $this->{$table->primaryKey}; elseif(is_array($table->primaryKey)) @@ -1296,7 +1301,7 @@ public function getPrimaryKey() public function setPrimaryKey($value) { $this->_pk=$this->getPrimaryKey(); - $table=$this->getMetaData()->tableSchema; + $table=$this->getTableSchema(); if(is_string($table->primaryKey)) $this->{$table->primaryKey}=$value; elseif(is_array($table->primaryKey)) @@ -1347,7 +1352,7 @@ protected function query($criteria,$all=false) { if(!$all) $criteria->limit=1; - $command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria,$this->getTableAlias()); + $command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria); return $all ? $this->populateRecords($command->queryAll(), true, $criteria->index) : $this->populateRecord($command->queryRow()); } else @@ -1447,7 +1452,7 @@ public function setTableAlias($alias) * @param array $params parameters to be bound to an SQL statement. * This is only used when the first parameter is a string (query condition). * In other cases, please use {@link CDbCriteria::params} to set parameters. - * @return CActiveRecord the record found. Null if no record is found. + * @return static the record found. Null if no record is found. */ public function find($condition='',$params=array()) { @@ -1461,7 +1466,7 @@ public function find($condition='',$params=array()) * See {@link find()} for detailed explanation about $condition and $params. * @param mixed $condition query condition or criteria. * @param array $params parameters to be bound to an SQL statement. - * @return CActiveRecord[] list of active records satisfying the specified condition. An empty array is returned if none is found. + * @return static[] list of active records satisfying the specified condition. An empty array is returned if none is found. */ public function findAll($condition='',$params=array()) { @@ -1476,7 +1481,7 @@ public function findAll($condition='',$params=array()) * @param mixed $pk primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value). * @param mixed $condition query condition or criteria. * @param array $params parameters to be bound to an SQL statement. - * @return CActiveRecord the record found. Null if none is found. + * @return static the record found. Null if none is found. */ public function findByPk($pk,$condition='',$params=array()) { @@ -1492,7 +1497,7 @@ public function findByPk($pk,$condition='',$params=array()) * @param mixed $pk primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value). * @param mixed $condition query condition or criteria. * @param array $params parameters to be bound to an SQL statement. - * @return CActiveRecord[] the records found. An empty array is returned if none is found. + * @return static[] the records found. An empty array is returned if none is found. */ public function findAllByPk($pk,$condition='',$params=array()) { @@ -1509,7 +1514,7 @@ public function findAllByPk($pk,$condition='',$params=array()) * An attribute value can be an array which will be used to generate an IN condition. * @param mixed $condition query condition or criteria. * @param array $params parameters to be bound to an SQL statement. - * @return CActiveRecord the record found. Null if none is found. + * @return static the record found. Null if none is found. */ public function findByAttributes($attributes,$condition='',$params=array()) { @@ -1526,7 +1531,7 @@ public function findByAttributes($attributes,$condition='',$params=array()) * An attribute value can be an array which will be used to generate an IN condition. * @param mixed $condition query condition or criteria. * @param array $params parameters to be bound to an SQL statement. - * @return CActiveRecord[] the records found. An empty array is returned if none is found. + * @return static[] the records found. An empty array is returned if none is found. */ public function findAllByAttributes($attributes,$condition='',$params=array()) { @@ -1540,7 +1545,7 @@ public function findAllByAttributes($attributes,$condition='',$params=array()) * Finds a single active record with the specified SQL statement. * @param string $sql the SQL statement * @param array $params parameters to be bound to the SQL statement - * @return CActiveRecord the record found. Null if none is found. + * @return static the record found. Null if none is found. */ public function findBySql($sql,$params=array()) { @@ -1563,7 +1568,7 @@ public function findBySql($sql,$params=array()) * Finds all active records using the specified SQL statement. * @param string $sql the SQL statement * @param array $params parameters to be bound to the SQL statement - * @return CActiveRecord[] the records found. An empty array is returned if none is found. + * @return static[] the records found. An empty array is returned if none is found. */ public function findAllBySql($sql,$params=array()) { @@ -1592,8 +1597,8 @@ public function findAllBySql($sql,$params=array()) public function count($condition='',$params=array()) { Yii::trace(get_class($this).'.count()','system.db.ar.CActiveRecord'); - $builder=$this->getCommandBuilder(); $this->beforeCount(); + $builder=$this->getCommandBuilder(); $criteria=$builder->createCriteria($condition,$params); $this->applyScopes($criteria); @@ -1700,7 +1705,7 @@ public function exists($condition='',$params=array()) * ))->findAll(); * * - * @return CActiveRecord the AR object itself. + * @return static the AR object itself. */ public function with() { @@ -1719,7 +1724,7 @@ public function with() * Sets {@link CDbCriteria::together} property to be true. * This is only used in relational AR query. Please refer to {@link CDbCriteria::together} * for more details. - * @return CActiveRecord the AR object itself + * @return static the AR object itself * @since 1.1.4 */ public function together() @@ -1842,7 +1847,7 @@ public function deleteAllByAttributes($attributes,$condition='',$params=array()) * This method is internally used by the find methods. * @param array $attributes attribute values (column name=>column value) * @param boolean $callAfterFind whether to call {@link afterFind} after the record is populated. - * @return CActiveRecord the newly created active record. The class of the object is the same as the model class. + * @return static the newly created active record. The class of the object is the same as the model class. * Null is returned if the input data is false. */ public function populateRecord($attributes,$callAfterFind=true) @@ -1877,7 +1882,7 @@ public function populateRecord($attributes,$callAfterFind=true) * @param boolean $callAfterFind whether to call {@link afterFind} after each record is populated. * @param string $index the name of the attribute whose value will be used as indexes of the query result array. * If null, it means the array will be indexed by zero-based integers. - * @return CActiveRecord[] list of active records. + * @return static[] list of active records. */ public function populateRecords($data,$callAfterFind=true,$index=null) { @@ -1903,7 +1908,7 @@ public function populateRecords($data,$callAfterFind=true,$index=null) * For example, by creating a record based on the value of a column, * you may implement the so-called single-table inheritance mapping. * @param array $attributes list of attribute values for the active records. - * @return CActiveRecord the active record + * @return static the active record */ protected function instantiate($attributes) { @@ -1971,6 +1976,14 @@ class CBaseActiveRelation extends CComponent * @since 1.1.3 */ public $join=''; + /** + * @var string|array property for setting post-JOIN operations such as USE INDEX. + * String typed value can be used with JOINs for HAS_MANY and MANY_MANY relations, while array typed + * value designed to be used only with MANY_MANY relations. First array element will be used for junction + * table JOIN and second array element will be used for target table JOIN. + * @since 1.1.16 + */ + public $joinOptions=''; /** * @var string HAVING clause. For {@link CActiveRelation} descendant classes, column names * referenced in this property should be disambiguated with prefix 'relationName.'. @@ -2082,6 +2095,16 @@ class CStatRelation extends CBaseActiveRelation * receive a statistical query result. Defaults to 0. */ public $defaultValue=0; + /** + * @var mixed scopes to apply + * Can be set to the one of the following: + * + * @since 1.1.16 + */ + public $scopes; /** * Merges this relation with a criteria specified dynamically. @@ -2361,9 +2384,10 @@ public function __construct($model) if(($table=$model->getDbConnection()->getSchema()->getTable($tableName))===null) throw new CDbException(Yii::t('yii','The table "{table}" for active record class "{class}" cannot be found in the database.', array('{class}'=>$this->_modelClassName,'{table}'=>$tableName))); - if($table->primaryKey===null) + + if(($modelPk=$model->primaryKey())!==null || $table->primaryKey===null) { - $table->primaryKey=$model->primaryKey(); + $table->primaryKey=$modelPk; if(is_string($table->primaryKey) && isset($table->columns[$table->primaryKey])) $table->columns[$table->primaryKey]->isPrimaryKey=true; elseif(is_array($table->primaryKey)) diff --git a/framework/db/ar/CActiveRecordBehavior.php b/framework/db/ar/CActiveRecordBehavior.php index 373d619..443d15b 100644 --- a/framework/db/ar/CActiveRecordBehavior.php +++ b/framework/db/ar/CActiveRecordBehavior.php @@ -54,7 +54,7 @@ protected function beforeSave($event) * Responds to {@link CActiveRecord::onAfterSave} event. * Override this method and make it public if you want to handle the corresponding event * of the {@link CBehavior::owner owner}. - * @param CModelEvent $event event parameter + * @param CEvent $event event parameter */ protected function afterSave($event) { diff --git a/framework/db/schema/CDbCommandBuilder.php b/framework/db/schema/CDbCommandBuilder.php index 603b912..7f5afab 100644 --- a/framework/db/schema/CDbCommandBuilder.php +++ b/framework/db/schema/CDbCommandBuilder.php @@ -273,9 +273,12 @@ public function createMultipleInsertCommand($table,array $data) * If a key is not a valid column name, the corresponding value will be ignored. * @param array $templates templates for the SQL parts. * @return CDbCommand multiple insert command + * @throws CDbException if $data is empty. */ protected function composeMultipleInsertCommand($table,array $data,array $templates=array()) { + if (empty($data)) + throw new CDbException(Yii::t('yii','Can not generate multiple insert command with empty data set.')); $templates=array_merge( array( 'main'=>'INSERT INTO {{tableName}} ({{columnInsertNames}}) VALUES {{rowInsertValues}}', @@ -288,7 +291,7 @@ protected function composeMultipleInsertCommand($table,array $data,array $templa $templates ); $this->ensureTable($table); - $tableName=$this->getDbConnection()->quoteTableName($table->name); + $tableName=$table->rawName; $params=array(); $columnInsertNames=array(); $rowInsertValues=array(); @@ -499,7 +502,7 @@ public function applyOrder($sql,$orderBy) /** * Alters the SQL to apply LIMIT and OFFSET. - * Default implementation is applicable for PostgreSQL, MySQL and SQLite. + * Default implementation is applicable for PostgreSQL, MySQL, MariaDB and SQLite. * @param string $sql SQL query string without LIMIT and OFFSET. * @param integer $limit maximum number of rows, -1 to ignore limit. * @param integer $offset row offset, -1 to ignore offset. @@ -736,11 +739,11 @@ public function createSearchCondition($table,$columns,$keywords,$prefix=null,$ca $condition=array(); foreach($keywords as $keyword) { - $keyword='%'.strtr($keyword,array('%'=>'\%', '_'=>'\_')).'%'; + $keyword='%'.strtr($keyword,array('%'=>'\%', '_'=>'\_', '\\'=>'\\\\')).'%'; if($caseSensitive) - $condition[]=$prefix.$column->rawName.' LIKE '.$this->_connection->quoteValue('%'.$keyword.'%'); + $condition[]=$prefix.$column->rawName.' LIKE '.$this->_connection->quoteValue($keyword); else - $condition[]='LOWER('.$prefix.$column->rawName.') LIKE LOWER('.$this->_connection->quoteValue('%'.$keyword.'%').')'; + $condition[]='LOWER('.$prefix.$column->rawName.') LIKE LOWER('.$this->_connection->quoteValue($keyword).')'; } $conditions[]=implode(' AND ',$condition); } diff --git a/framework/db/schema/CDbCriteria.php b/framework/db/schema/CDbCriteria.php index 95061c4..86fb1b6 100644 --- a/framework/db/schema/CDbCriteria.php +++ b/framework/db/schema/CDbCriteria.php @@ -213,7 +213,7 @@ public function __wakeup() * After calling this method, the {@link condition} property will be modified. * @param mixed $condition the new condition. It can be either a string or an array of strings. * @param string $operator the operator to join different conditions. Defaults to 'AND'. - * @return CDbCriteria the criteria object itself + * @return static the criteria object itself */ public function addCondition($condition,$operator='AND') { @@ -246,7 +246,7 @@ public function addCondition($condition,$operator='AND') * @param string $operator the operator used to concatenate the new condition with the existing one. * Defaults to 'AND'. * @param string $like the LIKE operator. Defaults to 'LIKE'. You may also set this to be 'NOT LIKE'. - * @return CDbCriteria the criteria object itself + * @return static the criteria object itself */ public function addSearchCondition($column,$keyword,$escape=true,$operator='AND',$like='LIKE') { @@ -269,7 +269,7 @@ public function addSearchCondition($column,$keyword,$escape=true,$operator='AND' * @param array $values list of values that the column value should be in * @param string $operator the operator used to concatenate the new condition with the existing one. * Defaults to 'AND'. - * @return CDbCriteria the criteria object itself + * @return static the criteria object itself */ public function addInCondition($column,$values,$operator='AND') { @@ -309,7 +309,7 @@ public function addInCondition($column,$values,$operator='AND') * @param array $values list of values that the column value should not be in * @param string $operator the operator used to concatenate the new condition with the existing one. * Defaults to 'AND'. - * @return CDbCriteria the criteria object itself + * @return static the criteria object itself * @since 1.1.1 */ public function addNotInCondition($column,$values,$operator='AND') @@ -349,7 +349,7 @@ public function addNotInCondition($column,$values,$operator='AND') * @param string $columnOperator the operator to concatenate multiple column matching condition. Defaults to 'AND'. * @param string $operator the operator used to concatenate the new condition with the existing one. * Defaults to 'AND'. - * @return CDbCriteria the criteria object itself + * @return static the criteria object itself */ public function addColumnCondition($columns,$columnOperator='AND',$operator='AND') { @@ -408,7 +408,7 @@ public function addColumnCondition($columns,$columnOperator='AND',$operator='AND * and _ (matches a single character) will be escaped, and the value will be surrounded with a % * character on both ends. When this parameter is false, the value will be directly used for * matching without any change. - * @return CDbCriteria the criteria object itself + * @return static the criteria object itself * @since 1.1.1 */ public function compare($column, $value, $partialMatch=false, $operator='AND', $escape=true) @@ -462,7 +462,7 @@ public function compare($column, $value, $partialMatch=false, $operator='AND', $ * @param string $valueEnd the ending value to end the between search. * @param string $operator the operator used to concatenate the new condition with the existing one. * Defaults to 'AND'. - * @return CDbCriteria the criteria object itself + * @return static the criteria object itself * @since 1.1.2 */ public function addBetweenCondition($column,$valueStart,$valueEnd,$operator='AND') @@ -520,7 +520,7 @@ public function mergeWith($criteria,$operator='AND') if($this->params!==$criteria->params) $this->params=array_merge($this->params,$criteria->params); - if($criteria->limit>0) + if($criteria->limit>=0) $this->limit=$criteria->limit; if($criteria->offset>=0) diff --git a/framework/db/schema/CDbSchema.php b/framework/db/schema/CDbSchema.php index 8ea61ca..18d3f0e 100644 --- a/framework/db/schema/CDbSchema.php +++ b/framework/db/schema/CDbSchema.php @@ -316,10 +316,11 @@ protected function findTableNames($schema='') * These abstract column types are supported (using MySQL as example to explain the corresponding * physical types): * * @return array files found under the directory. The file list is sorted. */ @@ -108,8 +128,9 @@ public static function findFiles($dir,$options=array()) $fileTypes=array(); $exclude=array(); $level=-1; + $absolutePaths=true; extract($options); - $list=self::findFilesRecursive($dir,'',$fileTypes,$exclude,$level); + $list=self::findFilesRecursive($dir,'',$fileTypes,$exclude,$level,$absolutePaths); sort($list); return $list; } @@ -136,9 +157,11 @@ public static function findFiles($dir,$options=array()) protected static function copyDirectoryRecursive($src,$dst,$base,$fileTypes,$exclude,$level,$options) { if(!is_dir($dst)) - self::mkdir($dst,$options,false); + self::createDirectory($dst,isset($options['newDirMode'])?$options['newDirMode']:null,false); $folder=opendir($src); + if($folder===false) + throw new Exception('Unable to open directory: ' . $src); while(($file=readdir($folder))!==false) { if($file==='.' || $file==='..') @@ -174,24 +197,28 @@ protected static function copyDirectoryRecursive($src,$dst,$base,$fileTypes,$exc * Level -1 means searching for all directories and files under the directory; * Level 0 means searching for only the files DIRECTLY under the directory; * level N means searching for those directories that are within N levels. + * @param boolean $absolutePaths whether to return absolute paths or relative ones * @return array files found under the directory. */ - protected static function findFilesRecursive($dir,$base,$fileTypes,$exclude,$level) + protected static function findFilesRecursive($dir,$base,$fileTypes,$exclude,$level,$absolutePaths) { $list=array(); - $handle=opendir($dir); + $handle=opendir($dir.$base); + if($handle===false) + throw new Exception('Unable to open directory: ' . $dir); while(($file=readdir($handle))!==false) { if($file==='.' || $file==='..') continue; - $path=$dir.DIRECTORY_SEPARATOR.$file; - $isFile=is_file($path); + $path=substr($base.DIRECTORY_SEPARATOR.$file,1); + $fullPath=$dir.DIRECTORY_SEPARATOR.$path; + $isFile=is_file($fullPath); if(self::validatePath($base,$file,$isFile,$fileTypes,$exclude)) { if($isFile) - $list[]=$path; + $list[]=$absolutePaths?$fullPath:$path; elseif($level) - $list=array_merge($list,self::findFilesRecursive($path,$base.'/'.$file,$fileTypes,$exclude,$level-1)); + $list=array_merge($list,self::findFilesRecursive($dir,$base.'/'.$file,$fileTypes,$exclude,$level-1,$absolutePaths)); } } closedir($handle); @@ -219,7 +246,7 @@ protected static function validatePath($base,$file,$isFile,$fileTypes,$exclude) } if(!$isFile || empty($fileTypes)) return true; - if(($type=pathinfo($file,PATHINFO_EXTENSION))!=='') + if(($type=self::getExtension($file))!=='') return in_array($type,$fileTypes); else return false; @@ -276,7 +303,7 @@ public static function getMimeTypeByExtension($file,$magicFile=null) $extensions=require(Yii::getPathOfAlias('system.utils.mimeTypes').'.php'); elseif($magicFile!==null && !isset($customExtensions[$magicFile])) $customExtensions[$magicFile]=require($magicFile); - if(($ext=pathinfo($file,PATHINFO_EXTENSION))!=='') + if(($ext=self::getExtension($file))!=='') { $ext=strtolower($ext); if($magicFile===null && isset($extensions[$ext])) @@ -287,23 +314,50 @@ public static function getMimeTypeByExtension($file,$magicFile=null) return null; } + /** + * Determines the file extension name based on its MIME type. + * This method will use a local map between MIME type and extension name. + * @param string $file the file name. + * @param string $magicFile the path of the file that contains all available extension information. + * If this is not set, the default 'system.utils.fileExtensions' file will be used. + * This parameter has been available since version 1.1.16. + * @return string extension name. Null is returned if the extension cannot be determined. + */ + public static function getExtensionByMimeType($file,$magicFile=null) + { + static $mimeTypes,$customMimeTypes=array(); + if($magicFile===null && $mimeTypes===null) + $mimeTypes=require(Yii::getPathOfAlias('system.utils.fileExtensions').'.php'); + elseif($magicFile!==null && !isset($customMimeTypes[$magicFile])) + $customMimeTypes[$magicFile]=require($magicFile); + if(($mime=self::getMimeType($file))!==null) + { + $mime=strtolower($mime); + if($magicFile===null && isset($mimeTypes[$mime])) + return $mimeTypes[$mime]; + elseif($magicFile!==null && isset($customMimeTypes[$magicFile][$mime])) + return $customMimeTypes[$magicFile][$mime]; + } + return null; + } + /** * Shared environment safe version of mkdir. Supports recursive creation. * For avoidance of umask side-effects chmod is used. * * @param string $dst path to be created - * @param array $options newDirMode element used, must contain access bitmask + * @param integer $mode the permission to be set for newly created directories, if not set - 0777 will be used * @param boolean $recursive whether to create directory structure recursive if parent dirs do not exist * @return boolean result of mkdir * @see mkdir */ - private static function mkdir($dst,array $options,$recursive) + public static function createDirectory($dst,$mode=null,$recursive=false) { + if($mode===null) + $mode=0777; $prevDir=dirname($dst); if($recursive && !is_dir($dst) && !is_dir($prevDir)) - self::mkdir(dirname($dst),$options,true); - - $mode=isset($options['newDirMode']) ? $options['newDirMode'] : 0777; + self::createDirectory(dirname($dst),$mode,true); $res=mkdir($dst, $mode); @chmod($dst,$mode); return $res; diff --git a/framework/utils/CFormatter.php b/framework/utils/CFormatter.php index f072c36..4fbebb6 100644 --- a/framework/utils/CFormatter.php +++ b/framework/utils/CFormatter.php @@ -234,7 +234,10 @@ protected function normalizeDateValue($time) else return strtotime($time); } - return (int)$time; + elseif (class_exists('DateTime', false) && $time instanceof DateTime) + return $time->getTimestamp(); + else + return (int)$time; } /** diff --git a/framework/utils/CLocalizedFormatter.php b/framework/utils/CLocalizedFormatter.php index a2323f1..b9df0bc 100644 --- a/framework/utils/CLocalizedFormatter.php +++ b/framework/utils/CLocalizedFormatter.php @@ -14,7 +14,7 @@ * It provides the same functionality as {@link CFormatter}, but overrides all the settings for * {@link booleanFormat}, {@link datetimeFormat} and {@link numberFormat} with the values for the * current locale. Because of this you are not able to configure these properties for CLocalizedFormatter directly. - * Date and time format can be adjsuted by setting {@link dateFormat} and {@link timeFormat}. + * Date and time format can be adjusted by setting {@link dateFormat} and {@link timeFormat}. * * It uses {@link CApplication::locale} by default but you can set a custom locale by using {@link setLocale}-method. * diff --git a/framework/utils/CPasswordHelper.php b/framework/utils/CPasswordHelper.php index 1949470..0ad581e 100644 --- a/framework/utils/CPasswordHelper.php +++ b/framework/utils/CPasswordHelper.php @@ -33,7 +33,7 @@ *
      * $hash = CPasswordHelper::hashPassword($password);
      * 
    - * This hash can be stored in a database (e.g. CHAR(64) CHARACTER SET latin1). The + * This hash can be stored in a database (e.g. CHAR(60) CHARACTER SET latin1). The * hash is usually generated and saved to the database when the user enters a new password. * But it can also be useful to generate and save a hash after validating a user's * password in order to change the cost or refresh the salt. @@ -84,7 +84,7 @@ protected static function checkBlowfish() * compute the hash doubles for every increment by one of $cost. So, for example, if the * hash takes 1 second to compute when $cost is 14 then then the compute time varies as * 2^($cost - 14) seconds. - * @return string The password hash string, ASCII and not longer than 64 characters. + * @return string The password hash string, always 60 ASCII characters. * @throws CException on bad password parameter or if crypt() with Blowfish hash is not available. */ public static function hashPassword($password,$cost=13) @@ -167,7 +167,7 @@ public static function same($a,$b) * * The PHP {@link http://php.net/manual/en/function.crypt.php crypt()} built-in function * requires, for the Blowfish hash algorithm, a salt string in a specific format: - * "$2a$" (in which the "a" may be replaced by "x" or "y" see PHP manual for details), + * "$2y$" (in which the "y" may be replaced by "a" or "y" see PHP manual for details), * a two digit cost parameter, * "$", * 22 characters from the alphabet "./0-9A-Za-z". @@ -188,6 +188,6 @@ public static function generateSalt($cost=13) if(($random=Yii::app()->getSecurityManager()->generateRandomString(22,true))===false) if(($random=Yii::app()->getSecurityManager()->generateRandomString(22,false))===false) throw new CException(Yii::t('yii','Unable to generate random string.')); - return sprintf('$2a$%02d$',$cost).strtr($random,array('_'=>'.','~'=>'/')); + return sprintf('$2y$%02d$',$cost).strtr($random,array('_'=>'.','~'=>'/')); } } diff --git a/framework/utils/fileExtensions.php b/framework/utils/fileExtensions.php new file mode 100644 index 0000000..97e1a6a --- /dev/null +++ b/framework/utils/fileExtensions.php @@ -0,0 +1,780 @@ + + * @since 1.1.16 + */ +return array( + 'application/andrew-inset'=>'ez', + 'application/applixware'=>'aw', + 'application/atom+xml'=>'atom', + 'application/atomcat+xml'=>'atomcat', + 'application/atomsvc+xml'=>'atomsvc', + 'application/ccxml+xml'=>'ccxml', + 'application/cdmi-capability'=>'cdmia', + 'application/cdmi-container'=>'cdmic', + 'application/cdmi-domain'=>'cdmid', + 'application/cdmi-object'=>'cdmio', + 'application/cdmi-queue'=>'cdmiq', + 'application/cu-seeme'=>'cu', + 'application/davmount+xml'=>'davmount', + 'application/docbook+xml'=>'dbk', + 'application/dssc+der'=>'dssc', + 'application/dssc+xml'=>'xdssc', + 'application/ecmascript'=>'ecma', + 'application/emma+xml'=>'emma', + 'application/epub+zip'=>'epub', + 'application/exi'=>'exi', + 'application/font-tdpfr'=>'pfr', + 'application/gml+xml'=>'gml', + 'application/gpx+xml'=>'gpx', + 'application/gxf'=>'gxf', + 'application/hyperstudio'=>'stk', + 'application/inkml+xml'=>'ink', + 'application/ipfix'=>'ipfix', + 'application/java-archive'=>'jar', + 'application/java-serialized-object'=>'ser', + 'application/java-vm'=>'class', + 'application/javascript'=>'js', + 'application/json'=>'json', + 'application/jsonml+json'=>'jsonml', + 'application/lost+xml'=>'lostxml', + 'application/mac-binhex40'=>'hqx', + 'application/mac-compactpro'=>'cpt', + 'application/mads+xml'=>'mads', + 'application/marc'=>'mrc', + 'application/marcxml+xml'=>'mrcx', + 'application/mathematica'=>'ma', + 'application/mathml+xml'=>'mathml', + 'application/mbox'=>'mbox', + 'application/mediaservercontrol+xml'=>'mscml', + 'application/metalink+xml'=>'metalink', + 'application/metalink4+xml'=>'meta4', + 'application/mets+xml'=>'mets', + 'application/mods+xml'=>'mods', + 'application/mp21'=>'m21', + 'application/mp4'=>'mp4s', + 'application/msword'=>'doc', + 'application/mxf'=>'mxf', + 'application/octet-stream'=>'bin', + 'application/oda'=>'oda', + 'application/oebps-package+xml'=>'opf', + 'application/ogg'=>'ogx', + 'application/omdoc+xml'=>'omdoc', + 'application/onenote'=>'onetoc', + 'application/oxps'=>'oxps', + 'application/patch-ops-error+xml'=>'xer', + 'application/pdf'=>'pdf', + 'application/pgp-encrypted'=>'pgp', + 'application/pgp-signature'=>'asc', + 'application/pics-rules'=>'prf', + 'application/pkcs10'=>'p10', + 'application/pkcs7-mime'=>'p7m', + 'application/pkcs7-signature'=>'p7s', + 'application/pkcs8'=>'p8', + 'application/pkix-attr-cert'=>'ac', + 'application/pkix-cert'=>'cer', + 'application/pkix-crl'=>'crl', + 'application/pkix-pkipath'=>'pkipath', + 'application/pkixcmp'=>'pki', + 'application/pls+xml'=>'pls', + 'application/postscript'=>'ai', + 'application/prs.cww'=>'cww', + 'application/pskc+xml'=>'pskcxml', + 'application/rdf+xml'=>'rdf', + 'application/reginfo+xml'=>'rif', + 'application/relax-ng-compact-syntax'=>'rnc', + 'application/resource-lists+xml'=>'rl', + 'application/resource-lists-diff+xml'=>'rld', + 'application/rls-services+xml'=>'rs', + 'application/rpki-ghostbusters'=>'gbr', + 'application/rpki-manifest'=>'mft', + 'application/rpki-roa'=>'roa', + 'application/rsd+xml'=>'rsd', + 'application/rss+xml'=>'rss', + 'application/rtf'=>'rtf', + 'application/sbml+xml'=>'sbml', + 'application/scvp-cv-request'=>'scq', + 'application/scvp-cv-response'=>'scs', + 'application/scvp-vp-request'=>'spq', + 'application/scvp-vp-response'=>'spp', + 'application/sdp'=>'sdp', + 'application/set-payment-initiation'=>'setpay', + 'application/set-registration-initiation'=>'setreg', + 'application/shf+xml'=>'shf', + 'application/smil+xml'=>'smi', + 'application/sparql-query'=>'rq', + 'application/sparql-results+xml'=>'srx', + 'application/srgs'=>'gram', + 'application/srgs+xml'=>'grxml', + 'application/sru+xml'=>'sru', + 'application/ssdl+xml'=>'ssdl', + 'application/ssml+xml'=>'ssml', + 'application/tei+xml'=>'tei', + 'application/thraud+xml'=>'tfi', + 'application/timestamped-data'=>'tsd', + 'application/vnd.3gpp.pic-bw-large'=>'plb', + 'application/vnd.3gpp.pic-bw-small'=>'psb', + 'application/vnd.3gpp.pic-bw-var'=>'pvb', + 'application/vnd.3gpp2.tcap'=>'tcap', + 'application/vnd.3m.post-it-notes'=>'pwn', + 'application/vnd.accpac.simply.aso'=>'aso', + 'application/vnd.accpac.simply.imp'=>'imp', + 'application/vnd.acucobol'=>'acu', + 'application/vnd.acucorp'=>'atc', + 'application/vnd.adobe.air-application-installer-package+zip'=>'air', + 'application/vnd.adobe.formscentral.fcdt'=>'fcdt', + 'application/vnd.adobe.fxp'=>'fxp', + 'application/vnd.adobe.xdp+xml'=>'xdp', + 'application/vnd.adobe.xfdf'=>'xfdf', + 'application/vnd.ahead.space'=>'ahead', + 'application/vnd.airzip.filesecure.azf'=>'azf', + 'application/vnd.airzip.filesecure.azs'=>'azs', + 'application/vnd.amazon.ebook'=>'azw', + 'application/vnd.americandynamics.acc'=>'acc', + 'application/vnd.amiga.ami'=>'ami', + 'application/vnd.android.package-archive'=>'apk', + 'application/vnd.anser-web-certificate-issue-initiation'=>'cii', + 'application/vnd.anser-web-funds-transfer-initiation'=>'fti', + 'application/vnd.antix.game-component'=>'atx', + 'application/vnd.apple.installer+xml'=>'mpkg', + 'application/vnd.apple.mpegurl'=>'m3u8', + 'application/vnd.aristanetworks.swi'=>'swi', + 'application/vnd.astraea-software.iota'=>'iota', + 'application/vnd.audiograph'=>'aep', + 'application/vnd.blueice.multipass'=>'mpm', + 'application/vnd.bmi'=>'bmi', + 'application/vnd.businessobjects'=>'rep', + 'application/vnd.chemdraw+xml'=>'cdxml', + 'application/vnd.chipnuts.karaoke-mmd'=>'mmd', + 'application/vnd.cinderella'=>'cdy', + 'application/vnd.claymore'=>'cla', + 'application/vnd.cloanto.rp9'=>'rp9', + 'application/vnd.clonk.c4group'=>'c4g', + 'application/vnd.cluetrust.cartomobile-config'=>'c11amc', + 'application/vnd.cluetrust.cartomobile-config-pkg'=>'c11amz', + 'application/vnd.commonspace'=>'csp', + 'application/vnd.contact.cmsg'=>'cdbcmsg', + 'application/vnd.cosmocaller'=>'cmc', + 'application/vnd.crick.clicker'=>'clkx', + 'application/vnd.crick.clicker.keyboard'=>'clkk', + 'application/vnd.crick.clicker.palette'=>'clkp', + 'application/vnd.crick.clicker.template'=>'clkt', + 'application/vnd.crick.clicker.wordbank'=>'clkw', + 'application/vnd.criticaltools.wbs+xml'=>'wbs', + 'application/vnd.ctc-posml'=>'pml', + 'application/vnd.cups-ppd'=>'ppd', + 'application/vnd.curl.car'=>'car', + 'application/vnd.curl.pcurl'=>'pcurl', + 'application/vnd.dart'=>'dart', + 'application/vnd.data-vision.rdz'=>'rdz', + 'application/vnd.dece.data'=>'uvf', + 'application/vnd.dece.ttml+xml'=>'uvt', + 'application/vnd.dece.unspecified'=>'uvx', + 'application/vnd.dece.zip'=>'uvz', + 'application/vnd.denovo.fcselayout-link'=>'fe_launch', + 'application/vnd.dna'=>'dna', + 'application/vnd.dolby.mlp'=>'mlp', + 'application/vnd.dpgraph'=>'dpg', + 'application/vnd.dreamfactory'=>'dfac', + 'application/vnd.ds-keypoint'=>'kpxx', + 'application/vnd.dvb.ait'=>'ait', + 'application/vnd.dvb.service'=>'svc', + 'application/vnd.dynageo'=>'geo', + 'application/vnd.ecowin.chart'=>'mag', + 'application/vnd.enliven'=>'nml', + 'application/vnd.epson.esf'=>'esf', + 'application/vnd.epson.msf'=>'msf', + 'application/vnd.epson.quickanime'=>'qam', + 'application/vnd.epson.salt'=>'slt', + 'application/vnd.epson.ssf'=>'ssf', + 'application/vnd.eszigno3+xml'=>'es3', + 'application/vnd.ezpix-album'=>'ez2', + 'application/vnd.ezpix-package'=>'ez3', + 'application/vnd.fdf'=>'fdf', + 'application/vnd.fdsn.mseed'=>'mseed', + 'application/vnd.fdsn.seed'=>'seed', + 'application/vnd.flographit'=>'gph', + 'application/vnd.fluxtime.clip'=>'ftc', + 'application/vnd.framemaker'=>'fm', + 'application/vnd.frogans.fnc'=>'fnc', + 'application/vnd.frogans.ltf'=>'ltf', + 'application/vnd.fsc.weblaunch'=>'fsc', + 'application/vnd.fujitsu.oasys'=>'oas', + 'application/vnd.fujitsu.oasys2'=>'oa2', + 'application/vnd.fujitsu.oasys3'=>'oa3', + 'application/vnd.fujitsu.oasysgp'=>'fg5', + 'application/vnd.fujitsu.oasysprs'=>'bh2', + 'application/vnd.fujixerox.ddd'=>'ddd', + 'application/vnd.fujixerox.docuworks'=>'xdw', + 'application/vnd.fujixerox.docuworks.binder'=>'xbd', + 'application/vnd.fuzzysheet'=>'fzs', + 'application/vnd.genomatix.tuxedo'=>'txd', + 'application/vnd.geogebra.file'=>'ggb', + 'application/vnd.geogebra.tool'=>'ggt', + 'application/vnd.geometry-explorer'=>'gex', + 'application/vnd.geonext'=>'gxt', + 'application/vnd.geoplan'=>'g2w', + 'application/vnd.geospace'=>'g3w', + 'application/vnd.gmx'=>'gmx', + 'application/vnd.google-earth.kml+xml'=>'kml', + 'application/vnd.google-earth.kmz'=>'kmz', + 'application/vnd.grafeq'=>'gqf', + 'application/vnd.groove-account'=>'gac', + 'application/vnd.groove-help'=>'ghf', + 'application/vnd.groove-identity-message'=>'gim', + 'application/vnd.groove-injector'=>'grv', + 'application/vnd.groove-tool-message'=>'gtm', + 'application/vnd.groove-tool-template'=>'tpl', + 'application/vnd.groove-vcard'=>'vcg', + 'application/vnd.hal+xml'=>'hal', + 'application/vnd.handheld-entertainment+xml'=>'zmm', + 'application/vnd.hbci'=>'hbci', + 'application/vnd.hhe.lesson-player'=>'les', + 'application/vnd.hp-hpgl'=>'hpgl', + 'application/vnd.hp-hpid'=>'hpid', + 'application/vnd.hp-hps'=>'hps', + 'application/vnd.hp-jlyt'=>'jlt', + 'application/vnd.hp-pcl'=>'pcl', + 'application/vnd.hp-pclxl'=>'pclxl', + 'application/vnd.hydrostatix.sof-data'=>'sfd-hdstx', + 'application/vnd.ibm.minipay'=>'mpy', + 'application/vnd.ibm.modcap'=>'afp', + 'application/vnd.ibm.rights-management'=>'irm', + 'application/vnd.ibm.secure-container'=>'sc', + 'application/vnd.iccprofile'=>'icc', + 'application/vnd.igloader'=>'igl', + 'application/vnd.immervision-ivp'=>'ivp', + 'application/vnd.immervision-ivu'=>'ivu', + 'application/vnd.insors.igm'=>'igm', + 'application/vnd.intercon.formnet'=>'xpw', + 'application/vnd.intergeo'=>'i2g', + 'application/vnd.intu.qbo'=>'qbo', + 'application/vnd.intu.qfx'=>'qfx', + 'application/vnd.ipunplugged.rcprofile'=>'rcprofile', + 'application/vnd.irepository.package+xml'=>'irp', + 'application/vnd.is-xpr'=>'xpr', + 'application/vnd.isac.fcs'=>'fcs', + 'application/vnd.jam'=>'jam', + 'application/vnd.jcp.javame.midlet-rms'=>'rms', + 'application/vnd.jisp'=>'jisp', + 'application/vnd.joost.joda-archive'=>'joda', + 'application/vnd.kahootz'=>'ktz', + 'application/vnd.kde.karbon'=>'karbon', + 'application/vnd.kde.kchart'=>'chrt', + 'application/vnd.kde.kformula'=>'kfo', + 'application/vnd.kde.kivio'=>'flw', + 'application/vnd.kde.kontour'=>'kon', + 'application/vnd.kde.kpresenter'=>'kpr', + 'application/vnd.kde.kspread'=>'ksp', + 'application/vnd.kde.kword'=>'kwd', + 'application/vnd.kenameaapp'=>'htke', + 'application/vnd.kidspiration'=>'kia', + 'application/vnd.kinar'=>'kne', + 'application/vnd.koan'=>'skp', + 'application/vnd.kodak-descriptor'=>'sse', + 'application/vnd.las.las+xml'=>'lasxml', + 'application/vnd.llamagraphics.life-balance.desktop'=>'lbd', + 'application/vnd.llamagraphics.life-balance.exchange+xml'=>'lbe', + 'application/vnd.lotus-1-2-3'=>'123', + 'application/vnd.lotus-approach'=>'apr', + 'application/vnd.lotus-freelance'=>'pre', + 'application/vnd.lotus-notes'=>'nsf', + 'application/vnd.lotus-organizer'=>'org', + 'application/vnd.lotus-screencam'=>'scm', + 'application/vnd.lotus-wordpro'=>'lwp', + 'application/vnd.macports.portpkg'=>'portpkg', + 'application/vnd.mcd'=>'mcd', + 'application/vnd.medcalcdata'=>'mc1', + 'application/vnd.mediastation.cdkey'=>'cdkey', + 'application/vnd.mfer'=>'mwf', + 'application/vnd.mfmp'=>'mfm', + 'application/vnd.micrografx.flo'=>'flo', + 'application/vnd.micrografx.igx'=>'igx', + 'application/vnd.mif'=>'mif', + 'application/vnd.mobius.daf'=>'daf', + 'application/vnd.mobius.dis'=>'dis', + 'application/vnd.mobius.mbk'=>'mbk', + 'application/vnd.mobius.mqy'=>'mqy', + 'application/vnd.mobius.msl'=>'msl', + 'application/vnd.mobius.plc'=>'plc', + 'application/vnd.mobius.txf'=>'txf', + 'application/vnd.mophun.application'=>'mpn', + 'application/vnd.mophun.certificate'=>'mpc', + 'application/vnd.mozilla.xul+xml'=>'xul', + 'application/vnd.ms-artgalry'=>'cil', + 'application/vnd.ms-cab-compressed'=>'cab', + 'application/vnd.ms-excel'=>'xls', + 'application/vnd.ms-excel.addin.macroenabled.12'=>'xlam', + 'application/vnd.ms-excel.sheet.binary.macroenabled.12'=>'xlsb', + 'application/vnd.ms-excel.sheet.macroenabled.12'=>'xlsm', + 'application/vnd.ms-excel.template.macroenabled.12'=>'xltm', + 'application/vnd.ms-fontobject'=>'eot', + 'application/vnd.ms-htmlhelp'=>'chm', + 'application/vnd.ms-ims'=>'ims', + 'application/vnd.ms-lrm'=>'lrm', + 'application/vnd.ms-officetheme'=>'thmx', + 'application/vnd.ms-pki.seccat'=>'cat', + 'application/vnd.ms-pki.stl'=>'stl', + 'application/vnd.ms-powerpoint'=>'ppt', + 'application/vnd.ms-powerpoint.addin.macroenabled.12'=>'ppam', + 'application/vnd.ms-powerpoint.presentation.macroenabled.12'=>'pptm', + 'application/vnd.ms-powerpoint.slide.macroenabled.12'=>'sldm', + 'application/vnd.ms-powerpoint.slideshow.macroenabled.12'=>'ppsm', + 'application/vnd.ms-powerpoint.template.macroenabled.12'=>'potm', + 'application/vnd.ms-project'=>'mpp', + 'application/vnd.ms-word.document.macroenabled.12'=>'docm', + 'application/vnd.ms-word.template.macroenabled.12'=>'dotm', + 'application/vnd.ms-works'=>'wps', + 'application/vnd.ms-wpl'=>'wpl', + 'application/vnd.ms-xpsdocument'=>'xps', + 'application/vnd.mseq'=>'mseq', + 'application/vnd.musician'=>'mus', + 'application/vnd.muvee.style'=>'msty', + 'application/vnd.mynfc'=>'taglet', + 'application/vnd.neurolanguage.nlu'=>'nlu', + 'application/vnd.nitf'=>'ntf', + 'application/vnd.noblenet-directory'=>'nnd', + 'application/vnd.noblenet-sealer'=>'nns', + 'application/vnd.noblenet-web'=>'nnw', + 'application/vnd.nokia.n-gage.data'=>'ngdat', + 'application/vnd.nokia.n-gage.symbian.install'=>'n-gage', + 'application/vnd.nokia.radio-preset'=>'rpst', + 'application/vnd.nokia.radio-presets'=>'rpss', + 'application/vnd.novadigm.edm'=>'edm', + 'application/vnd.novadigm.edx'=>'edx', + 'application/vnd.novadigm.ext'=>'ext', + 'application/vnd.oasis.opendocument.chart'=>'odc', + 'application/vnd.oasis.opendocument.chart-template'=>'otc', + 'application/vnd.oasis.opendocument.database'=>'odb', + 'application/vnd.oasis.opendocument.formula'=>'odf', + 'application/vnd.oasis.opendocument.formula-template'=>'odft', + 'application/vnd.oasis.opendocument.graphics'=>'odg', + 'application/vnd.oasis.opendocument.graphics-template'=>'otg', + 'application/vnd.oasis.opendocument.image'=>'odi', + 'application/vnd.oasis.opendocument.image-template'=>'oti', + 'application/vnd.oasis.opendocument.presentation'=>'odp', + 'application/vnd.oasis.opendocument.presentation-template'=>'otp', + 'application/vnd.oasis.opendocument.spreadsheet'=>'ods', + 'application/vnd.oasis.opendocument.spreadsheet-template'=>'ots', + 'application/vnd.oasis.opendocument.text'=>'odt', + 'application/vnd.oasis.opendocument.text-master'=>'odm', + 'application/vnd.oasis.opendocument.text-template'=>'ott', + 'application/vnd.oasis.opendocument.text-web'=>'oth', + 'application/vnd.olpc-sugar'=>'xo', + 'application/vnd.oma.dd2+xml'=>'dd2', + 'application/vnd.openofficeorg.extension'=>'oxt', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation'=>'pptx', + 'application/vnd.openxmlformats-officedocument.presentationml.slide'=>'sldx', + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow'=>'ppsx', + 'application/vnd.openxmlformats-officedocument.presentationml.template'=>'potx', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'=>'xlsx', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template'=>'xltx', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'=>'docx', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template'=>'dotx', + 'application/vnd.osgeo.mapguide.package'=>'mgp', + 'application/vnd.osgi.dp'=>'dp', + 'application/vnd.osgi.subsystem'=>'esa', + 'application/vnd.palm'=>'pdb', + 'application/vnd.pawaafile'=>'paw', + 'application/vnd.pg.format'=>'str', + 'application/vnd.pg.osasli'=>'ei6', + 'application/vnd.picsel'=>'efif', + 'application/vnd.pmi.widget'=>'wg', + 'application/vnd.pocketlearn'=>'plf', + 'application/vnd.powerbuilder6'=>'pbd', + 'application/vnd.previewsystems.box'=>'box', + 'application/vnd.proteus.magazine'=>'mgz', + 'application/vnd.publishare-delta-tree'=>'qps', + 'application/vnd.pvi.ptid1'=>'ptid', + 'application/vnd.quark.quarkxpress'=>'qxd', + 'application/vnd.realvnc.bed'=>'bed', + 'application/vnd.recordare.musicxml'=>'mxl', + 'application/vnd.recordare.musicxml+xml'=>'musicxml', + 'application/vnd.rig.cryptonote'=>'cryptonote', + 'application/vnd.rim.cod'=>'cod', + 'application/vnd.rn-realmedia'=>'rm', + 'application/vnd.rn-realmedia-vbr'=>'rmvb', + 'application/vnd.route66.link66+xml'=>'link66', + 'application/vnd.sailingtracker.track'=>'st', + 'application/vnd.seemail'=>'see', + 'application/vnd.sema'=>'sema', + 'application/vnd.semd'=>'semd', + 'application/vnd.semf'=>'semf', + 'application/vnd.shana.informed.formdata'=>'ifm', + 'application/vnd.shana.informed.formtemplate'=>'itp', + 'application/vnd.shana.informed.interchange'=>'iif', + 'application/vnd.shana.informed.package'=>'ipk', + 'application/vnd.simtech-mindmapper'=>'twd', + 'application/vnd.smaf'=>'mmf', + 'application/vnd.smart.teacher'=>'teacher', + 'application/vnd.solent.sdkm+xml'=>'sdkm', + 'application/vnd.spotfire.dxp'=>'dxp', + 'application/vnd.spotfire.sfs'=>'sfs', + 'application/vnd.stardivision.calc'=>'sdc', + 'application/vnd.stardivision.draw'=>'sda', + 'application/vnd.stardivision.impress'=>'sdd', + 'application/vnd.stardivision.math'=>'smf', + 'application/vnd.stardivision.writer'=>'sdw', + 'application/vnd.stardivision.writer-global'=>'sgl', + 'application/vnd.stepmania.package'=>'smzip', + 'application/vnd.stepmania.stepchart'=>'sm', + 'application/vnd.sun.xml.calc'=>'sxc', + 'application/vnd.sun.xml.calc.template'=>'stc', + 'application/vnd.sun.xml.draw'=>'sxd', + 'application/vnd.sun.xml.draw.template'=>'std', + 'application/vnd.sun.xml.impress'=>'sxi', + 'application/vnd.sun.xml.impress.template'=>'sti', + 'application/vnd.sun.xml.math'=>'sxm', + 'application/vnd.sun.xml.writer'=>'sxw', + 'application/vnd.sun.xml.writer.global'=>'sxg', + 'application/vnd.sun.xml.writer.template'=>'stw', + 'application/vnd.sus-calendar'=>'sus', + 'application/vnd.svd'=>'svd', + 'application/vnd.symbian.install'=>'sis', + 'application/vnd.syncml+xml'=>'xsm', + 'application/vnd.syncml.dm+wbxml'=>'bdm', + 'application/vnd.syncml.dm+xml'=>'xdm', + 'application/vnd.tao.intent-module-archive'=>'tao', + 'application/vnd.tcpdump.pcap'=>'pcap', + 'application/vnd.tmobile-livetv'=>'tmo', + 'application/vnd.trid.tpt'=>'tpt', + 'application/vnd.triscape.mxs'=>'mxs', + 'application/vnd.trueapp'=>'tra', + 'application/vnd.ufdl'=>'ufd', + 'application/vnd.uiq.theme'=>'utz', + 'application/vnd.umajin'=>'umj', + 'application/vnd.unity'=>'unityweb', + 'application/vnd.uoml+xml'=>'uoml', + 'application/vnd.vcx'=>'vcx', + 'application/vnd.visio'=>'vsd', + 'application/vnd.visionary'=>'vis', + 'application/vnd.vsf'=>'vsf', + 'application/vnd.wap.wbxml'=>'wbxml', + 'application/vnd.wap.wmlc'=>'wmlc', + 'application/vnd.wap.wmlscriptc'=>'wmlsc', + 'application/vnd.webturbo'=>'wtb', + 'application/vnd.wolfram.player'=>'nbp', + 'application/vnd.wordperfect'=>'wpd', + 'application/vnd.wqd'=>'wqd', + 'application/vnd.wt.stf'=>'stf', + 'application/vnd.xara'=>'xar', + 'application/vnd.xfdl'=>'xfdl', + 'application/vnd.yamaha.hv-dic'=>'hvd', + 'application/vnd.yamaha.hv-script'=>'hvs', + 'application/vnd.yamaha.hv-voice'=>'hvp', + 'application/vnd.yamaha.openscoreformat'=>'osf', + 'application/vnd.yamaha.openscoreformat.osfpvg+xml'=>'osfpvg', + 'application/vnd.yamaha.smaf-audio'=>'saf', + 'application/vnd.yamaha.smaf-phrase'=>'spf', + 'application/vnd.yellowriver-custom-menu'=>'cmp', + 'application/vnd.zul'=>'zir', + 'application/vnd.zzazz.deck+xml'=>'zaz', + 'application/voicexml+xml'=>'vxml', + 'application/widget'=>'wgt', + 'application/winhlp'=>'hlp', + 'application/wsdl+xml'=>'wsdl', + 'application/wspolicy+xml'=>'wspolicy', + 'application/x-7z-compressed'=>'7z', + 'application/x-abiword'=>'abw', + 'application/x-ace-compressed'=>'ace', + 'application/x-apple-diskimage'=>'dmg', + 'application/x-authorware-bin'=>'aab', + 'application/x-authorware-map'=>'aam', + 'application/x-authorware-seg'=>'aas', + 'application/x-bcpio'=>'bcpio', + 'application/x-bittorrent'=>'torrent', + 'application/x-blorb'=>'blb', + 'application/x-bzip'=>'bz', + 'application/x-bzip2'=>'bz2', + 'application/x-cbr'=>'cbr', + 'application/x-cdlink'=>'vcd', + 'application/x-cfs-compressed'=>'cfs', + 'application/x-chat'=>'chat', + 'application/x-chess-pgn'=>'pgn', + 'application/x-conference'=>'nsc', + 'application/x-cpio'=>'cpio', + 'application/x-csh'=>'csh', + 'application/x-debian-package'=>'deb', + 'application/x-dgc-compressed'=>'dgc', + 'application/x-director'=>'dir', + 'application/x-doom'=>'wad', + 'application/x-dtbncx+xml'=>'ncx', + 'application/x-dtbook+xml'=>'dtb', + 'application/x-dtbresource+xml'=>'res', + 'application/x-dvi'=>'dvi', + 'application/x-envoy'=>'evy', + 'application/x-eva'=>'eva', + 'application/x-font-bdf'=>'bdf', + 'application/x-font-ghostscript'=>'gsf', + 'application/x-font-linux-psf'=>'psf', + 'application/x-font-otf'=>'otf', + 'application/x-font-pcf'=>'pcf', + 'application/x-font-snf'=>'snf', + 'application/x-font-ttf'=>'ttf', + 'application/x-font-type1'=>'pfa', + 'application/font-woff'=>'woff', + 'application/x-freearc'=>'arc', + 'application/x-futuresplash'=>'spl', + 'application/x-gca-compressed'=>'gca', + 'application/x-glulx'=>'ulx', + 'application/x-gnumeric'=>'gnumeric', + 'application/x-gramps-xml'=>'gramps', + 'application/x-gtar'=>'gtar', + 'application/x-hdf'=>'hdf', + 'application/x-install-instructions'=>'install', + 'application/x-iso9660-image'=>'iso', + 'application/x-java-jnlp-file'=>'jnlp', + 'application/x-latex'=>'latex', + 'application/x-lzh-compressed'=>'lzh', + 'application/x-mie'=>'mie', + 'application/x-mobipocket-ebook'=>'prc', + 'application/x-ms-application'=>'application', + 'application/x-ms-shortcut'=>'lnk', + 'application/x-ms-wmd'=>'wmd', + 'application/x-ms-wmz'=>'wmz', + 'application/x-ms-xbap'=>'xbap', + 'application/x-msaccess'=>'mdb', + 'application/x-msbinder'=>'obd', + 'application/x-mscardfile'=>'crd', + 'application/x-msclip'=>'clp', + 'application/x-msdownload'=>'exe', + 'application/x-msmediaview'=>'mvb', + 'application/x-msmetafile'=>'wmf', + 'application/x-msmoney'=>'mny', + 'application/x-mspublisher'=>'pub', + 'application/x-msschedule'=>'scd', + 'application/x-msterminal'=>'trm', + 'application/x-mswrite'=>'wri', + 'application/x-netcdf'=>'nc', + 'application/x-nzb'=>'nzb', + 'application/x-pkcs12'=>'p12', + 'application/x-pkcs7-certificates'=>'p7b', + 'application/x-pkcs7-certreqresp'=>'p7r', + 'application/x-rar-compressed'=>'rar', + 'application/x-research-info-systems'=>'ris', + 'application/x-sh'=>'sh', + 'application/x-shar'=>'shar', + 'application/x-shockwave-flash'=>'swf', + 'application/x-silverlight-app'=>'xap', + 'application/x-sql'=>'sql', + 'application/x-stuffit'=>'sit', + 'application/x-stuffitx'=>'sitx', + 'application/x-subrip'=>'srt', + 'application/x-sv4cpio'=>'sv4cpio', + 'application/x-sv4crc'=>'sv4crc', + 'application/x-t3vm-image'=>'t3', + 'application/x-tads'=>'gam', + 'application/x-tar'=>'tar', + 'application/x-tcl'=>'tcl', + 'application/x-tex'=>'tex', + 'application/x-tex-tfm'=>'tfm', + 'application/x-texinfo'=>'texinfo', + 'application/x-tgif'=>'obj', + 'application/x-ustar'=>'ustar', + 'application/x-wais-source'=>'src', + 'application/x-x509-ca-cert'=>'der', + 'application/x-xfig'=>'fig', + 'application/x-xliff+xml'=>'xlf', + 'application/x-xpinstall'=>'xpi', + 'application/x-xz'=>'xz', + 'application/x-zmachine'=>'z1', + 'application/xaml+xml'=>'xaml', + 'application/xcap-diff+xml'=>'xdf', + 'application/xenc+xml'=>'xenc', + 'application/xhtml+xml'=>'xhtml', + 'application/xml'=>'xml', + 'application/xml-dtd'=>'dtd', + 'application/xop+xml'=>'xop', + 'application/xproc+xml'=>'xpl', + 'application/xslt+xml'=>'xslt', + 'application/xspf+xml'=>'xspf', + 'application/xv+xml'=>'mxml', + 'application/yang'=>'yang', + 'application/yin+xml'=>'yin', + 'application/zip'=>'zip', + 'audio/adpcm'=>'adp', + 'audio/basic'=>'au', + 'audio/midi'=>'mid', + 'audio/mp4'=>'mp4a', + 'audio/mpeg'=>'mp3', + 'audio/ogg'=>'ogg', + 'audio/s3m'=>'s3m', + 'audio/silk'=>'sil', + 'audio/vnd.dece.audio'=>'uva', + 'audio/vnd.digital-winds'=>'eol', + 'audio/vnd.dra'=>'dra', + 'audio/vnd.dts'=>'dts', + 'audio/vnd.dts.hd'=>'dtshd', + 'audio/vnd.lucent.voice'=>'lvp', + 'audio/vnd.ms-playready.media.pya'=>'pya', + 'audio/vnd.nuera.ecelp4800'=>'ecelp4800', + 'audio/vnd.nuera.ecelp7470'=>'ecelp7470', + 'audio/vnd.nuera.ecelp9600'=>'ecelp9600', + 'audio/vnd.rip'=>'rip', + 'audio/webm'=>'weba', + 'audio/x-aac'=>'aac', + 'audio/x-aiff'=>'aif', + 'audio/x-caf'=>'caf', + 'audio/x-flac'=>'flac', + 'audio/x-matroska'=>'mka', + 'audio/x-mpegurl'=>'m3u', + 'audio/x-ms-wax'=>'wax', + 'audio/x-ms-wma'=>'wma', + 'audio/x-pn-realaudio'=>'ram', + 'audio/x-pn-realaudio-plugin'=>'rmp', + 'audio/x-wav'=>'wav', + 'audio/xm'=>'xm', + 'chemical/x-cdx'=>'cdx', + 'chemical/x-cif'=>'cif', + 'chemical/x-cmdf'=>'cmdf', + 'chemical/x-cml'=>'cml', + 'chemical/x-csml'=>'csml', + 'chemical/x-xyz'=>'xyz', + 'image/bmp'=>'bmp', + 'image/cgm'=>'cgm', + 'image/g3fax'=>'g3', + 'image/gif'=>'gif', + 'image/ief'=>'ief', + 'image/jpeg'=>'jpg', + 'image/ktx'=>'ktx', + 'image/png'=>'png', + 'image/prs.btif'=>'btif', + 'image/sgi'=>'sgi', + 'image/svg+xml'=>'svg', + 'image/tiff'=>'tiff', + 'image/vnd.adobe.photoshop'=>'psd', + 'image/vnd.dece.graphic'=>'uvi', + 'image/vnd.dvb.subtitle'=>'sub', + 'image/vnd.djvu'=>'djvu', + 'image/vnd.dwg'=>'dwg', + 'image/vnd.dxf'=>'dxf', + 'image/vnd.fastbidsheet'=>'fbs', + 'image/vnd.fpx'=>'fpx', + 'image/vnd.fst'=>'fst', + 'image/vnd.fujixerox.edmics-mmr'=>'mmr', + 'image/vnd.fujixerox.edmics-rlc'=>'rlc', + 'image/vnd.ms-modi'=>'mdi', + 'image/vnd.ms-photo'=>'wdp', + 'image/vnd.net-fpx'=>'npx', + 'image/vnd.wap.wbmp'=>'wbmp', + 'image/vnd.xiff'=>'xif', + 'image/webp'=>'webp', + 'image/x-3ds'=>'3ds', + 'image/x-cmu-raster'=>'ras', + 'image/x-cmx'=>'cmx', + 'image/x-freehand'=>'fh', + 'image/x-icon'=>'ico', + 'image/x-mrsid-image'=>'sid', + 'image/x-pcx'=>'pcx', + 'image/x-pict'=>'pic', + 'image/x-portable-anymap'=>'pnm', + 'image/x-portable-bitmap'=>'pbm', + 'image/x-portable-graymap'=>'pgm', + 'image/x-portable-pixmap'=>'ppm', + 'image/x-rgb'=>'rgb', + 'image/x-tga'=>'tga', + 'image/x-xbitmap'=>'xbm', + 'image/x-xpixmap'=>'xpm', + 'image/x-xwindowdump'=>'xwd', + 'message/rfc822'=>'eml', + 'model/iges'=>'igs', + 'model/mesh'=>'msh', + 'model/vnd.collada+xml'=>'dae', + 'model/vnd.dwf'=>'dwf', + 'model/vnd.gdl'=>'gdl', + 'model/vnd.gtw'=>'gtw', + 'model/vnd.mts'=>'mts', + 'model/vnd.vtu'=>'vtu', + 'model/vrml'=>'wrl', + 'model/x3d+binary'=>'x3db', + 'model/x3d+vrml'=>'x3dv', + 'model/x3d+xml'=>'x3d', + 'text/cache-manifest'=>'appcache', + 'text/calendar'=>'ics', + 'text/css'=>'css', + 'text/csv'=>'csv', + 'text/html'=>'html', + 'text/n3'=>'n3', + 'text/plain'=>'txt', + 'text/prs.lines.tag'=>'dsc', + 'text/richtext'=>'rtx', + 'text/sgml'=>'sgml', + 'text/tab-separated-values'=>'tsv', + 'text/troff'=>'t', + 'text/turtle'=>'ttl', + 'text/uri-list'=>'uri', + 'text/vcard'=>'vcard', + 'text/vnd.curl'=>'curl', + 'text/vnd.curl.dcurl'=>'dcurl', + 'text/vnd.curl.scurl'=>'scurl', + 'text/vnd.curl.mcurl'=>'mcurl', + 'text/vnd.dvb.subtitle'=>'sub', + 'text/vnd.fly'=>'fly', + 'text/vnd.fmi.flexstor'=>'flx', + 'text/vnd.graphviz'=>'gv', + 'text/vnd.in3d.3dml'=>'3dml', + 'text/vnd.in3d.spot'=>'spot', + 'text/vnd.sun.j2me.app-descriptor'=>'jad', + 'text/vnd.wap.wml'=>'wml', + 'text/vnd.wap.wmlscript'=>'wmls', + 'text/x-asm'=>'s', + 'text/x-c'=>'c', + 'text/x-fortran'=>'f', + 'text/x-java-source'=>'java', + 'text/x-opml'=>'opml', + 'text/x-pascal'=>'p', + 'text/x-nfo'=>'nfo', + 'text/x-setext'=>'etx', + 'text/x-sfv'=>'sfv', + 'text/x-uuencode'=>'uu', + 'text/x-vcalendar'=>'vcs', + 'text/x-vcard'=>'vcf', + 'video/3gpp'=>'3gp', + 'video/3gpp2'=>'3g2', + 'video/h261'=>'h261', + 'video/h263'=>'h263', + 'video/h264'=>'h264', + 'video/jpeg'=>'jpgv', + 'video/jpm'=>'jpm', + 'video/mj2'=>'mj2', + 'video/mp4'=>'mp4', + 'video/mpeg'=>'mpg', + 'video/ogg'=>'ogv', + 'video/quicktime'=>'mov', + 'video/vnd.dece.hd'=>'uvh', + 'video/vnd.dece.mobile'=>'uvm', + 'video/vnd.dece.pd'=>'uvp', + 'video/vnd.dece.sd'=>'uvs', + 'video/vnd.dece.video'=>'uvv', + 'video/vnd.dvb.file'=>'dvb', + 'video/vnd.fvt'=>'fvt', + 'video/vnd.mpegurl'=>'mxu', + 'video/vnd.ms-playready.media.pyv'=>'pyv', + 'video/vnd.uvvu.mp4'=>'uvu', + 'video/vnd.vivo'=>'viv', + 'video/webm'=>'webm', + 'video/x-f4v'=>'f4v', + 'video/x-fli'=>'fli', + 'video/x-flv'=>'flv', + 'video/x-m4v'=>'m4v', + 'video/x-matroska'=>'mkv', + 'video/x-mng'=>'mng', + 'video/x-ms-asf'=>'asf', + 'video/x-ms-vob'=>'vob', + 'video/x-ms-wm'=>'wm', + 'video/x-ms-wmv'=>'wmv', + 'video/x-ms-wmx'=>'wmx', + 'video/x-ms-wvx'=>'wvx', + 'video/x-msvideo'=>'avi', + 'video/x-sgi-movie'=>'movie', + 'video/x-smv'=>'smv', + 'x-conference/x-cooltalk'=>'ice', +); diff --git a/framework/utils/mimeTypes.php b/framework/utils/mimeTypes.php index 25822fc..d81f9e3 100644 --- a/framework/utils/mimeTypes.php +++ b/framework/utils/mimeTypes.php @@ -4,185 +4,992 @@ * * This file contains most commonly used MIME types * according to file extension names. + * Its content is generated from the apache http mime.types file. + * http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?view=markup + * This file has been placed in the public domain for unlimited redistribution. * - * @author Qiang Xue - * @link http://www.yiiframework.com/ - * @copyright 2008-2013 Yii Software LLC - * @license http://www.yiiframework.com/license/ + * This file has been backported form Yii 2. */ - return array( + '3dml'=>'text/vnd.in3d.3dml', + '3ds'=>'image/x-3ds', + '3g2'=>'video/3gpp2', + '3gp'=>'video/3gpp', + '7z'=>'application/x-7z-compressed', + 'aab'=>'application/x-authorware-bin', + 'aac'=>'audio/x-aac', + 'aam'=>'application/x-authorware-map', + 'aas'=>'application/x-authorware-seg', + 'abw'=>'application/x-abiword', + 'ac'=>'application/pkix-attr-cert', + 'acc'=>'application/vnd.americandynamics.acc', + 'ace'=>'application/x-ace-compressed', + 'acu'=>'application/vnd.acucobol', + 'acutc'=>'application/vnd.acucorp', + 'adp'=>'audio/adpcm', + 'aep'=>'application/vnd.audiograph', + 'afm'=>'application/x-font-type1', + 'afp'=>'application/vnd.ibm.modcap', + 'ahead'=>'application/vnd.ahead.space', 'ai'=>'application/postscript', 'aif'=>'audio/x-aiff', 'aifc'=>'audio/x-aiff', 'aiff'=>'audio/x-aiff', - 'anx'=>'application/annodex', - 'asc'=>'text/plain', + 'air'=>'application/vnd.adobe.air-application-installer-package+zip', + 'ait'=>'application/vnd.dvb.ait', + 'ami'=>'application/vnd.amiga.ami', + 'apk'=>'application/vnd.android.package-archive', + 'appcache'=>'text/cache-manifest', + 'application'=>'application/x-ms-application', + 'apr'=>'application/vnd.lotus-approach', + 'arc'=>'application/x-freearc', + 'asc'=>'application/pgp-signature', + 'asf'=>'video/x-ms-asf', + 'asm'=>'text/x-asm', + 'aso'=>'application/vnd.accpac.simply.aso', + 'asx'=>'video/x-ms-asf', + 'atc'=>'application/vnd.acucorp', + 'atom'=>'application/atom+xml', + 'atomcat'=>'application/atomcat+xml', + 'atomsvc'=>'application/atomsvc+xml', + 'atx'=>'application/vnd.antix.game-component', 'au'=>'audio/basic', 'avi'=>'video/x-msvideo', - 'axa'=>'audio/annodex', - 'axv'=>'video/annodex', + 'aw'=>'application/applixware', + 'azf'=>'application/vnd.airzip.filesecure.azf', + 'azs'=>'application/vnd.airzip.filesecure.azs', + 'azw'=>'application/vnd.amazon.ebook', + 'bat'=>'application/x-msdownload', 'bcpio'=>'application/x-bcpio', + 'bdf'=>'application/x-font-bdf', + 'bdm'=>'application/vnd.syncml.dm+wbxml', + 'bed'=>'application/vnd.realvnc.bed', + 'bh2'=>'application/vnd.fujitsu.oasysprs', 'bin'=>'application/octet-stream', + 'blb'=>'application/x-blorb', + 'blorb'=>'application/x-blorb', + 'bmi'=>'application/vnd.bmi', 'bmp'=>'image/bmp', - 'c'=>'text/plain', - 'cc'=>'text/plain', - 'ccad'=>'application/clariscad', + 'book'=>'application/vnd.framemaker', + 'box'=>'application/vnd.previewsystems.box', + 'boz'=>'application/x-bzip2', + 'bpk'=>'application/octet-stream', + 'btif'=>'image/prs.btif', + 'bz'=>'application/x-bzip', + 'bz2'=>'application/x-bzip2', + 'c'=>'text/x-c', + 'c11amc'=>'application/vnd.cluetrust.cartomobile-config', + 'c11amz'=>'application/vnd.cluetrust.cartomobile-config-pkg', + 'c4d'=>'application/vnd.clonk.c4group', + 'c4f'=>'application/vnd.clonk.c4group', + 'c4g'=>'application/vnd.clonk.c4group', + 'c4p'=>'application/vnd.clonk.c4group', + 'c4u'=>'application/vnd.clonk.c4group', + 'cab'=>'application/vnd.ms-cab-compressed', + 'caf'=>'audio/x-caf', + 'cap'=>'application/vnd.tcpdump.pcap', + 'car'=>'application/vnd.curl.car', + 'cat'=>'application/vnd.ms-pki.seccat', + 'cb7'=>'application/x-cbr', + 'cba'=>'application/x-cbr', + 'cbr'=>'application/x-cbr', + 'cbt'=>'application/x-cbr', + 'cbz'=>'application/x-cbr', + 'cc'=>'text/x-c', + 'cct'=>'application/x-director', + 'ccxml'=>'application/ccxml+xml', + 'cdbcmsg'=>'application/vnd.contact.cmsg', 'cdf'=>'application/x-netcdf', - 'class'=>'application/octet-stream', + 'cdkey'=>'application/vnd.mediastation.cdkey', + 'cdmia'=>'application/cdmi-capability', + 'cdmic'=>'application/cdmi-container', + 'cdmid'=>'application/cdmi-domain', + 'cdmio'=>'application/cdmi-object', + 'cdmiq'=>'application/cdmi-queue', + 'cdx'=>'chemical/x-cdx', + 'cdxml'=>'application/vnd.chemdraw+xml', + 'cdy'=>'application/vnd.cinderella', + 'cer'=>'application/pkix-cert', + 'cfs'=>'application/x-cfs-compressed', + 'cgm'=>'image/cgm', + 'chat'=>'application/x-chat', + 'chm'=>'application/vnd.ms-htmlhelp', + 'chrt'=>'application/vnd.kde.kchart', + 'cif'=>'chemical/x-cif', + 'cii'=>'application/vnd.anser-web-certificate-issue-initiation', + 'cil'=>'application/vnd.ms-artgalry', + 'cla'=>'application/vnd.claymore', + 'class'=>'application/java-vm', + 'clkk'=>'application/vnd.crick.clicker.keyboard', + 'clkp'=>'application/vnd.crick.clicker.palette', + 'clkt'=>'application/vnd.crick.clicker.template', + 'clkw'=>'application/vnd.crick.clicker.wordbank', + 'clkx'=>'application/vnd.crick.clicker', + 'clp'=>'application/x-msclip', + 'cmc'=>'application/vnd.cosmocaller', + 'cmdf'=>'chemical/x-cmdf', + 'cml'=>'chemical/x-cml', + 'cmp'=>'application/vnd.yellowriver-custom-menu', + 'cmx'=>'image/x-cmx', + 'cod'=>'application/vnd.rim.cod', + 'com'=>'application/x-msdownload', + 'conf'=>'text/plain', 'cpio'=>'application/x-cpio', + 'cpp'=>'text/x-c', 'cpt'=>'application/mac-compactpro', + 'crd'=>'application/x-mscardfile', + 'crl'=>'application/pkix-crl', + 'crt'=>'application/x-x509-ca-cert', + 'cryptonote'=>'application/vnd.rig.cryptonote', 'csh'=>'application/x-csh', + 'csml'=>'chemical/x-csml', + 'csp'=>'application/vnd.commonspace', 'css'=>'text/css', + 'cst'=>'application/x-director', 'csv'=>'text/csv', + 'cu'=>'application/cu-seeme', + 'curl'=>'text/vnd.curl', + 'cww'=>'application/prs.cww', + 'cxt'=>'application/x-director', + 'cxx'=>'text/x-c', + 'dae'=>'model/vnd.collada+xml', + 'daf'=>'application/vnd.mobius.daf', + 'dart'=>'application/vnd.dart', + 'dataless'=>'application/vnd.fdsn.seed', + 'davmount'=>'application/davmount+xml', + 'dbk'=>'application/docbook+xml', 'dcr'=>'application/x-director', + 'dcurl'=>'text/vnd.curl.dcurl', + 'dd2'=>'application/vnd.oma.dd2+xml', + 'ddd'=>'application/vnd.fujixerox.ddd', + 'deb'=>'application/x-debian-package', + 'def'=>'text/plain', + 'deploy'=>'application/octet-stream', + 'der'=>'application/x-x509-ca-cert', + 'dfac'=>'application/vnd.dreamfactory', + 'dgc'=>'application/x-dgc-compressed', + 'dic'=>'text/x-c', 'dir'=>'application/x-director', + 'dis'=>'application/vnd.mobius.dis', + 'dist'=>'application/octet-stream', + 'distz'=>'application/octet-stream', + 'djv'=>'image/vnd.djvu', + 'djvu'=>'image/vnd.djvu', + 'dll'=>'application/x-msdownload', + 'dmg'=>'application/x-apple-diskimage', + 'dmp'=>'application/vnd.tcpdump.pcap', 'dms'=>'application/octet-stream', + 'dna'=>'application/vnd.dna', 'doc'=>'application/msword', - 'drw'=>'application/drafting', + 'docm'=>'application/vnd.ms-word.document.macroenabled.12', + 'docx'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dot'=>'application/msword', + 'dotm'=>'application/vnd.ms-word.template.macroenabled.12', + 'dotx'=>'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'dp'=>'application/vnd.osgi.dp', + 'dpg'=>'application/vnd.dpgraph', + 'dra'=>'audio/vnd.dra', + 'dsc'=>'text/prs.lines.tag', + 'dssc'=>'application/dssc+der', + 'dtb'=>'application/x-dtbook+xml', + 'dtd'=>'application/xml-dtd', + 'dts'=>'audio/vnd.dts', + 'dtshd'=>'audio/vnd.dts.hd', + 'dump'=>'application/octet-stream', + 'dvb'=>'video/vnd.dvb.file', 'dvi'=>'application/x-dvi', - 'dwg'=>'application/acad', - 'dxf'=>'application/dxf', + 'dwf'=>'model/vnd.dwf', + 'dwg'=>'image/vnd.dwg', + 'dxf'=>'image/vnd.dxf', + 'dxp'=>'application/vnd.spotfire.dxp', 'dxr'=>'application/x-director', + 'ecelp4800'=>'audio/vnd.nuera.ecelp4800', + 'ecelp7470'=>'audio/vnd.nuera.ecelp7470', + 'ecelp9600'=>'audio/vnd.nuera.ecelp9600', + 'ecma'=>'application/ecmascript', + 'edm'=>'application/vnd.novadigm.edm', + 'edx'=>'application/vnd.novadigm.edx', + 'efif'=>'application/vnd.picsel', + 'ei6'=>'application/vnd.pg.osasli', + 'elc'=>'application/octet-stream', + 'emf'=>'application/x-msmetafile', + 'eml'=>'message/rfc822', + 'emma'=>'application/emma+xml', + 'emz'=>'application/x-msmetafile', + 'eol'=>'audio/vnd.digital-winds', + 'eot'=>'application/vnd.ms-fontobject', 'eps'=>'application/postscript', + 'epub'=>'application/epub+zip', + 'es3'=>'application/vnd.eszigno3+xml', + 'esa'=>'application/vnd.osgi.subsystem', + 'esf'=>'application/vnd.epson.esf', + 'et3'=>'application/vnd.eszigno3+xml', 'etx'=>'text/x-setext', - 'exe'=>'application/octet-stream', + 'eva'=>'application/x-eva', + 'evy'=>'application/x-envoy', + 'exe'=>'application/x-msdownload', + 'exi'=>'application/exi', + 'ext'=>'application/vnd.novadigm.ext', 'ez'=>'application/andrew-inset', - 'f'=>'text/plain', - 'f90'=>'text/plain', - 'flac'=>'audio/flac', + 'ez2'=>'application/vnd.ezpix-album', + 'ez3'=>'application/vnd.ezpix-package', + 'f'=>'text/x-fortran', + 'f4v'=>'video/x-f4v', + 'f77'=>'text/x-fortran', + 'f90'=>'text/x-fortran', + 'fbs'=>'image/vnd.fastbidsheet', + 'fcdt'=>'application/vnd.adobe.formscentral.fcdt', + 'fcs'=>'application/vnd.isac.fcs', + 'fdf'=>'application/vnd.fdf', + 'fe_launch'=>'application/vnd.denovo.fcselayout-link', + 'fg5'=>'application/vnd.fujitsu.oasysgp', + 'fgd'=>'application/x-director', + 'fh'=>'image/x-freehand', + 'fh4'=>'image/x-freehand', + 'fh5'=>'image/x-freehand', + 'fh7'=>'image/x-freehand', + 'fhc'=>'image/x-freehand', + 'fig'=>'application/x-xfig', + 'flac'=>'audio/x-flac', 'fli'=>'video/x-fli', + 'flo'=>'application/vnd.micrografx.flo', 'flv'=>'video/x-flv', + 'flw'=>'application/vnd.kde.kivio', + 'flx'=>'text/vnd.fmi.flexstor', + 'fly'=>'text/vnd.fly', + 'fm'=>'application/vnd.framemaker', + 'fnc'=>'application/vnd.frogans.fnc', + 'for'=>'text/x-fortran', + 'fpx'=>'image/vnd.fpx', + 'frame'=>'application/vnd.framemaker', + 'fsc'=>'application/vnd.fsc.weblaunch', + 'fst'=>'image/vnd.fst', + 'ftc'=>'application/vnd.fluxtime.clip', + 'fti'=>'application/vnd.anser-web-funds-transfer-initiation', + 'fvt'=>'video/vnd.fvt', + 'fxp'=>'application/vnd.adobe.fxp', + 'fxpl'=>'application/vnd.adobe.fxp', + 'fzs'=>'application/vnd.fuzzysheet', + 'g2w'=>'application/vnd.geoplan', + 'g3'=>'image/g3fax', + 'g3w'=>'application/vnd.geospace', + 'gac'=>'application/vnd.groove-account', + 'gam'=>'application/x-tads', + 'gbr'=>'application/rpki-ghostbusters', + 'gca'=>'application/x-gca-compressed', + 'gdl'=>'model/vnd.gdl', + 'geo'=>'application/vnd.dynageo', + 'gex'=>'application/vnd.geometry-explorer', + 'ggb'=>'application/vnd.geogebra.file', + 'ggt'=>'application/vnd.geogebra.tool', + 'ghf'=>'application/vnd.groove-help', 'gif'=>'image/gif', + 'gim'=>'application/vnd.groove-identity-message', + 'gml'=>'application/gml+xml', + 'gmx'=>'application/vnd.gmx', + 'gnumeric'=>'application/x-gnumeric', + 'gph'=>'application/vnd.flographit', + 'gpx'=>'application/gpx+xml', + 'gqf'=>'application/vnd.grafeq', + 'gqs'=>'application/vnd.grafeq', + 'gram'=>'application/srgs', + 'gramps'=>'application/x-gramps-xml', + 'gre'=>'application/vnd.geometry-explorer', + 'grv'=>'application/vnd.groove-injector', + 'grxml'=>'application/srgs+xml', + 'gsf'=>'application/x-font-ghostscript', 'gtar'=>'application/x-gtar', - 'gz'=>'application/x-gzip', - 'h'=>'text/plain', + 'gtm'=>'application/vnd.groove-tool-message', + 'gtw'=>'model/vnd.gtw', + 'gv'=>'text/vnd.graphviz', + 'gxf'=>'application/gxf', + 'gxt'=>'application/vnd.geonext', + 'h'=>'text/x-c', + 'h261'=>'video/h261', + 'h263'=>'video/h263', + 'h264'=>'video/h264', + 'hal'=>'application/vnd.hal+xml', + 'hbci'=>'application/vnd.hbci', 'hdf'=>'application/x-hdf', - 'hh'=>'text/plain', + 'hh'=>'text/x-c', + 'hlp'=>'application/winhlp', + 'hpgl'=>'application/vnd.hp-hpgl', + 'hpid'=>'application/vnd.hp-hpid', + 'hps'=>'application/vnd.hp-hps', 'hqx'=>'application/mac-binhex40', + 'htke'=>'application/vnd.kenameaapp', 'htm'=>'text/html', 'html'=>'text/html', + 'hvd'=>'application/vnd.yamaha.hv-dic', + 'hvp'=>'application/vnd.yamaha.hv-voice', + 'hvs'=>'application/vnd.yamaha.hv-script', + 'i2g'=>'application/vnd.intergeo', + 'icc'=>'application/vnd.iccprofile', 'ice'=>'x-conference/x-cooltalk', + 'icm'=>'application/vnd.iccprofile', + 'ico'=>'image/x-icon', + 'ics'=>'text/calendar', 'ief'=>'image/ief', + 'ifb'=>'text/calendar', + 'ifm'=>'application/vnd.shana.informed.formdata', 'iges'=>'model/iges', + 'igl'=>'application/vnd.igloader', + 'igm'=>'application/vnd.insors.igm', 'igs'=>'model/iges', - 'ips'=>'application/x-ipscript', - 'ipx'=>'application/x-ipix', + 'igx'=>'application/vnd.micrografx.igx', + 'iif'=>'application/vnd.shana.informed.interchange', + 'imp'=>'application/vnd.accpac.simply.imp', + 'ims'=>'application/vnd.ms-ims', + 'in'=>'text/plain', + 'ink'=>'application/inkml+xml', + 'inkml'=>'application/inkml+xml', + 'install'=>'application/x-install-instructions', + 'iota'=>'application/vnd.astraea-software.iota', + 'ipfix'=>'application/ipfix', + 'ipk'=>'application/vnd.shana.informed.package', + 'irm'=>'application/vnd.ibm.rights-management', + 'irp'=>'application/vnd.irepository.package+xml', + 'iso'=>'application/x-iso9660-image', + 'itp'=>'application/vnd.shana.informed.formtemplate', + 'ivp'=>'application/vnd.immervision-ivp', + 'ivu'=>'application/vnd.immervision-ivu', + 'jad'=>'text/vnd.sun.j2me.app-descriptor', + 'jam'=>'application/vnd.jam', + 'jar'=>'application/java-archive', + 'java'=>'text/x-java-source', + 'jisp'=>'application/vnd.jisp', + 'jlt'=>'application/vnd.hp-jlyt', + 'jnlp'=>'application/x-java-jnlp-file', + 'joda'=>'application/vnd.joost.joda-archive', 'jpe'=>'image/jpeg', 'jpeg'=>'image/jpeg', 'jpg'=>'image/jpeg', - 'js'=>'application/x-javascript', + 'jpgm'=>'video/jpm', + 'jpgv'=>'video/jpeg', + 'jpm'=>'video/jpm', + 'js'=>'application/javascript', + 'json'=>'application/json', + 'jsonml'=>'application/jsonml+json', 'kar'=>'audio/midi', + 'karbon'=>'application/vnd.kde.karbon', + 'kfo'=>'application/vnd.kde.kformula', + 'kia'=>'application/vnd.kidspiration', + 'kml'=>'application/vnd.google-earth.kml+xml', + 'kmz'=>'application/vnd.google-earth.kmz', + 'kne'=>'application/vnd.kinar', + 'knp'=>'application/vnd.kinar', + 'kon'=>'application/vnd.kde.kontour', + 'kpr'=>'application/vnd.kde.kpresenter', + 'kpt'=>'application/vnd.kde.kpresenter', + 'kpxx'=>'application/vnd.ds-keypoint', + 'ksp'=>'application/vnd.kde.kspread', + 'ktr'=>'application/vnd.kahootz', + 'ktx'=>'image/ktx', + 'ktz'=>'application/vnd.kahootz', + 'kwd'=>'application/vnd.kde.kword', + 'kwt'=>'application/vnd.kde.kword', + 'lasxml'=>'application/vnd.las.las+xml', 'latex'=>'application/x-latex', - 'lha'=>'application/octet-stream', - 'lsp'=>'application/x-lisp', - 'lzh'=>'application/octet-stream', - 'm'=>'text/plain', - 'man'=>'application/x-troff-man', - 'me'=>'application/x-troff-me', + 'lbd'=>'application/vnd.llamagraphics.life-balance.desktop', + 'lbe'=>'application/vnd.llamagraphics.life-balance.exchange+xml', + 'les'=>'application/vnd.hhe.lesson-player', + 'lha'=>'application/x-lzh-compressed', + 'link66'=>'application/vnd.route66.link66+xml', + 'list'=>'text/plain', + 'list3820'=>'application/vnd.ibm.modcap', + 'listafp'=>'application/vnd.ibm.modcap', + 'lnk'=>'application/x-ms-shortcut', + 'log'=>'text/plain', + 'lostxml'=>'application/lost+xml', + 'lrf'=>'application/octet-stream', + 'lrm'=>'application/vnd.ms-lrm', + 'ltf'=>'application/vnd.frogans.ltf', + 'lvp'=>'audio/vnd.lucent.voice', + 'lwp'=>'application/vnd.lotus-wordpro', + 'lzh'=>'application/x-lzh-compressed', + 'm13'=>'application/x-msmediaview', + 'm14'=>'application/x-msmediaview', + 'm1v'=>'video/mpeg', + 'm21'=>'application/mp21', + 'm2a'=>'audio/mpeg', + 'm2v'=>'video/mpeg', + 'm3a'=>'audio/mpeg', + 'm3u'=>'audio/x-mpegurl', + 'm3u8'=>'application/vnd.apple.mpegurl', + 'm4u'=>'video/vnd.mpegurl', + 'm4v'=>'video/x-m4v', + 'ma'=>'application/mathematica', + 'mads'=>'application/mads+xml', + 'mag'=>'application/vnd.ecowin.chart', + 'maker'=>'application/vnd.framemaker', + 'man'=>'text/troff', + 'mar'=>'application/octet-stream', + 'mathml'=>'application/mathml+xml', + 'mb'=>'application/mathematica', + 'mbk'=>'application/vnd.mobius.mbk', + 'mbox'=>'application/mbox', + 'mc1'=>'application/vnd.medcalcdata', + 'mcd'=>'application/vnd.mcd', + 'mcurl'=>'text/vnd.curl.mcurl', + 'mdb'=>'application/x-msaccess', + 'mdi'=>'image/vnd.ms-modi', + 'me'=>'text/troff', 'mesh'=>'model/mesh', + 'meta4'=>'application/metalink4+xml', + 'metalink'=>'application/metalink+xml', + 'mets'=>'application/mets+xml', + 'mfm'=>'application/vnd.mfmp', + 'mft'=>'application/rpki-manifest', + 'mgp'=>'application/vnd.osgeo.mapguide.package', + 'mgz'=>'application/vnd.proteus.magazine', 'mid'=>'audio/midi', 'midi'=>'audio/midi', + 'mie'=>'application/x-mie', 'mif'=>'application/vnd.mif', - 'mime'=>'www/mime', + 'mime'=>'message/rfc822', + 'mj2'=>'video/mj2', + 'mjp2'=>'video/mj2', + 'mk3d'=>'video/x-matroska', + 'mka'=>'audio/x-matroska', + 'mks'=>'video/x-matroska', + 'mkv'=>'video/x-matroska', + 'mlp'=>'application/vnd.dolby.mlp', + 'mmd'=>'application/vnd.chipnuts.karaoke-mmd', + 'mmf'=>'application/vnd.smaf', + 'mmr'=>'image/vnd.fujixerox.edmics-mmr', + 'mng'=>'video/x-mng', + 'mny'=>'application/x-msmoney', + 'mobi'=>'application/x-mobipocket-ebook', + 'mods'=>'application/mods+xml', 'mov'=>'video/quicktime', 'movie'=>'video/x-sgi-movie', 'mp2'=>'audio/mpeg', + 'mp21'=>'application/mp21', + 'mp2a'=>'audio/mpeg', 'mp3'=>'audio/mpeg', + 'mp4'=>'video/mp4', + 'mp4a'=>'audio/mp4', + 'mp4s'=>'application/mp4', + 'mp4v'=>'video/mp4', + 'mpc'=>'application/vnd.mophun.certificate', 'mpe'=>'video/mpeg', 'mpeg'=>'video/mpeg', 'mpg'=>'video/mpeg', + 'mpg4'=>'video/mp4', 'mpga'=>'audio/mpeg', - 'ms'=>'application/x-troff-ms', + 'mpkg'=>'application/vnd.apple.installer+xml', + 'mpm'=>'application/vnd.blueice.multipass', + 'mpn'=>'application/vnd.mophun.application', + 'mpp'=>'application/vnd.ms-project', + 'mpt'=>'application/vnd.ms-project', + 'mpy'=>'application/vnd.ibm.minipay', + 'mqy'=>'application/vnd.mobius.mqy', + 'mrc'=>'application/marc', + 'mrcx'=>'application/marcxml+xml', + 'ms'=>'text/troff', + 'mscml'=>'application/mediaservercontrol+xml', + 'mseed'=>'application/vnd.fdsn.mseed', + 'mseq'=>'application/vnd.mseq', + 'msf'=>'application/vnd.epson.msf', 'msh'=>'model/mesh', + 'msi'=>'application/x-msdownload', + 'msl'=>'application/vnd.mobius.msl', + 'msty'=>'application/vnd.muvee.style', + 'mts'=>'model/vnd.mts', + 'mus'=>'application/vnd.musician', + 'musicxml'=>'application/vnd.recordare.musicxml+xml', + 'mvb'=>'application/x-msmediaview', + 'mwf'=>'application/vnd.mfer', + 'mxf'=>'application/mxf', + 'mxl'=>'application/vnd.recordare.musicxml', + 'mxml'=>'application/xv+xml', + 'mxs'=>'application/vnd.triscape.mxs', + 'mxu'=>'video/vnd.mpegurl', + 'n-gage'=>'application/vnd.nokia.n-gage.symbian.install', + 'n3'=>'text/n3', + 'nb'=>'application/mathematica', + 'nbp'=>'application/vnd.wolfram.player', 'nc'=>'application/x-netcdf', + 'ncx'=>'application/x-dtbncx+xml', + 'nfo'=>'text/x-nfo', + 'ngdat'=>'application/vnd.nokia.n-gage.data', + 'nitf'=>'application/vnd.nitf', + 'nlu'=>'application/vnd.neurolanguage.nlu', + 'nml'=>'application/vnd.enliven', + 'nnd'=>'application/vnd.noblenet-directory', + 'nns'=>'application/vnd.noblenet-sealer', + 'nnw'=>'application/vnd.noblenet-web', + 'npx'=>'image/vnd.net-fpx', + 'nsc'=>'application/x-conference', + 'nsf'=>'application/vnd.lotus-notes', + 'ntf'=>'application/vnd.nitf', + 'nzb'=>'application/x-nzb', + 'oa2'=>'application/vnd.fujitsu.oasys2', + 'oa3'=>'application/vnd.fujitsu.oasys3', + 'oas'=>'application/vnd.fujitsu.oasys', + 'obd'=>'application/x-msbinder', + 'obj'=>'application/x-tgif', + 'oda'=>'application/oda', + 'odb'=>'application/vnd.oasis.opendocument.database', + 'odc'=>'application/vnd.oasis.opendocument.chart', + 'odf'=>'application/vnd.oasis.opendocument.formula', + 'odft'=>'application/vnd.oasis.opendocument.formula-template', + 'odg'=>'application/vnd.oasis.opendocument.graphics', + 'odi'=>'application/vnd.oasis.opendocument.image', + 'odm'=>'application/vnd.oasis.opendocument.text-master', + 'odp'=>'application/vnd.oasis.opendocument.presentation', + 'ods'=>'application/vnd.oasis.opendocument.spreadsheet', + 'odt'=>'application/vnd.oasis.opendocument.text', 'oga'=>'audio/ogg', 'ogg'=>'audio/ogg', 'ogv'=>'video/ogg', 'ogx'=>'application/ogg', - 'oda'=>'application/oda', + 'omdoc'=>'application/omdoc+xml', + 'onepkg'=>'application/onenote', + 'onetmp'=>'application/onenote', + 'onetoc'=>'application/onenote', + 'onetoc2'=>'application/onenote', + 'opf'=>'application/oebps-package+xml', + 'opml'=>'text/x-opml', + 'oprc'=>'application/vnd.palm', + 'org'=>'application/vnd.lotus-organizer', + 'osf'=>'application/vnd.yamaha.openscoreformat', + 'osfpvg'=>'application/vnd.yamaha.openscoreformat.osfpvg+xml', + 'otc'=>'application/vnd.oasis.opendocument.chart-template', + 'otf'=>'application/x-font-otf', + 'otg'=>'application/vnd.oasis.opendocument.graphics-template', + 'oth'=>'application/vnd.oasis.opendocument.text-web', + 'oti'=>'application/vnd.oasis.opendocument.image-template', + 'otp'=>'application/vnd.oasis.opendocument.presentation-template', + 'ots'=>'application/vnd.oasis.opendocument.spreadsheet-template', + 'ott'=>'application/vnd.oasis.opendocument.text-template', + 'oxps'=>'application/oxps', + 'oxt'=>'application/vnd.openofficeorg.extension', + 'p'=>'text/x-pascal', + 'p10'=>'application/pkcs10', + 'p12'=>'application/x-pkcs12', + 'p7b'=>'application/x-pkcs7-certificates', + 'p7c'=>'application/pkcs7-mime', + 'p7m'=>'application/pkcs7-mime', + 'p7r'=>'application/x-pkcs7-certreqresp', + 'p7s'=>'application/pkcs7-signature', + 'p8'=>'application/pkcs8', + 'pas'=>'text/x-pascal', + 'paw'=>'application/vnd.pawaafile', + 'pbd'=>'application/vnd.powerbuilder6', 'pbm'=>'image/x-portable-bitmap', - 'pdb'=>'chemical/x-pdb', + 'pcap'=>'application/vnd.tcpdump.pcap', + 'pcf'=>'application/x-font-pcf', + 'pcl'=>'application/vnd.hp-pcl', + 'pclxl'=>'application/vnd.hp-pclxl', + 'pct'=>'image/x-pict', + 'pcurl'=>'application/vnd.curl.pcurl', + 'pcx'=>'image/x-pcx', + 'pdb'=>'application/vnd.palm', 'pdf'=>'application/pdf', + 'pfa'=>'application/x-font-type1', + 'pfb'=>'application/x-font-type1', + 'pfm'=>'application/x-font-type1', + 'pfr'=>'application/font-tdpfr', + 'pfx'=>'application/x-pkcs12', 'pgm'=>'image/x-portable-graymap', 'pgn'=>'application/x-chess-pgn', + 'pgp'=>'application/pgp-encrypted', + 'pic'=>'image/x-pict', + 'pkg'=>'application/octet-stream', + 'pki'=>'application/pkixcmp', + 'pkipath'=>'application/pkix-pkipath', + 'plb'=>'application/vnd.3gpp.pic-bw-large', + 'plc'=>'application/vnd.mobius.plc', + 'plf'=>'application/vnd.pocketlearn', + 'pls'=>'application/pls+xml', + 'pml'=>'application/vnd.ctc-posml', 'png'=>'image/png', 'pnm'=>'image/x-portable-anymap', - 'pot'=>'application/mspowerpoint', + 'portpkg'=>'application/vnd.macports.portpkg', + 'pot'=>'application/vnd.ms-powerpoint', + 'potm'=>'application/vnd.ms-powerpoint.template.macroenabled.12', + 'potx'=>'application/vnd.openxmlformats-officedocument.presentationml.template', + 'ppam'=>'application/vnd.ms-powerpoint.addin.macroenabled.12', + 'ppd'=>'application/vnd.cups-ppd', 'ppm'=>'image/x-portable-pixmap', - 'pps'=>'application/mspowerpoint', - 'ppt'=>'application/mspowerpoint', - 'ppz'=>'application/mspowerpoint', - 'pre'=>'application/x-freelance', - 'prt'=>'application/pro_eng', + 'pps'=>'application/vnd.ms-powerpoint', + 'ppsm'=>'application/vnd.ms-powerpoint.slideshow.macroenabled.12', + 'ppsx'=>'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'ppt'=>'application/vnd.ms-powerpoint', + 'pptm'=>'application/vnd.ms-powerpoint.presentation.macroenabled.12', + 'pptx'=>'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'pqa'=>'application/vnd.palm', + 'prc'=>'application/x-mobipocket-ebook', + 'pre'=>'application/vnd.lotus-freelance', + 'prf'=>'application/pics-rules', 'ps'=>'application/postscript', + 'psb'=>'application/vnd.3gpp.pic-bw-small', + 'psd'=>'image/vnd.adobe.photoshop', + 'psf'=>'application/x-font-linux-psf', + 'pskcxml'=>'application/pskc+xml', + 'ptid'=>'application/vnd.pvi.ptid1', + 'pub'=>'application/x-mspublisher', + 'pvb'=>'application/vnd.3gpp.pic-bw-var', + 'pwn'=>'application/vnd.3m.post-it-notes', + 'pya'=>'audio/vnd.ms-playready.media.pya', + 'pyv'=>'video/vnd.ms-playready.media.pyv', + 'qam'=>'application/vnd.epson.quickanime', + 'qbo'=>'application/vnd.intu.qbo', + 'qfx'=>'application/vnd.intu.qfx', + 'qps'=>'application/vnd.publishare-delta-tree', 'qt'=>'video/quicktime', - 'ra'=>'audio/x-realaudio', + 'qwd'=>'application/vnd.quark.quarkxpress', + 'qwt'=>'application/vnd.quark.quarkxpress', + 'qxb'=>'application/vnd.quark.quarkxpress', + 'qxd'=>'application/vnd.quark.quarkxpress', + 'qxl'=>'application/vnd.quark.quarkxpress', + 'qxt'=>'application/vnd.quark.quarkxpress', + 'ra'=>'audio/x-pn-realaudio', 'ram'=>'audio/x-pn-realaudio', - 'ras'=>'image/cmu-raster', + 'rar'=>'application/x-rar-compressed', + 'ras'=>'image/x-cmu-raster', + 'rcprofile'=>'application/vnd.ipunplugged.rcprofile', + 'rdf'=>'application/rdf+xml', + 'rdz'=>'application/vnd.data-vision.rdz', + 'rep'=>'application/vnd.businessobjects', + 'res'=>'application/x-dtbresource+xml', 'rgb'=>'image/x-rgb', - 'rm'=>'audio/x-pn-realaudio', - 'roff'=>'application/x-troff', - 'rpm'=>'audio/x-pn-realaudio-plugin', - 'rtf'=>'text/rtf', + 'rif'=>'application/reginfo+xml', + 'rip'=>'audio/vnd.rip', + 'ris'=>'application/x-research-info-systems', + 'rl'=>'application/resource-lists+xml', + 'rlc'=>'image/vnd.fujixerox.edmics-rlc', + 'rld'=>'application/resource-lists-diff+xml', + 'rm'=>'application/vnd.rn-realmedia', + 'rmi'=>'audio/midi', + 'rmp'=>'audio/x-pn-realaudio-plugin', + 'rms'=>'application/vnd.jcp.javame.midlet-rms', + 'rmvb'=>'application/vnd.rn-realmedia-vbr', + 'rnc'=>'application/relax-ng-compact-syntax', + 'roa'=>'application/rpki-roa', + 'roff'=>'text/troff', + 'rp9'=>'application/vnd.cloanto.rp9', + 'rpss'=>'application/vnd.nokia.radio-presets', + 'rpst'=>'application/vnd.nokia.radio-preset', + 'rq'=>'application/sparql-query', + 'rs'=>'application/rls-services+xml', + 'rsd'=>'application/rsd+xml', + 'rss'=>'application/rss+xml', + 'rtf'=>'application/rtf', 'rtx'=>'text/richtext', - 'scm'=>'application/x-lotusscreencam', - 'set'=>'application/set', + 's'=>'text/x-asm', + 's3m'=>'audio/s3m', + 'saf'=>'application/vnd.yamaha.smaf-audio', + 'sbml'=>'application/sbml+xml', + 'sc'=>'application/vnd.ibm.secure-container', + 'scd'=>'application/x-msschedule', + 'scm'=>'application/vnd.lotus-screencam', + 'scq'=>'application/scvp-cv-request', + 'scs'=>'application/scvp-cv-response', + 'scurl'=>'text/vnd.curl.scurl', + 'sda'=>'application/vnd.stardivision.draw', + 'sdc'=>'application/vnd.stardivision.calc', + 'sdd'=>'application/vnd.stardivision.impress', + 'sdkd'=>'application/vnd.solent.sdkm+xml', + 'sdkm'=>'application/vnd.solent.sdkm+xml', + 'sdp'=>'application/sdp', + 'sdw'=>'application/vnd.stardivision.writer', + 'see'=>'application/vnd.seemail', + 'seed'=>'application/vnd.fdsn.seed', + 'sema'=>'application/vnd.sema', + 'semd'=>'application/vnd.semd', + 'semf'=>'application/vnd.semf', + 'ser'=>'application/java-serialized-object', + 'setpay'=>'application/set-payment-initiation', + 'setreg'=>'application/set-registration-initiation', + 'sfd-hdstx'=>'application/vnd.hydrostatix.sof-data', + 'sfs'=>'application/vnd.spotfire.sfs', + 'sfv'=>'text/x-sfv', + 'sgi'=>'image/sgi', + 'sgl'=>'application/vnd.stardivision.writer-global', 'sgm'=>'text/sgml', 'sgml'=>'text/sgml', 'sh'=>'application/x-sh', 'shar'=>'application/x-shar', + 'shf'=>'application/shf+xml', + 'sid'=>'image/x-mrsid-image', + 'sig'=>'application/pgp-signature', + 'sil'=>'audio/silk', 'silo'=>'model/mesh', + 'sis'=>'application/vnd.symbian.install', + 'sisx'=>'application/vnd.symbian.install', 'sit'=>'application/x-stuffit', - 'skd'=>'application/x-koan', - 'skm'=>'application/x-koan', - 'skp'=>'application/x-koan', - 'skt'=>'application/x-koan', - 'smi'=>'application/smil', - 'smil'=>'application/smil', + 'sitx'=>'application/x-stuffitx', + 'skd'=>'application/vnd.koan', + 'skm'=>'application/vnd.koan', + 'skp'=>'application/vnd.koan', + 'skt'=>'application/vnd.koan', + 'sldm'=>'application/vnd.ms-powerpoint.slide.macroenabled.12', + 'sldx'=>'application/vnd.openxmlformats-officedocument.presentationml.slide', + 'slt'=>'application/vnd.epson.salt', + 'sm'=>'application/vnd.stepmania.stepchart', + 'smf'=>'application/vnd.stardivision.math', + 'smi'=>'application/smil+xml', + 'smil'=>'application/smil+xml', + 'smv'=>'video/x-smv', + 'smzip'=>'application/vnd.stepmania.package', 'snd'=>'audio/basic', - 'sol'=>'application/solids', + 'snf'=>'application/x-font-snf', + 'so'=>'application/octet-stream', + 'spc'=>'application/x-pkcs7-certificates', + 'spf'=>'application/vnd.yamaha.smaf-phrase', 'spl'=>'application/x-futuresplash', + 'spot'=>'text/vnd.in3d.spot', + 'spp'=>'application/scvp-vp-response', + 'spq'=>'application/scvp-vp-request', 'spx'=>'audio/ogg', + 'sql'=>'application/x-sql', 'src'=>'application/x-wais-source', - 'step'=>'application/STEP', - 'stl'=>'application/SLA', - 'stp'=>'application/STEP', + 'srt'=>'application/x-subrip', + 'sru'=>'application/sru+xml', + 'srx'=>'application/sparql-results+xml', + 'ssdl'=>'application/ssdl+xml', + 'sse'=>'application/vnd.kodak-descriptor', + 'ssf'=>'application/vnd.epson.ssf', + 'ssml'=>'application/ssml+xml', + 'st'=>'application/vnd.sailingtracker.track', + 'stc'=>'application/vnd.sun.xml.calc.template', + 'std'=>'application/vnd.sun.xml.draw.template', + 'stf'=>'application/vnd.wt.stf', + 'sti'=>'application/vnd.sun.xml.impress.template', + 'stk'=>'application/hyperstudio', + 'stl'=>'application/vnd.ms-pki.stl', + 'str'=>'application/vnd.pg.format', + 'stw'=>'application/vnd.sun.xml.writer.template', + 'sub'=>'text/vnd.dvb.subtitle', + 'sus'=>'application/vnd.sus-calendar', + 'susp'=>'application/vnd.sus-calendar', 'sv4cpio'=>'application/x-sv4cpio', 'sv4crc'=>'application/x-sv4crc', + 'svc'=>'application/vnd.dvb.service', + 'svd'=>'application/vnd.svd', + 'svg'=>'image/svg+xml', + 'svgz'=>'image/svg+xml', + 'swa'=>'application/x-director', 'swf'=>'application/x-shockwave-flash', - 't'=>'application/x-troff', + 'swi'=>'application/vnd.aristanetworks.swi', + 'sxc'=>'application/vnd.sun.xml.calc', + 'sxd'=>'application/vnd.sun.xml.draw', + 'sxg'=>'application/vnd.sun.xml.writer.global', + 'sxi'=>'application/vnd.sun.xml.impress', + 'sxm'=>'application/vnd.sun.xml.math', + 'sxw'=>'application/vnd.sun.xml.writer', + 't'=>'text/troff', + 't3'=>'application/x-t3vm-image', + 'taglet'=>'application/vnd.mynfc', + 'tao'=>'application/vnd.tao.intent-module-archive', 'tar'=>'application/x-tar', + 'tcap'=>'application/vnd.3gpp2.tcap', 'tcl'=>'application/x-tcl', + 'teacher'=>'application/vnd.smart.teacher', + 'tei'=>'application/tei+xml', + 'teicorpus'=>'application/tei+xml', 'tex'=>'application/x-tex', 'texi'=>'application/x-texinfo', 'texinfo'=>'application/x-texinfo', + 'text'=>'text/plain', + 'tfi'=>'application/thraud+xml', + 'tfm'=>'application/x-tex-tfm', + 'tga'=>'image/x-tga', + 'thmx'=>'application/vnd.ms-officetheme', 'tif'=>'image/tiff', 'tiff'=>'image/tiff', - 'tr'=>'application/x-troff', - 'tsi'=>'audio/TSP-audio', - 'tsp'=>'application/dsptype', + 'tmo'=>'application/vnd.tmobile-livetv', + 'torrent'=>'application/x-bittorrent', + 'tpl'=>'application/vnd.groove-tool-template', + 'tpt'=>'application/vnd.trid.tpt', + 'tr'=>'text/troff', + 'tra'=>'application/vnd.trueapp', + 'trm'=>'application/x-msterminal', + 'tsd'=>'application/timestamped-data', 'tsv'=>'text/tab-separated-values', + 'ttc'=>'application/x-font-ttf', + 'ttf'=>'application/x-font-ttf', + 'ttl'=>'text/turtle', + 'twd'=>'application/vnd.simtech-mindmapper', + 'twds'=>'application/vnd.simtech-mindmapper', + 'txd'=>'application/vnd.genomatix.tuxedo', + 'txf'=>'application/vnd.mobius.txf', 'txt'=>'text/plain', - 'unv'=>'application/i-deas', + 'u32'=>'application/x-authorware-bin', + 'udeb'=>'application/x-debian-package', + 'ufd'=>'application/vnd.ufdl', + 'ufdl'=>'application/vnd.ufdl', + 'ulx'=>'application/x-glulx', + 'umj'=>'application/vnd.umajin', + 'unityweb'=>'application/vnd.unity', + 'uoml'=>'application/vnd.uoml+xml', + 'uri'=>'text/uri-list', + 'uris'=>'text/uri-list', + 'urls'=>'text/uri-list', 'ustar'=>'application/x-ustar', + 'utz'=>'application/vnd.uiq.theme', + 'uu'=>'text/x-uuencode', + 'uva'=>'audio/vnd.dece.audio', + 'uvd'=>'application/vnd.dece.data', + 'uvf'=>'application/vnd.dece.data', + 'uvg'=>'image/vnd.dece.graphic', + 'uvh'=>'video/vnd.dece.hd', + 'uvi'=>'image/vnd.dece.graphic', + 'uvm'=>'video/vnd.dece.mobile', + 'uvp'=>'video/vnd.dece.pd', + 'uvs'=>'video/vnd.dece.sd', + 'uvt'=>'application/vnd.dece.ttml+xml', + 'uvu'=>'video/vnd.uvvu.mp4', + 'uvv'=>'video/vnd.dece.video', + 'uvva'=>'audio/vnd.dece.audio', + 'uvvd'=>'application/vnd.dece.data', + 'uvvf'=>'application/vnd.dece.data', + 'uvvg'=>'image/vnd.dece.graphic', + 'uvvh'=>'video/vnd.dece.hd', + 'uvvi'=>'image/vnd.dece.graphic', + 'uvvm'=>'video/vnd.dece.mobile', + 'uvvp'=>'video/vnd.dece.pd', + 'uvvs'=>'video/vnd.dece.sd', + 'uvvt'=>'application/vnd.dece.ttml+xml', + 'uvvu'=>'video/vnd.uvvu.mp4', + 'uvvv'=>'video/vnd.dece.video', + 'uvvx'=>'application/vnd.dece.unspecified', + 'uvvz'=>'application/vnd.dece.zip', + 'uvx'=>'application/vnd.dece.unspecified', + 'uvz'=>'application/vnd.dece.zip', + 'vcard'=>'text/vcard', 'vcd'=>'application/x-cdlink', - 'vda'=>'application/vda', + 'vcf'=>'text/x-vcard', + 'vcg'=>'application/vnd.groove-vcard', + 'vcs'=>'text/x-vcalendar', + 'vcx'=>'application/vnd.vcx', + 'vis'=>'application/vnd.visionary', 'viv'=>'video/vnd.vivo', - 'vivo'=>'video/vnd.vivo', + 'vob'=>'video/x-ms-vob', + 'vor'=>'application/vnd.stardivision.writer', + 'vox'=>'application/x-authorware-bin', 'vrml'=>'model/vrml', + 'vsd'=>'application/vnd.visio', + 'vsf'=>'application/vnd.vsf', + 'vss'=>'application/vnd.visio', + 'vst'=>'application/vnd.visio', + 'vsw'=>'application/vnd.visio', + 'vtu'=>'model/vnd.vtu', + 'vxml'=>'application/voicexml+xml', + 'w3d'=>'application/x-director', + 'wad'=>'application/x-doom', 'wav'=>'audio/x-wav', + 'wax'=>'audio/x-ms-wax', + 'wbmp'=>'image/vnd.wap.wbmp', + 'wbs'=>'application/vnd.criticaltools.wbs+xml', + 'wbxml'=>'application/vnd.wap.wbxml', + 'wcm'=>'application/vnd.ms-works', + 'wdb'=>'application/vnd.ms-works', + 'wdp'=>'image/vnd.ms-photo', + 'weba'=>'audio/webm', + 'webm'=>'video/webm', + 'webp'=>'image/webp', + 'wg'=>'application/vnd.pmi.widget', + 'wgt'=>'application/widget', + 'wks'=>'application/vnd.ms-works', + 'wm'=>'video/x-ms-wm', + 'wma'=>'audio/x-ms-wma', + 'wmd'=>'application/x-ms-wmd', + 'wmf'=>'application/x-msmetafile', + 'wml'=>'text/vnd.wap.wml', + 'wmlc'=>'application/vnd.wap.wmlc', + 'wmls'=>'text/vnd.wap.wmlscript', + 'wmlsc'=>'application/vnd.wap.wmlscriptc', + 'wmv'=>'video/x-ms-wmv', + 'wmx'=>'video/x-ms-wmx', + 'wmz'=>'application/x-msmetafile', + 'woff'=>'application/font-woff', + 'wpd'=>'application/vnd.wordperfect', + 'wpl'=>'application/vnd.ms-wpl', + 'wps'=>'application/vnd.ms-works', + 'wqd'=>'application/vnd.wqd', + 'wri'=>'application/x-mswrite', 'wrl'=>'model/vrml', + 'wsdl'=>'application/wsdl+xml', + 'wspolicy'=>'application/wspolicy+xml', + 'wtb'=>'application/vnd.webturbo', + 'wvx'=>'video/x-ms-wvx', + 'x32'=>'application/x-authorware-bin', + 'x3d'=>'model/x3d+xml', + 'x3db'=>'model/x3d+binary', + 'x3dbz'=>'model/x3d+binary', + 'x3dv'=>'model/x3d+vrml', + 'x3dvz'=>'model/x3d+vrml', + 'x3dz'=>'model/x3d+xml', + 'xaml'=>'application/xaml+xml', + 'xap'=>'application/x-silverlight-app', + 'xar'=>'application/vnd.xara', + 'xbap'=>'application/x-ms-xbap', + 'xbd'=>'application/vnd.fujixerox.docuworks.binder', 'xbm'=>'image/x-xbitmap', + 'xdf'=>'application/xcap-diff+xml', + 'xdm'=>'application/vnd.syncml.dm+xml', + 'xdp'=>'application/vnd.adobe.xdp+xml', + 'xdssc'=>'application/dssc+xml', + 'xdw'=>'application/vnd.fujixerox.docuworks', + 'xenc'=>'application/xenc+xml', + 'xer'=>'application/patch-ops-error+xml', + 'xfdf'=>'application/vnd.adobe.xfdf', + 'xfdl'=>'application/vnd.xfdl', + 'xht'=>'application/xhtml+xml', + 'xhtml'=>'application/xhtml+xml', + 'xhvml'=>'application/xv+xml', + 'xif'=>'image/vnd.xiff', + 'xla'=>'application/vnd.ms-excel', + 'xlam'=>'application/vnd.ms-excel.addin.macroenabled.12', 'xlc'=>'application/vnd.ms-excel', - 'xll'=>'application/vnd.ms-excel', + 'xlf'=>'application/x-xliff+xml', 'xlm'=>'application/vnd.ms-excel', 'xls'=>'application/vnd.ms-excel', + 'xlsb'=>'application/vnd.ms-excel.sheet.binary.macroenabled.12', + 'xlsm'=>'application/vnd.ms-excel.sheet.macroenabled.12', + 'xlsx'=>'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xlt'=>'application/vnd.ms-excel', + 'xltm'=>'application/vnd.ms-excel.template.macroenabled.12', + 'xltx'=>'application/vnd.openxmlformats-officedocument.spreadsheetml.template', 'xlw'=>'application/vnd.ms-excel', + 'xm'=>'audio/xm', 'xml'=>'application/xml', + 'xo'=>'application/vnd.olpc-sugar', + 'xop'=>'application/xop+xml', + 'xpi'=>'application/x-xpinstall', + 'xpl'=>'application/xproc+xml', 'xpm'=>'image/x-xpixmap', + 'xpr'=>'application/vnd.is-xpr', + 'xps'=>'application/vnd.ms-xpsdocument', + 'xpw'=>'application/vnd.intercon.formnet', + 'xpx'=>'application/vnd.intercon.formnet', + 'xsl'=>'application/xml', + 'xslt'=>'application/xslt+xml', + 'xsm'=>'application/vnd.syncml+xml', 'xspf'=>'application/xspf+xml', + 'xul'=>'application/vnd.mozilla.xul+xml', + 'xvm'=>'application/xv+xml', + 'xvml'=>'application/xv+xml', 'xwd'=>'image/x-xwindowdump', - 'xyz'=>'chemical/x-pdb', + 'xyz'=>'chemical/x-xyz', + 'xz'=>'application/x-xz', + 'yang'=>'application/yang', + 'yin'=>'application/yin+xml', + 'z1'=>'application/x-zmachine', + 'z2'=>'application/x-zmachine', + 'z3'=>'application/x-zmachine', + 'z4'=>'application/x-zmachine', + 'z5'=>'application/x-zmachine', + 'z6'=>'application/x-zmachine', + 'z7'=>'application/x-zmachine', + 'z8'=>'application/x-zmachine', + 'zaz'=>'application/vnd.zzazz.deck+xml', 'zip'=>'application/zip', + 'zir'=>'application/vnd.zul', + 'zirz'=>'application/vnd.zul', + 'zmm'=>'application/vnd.handheld-entertainment+xml', + 123=>'application/vnd.lotus-1-2-3', ); diff --git a/framework/validators/CEmailValidator.php b/framework/validators/CEmailValidator.php index 62df883..b1b98bd 100644 --- a/framework/validators/CEmailValidator.php +++ b/framework/validators/CEmailValidator.php @@ -68,8 +68,7 @@ class CEmailValidator extends CValidator protected function validateAttribute($object,$attribute) { $value=$object->$attribute; - if($this->allowEmpty && $this->isEmpty($value)) - return; + if(!$this->validateValue($value)) { $message=$this->message!==null?$this->message:Yii::t('yii','{attribute} is not a valid email address.'); @@ -87,6 +86,9 @@ protected function validateAttribute($object,$attribute) */ public function validateValue($value) { + if($this->allowEmpty && $this->isEmpty($value)) + return true; + if(is_string($value) && $this->validateIDN) $value=$this->encodeIDN($value); // make sure string length is limited to avoid DOS attacks @@ -175,9 +177,7 @@ protected function checkMxPorts($domain) */ protected function mxSort($a, $b) { - if($a['pri']==$b['pri']) - return 0; - return ($a['pri']<$b['pri'])?-1:1; + return $a['pri']-$b['pri']; } /** diff --git a/framework/validators/CFileValidator.php b/framework/validators/CFileValidator.php index 950f8d3..bc30d4f 100644 --- a/framework/validators/CFileValidator.php +++ b/framework/validators/CFileValidator.php @@ -64,6 +64,8 @@ class CFileValidator extends CValidator /** * @var boolean whether the attribute requires a file to be uploaded or not. * Defaults to false, meaning a file is required to be uploaded. + * When no file is uploaded, the owner attribute is set to null to prevent + * setting arbitrary values. */ public $allowEmpty=false; /** @@ -130,12 +132,6 @@ class CFileValidator extends CValidator * limit. */ public $tooMany; - /** - * @var boolean whether attributes listed with this validator should be considered safe for massive assignment. - * For this validator it defaults to false. - * @since 1.1.12 - */ - public $safe=false; /** * Set the attribute and then validates using {@link validateFile}. @@ -145,9 +141,9 @@ class CFileValidator extends CValidator */ protected function validateAttribute($object, $attribute) { + $files=$object->$attribute; if($this->maxFiles > 1) { - $files=$object->$attribute; if(!is_array($files) || !isset($files[0]) || !$files[0] instanceof CUploadedFile) $files = CUploadedFile::getInstances($object, $attribute); if(array()===$files) @@ -163,7 +159,19 @@ protected function validateAttribute($object, $attribute) } else { - $file = $object->$attribute; + if (is_array($files)) + { + if (count($files) > 1) + { + $message=$this->tooMany!==null?$this->tooMany : Yii::t('yii', '{attribute} cannot accept more than {limit} files.'); + $this->addError($object, $attribute, $message, array('{attribute}'=>$attribute, '{limit}'=>$this->maxFiles)); + return; + } + else + $file = empty($files) ? null : reset($files); + } + else + $file = $files; if(!$file instanceof CUploadedFile) { $file = CUploadedFile::getInstance($object, $attribute); @@ -183,26 +191,34 @@ protected function validateAttribute($object, $attribute) */ protected function validateFile($object, $attribute, $file) { - if(null===$file || ($error=$file->getError())==UPLOAD_ERR_NO_FILE) - return $this->emptyAttribute($object, $attribute); - elseif($error==UPLOAD_ERR_INI_SIZE || $error==UPLOAD_ERR_FORM_SIZE || $this->maxSize!==null && $file->getSize()>$this->maxSize) + $error=(null===$file ? null : $file->getError()); + if($error==UPLOAD_ERR_INI_SIZE || $error==UPLOAD_ERR_FORM_SIZE || $this->maxSize!==null && $file->getSize()>$this->maxSize) { $message=$this->tooLarge!==null?$this->tooLarge : Yii::t('yii','The file "{file}" is too large. Its size cannot exceed {limit} bytes.'); - $this->addError($object,$attribute,$message,array('{file}'=>$file->getName(), '{limit}'=>$this->getSizeLimit())); + $this->addError($object,$attribute,$message,array('{file}'=>CHtml::encode($file->getName()), '{limit}'=>$this->getSizeLimit())); + if($error!==UPLOAD_ERR_OK) + return; + } + elseif($error!==UPLOAD_ERR_OK) + { + if($error==UPLOAD_ERR_NO_FILE) + return $this->emptyAttribute($object, $attribute); + elseif($error==UPLOAD_ERR_PARTIAL) + throw new CException(Yii::t('yii','The file "{file}" was only partially uploaded.',array('{file}'=>CHtml::encode($file->getName())))); + elseif($error==UPLOAD_ERR_NO_TMP_DIR) + throw new CException(Yii::t('yii','Missing the temporary folder to store the uploaded file "{file}".',array('{file}'=>CHtml::encode($file->getName())))); + elseif($error==UPLOAD_ERR_CANT_WRITE) + throw new CException(Yii::t('yii','Failed to write the uploaded file "{file}" to disk.',array('{file}'=>CHtml::encode($file->getName())))); + elseif(defined('UPLOAD_ERR_EXTENSION') && $error==UPLOAD_ERR_EXTENSION) // available for PHP 5.2.0 or above + throw new CException(Yii::t('yii','A PHP extension stopped the file upload.')); + else + throw new CException(Yii::t('yii','Unable to upload the file "{file}" because of an unrecognized error.',array('{file}'=>CHtml::encode($file->getName())))); } - elseif($error==UPLOAD_ERR_PARTIAL) - throw new CException(Yii::t('yii','The file "{file}" was only partially uploaded.',array('{file}'=>$file->getName()))); - elseif($error==UPLOAD_ERR_NO_TMP_DIR) - throw new CException(Yii::t('yii','Missing the temporary folder to store the uploaded file "{file}".',array('{file}'=>$file->getName()))); - elseif($error==UPLOAD_ERR_CANT_WRITE) - throw new CException(Yii::t('yii','Failed to write the uploaded file "{file}" to disk.',array('{file}'=>$file->getName()))); - elseif(defined('UPLOAD_ERR_EXTENSION') && $error==UPLOAD_ERR_EXTENSION) // available for PHP 5.2.0 or above - throw new CException(Yii::t('yii','A PHP extension stopped the file upload.')); if($this->minSize!==null && $file->getSize()<$this->minSize) { $message=$this->tooSmall!==null?$this->tooSmall : Yii::t('yii','The file "{file}" is too small. Its size cannot be smaller than {limit} bytes.'); - $this->addError($object,$attribute,$message,array('{file}'=>$file->getName(), '{limit}'=>$this->minSize)); + $this->addError($object,$attribute,$message,array('{file}'=>CHtml::encode($file->getName()), '{limit}'=>$this->minSize)); } if($this->types!==null) @@ -214,11 +230,11 @@ protected function validateFile($object, $attribute, $file) if(!in_array(strtolower($file->getExtensionName()),$types)) { $message=$this->wrongType!==null?$this->wrongType : Yii::t('yii','The file "{file}" cannot be uploaded. Only files with these extensions are allowed: {extensions}.'); - $this->addError($object,$attribute,$message,array('{file}'=>$file->getName(), '{extensions}'=>implode(', ',$types))); + $this->addError($object,$attribute,$message,array('{file}'=>CHtml::encode($file->getName()), '{extensions}'=>implode(', ',$types))); } } - if($this->mimeTypes!==null) + if($this->mimeTypes!==null && !empty($file->tempName)) { if(function_exists('finfo_open')) { @@ -239,18 +255,22 @@ protected function validateFile($object, $attribute, $file) if($mimeType===false || !in_array(strtolower($mimeType),$mimeTypes)) { $message=$this->wrongMimeType!==null?$this->wrongMimeType : Yii::t('yii','The file "{file}" cannot be uploaded. Only files of these MIME-types are allowed: {mimeTypes}.'); - $this->addError($object,$attribute,$message,array('{file}'=>$file->getName(), '{mimeTypes}'=>implode(', ',$mimeTypes))); + $this->addError($object,$attribute,$message,array('{file}'=>CHtml::encode($file->getName()), '{mimeTypes}'=>implode(', ',$mimeTypes))); } } } /** * Raises an error to inform end user about blank attribute. + * Sets the owner attribute to null to prevent setting arbitrary values. * @param CModel $object the object being validated * @param string $attribute the attribute being validated */ protected function emptyAttribute($object, $attribute) { + if($this->safe) + $object->$attribute=null; + if(!$this->allowEmpty) { $message=$this->message!==null?$this->message : Yii::t('yii','{attribute} cannot be blank.'); @@ -302,4 +322,4 @@ public function sizeToBytes($sizeStr) default: return (int)$sizeStr; // do nothing } } -} \ No newline at end of file +} diff --git a/framework/validators/CRangeValidator.php b/framework/validators/CRangeValidator.php index e9123d4..aa72ad1 100644 --- a/framework/validators/CRangeValidator.php +++ b/framework/validators/CRangeValidator.php @@ -59,7 +59,7 @@ protected function validateAttribute($object,$attribute) { foreach($this->range as $r) { - $result=(strcmp($r,$value)===0); + $result = $r === '' || $value === '' ? $r === $value : $r == $value; if($result) break; } diff --git a/framework/validators/CValidator.php b/framework/validators/CValidator.php index 84ae643..edcd7ef 100644 --- a/framework/validators/CValidator.php +++ b/framework/validators/CValidator.php @@ -13,18 +13,6 @@ * * Child classes must implement the {@link validateAttribute} method. * - * The following properties are defined in CValidator: - * - * * When using {@link createValidator} to create a validator, the following aliases * are recognized as the corresponding built-in validator classes: * * The {@link type} property can also be a class name or a path alias to the class. In this case, * the input is generated using a widget of the specified class. Note, the widget must @@ -68,7 +75,14 @@ class CFormInputElement extends CFormElement 'email'=>'activeEmailField', 'number'=>'activeNumberField', 'range'=>'activeRangeField', - 'date'=>'activeDateField' + 'date'=>'activeDateField', + 'time'=>'activeTimeField', + 'datetime'=>'activeDateTimeField', + 'datetimelocal'=>'activeDateTimeLocalField', + 'week'=>'activeWeekField', + 'color'=>'activeColorField', + 'tel'=>'activeTelField', + 'search'=>'activeSearchField', ); /** @@ -197,9 +211,7 @@ public function renderLabel() ); if(!empty($this->attributes['id'])) - { - $options['for'] = $this->attributes['id']; - } + $options['for']=$this->attributes['id']; return CHtml::activeLabel($this->getParent()->getModel(), $this->name, $options); } diff --git a/framework/web/helpers/CHtml.php b/framework/web/helpers/CHtml.php index 3758c5c..c8e5585 100644 --- a/framework/web/helpers/CHtml.php +++ b/framework/web/helpers/CHtml.php @@ -12,6 +12,11 @@ /** * CHtml is a static class that provides a collection of helper methods for creating HTML views. * + * Nearly all of the methods in this class allow setting additional html attributes for the html + * tags they generate. You can specify for example. 'class', 'style' or 'id' for an html element. + * For example when using array('class' => 'my-class', 'target' => '_blank') as htmlOptions + * it will result in the html attributes rendered like this: class="my-class" target="_blank". + * * @author Qiang Xue * @package system.web.helpers * @since 1.0 @@ -335,6 +340,14 @@ public static function form($action='',$method='post',$htmlOptions=array()) public static function beginForm($action='',$method='post',$htmlOptions=array()) { $htmlOptions['action']=$url=self::normalizeUrl($action); + if(strcasecmp($method,'get')!==0 && strcasecmp($method,'post')!==0) + { + $customMethod=$method; + $method='post'; + } + else + $customMethod=false; + $htmlOptions['method']=$method; $form=self::tag('form',$htmlOptions,false,false); $hiddens=array(); @@ -351,8 +364,10 @@ public static function beginForm($action='',$method='post',$htmlOptions=array()) $request=Yii::app()->request; if($request->enableCsrfValidation && !strcasecmp($method,'post')) $hiddens[]=self::hiddenField($request->csrfTokenName,$request->getCsrfToken(),array('id'=>false)); + if($customMethod!==false) + $hiddens[]=self::hiddenField('_method',$customMethod); if($hiddens!==array()) - $form.="\n".self::tag('div',array('style'=>'display:none'),implode("\n",$hiddens)); + $form.="\n".implode("\n",$hiddens); return $form; } @@ -580,6 +595,23 @@ public static function label($label,$for,$htmlOptions=array()) return self::tag('label',$htmlOptions,$label); } + /** + * Generates a color picker field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.16 + */ + public static function colorField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('color',$name,$value,$htmlOptions); + } + /** * Generates a text field input. * @param string $name the input name @@ -596,6 +628,22 @@ public static function textField($name,$value='',$htmlOptions=array()) return self::inputField('text',$name,$value,$htmlOptions); } + /** + * Generates a search field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.16 + */ + public static function searchField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('search',$name,$value,$htmlOptions); + } /** * Generates a number field input. * @param string $name the input name @@ -664,6 +712,57 @@ public static function timeField($name,$value='',$htmlOptions=array()) return self::inputField('time',$name,$value,$htmlOptions); } + /** + * Generates a datetime field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.16 + */ + public static function dateTimeField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('datetime',$name,$value,$htmlOptions); + } + + /** + * Generates a local datetime field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.16 + */ + public static function dateTimeLocalField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('datetime-local',$name,$value,$htmlOptions); + } + + /** + * Generates a week field input. + * @param string $name the input name + * @param string $value the input value + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see inputField + * @since 1.1.16 + */ + public static function weekField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('week',$name,$value,$htmlOptions); + } + /** * Generates an email field input. * @param string $name the input name @@ -1024,7 +1123,7 @@ public static function listBox($name,$select,$data,$htmlOptions=array()) public static function checkBoxList($name,$select,$data,$htmlOptions=array()) { $template=isset($htmlOptions['template'])?$htmlOptions['template']:'{input} {label}'; - $separator=isset($htmlOptions['separator'])?$htmlOptions['separator']:"
    \n"; + $separator=isset($htmlOptions['separator'])?$htmlOptions['separator']:self::tag('br'); $container=isset($htmlOptions['container'])?$htmlOptions['container']:'span'; unset($htmlOptions['template'],$htmlOptions['separator'],$htmlOptions['container']); @@ -1140,7 +1239,7 @@ public static function checkBoxList($name,$select,$data,$htmlOptions=array()) public static function radioButtonList($name,$select,$data,$htmlOptions=array()) { $template=isset($htmlOptions['template'])?$htmlOptions['template']:'{input} {label}'; - $separator=isset($htmlOptions['separator'])?$htmlOptions['separator']:"
    \n"; + $separator=isset($htmlOptions['separator'])?$htmlOptions['separator']:self::tag('br'); $container=isset($htmlOptions['container'])?$htmlOptions['container']:'span'; unset($htmlOptions['template'],$htmlOptions['separator'],$htmlOptions['container']); @@ -1151,7 +1250,7 @@ public static function radioButtonList($name,$select,$data,$htmlOptions=array()) { if(!is_array($htmlOptions['empty'])) $htmlOptions['empty']=array(''=>$htmlOptions['empty']); - $data=array_merge($htmlOptions['empty'],$data); + $data=CMap::mergeArray($htmlOptions['empty'],$data); unset($htmlOptions['empty']); } @@ -1574,6 +1673,86 @@ public static function activeTimeField($model,$attribute,$htmlOptions=array()) return self::activeInputField('time',$model,$attribute,$htmlOptions); } + /** + * Generates a datetime field input for a model attribute. + * If the attribute has input error, the input field's CSS class will + * be appended with {@link errorCss}. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see activeInputField + * @since 1.1.16 + */ + public static function activeDateTimeField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('datetime',$model,$attribute,$htmlOptions); + } + + /** + * Generates a datetime-local field input for a model attribute. + * If the attribute has input error, the input field's CSS class will + * be appended with {@link errorCss}. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see activeInputField + * @since 1.1.16 + */ + public static function activeDateTimeLocalField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('datetime-local',$model,$attribute,$htmlOptions); + } + + /** + * Generates a week field input for a model attribute. + * If the attribute has input error, the input field's CSS class will + * be appended with {@link errorCss}. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see activeInputField + * @since 1.1.16 + */ + public static function activeWeekField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('week',$model,$attribute,$htmlOptions); + } + + /** + * Generates a color picker field input for a model attribute. + * If the attribute has input error, the input field's CSS class will + * be appended with {@link errorCss}. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. Besides normal HTML attributes, a few special + * attributes are also recognized (see {@link clientChange} and {@link tag} for more details.) + * @return string the generated input field + * @see clientChange + * @see activeInputField + * @since 1.1.16 + */ + public static function activeColorField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('color',$model,$attribute,$htmlOptions); + } + /** * Generates a telephone field input for a model attribute. * If the attribute has input error, the input field's CSS class will @@ -1891,6 +2070,12 @@ public static function activeListBox($model,$attribute,$data,$htmlOptions=array( * or is false, the 'check all' checkbox will be displayed at the beginning of * the checkbox list. *
  17. encode: boolean, specifies whether to encode HTML-encode tag attributes and values. Defaults to true.
  18. + *
  19. labelOptions: array, specifies the additional HTML attributes to be rendered + * for every label tag in the list.
  20. + *
  21. container: string, specifies the checkboxes enclosing tag. Defaults to 'span'. + * If the value is an empty string, no enclosing tag will be generated
  22. + *
  23. baseID: string, specifies the base ID prefix to be used for checkboxes in the list. + * This option is available since version 1.1.13.
  24. * * Since 1.1.7, a special option named 'uncheckValue' is available. It can be used to set the value * that will be returned when the checkbox is not checked. By default, this value is ''. @@ -1936,9 +2121,21 @@ public static function activeCheckBoxList($model,$attribute,$data,$htmlOptions=a *
      *
    • template: string, specifies how each radio button is rendered. Defaults * to "{input} {label}", where "{input}" will be replaced by the generated - * radio button input tag while "{label}" will be replaced by the corresponding radio button label.
    • + * radio button input tag while "{label}" will be replaced by the corresponding radio button label, + * {beginLabel} will be replaced by <label> with labelOptions, {labelTitle} will be replaced + * by the corresponding radio button label title and {endLabel} will be replaced by </label> *
    • separator: string, specifies the string that separates the generated radio buttons. Defaults to new line (
      ).
    • *
    • encode: boolean, specifies whether to encode HTML-encode tag attributes and values. Defaults to true.
    • + *
    • labelOptions: array, specifies the additional HTML attributes to be rendered + * for every label tag in the list.
    • + *
    • container: string, specifies the radio buttons enclosing tag. Defaults to 'span'. + * If the value is an empty string, no enclosing tag will be generated
    • + *
    • baseID: string, specifies the base ID prefix to be used for radio buttons in the list. + * This option is available since version 1.1.13.
    • + *
    • empty: string, specifies the text corresponding to empty selection. Its value is empty. + * The 'empty' option can also be an array of value-label pairs. + * Each pair will be used to render a radio button at the beginning. Note, the text label will NOT be HTML-encoded. + * This option is available since version 1.1.14.
    • *
    * Since version 1.1.7, a special option named 'uncheckValue' is available that can be used to specify the value * returned when the radio button is not checked. By default, this value is ''. Internally, a hidden field is @@ -2200,7 +2397,7 @@ public static function setModelNameConverter($converter) else throw new CException(Yii::t('yii','The $converter argument must be a valid callback or null.')); } - + /** * Generates input field name for a model attribute. * Unlike {@link resolveName}, this method does NOT modify the attribute name. @@ -2229,7 +2426,9 @@ public static function activeName($model,$attribute) protected static function activeInputField($type,$model,$attribute,$htmlOptions) { $htmlOptions['type']=$type; - if($type==='text' || $type==='password') + if($type==='text'||$type==='password'||$type==='color'||$type==='date'||$type==='datetime'|| + $type==='datetime-local'||$type==='email'||$type==='month'||$type==='number'||$type==='range'|| + $type==='search'||$type==='tel'||$type==='time'||$type==='url'||$type==='week') { if(!isset($htmlOptions['maxlength'])) { @@ -2473,7 +2672,7 @@ public static function resolveNameID($model,&$attribute,&$htmlOptions) public static function resolveName($model,&$attribute) { $modelName=self::modelName($model); - + if(($pos=strpos($attribute,'['))!==false) { if($pos!==0) // e.g. name[a][b] @@ -2555,9 +2754,9 @@ protected static function addErrorCss(&$htmlOptions) public static function renderAttributes($htmlOptions) { static $specialAttributes=array( - 'async'=>1, 'autofocus'=>1, 'autoplay'=>1, + 'async'=>1, 'checked'=>1, 'controls'=>1, 'declare'=>1, @@ -2567,6 +2766,7 @@ public static function renderAttributes($htmlOptions) 'formnovalidate'=>1, 'hidden'=>1, 'ismap'=>1, + 'itemscope'=>1, 'loop'=>1, 'multiple'=>1, 'muted'=>1, @@ -2599,7 +2799,10 @@ public static function renderAttributes($htmlOptions) { if(isset($specialAttributes[$name])) { - if($value) + if($value===false && $name==='async') { + $html .= ' ' . $name.'="false"'; + } + elseif($value) { $html .= ' ' . $name; if(self::$renderSpecialAttributesValue) diff --git a/framework/web/helpers/CJSON.php b/framework/web/helpers/CJSON.php index aa17b02..1d8f3d6 100644 --- a/framework/web/helpers/CJSON.php +++ b/framework/web/helpers/CJSON.php @@ -251,7 +251,15 @@ public static function encode($var) return '[' . join(',', array_map(array('CJSON', 'encode'), $var)) . ']'; case 'object': - if ($var instanceof Traversable) + // Check for the JsonSerializable interface available in PHP5.4 + // Note that instanceof returns false in case it doesnt know the interface. + if (interface_exists('JsonSerializable', false) && $var instanceof JsonSerializable) + { + // We use the function defined in the interface instead of json_encode. + // This way even for PHP < 5.4 one could define the interface and use it. + return self::encode($var->jsonSerialize()); + } + elseif ($var instanceof Traversable) { $vars = array(); foreach ($var as $k=>$v) diff --git a/framework/web/js/source/jquery.autocomplete.js b/framework/web/js/source/jquery.autocomplete.js index 324b104..a42a0f9 100644 --- a/framework/web/js/source/jquery.autocomplete.js +++ b/framework/web/js/source/jquery.autocomplete.js @@ -4,6 +4,7 @@ * Modified for Yii Framework: * - Renamed "autocomplete" to "legacyautocomplete". * - Fixed IE8 problems (mario.ffranco). + * - Fixed compatibility for jQuery 1.9+ (.browser is deprecated) * * Copyright (c) 2009 Jörn Zaefferer * @@ -84,7 +85,7 @@ $.Autocompleter = function(input, options) { var blockSubmit; // prevent form submit in opera when selecting with return key - $.browser.opera && $(input.form).bind("submit.autocomplete", function() { + (navigator.userAgent.match(/OPERA|OPR\//i) !== null) && $(input.form).bind("submit.autocomplete", function() { if (blockSubmit) { blockSubmit = false; return false; @@ -92,7 +93,7 @@ $.Autocompleter = function(input, options) { }); // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all - $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) { + $input.bind(((navigator.userAgent.match(/OPERA|OPR\//i) !== null) ? "keypress" : "keydown") + ".autocomplete", function(event) { // a keypress means the input has focus // avoids issue where input had focus before the autocomplete was applied hasFocus = 1; @@ -738,7 +739,7 @@ $.Autocompleter.Select = function (options, input, select, config) { overflow: 'auto' }); - if($.browser.msie && typeof document.body.style.maxHeight === "undefined") { + if(navigator.userAgent.match(/MSIE/i) !== null && typeof document.body.style.maxHeight === "undefined") { var listHeight = 0; listItems.each(function() { listHeight += this.offsetHeight; diff --git a/framework/web/js/source/jquery.bgiframe.js b/framework/web/js/source/jquery.bgiframe.js index 5cd38bb..f8be0b5 100644 --- a/framework/web/js/source/jquery.bgiframe.js +++ b/framework/web/js/source/jquery.bgiframe.js @@ -1,39 +1,69 @@ -/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) +/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh) * Licensed under the MIT License (LICENSE.txt). * - * Version 2.1.2 + * Version 3.0.1 + * + * Requires jQuery >= 1.2.6 */ -(function($){ - -$.fn.bgiframe = ($.browser.msie && /msie 6\.0/i.test(navigator.userAgent) ? function(s) { - s = $.extend({ - top : 'auto', // auto == .currentStyle.borderTopWidth - left : 'auto', // auto == .currentStyle.borderLeftWidth - width : 'auto', // auto == offsetWidth - height : 'auto', // auto == offsetHeight - opacity : true, - src : 'javascript:false;' - }, s); - var html = '':""),e._keyEvent=!1,B},_generateMonthYearHeader:function(e,t,n,r,i,s,o,u){var a=this._get(e,"changeMonth"),f=this._get(e,"changeYear"),l=this._get(e,"showMonthAfterYear"),c='
    ',h="";if(s||!a)h+=''+o[t]+"";else{var p=r&&r.getFullYear()==n,d=i&&i.getFullYear()==n;h+='"}l||(c+=h+(s||!a||!f?" ":""));if(!e.yearshtml){e.yearshtml="";if(s||!f)c+=''+n+"";else{var m=this._get(e,"yearRange").split(":"),g=(new Date).getFullYear(),y=function(e){var t=e.match(/c[+-].*/)?n+parseInt(e.substring(1),10):e.match(/[+-].*/)?g+parseInt(e,10):parseInt(e,10);return isNaN(t)?g:t},b=y(m[0]),w=Math.max(b,y(m[1]||""));b=r?Math.max(b,r.getFullYear()):b,w=i?Math.min(w,i.getFullYear()):w,e.yearshtml+='",c+=e.yearshtml,e.yearshtml=null}}return c+=this._get(e,"yearSuffix"),l&&(c+=(s||!a||!f?" ":"")+h),c+="
    ",c},_adjustInstDate:function(e,t,n){var r=e.drawYear+(n=="Y"?t:0),i=e.drawMonth+(n=="M"?t:0),s=Math.min(e.selectedDay,this._getDaysInMonth(r,i))+(n=="D"?t:0),o=this._restrictMinMax(e,this._daylightSavingAdjust(new Date(r,i,s)));e.selectedDay=o.getDate(),e.drawMonth=e.selectedMonth=o.getMonth(),e.drawYear=e.selectedYear=o.getFullYear(),(n=="M"||n=="Y")&&this._notifyChange(e)},_restrictMinMax:function(e,t){var n=this._getMinMaxDate(e,"min"),r=this._getMinMaxDate(e,"max"),i=n&&tr?r:i,i},_notifyChange:function(e){var t=this._get(e,"onChangeMonthYear");t&&t.apply(e.input?e.input[0]:null,[e.selectedYear,e.selectedMonth+1,e])},_getNumberOfMonths:function(e){var t=this._get(e,"numberOfMonths");return t==null?[1,1]:typeof t=="number"?[1,t]:t},_getMinMaxDate:function(e,t){return this._determineDate(e,this._get(e,t+"Date"),null)},_getDaysInMonth:function(e,t){return 32-this._daylightSavingAdjust(new Date(e,t,32)).getDate()},_getFirstDayOfMonth:function(e,t){return(new Date(e,t,1)).getDay()},_canAdjustMonth:function(e,t,n,r){var i=this._getNumberOfMonths(e),s=this._daylightSavingAdjust(new Date(n,r+(t<0?t:i[0]*i[1]),1));return t<0&&s.setDate(this._getDaysInMonth(s.getFullYear(),s.getMonth())),this._isInRange(e,s)},_isInRange:function(e,t){var n=this._getMinMaxDate(e,"min"),r=this._getMinMaxDate(e,"max");return(!n||t.getTime()>=n.getTime())&&(!r||t.getTime()<=r.getTime())},_getFormatConfig:function(e){var t=this._get(e,"shortYearCutoff");return t=typeof t!="string"?t:(new Date).getFullYear()%100+parseInt(t,10),{shortYearCutoff:t,dayNamesShort:this._get(e,"dayNamesShort"),dayNames:this._get(e,"dayNames"),monthNamesShort:this._get(e,"monthNamesShort"),monthNames:this._get(e,"monthNames")}},_formatDate:function(e,t,n,r){t||(e.currentDay=e.selectedDay,e.currentMonth=e.selectedMonth,e.currentYear=e.selectedYear);var i=t?typeof t=="object"?t:this._daylightSavingAdjust(new Date(r,n,t)):this._daylightSavingAdjust(new Date(e.currentYear,e.currentMonth,e.currentDay));return this.formatDate(this._get(e,"dateFormat"),i,this._getFormatConfig(e))}}),$.fn.datepicker=function(e){if(!this.length)return this;$.datepicker.initialized||($(document).mousedown($.datepicker._checkExternalClick).find(document.body).append($.datepicker.dpDiv),$.datepicker.initialized=!0);var t=Array.prototype.slice.call(arguments,1);return typeof e!="string"||e!="isDisabled"&&e!="getDate"&&e!="widget"?e=="option"&&arguments.length==2&&typeof arguments[1]=="string"?$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this[0]].concat(t)):this.each(function(){typeof e=="string"?$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this].concat(t)):$.datepicker._attachDatepicker(this,e)}):$.datepicker["_"+e+"Datepicker"].apply($.datepicker,[this[0]].concat(t))},$.datepicker=new Datepicker,$.datepicker.initialized=!1,$.datepicker.uuid=(new Date).getTime(),$.datepicker.version="1.9.2",window["DP_jQuery_"+dpuuid]=$})(jQuery);(function(e,t){var n="ui-dialog ui-widget ui-widget-content ui-corner-all ",r={buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},i={maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0};e.widget("ui.dialog",{version:"1.9.2",options:{autoOpen:!0,buttons:{},closeOnEscape:!0,closeText:"close",dialogClass:"",draggable:!0,hide:null,height:"auto",maxHeight:!1,maxWidth:!1,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(t){var n=e(this).css(t).offset().top;n<0&&e(this).css("top",t.top-n)}},resizable:!0,show:null,stack:!0,title:"",width:300,zIndex:1e3},_create:function(){this.originalTitle=this.element.attr("title"),typeof this.originalTitle!="string"&&(this.originalTitle=""),this.oldPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.options.title=this.options.title||this.originalTitle;var t=this,r=this.options,i=r.title||" ",s,o,u,a,f;s=(this.uiDialog=e("
    ")).addClass(n+r.dialogClass).css({display:"none",outline:0,zIndex:r.zIndex}).attr("tabIndex",-1).keydown(function(n){r.closeOnEscape&&!n.isDefaultPrevented()&&n.keyCode&&n.keyCode===e.ui.keyCode.ESCAPE&&(t.close(n),n.preventDefault())}).mousedown(function(e){t.moveToTop(!1,e)}).appendTo("body"),this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(s),o=(this.uiDialogTitlebar=e("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").bind("mousedown",function(){s.focus()}).prependTo(s),u=e("").addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").click(function(e){e.preventDefault(),t.close(e)}).appendTo(o),(this.uiDialogTitlebarCloseText=e("")).addClass("ui-icon ui-icon-closethick").text(r.closeText).appendTo(u),a=e("").uniqueId().addClass("ui-dialog-title").html(i).prependTo(o),f=(this.uiDialogButtonPane=e("
    ")).addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),(this.uiButtonSet=e("
    ")).addClass("ui-dialog-buttonset").appendTo(f),s.attr({role:"dialog","aria-labelledby":a.attr("id")}),o.find("*").add(o).disableSelection(),this._hoverable(u),this._focusable(u),r.draggable&&e.fn.draggable&&this._makeDraggable(),r.resizable&&e.fn.resizable&&this._makeResizable(),this._createButtons(r.buttons),this._isOpen=!1,e.fn.bgiframe&&s.bgiframe(),this._on(s,{keydown:function(t){if(!r.modal||t.keyCode!==e.ui.keyCode.TAB)return;var n=e(":tabbable",s),i=n.filter(":first"),o=n.filter(":last");if(t.target===o[0]&&!t.shiftKey)return i.focus(1),!1;if(t.target===i[0]&&t.shiftKey)return o.focus(1),!1}})},_init:function(){this.options.autoOpen&&this.open()},_destroy:function(){var e,t=this.oldPosition;this.overlay&&this.overlay.destroy(),this.uiDialog.hide(),this.element.removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body"),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),e=t.parent.children().eq(t.index),e.length&&e[0]!==this.element[0]?e.before(this.element):t.parent.append(this.element)},widget:function(){return this.uiDialog},close:function(t){var n=this,r,i;if(!this._isOpen)return;if(!1===this._trigger("beforeClose",t))return;return this._isOpen=!1,this.overlay&&this.overlay.destroy(),this.options.hide?this._hide(this.uiDialog,this.options.hide,function(){n._trigger("close",t)}):(this.uiDialog.hide(),this._trigger("close",t)),e.ui.dialog.overlay.resize(),this.options.modal&&(r=0,e(".ui-dialog").each(function(){this!==n.uiDialog[0]&&(i=e(this).css("z-index"),isNaN(i)||(r=Math.max(r,i)))}),e.ui.dialog.maxZ=r),this},isOpen:function(){return this._isOpen},moveToTop:function(t,n){var r=this.options,i;return r.modal&&!t||!r.stack&&!r.modal?this._trigger("focus",n):(r.zIndex>e.ui.dialog.maxZ&&(e.ui.dialog.maxZ=r.zIndex),this.overlay&&(e.ui.dialog.maxZ+=1,e.ui.dialog.overlay.maxZ=e.ui.dialog.maxZ,this.overlay.$el.css("z-index",e.ui.dialog.overlay.maxZ)),i={scrollTop:this.element.scrollTop(),scrollLeft:this.element.scrollLeft()},e.ui.dialog.maxZ+=1,this.uiDialog.css("z-index",e.ui.dialog.maxZ),this.element.attr(i),this._trigger("focus",n),this)},open:function(){if(this._isOpen)return;var t,n=this.options,r=this.uiDialog;return this._size(),this._position(n.position),r.show(n.show),this.overlay=n.modal?new e.ui.dialog.overlay(this):null,this.moveToTop(!0),t=this.element.find(":tabbable"),t.length||(t=this.uiDialogButtonPane.find(":tabbable"),t.length||(t=r)),t.eq(0).focus(),this._isOpen=!0,this._trigger("open"),this},_createButtons:function(t){var n=this,r=!1;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),typeof t=="object"&&t!==null&&e.each(t,function(){return!(r=!0)}),r?(e.each(t,function(t,r){var i,s;r=e.isFunction(r)?{click:r,text:t}:r,r=e.extend({type:"button"},r),s=r.click,r.click=function(){s.apply(n.element[0],arguments)},i=e("",r).appendTo(n.uiButtonSet),e.fn.button&&i.button()}),this.uiDialog.addClass("ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog)):this.uiDialog.removeClass("ui-dialog-buttons")},_makeDraggable:function(){function r(e){return{position:e.position,offset:e.offset}}var t=this,n=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(n,i){e(this).addClass("ui-dialog-dragging"),t._trigger("dragStart",n,r(i))},drag:function(e,n){t._trigger("drag",e,r(n))},stop:function(i,s){n.position=[s.position.left-t.document.scrollLeft(),s.position.top-t.document.scrollTop()],e(this).removeClass("ui-dialog-dragging"),t._trigger("dragStop",i,r(s)),e.ui.dialog.overlay.resize()}})},_makeResizable:function(n){function u(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}n=n===t?this.options.resizable:n;var r=this,i=this.options,s=this.uiDialog.css("position"),o=typeof n=="string"?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:i.maxWidth,maxHeight:i.maxHeight,minWidth:i.minWidth,minHeight:this._minHeight(),handles:o,start:function(t,n){e(this).addClass("ui-dialog-resizing"),r._trigger("resizeStart",t,u(n))},resize:function(e,t){r._trigger("resize",e,u(t))},stop:function(t,n){e(this).removeClass("ui-dialog-resizing"),i.height=e(this).height(),i.width=e(this).width(),r._trigger("resizeStop",t,u(n)),e.ui.dialog.overlay.resize()}}).css("position",s).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var e=this.options;return e.height==="auto"?e.minHeight:Math.min(e.minHeight,e.height)},_position:function(t){var n=[],r=[0,0],i;if(t){if(typeof t=="string"||typeof t=="object"&&"0"in t)n=t.split?t.split(" "):[t[0],t[1]],n.length===1&&(n[1]=n[0]),e.each(["left","top"],function(e,t){+n[e]===n[e]&&(r[e]=n[e],n[e]=t)}),t={my:n[0]+(r[0]<0?r[0]:"+"+r[0])+" "+n[1]+(r[1]<0?r[1]:"+"+r[1]),at:n.join(" ")};t=e.extend({},e.ui.dialog.prototype.options.position,t)}else t=e.ui.dialog.prototype.options.position;i=this.uiDialog.is(":visible"),i||this.uiDialog.show(),this.uiDialog.position(t),i||this.uiDialog.hide()},_setOptions:function(t){var n=this,s={},o=!1;e.each(t,function(e,t){n._setOption(e,t),e in r&&(o=!0),e in i&&(s[e]=t)}),o&&this._size(),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",s)},_setOption:function(t,r){var i,s,o=this.uiDialog;switch(t){case"buttons":this._createButtons(r);break;case"closeText":this.uiDialogTitlebarCloseText.text(""+r);break;case"dialogClass":o.removeClass(this.options.dialogClass).addClass(n+r);break;case"disabled":r?o.addClass("ui-dialog-disabled"):o.removeClass("ui-dialog-disabled");break;case"draggable":i=o.is(":data(draggable)"),i&&!r&&o.draggable("destroy"),!i&&r&&this._makeDraggable();break;case"position":this._position(r);break;case"resizable":s=o.is(":data(resizable)"),s&&!r&&o.resizable("destroy"),s&&typeof r=="string"&&o.resizable("option","handles",r),!s&&r!==!1&&this._makeResizable(r);break;case"title":e(".ui-dialog-title",this.uiDialogTitlebar).html(""+(r||" "))}this._super(t,r)},_size:function(){var t,n,r,i=this.options,s=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0}),i.minWidth>i.width&&(i.width=i.minWidth),t=this.uiDialog.css({height:"auto",width:i.width}).outerHeight(),n=Math.max(0,i.minHeight-t),i.height==="auto"?e.support.minHeight?this.element.css({minHeight:n,height:"auto"}):(this.uiDialog.show(),r=this.element.css("height","auto").height(),s||this.uiDialog.hide(),this.element.height(Math.max(r,n))):this.element.height(Math.max(i.height-t,0)),this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}}),e.extend(e.ui.dialog,{uuid:0,maxZ:0,getTitleId:function(e){var t=e.attr("id");return t||(this.uuid+=1,t=this.uuid),"ui-dialog-title-"+t},overlay:function(t){this.$el=e.ui.dialog.overlay.create(t)}}),e.extend(e.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:e.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(e){return e+".dialog-overlay"}).join(" "),create:function(t){this.instances.length===0&&(setTimeout(function(){e.ui.dialog.overlay.instances.length&&e(document).bind(e.ui.dialog.overlay.events,function(t){if(e(t.target).zIndex()").addClass("ui-widget-overlay");return e(document).bind("keydown.dialog-overlay",function(r){var i=e.ui.dialog.overlay.instances;i.length!==0&&i[i.length-1]===n&&t.options.closeOnEscape&&!r.isDefaultPrevented()&&r.keyCode&&r.keyCode===e.ui.keyCode.ESCAPE&&(t.close(r),r.preventDefault())}),n.appendTo(document.body).css({width:this.width(),height:this.height()}),e.fn.bgiframe&&n.bgiframe(),this.instances.push(n),n},destroy:function(t){var n=e.inArray(t,this.instances),r=0;n!==-1&&this.oldInstances.push(this.instances.splice(n,1)[0]),this.instances.length===0&&e([document,window]).unbind(".dialog-overlay"),t.height(0).width(0).remove(),e.each(this.instances,function(){r=Math.max(r,this.css("z-index"))}),this.maxZ=r},height:function(){var t,n;return e.ui.ie?(t=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),n=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight),t
    ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1e3}).css(e(this).offset()).appendTo("body")}),!0):!1)},_mouseStart:function(t){var n=this.options;return this.helper=this._createHelper(t),this.helper.addClass("ui-draggable-dragging"),this._cacheHelperProportions(),e.ui.ddmanager&&(e.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(),this.offset=this.positionAbs=this.element.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.originalPosition=this.position=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,n.cursorAt&&this._adjustOffsetFromHelper(n.cursorAt),n.containment&&this._setContainment(),this._trigger("start",t)===!1?(this._clear(),!1):(this._cacheHelperProportions(),e.ui.ddmanager&&!n.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this._mouseDrag(t,!0),e.ui.ddmanager&&e.ui.ddmanager.dragStart(this,t),!0)},_mouseDrag:function(t,n){this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute");if(!n){var r=this._uiHash();if(this._trigger("drag",t,r)===!1)return this._mouseUp({}),!1;this.position=r.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";return e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),!1},_mouseStop:function(t){var n=!1;e.ui.ddmanager&&!this.options.dropBehaviour&&(n=e.ui.ddmanager.drop(this,t)),this.dropped&&(n=this.dropped,this.dropped=!1);var r=this.element[0],i=!1;while(r&&(r=r.parentNode))r==document&&(i=!0);if(!i&&this.options.helper==="original")return!1;if(this.options.revert=="invalid"&&!n||this.options.revert=="valid"&&n||this.options.revert===!0||e.isFunction(this.options.revert)&&this.options.revert.call(this.element,n)){var s=this;e(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){s._trigger("stop",t)!==!1&&s._clear()})}else this._trigger("stop",t)!==!1&&this._clear();return!1},_mouseUp:function(t){return e("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)}),e.ui.ddmanager&&e.ui.ddmanager.dragStop(this,t),e.ui.mouse.prototype._mouseUp.call(this,t)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear(),this},_getHandle:function(t){var n=!this.options.handle||!e(this.options.handle,this.element).length?!0:!1;return e(this.options.handle,this.element).find("*").andSelf().each(function(){this==t.target&&(n=!0)}),n},_createHelper:function(t){var n=this.options,r=e.isFunction(n.helper)?e(n.helper.apply(this.element[0],[t])):n.helper=="clone"?this.element.clone().removeAttr("id"):this.element;return r.parents("body").length||r.appendTo(n.appendTo=="parent"?this.element[0].parentNode:n.appendTo),r[0]!=this.element[0]&&!/(fixed|absolute)/.test(r.css("position"))&&r.css("position","absolute"),r},_adjustOffsetFromHelper:function(t){typeof t=="string"&&(t=t.split(" ")),e.isArray(t)&&(t={left:+t[0],top:+t[1]||0}),"left"in t&&(this.offset.click.left=t.left+this.margins.left),"right"in t&&(this.offset.click.left=this.helperProportions.width-t.right+this.margins.left),"top"in t&&(this.offset.click.top=t.top+this.margins.top),"bottom"in t&&(this.offset.click.top=this.helperProportions.height-t.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var t=this.offsetParent.offset();this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&e.contains(this.scrollParent[0],this.offsetParent[0])&&(t.left+=this.scrollParent.scrollLeft(),t.top+=this.scrollParent.scrollTop());if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&e.ui.ie)t={top:0,left:0};return{top:t.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:t.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var e=this.element.position();return{top:e.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:e.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var t=this.options;t.containment=="parent"&&(t.containment=this.helper[0].parentNode);if(t.containment=="document"||t.containment=="window")this.containment=[t.containment=="document"?0:e(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t.containment=="document"?0:e(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,(t.containment=="document"?0:e(window).scrollLeft())+e(t.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(t.containment=="document"?0:e(window).scrollTop())+(e(t.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(t.containment)&&t.containment.constructor!=Array){var n=e(t.containment),r=n[0];if(!r)return;var i=n.offset(),s=e(r).css("overflow")!="hidden";this.containment=[(parseInt(e(r).css("borderLeftWidth"),10)||0)+(parseInt(e(r).css("paddingLeft"),10)||0),(parseInt(e(r).css("borderTopWidth"),10)||0)+(parseInt(e(r).css("paddingTop"),10)||0),(s?Math.max(r.scrollWidth,r.offsetWidth):r.offsetWidth)-(parseInt(e(r).css("borderLeftWidth"),10)||0)-(parseInt(e(r).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(s?Math.max(r.scrollHeight,r.offsetHeight):r.offsetHeight)-(parseInt(e(r).css("borderTopWidth"),10)||0)-(parseInt(e(r).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relative_container=n}else t.containment.constructor==Array&&(this.containment=t.containment)},_convertPositionTo:function(t,n){n||(n=this.position);var r=t=="absolute"?1:-1,i=this.options,s=this.cssPosition!="absolute"||this.scrollParent[0]!=document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(s[0].tagName);return{top:n.top+this.offset.relative.top*r+this.offset.parent.top*r-(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():o?0:s.scrollTop())*r,left:n.left+this.offset.relative.left*r+this.offset.parent.left*r-(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():o?0:s.scrollLeft())*r}},_generatePosition:function(t){var n=this.options,r=this.cssPosition!="absolute"||this.scrollParent[0]!=document&&!!e.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,i=/(html|body)/i.test(r[0].tagName),s=t.pageX,o=t.pageY;if(this.originalPosition){var u;if(this.containment){if(this.relative_container){var a=this.relative_container.offset();u=[this.containment[0]+a.left,this.containment[1]+a.top,this.containment[2]+a.left,this.containment[3]+a.top]}else u=this.containment;t.pageX-this.offset.click.leftu[2]&&(s=u[2]+this.offset.click.left),t.pageY-this.offset.click.top>u[3]&&(o=u[3]+this.offset.click.top)}if(n.grid){var f=n.grid[1]?this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1]:this.originalPageY;o=u?f-this.offset.click.topu[3]?f-this.offset.click.topu[2]?l-this.offset.click.left=0;l--){var c=r.snapElements[l].left,h=c+r.snapElements[l].width,p=r.snapElements[l].top,d=p+r.snapElements[l].height;if(!(c-s=l&&o<=c||u>=l&&u<=c||oc)&&(i>=a&&i<=f||s>=a&&s<=f||if);default:return!1}},e.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(t,n){var r=e.ui.ddmanager.droppables[t.options.scope]||[],i=n?n.type:null,s=(t.currentItem||t.element).find(":data(droppable)").andSelf();e:for(var o=0;oe?0:r.max")[0],c,h=t.each;l.style.cssText="background-color:rgba(1,1,1,.5)",f.rgba=l.style.backgroundColor.indexOf("rgba")>-1,h(u,function(e,t){t.cache="_"+e,t.props.alpha={idx:3,type:"percent",def:1}}),o.fn=t.extend(o.prototype,{parse:function(r,i,s,a){if(r===n)return this._rgba=[null,null,null,null],this;if(r.jquery||r.nodeType)r=t(r).css(i),i=n;var f=this,l=t.type(r),v=this._rgba=[];i!==n&&(r=[r,i,s,a],l="array");if(l==="string")return this.parse(d(r)||c._default);if(l==="array")return h(u.rgba.props,function(e,t){v[t.idx]=p(r[t.idx],t)}),this;if(l==="object")return r instanceof o?h(u,function(e,t){r[t.cache]&&(f[t.cache]=r[t.cache].slice())}):h(u,function(t,n){var i=n.cache;h(n.props,function(e,t){if(!f[i]&&n.to){if(e==="alpha"||r[e]==null)return;f[i]=n.to(f._rgba)}f[i][t.idx]=p(r[e],t,!0)}),f[i]&&e.inArray(null,f[i].slice(0,3))<0&&(f[i][3]=1,n.from&&(f._rgba=n.from(f[i])))}),this},is:function(e){var t=o(e),n=!0,r=this;return h(u,function(e,i){var s,o=t[i.cache];return o&&(s=r[i.cache]||i.to&&i.to(r._rgba)||[],h(i.props,function(e,t){if(o[t.idx]!=null)return n=o[t.idx]===s[t.idx],n})),n}),n},_space:function(){var e=[],t=this;return h(u,function(n,r){t[r.cache]&&e.push(n)}),e.pop()},transition:function(e,t){var n=o(e),r=n._space(),i=u[r],s=this.alpha()===0?o("transparent"):this,f=s[i.cache]||i.to(s._rgba),l=f.slice();return n=n[i.cache],h(i.props,function(e,r){var i=r.idx,s=f[i],o=n[i],u=a[r.type]||{};if(o===null)return;s===null?l[i]=o:(u.mod&&(o-s>u.mod/2?s+=u.mod:s-o>u.mod/2&&(s-=u.mod)),l[i]=p((o-s)*t+s,r))}),this[r](l)},blend:function(e){if(this._rgba[3]===1)return this;var n=this._rgba.slice(),r=n.pop(),i=o(e)._rgba;return o(t.map(n,function(e,t){return(1-r)*i[t]+r*e}))},toRgbaString:function(){var e="rgba(",n=t.map(this._rgba,function(e,t){return e==null?t>2?1:0:e});return n[3]===1&&(n.pop(),e="rgb("),e+n.join()+")"},toHslaString:function(){var e="hsla(",n=t.map(this.hsla(),function(e,t){return e==null&&(e=t>2?1:0),t&&t<3&&(e=Math.round(e*100)+"%"),e});return n[3]===1&&(n.pop(),e="hsl("),e+n.join()+")"},toHexString:function(e){var n=this._rgba.slice(),r=n.pop();return e&&n.push(~~(r*255)),"#"+t.map(n,function(e){return e=(e||0).toString(16),e.length===1?"0"+e:e}).join("")},toString:function(){return this._rgba[3]===0?"transparent":this.toRgbaString()}}),o.fn.parse.prototype=o.fn,u.hsla.to=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=e[3],s=Math.max(t,n,r),o=Math.min(t,n,r),u=s-o,a=s+o,f=a*.5,l,c;return o===s?l=0:t===s?l=60*(n-r)/u+360:n===s?l=60*(r-t)/u+120:l=60*(t-n)/u+240,f===0||f===1?c=f:f<=.5?c=u/a:c=u/(2-a),[Math.round(l)%360,c,f,i==null?1:i]},u.hsla.from=function(e){if(e[0]==null||e[1]==null||e[2]==null)return[null,null,null,e[3]];var t=e[0]/360,n=e[1],r=e[2],i=e[3],s=r<=.5?r*(1+n):r+n-r*n,o=2*r-s;return[Math.round(v(o,s,t+1/3)*255),Math.round(v(o,s,t)*255),Math.round(v(o,s,t-1/3)*255),i]},h(u,function(e,r){var s=r.props,u=r.cache,a=r.to,f=r.from;o.fn[e]=function(e){a&&!this[u]&&(this[u]=a(this._rgba));if(e===n)return this[u].slice();var r,i=t.type(e),l=i==="array"||i==="object"?e:arguments,c=this[u].slice();return h(s,function(e,t){var n=l[i==="object"?e:t.idx];n==null&&(n=c[t.idx]),c[t.idx]=p(n,t)}),f?(r=o(f(c)),r[u]=c,r):o(c)},h(s,function(n,r){if(o.fn[n])return;o.fn[n]=function(s){var o=t.type(s),u=n==="alpha"?this._hsla?"hsla":"rgba":e,a=this[u](),f=a[r.idx],l;return o==="undefined"?f:(o==="function"&&(s=s.call(this,f),o=t.type(s)),s==null&&r.empty?this:(o==="string"&&(l=i.exec(s),l&&(s=f+parseFloat(l[2])*(l[1]==="+"?1:-1))),a[r.idx]=s,this[u](a)))}})}),h(r,function(e,n){t.cssHooks[n]={set:function(e,r){var i,s,u="";if(t.type(r)!=="string"||(i=d(r))){r=o(i||r);if(!f.rgba&&r._rgba[3]!==1){s=n==="backgroundColor"?e.parentNode:e;while((u===""||u==="transparent")&&s&&s.style)try{u=t.css(s,"backgroundColor"),s=s.parentNode}catch(a){}r=r.blend(u&&u!=="transparent"?u:"_default")}r=r.toRgbaString()}try{e.style[n]=r}catch(l){}}},t.fx.step[n]=function(e){e.colorInit||(e.start=o(e.elem,n),e.end=o(e.end),e.colorInit=!0),t.cssHooks[n].set(e.elem,e.start.transition(e.end,e.pos))}}),t.cssHooks.borderColor={expand:function(e){var t={};return h(["Top","Right","Bottom","Left"],function(n,r){t["border"+r+"Color"]=e}),t}},c=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(jQuery),function(){function i(){var t=this.ownerDocument.defaultView?this.ownerDocument.defaultView.getComputedStyle(this,null):this.currentStyle,n={},r,i;if(t&&t.length&&t[0]&&t[t[0]]){i=t.length;while(i--)r=t[i],typeof t[r]=="string"&&(n[e.camelCase(r)]=t[r])}else for(r in t)typeof t[r]=="string"&&(n[r]=t[r]);return n}function s(t,n){var i={},s,o;for(s in n)o=n[s],t[s]!==o&&!r[s]&&(e.fx.step[s]||!isNaN(parseFloat(o)))&&(i[s]=o);return i}var n=["add","remove","toggle"],r={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};e.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(t,n){e.fx.step[n]=function(e){if(e.end!=="none"&&!e.setAttr||e.pos===1&&!e.setAttr)jQuery.style(e.elem,n,e.end),e.setAttr=!0}}),e.effects.animateClass=function(t,r,o,u){var a=e.speed(r,o,u);return this.queue(function(){var r=e(this),o=r.attr("class")||"",u,f=a.children?r.find("*").andSelf():r;f=f.map(function(){var t=e(this);return{el:t,start:i.call(this)}}),u=function(){e.each(n,function(e,n){t[n]&&r[n+"Class"](t[n])})},u(),f=f.map(function(){return this.end=i.call(this.el[0]),this.diff=s(this.start,this.end),this}),r.attr("class",o),f=f.map(function(){var t=this,n=e.Deferred(),r=jQuery.extend({},a,{queue:!1,complete:function(){n.resolve(t)}});return this.el.animate(this.diff,r),n.promise()}),e.when.apply(e,f.get()).done(function(){u(),e.each(arguments,function(){var t=this.el;e.each(this.diff,function(e){t.css(e,"")})}),a.complete.call(r[0])})})},e.fn.extend({_addClass:e.fn.addClass,addClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{add:t},n,r,i):this._addClass(t)},_removeClass:e.fn.removeClass,removeClass:function(t,n,r,i){return n?e.effects.animateClass.call(this,{remove:t},n,r,i):this._removeClass(t)},_toggleClass:e.fn.toggleClass,toggleClass:function(n,r,i,s,o){return typeof r=="boolean"||r===t?i?e.effects.animateClass.call(this,r?{add:n}:{remove:n},i,s,o):this._toggleClass(n,r):e.effects.animateClass.call(this,{toggle:n},r,i,s)},switchClass:function(t,n,r,i,s){return e.effects.animateClass.call(this,{add:n,remove:t},r,i,s)}})}(),function(){function i(t,n,r,i){e.isPlainObject(t)&&(n=t,t=t.effect),t={effect:t},n==null&&(n={}),e.isFunction(n)&&(i=n,r=null,n={});if(typeof n=="number"||e.fx.speeds[n])i=r,r=n,n={};return e.isFunction(r)&&(i=r,r=null),n&&e.extend(t,n),r=r||n.duration,t.duration=e.fx.off?0:typeof r=="number"?r:r in e.fx.speeds?e.fx.speeds[r]:e.fx.speeds._default,t.complete=i||n.complete,t}function s(t){return!t||typeof t=="number"||e.fx.speeds[t]?!0:typeof t=="string"&&!e.effects.effect[t]?n&&e.effects[t]?!1:!0:!1}e.extend(e.effects,{version:"1.9.2",save:function(e,t){for(var n=0;n
    ").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),i={width:t.width(),height:t.height()},s=document.activeElement;try{s.id}catch(o){s=document.body}return t.wrap(r),(t[0]===s||e.contains(t[0],s))&&e(s).focus(),r=t.parent(),t.css("position")==="static"?(r.css({position:"relative"}),t.css({position:"relative"})):(e.extend(n,{position:t.css("position"),zIndex:t.css("z-index")}),e.each(["top","left","bottom","right"],function(e,r){n[r]=t.css(r),isNaN(parseInt(n[r],10))&&(n[r]="auto")}),t.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),t.css(i),r.css(n).show()},removeWrapper:function(t){var n=document.activeElement;return t.parent().is(".ui-effects-wrapper")&&(t.parent().replaceWith(t),(t[0]===n||e.contains(t[0],n))&&e(n).focus()),t},setTransition:function(t,n,r,i){return i=i||{},e.each(n,function(e,n){var s=t.cssUnit(n);s[0]>0&&(i[n]=s[0]*r+s[1])}),i}}),e.fn.extend({effect:function(){function a(n){function u(){e.isFunction(i)&&i.call(r[0]),e.isFunction(n)&&n()}var r=e(this),i=t.complete,s=t.mode;(r.is(":hidden")?s==="hide":s==="show")?u():o.call(r[0],t,u)}var t=i.apply(this,arguments),r=t.mode,s=t.queue,o=e.effects.effect[t.effect],u=!o&&n&&e.effects[t.effect];return e.fx.off||!o&&!u?r?this[r](t.duration,t.complete):this.each(function(){t.complete&&t.complete.call(this)}):o?s===!1?this.each(a):this.queue(s||"fx",a):u.call(this,{options:t,duration:t.duration,callback:t.complete,mode:t.mode})},_show:e.fn.show,show:function(e){if(s(e))return this._show.apply(this,arguments);var t=i.apply(this,arguments);return t.mode="show",this.effect.call(this,t)},_hide:e.fn.hide,hide:function(e){if(s(e))return this._hide.apply(this,arguments);var t=i.apply(this,arguments);return t.mode="hide",this.effect.call(this,t)},__toggle:e.fn.toggle,toggle:function(t){if(s(t)||typeof t=="boolean"||e.isFunction(t))return this.__toggle.apply(this,arguments);var n=i.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)},cssUnit:function(t){var n=this.css(t),r=[];return e.each(["em","px","%","pt"],function(e,t){n.indexOf(t)>0&&(r=[parseFloat(n),t])}),r}})}(),function(){var t={};e.each(["Quad","Cubic","Quart","Quint","Expo"],function(e,n){t[n]=function(t){return Math.pow(t,e+2)}}),e.extend(t,{Sine:function(e){return 1-Math.cos(e*Math.PI/2)},Circ:function(e){return 1-Math.sqrt(1-e*e)},Elastic:function(e){return e===0||e===1?e:-Math.pow(2,8*(e-1))*Math.sin(((e-1)*80-7.5)*Math.PI/15)},Back:function(e){return e*e*(3*e-2)},Bounce:function(e){var t,n=4;while(e<((t=Math.pow(2,--n))-1)/11);return 1/Math.pow(4,3-n)-7.5625*Math.pow((t*3-2)/22-e,2)}}),e.each(t,function(t,n){e.easing["easeIn"+t]=n,e.easing["easeOut"+t]=function(e){return 1-n(1-e)},e.easing["easeInOut"+t]=function(e){return e<.5?n(e*2)/2:1-n(e*-2+2)/2}})}()}(jQuery);(function(e,t){var n=/up|down|vertical/,r=/up|left|vertical|horizontal/;e.effects.effect.blind=function(t,i){var s=e(this),o=["position","top","bottom","left","right","height","width"],u=e.effects.setMode(s,t.mode||"hide"),a=t.direction||"up",f=n.test(a),l=f?"height":"width",c=f?"top":"left",h=r.test(a),p={},d=u==="show",v,m,g;s.parent().is(".ui-effects-wrapper")?e.effects.save(s.parent(),o):e.effects.save(s,o),s.show(),v=e.effects.createWrapper(s).css({overflow:"hidden"}),m=v[l](),g=parseFloat(v.css(c))||0,p[l]=d?m:0,h||(s.css(f?"bottom":"right",0).css(f?"top":"left","auto").css({position:"absolute"}),p[c]=d?g:m+g),d&&(v.css(l,0),h||v.css(c,g+m)),v.animate(p,{duration:t.duration,easing:t.easing,queue:!1,complete:function(){u==="hide"&&s.hide(),e.effects.restore(s,o),e.effects.removeWrapper(s),i()}})}})(jQuery);(function(e,t){e.effects.effect.bounce=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=s==="hide",u=s==="show",a=t.direction||"up",f=t.distance,l=t.times||5,c=l*2+(u||o?1:0),h=t.duration/c,p=t.easing,d=a==="up"||a==="down"?"top":"left",v=a==="up"||a==="left",m,g,y,b=r.queue(),w=b.length;(u||o)&&i.push("opacity"),e.effects.save(r,i),r.show(),e.effects.createWrapper(r),f||(f=r[d==="top"?"outerHeight":"outerWidth"]()/3),u&&(y={opacity:1},y[d]=0,r.css("opacity",0).css(d,v?-f*2:f*2).animate(y,h,p)),o&&(f/=Math.pow(2,l-1)),y={},y[d]=0;for(m=0;m1&&b.splice.apply(b,[1,0].concat(b.splice(w,c+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.clip=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=t.direction||"vertical",a=u==="vertical",f=a?"height":"width",l=a?"top":"left",c={},h,p,d;e.effects.save(r,i),r.show(),h=e.effects.createWrapper(r).css({overflow:"hidden"}),p=r[0].tagName==="IMG"?h:r,d=p[f](),o&&(p.css(f,0),p.css(l,d/2)),c[f]=o?d:0,c[l]=o?0:d/2,p.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){o||r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.drop=function(t,n){var r=e(this),i=["position","top","bottom","left","right","opacity","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left"?"pos":"neg",l={opacity:o?1:0},c;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),c=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0)/2,o&&r.css("opacity",0).css(a,f==="pos"?-c:c),l[a]=(o?f==="pos"?"+=":"-=":f==="pos"?"-=":"+=")+c,r.animate(l,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.explode=function(t,n){function y(){c.push(this),c.length===r*i&&b()}function b(){s.css({visibility:"visible"}),e(c).remove(),u||s.hide(),n()}var r=t.pieces?Math.round(Math.sqrt(t.pieces)):3,i=r,s=e(this),o=e.effects.setMode(s,t.mode||"hide"),u=o==="show",a=s.show().css("visibility","hidden").offset(),f=Math.ceil(s.outerWidth()/i),l=Math.ceil(s.outerHeight()/r),c=[],h,p,d,v,m,g;for(h=0;h
    ").css({position:"absolute",visibility:"visible",left:-p*f,top:-h*l}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:f,height:l,left:d+(u?m*f:0),top:v+(u?g*l:0),opacity:u?0:1}).animate({left:d+(u?0:m*f),top:v+(u?0:g*l),opacity:u?1:0},t.duration||500,t.easing,y)}}})(jQuery);(function(e,t){e.effects.effect.fade=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"toggle");r.animate({opacity:i},{queue:!1,duration:t.duration,easing:t.easing,complete:n})}})(jQuery);(function(e,t){e.effects.effect.fold=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"hide"),o=s==="show",u=s==="hide",a=t.size||15,f=/([0-9]+)%/.exec(a),l=!!t.horizFirst,c=o!==l,h=c?["width","height"]:["height","width"],p=t.duration/2,d,v,m={},g={};e.effects.save(r,i),r.show(),d=e.effects.createWrapper(r).css({overflow:"hidden"}),v=c?[d.width(),d.height()]:[d.height(),d.width()],f&&(a=parseInt(f[1],10)/100*v[u?0:1]),o&&d.css(l?{height:0,width:a}:{height:a,width:0}),m[h[0]]=o?v[0]:a,g[h[1]]=o?v[1]:0,d.animate(m,p,t.easing).animate(g,p,t.easing,function(){u&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()})}})(jQuery);(function(e,t){e.effects.effect.highlight=function(t,n){var r=e(this),i=["backgroundImage","backgroundColor","opacity"],s=e.effects.setMode(r,t.mode||"show"),o={backgroundColor:r.css("backgroundColor")};s==="hide"&&(o.opacity=0),e.effects.save(r,i),r.show().css({backgroundImage:"none",backgroundColor:t.color||"#ffff99"}).animate(o,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),n()}})}})(jQuery);(function(e,t){e.effects.effect.pulsate=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"show"),s=i==="show",o=i==="hide",u=s||i==="hide",a=(t.times||5)*2+(u?1:0),f=t.duration/a,l=0,c=r.queue(),h=c.length,p;if(s||!r.is(":visible"))r.css("opacity",0).show(),l=1;for(p=1;p1&&c.splice.apply(c,[1,0].concat(c.splice(h,a+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.puff=function(t,n){var r=e(this),i=e.effects.setMode(r,t.mode||"hide"),s=i==="hide",o=parseInt(t.percent,10)||150,u=o/100,a={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()};e.extend(t,{effect:"scale",queue:!1,fade:!0,mode:i,complete:n,percent:s?o:100,from:s?a:{height:a.height*u,width:a.width*u,outerHeight:a.outerHeight*u,outerWidth:a.outerWidth*u}}),r.effect(t)},e.effects.effect.scale=function(t,n){var r=e(this),i=e.extend(!0,{},t),s=e.effects.setMode(r,t.mode||"effect"),o=parseInt(t.percent,10)||(parseInt(t.percent,10)===0?0:s==="hide"?0:100),u=t.direction||"both",a=t.origin,f={height:r.height(),width:r.width(),outerHeight:r.outerHeight(),outerWidth:r.outerWidth()},l={y:u!=="horizontal"?o/100:1,x:u!=="vertical"?o/100:1};i.effect="size",i.queue=!1,i.complete=n,s!=="effect"&&(i.origin=a||["middle","center"],i.restore=!0),i.from=t.from||(s==="show"?{height:0,width:0,outerHeight:0,outerWidth:0}:f),i.to={height:f.height*l.y,width:f.width*l.x,outerHeight:f.outerHeight*l.y,outerWidth:f.outerWidth*l.x},i.fade&&(s==="show"&&(i.from.opacity=0,i.to.opacity=1),s==="hide"&&(i.from.opacity=1,i.to.opacity=0)),r.effect(i)},e.effects.effect.size=function(t,n){var r,i,s,o=e(this),u=["position","top","bottom","left","right","width","height","overflow","opacity"],a=["position","top","bottom","left","right","overflow","opacity"],f=["width","height","overflow"],l=["fontSize"],c=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],h=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=e.effects.setMode(o,t.mode||"effect"),d=t.restore||p!=="effect",v=t.scale||"both",m=t.origin||["middle","center"],g=o.css("position"),y=d?u:a,b={height:0,width:0,outerHeight:0,outerWidth:0};p==="show"&&o.show(),r={height:o.height(),width:o.width(),outerHeight:o.outerHeight(),outerWidth:o.outerWidth()},t.mode==="toggle"&&p==="show"?(o.from=t.to||b,o.to=t.from||r):(o.from=t.from||(p==="show"?b:r),o.to=t.to||(p==="hide"?b:r)),s={from:{y:o.from.height/r.height,x:o.from.width/r.width},to:{y:o.to.height/r.height,x:o.to.width/r.width}};if(v==="box"||v==="both")s.from.y!==s.to.y&&(y=y.concat(c),o.from=e.effects.setTransition(o,c,s.from.y,o.from),o.to=e.effects.setTransition(o,c,s.to.y,o.to)),s.from.x!==s.to.x&&(y=y.concat(h),o.from=e.effects.setTransition(o,h,s.from.x,o.from),o.to=e.effects.setTransition(o,h,s.to.x,o.to));(v==="content"||v==="both")&&s.from.y!==s.to.y&&(y=y.concat(l).concat(f),o.from=e.effects.setTransition(o,l,s.from.y,o.from),o.to=e.effects.setTransition(o,l,s.to.y,o.to)),e.effects.save(o,y),o.show(),e.effects.createWrapper(o),o.css("overflow","hidden").css(o.from),m&&(i=e.effects.getBaseline(m,r),o.from.top=(r.outerHeight-o.outerHeight())*i.y,o.from.left=(r.outerWidth-o.outerWidth())*i.x,o.to.top=(r.outerHeight-o.to.outerHeight)*i.y,o.to.left=(r.outerWidth-o.to.outerWidth)*i.x),o.css(o.from);if(v==="content"||v==="both")c=c.concat(["marginTop","marginBottom"]).concat(l),h=h.concat(["marginLeft","marginRight"]),f=u.concat(c).concat(h),o.find("*[width]").each(function(){var n=e(this),r={height:n.height(),width:n.width(),outerHeight:n.outerHeight(),outerWidth:n.outerWidth()};d&&e.effects.save(n,f),n.from={height:r.height*s.from.y,width:r.width*s.from.x,outerHeight:r.outerHeight*s.from.y,outerWidth:r.outerWidth*s.from.x},n.to={height:r.height*s.to.y,width:r.width*s.to.x,outerHeight:r.height*s.to.y,outerWidth:r.width*s.to.x},s.from.y!==s.to.y&&(n.from=e.effects.setTransition(n,c,s.from.y,n.from),n.to=e.effects.setTransition(n,c,s.to.y,n.to)),s.from.x!==s.to.x&&(n.from=e.effects.setTransition(n,h,s.from.x,n.from),n.to=e.effects.setTransition(n,h,s.to.x,n.to)),n.css(n.from),n.animate(n.to,t.duration,t.easing,function(){d&&e.effects.restore(n,f)})});o.animate(o.to,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){o.to.opacity===0&&o.css("opacity",o.from.opacity),p==="hide"&&o.hide(),e.effects.restore(o,y),d||(g==="static"?o.css({position:"relative",top:o.to.top,left:o.to.left}):e.each(["top","left"],function(e,t){o.css(t,function(t,n){var r=parseInt(n,10),i=e?o.to.left:o.to.top;return n==="auto"?i+"px":r+i+"px"})})),e.effects.removeWrapper(o),n()}})}})(jQuery);(function(e,t){e.effects.effect.shake=function(t,n){var r=e(this),i=["position","top","bottom","left","right","height","width"],s=e.effects.setMode(r,t.mode||"effect"),o=t.direction||"left",u=t.distance||20,a=t.times||3,f=a*2+1,l=Math.round(t.duration/f),c=o==="up"||o==="down"?"top":"left",h=o==="up"||o==="left",p={},d={},v={},m,g=r.queue(),y=g.length;e.effects.save(r,i),r.show(),e.effects.createWrapper(r),p[c]=(h?"-=":"+=")+u,d[c]=(h?"+=":"-=")+u*2,v[c]=(h?"-=":"+=")+u*2,r.animate(p,l,t.easing);for(m=1;m1&&g.splice.apply(g,[1,0].concat(g.splice(y,f+1))),r.dequeue()}})(jQuery);(function(e,t){e.effects.effect.slide=function(t,n){var r=e(this),i=["position","top","bottom","left","right","width","height"],s=e.effects.setMode(r,t.mode||"show"),o=s==="show",u=t.direction||"left",a=u==="up"||u==="down"?"top":"left",f=u==="up"||u==="left",l,c={};e.effects.save(r,i),r.show(),l=t.distance||r[a==="top"?"outerHeight":"outerWidth"](!0),e.effects.createWrapper(r).css({overflow:"hidden"}),o&&r.css(a,f?isNaN(l)?"-"+l:-l:l),c[a]=(o?f?"+=":"-=":f?"-=":"+=")+l,r.animate(c,{queue:!1,duration:t.duration,easing:t.easing,complete:function(){s==="hide"&&r.hide(),e.effects.restore(r,i),e.effects.removeWrapper(r),n()}})}})(jQuery);(function(e,t){e.effects.effect.transfer=function(t,n){var r=e(this),i=e(t.to),s=i.css("position")==="fixed",o=e("body"),u=s?o.scrollTop():0,a=s?o.scrollLeft():0,f=i.offset(),l={top:f.top-u,left:f.left-a,height:i.innerHeight(),width:i.innerWidth()},c=r.offset(),h=e('
    ').appendTo(document.body).addClass(t.className).css({top:c.top-u,left:c.left-a,height:r.innerHeight(),width:r.innerWidth(),position:s?"fixed":"absolute"}).animate(l,t.duration,t.easing,function(){h.remove(),n()})}})(jQuery);(function(e,t){var n=!1;e.widget("ui.menu",{version:"1.9.2",defaultElement:"
      ",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}).bind("click"+this.eventNamespace,e.proxy(function(e){this.options.disabled&&e.preventDefault()},this)),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item > a":function(e){e.preventDefault()},"click .ui-state-disabled > a":function(e){e.preventDefault()},"click .ui-menu-item:has(a)":function(t){var r=e(t.target).closest(".ui-menu-item");!n&&r.not(".ui-state-disabled").length&&(n=!0,this.select(t),r.has(".ui-menu").length?this.expand(t):this.element.is(":focus")||(this.element.trigger("focus",[!0]),this.active&&this.active.parents(".ui-menu").length===1&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){var n=e(t.currentTarget);n.siblings().children(".ui-state-active").removeClass("ui-state-active"),this.focus(t,n)},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var n=this.active||this.element.children(".ui-menu-item").eq(0);t||this.focus(e,n)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){e(t.target).closest(".ui-menu").length||this.collapseAll(t),n=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").andSelf().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){function a(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}var n,r,i,s,o,u=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:u=!1,r=this.previousFilter||"",i=String.fromCharCode(t.keyCode),s=!1,clearTimeout(this.filterTimer),i===r?s=!0:i=r+i,o=new RegExp("^"+a(i),"i"),n=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())}),n=s&&n.index(this.active.next())!==-1?this.active.nextAll(".ui-menu-item"):n,n.length||(i=String.fromCharCode(t.keyCode),o=new RegExp("^"+a(i),"i"),n=this.activeMenu.children(".ui-menu-item").filter(function(){return o.test(e(this).children("a").text())})),n.length?(this.focus(t,n),n.length>1?(this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter):delete this.previousFilter}u&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.children("a[aria-haspopup='true']").length?this.expand(e):this.select(e))},refresh:function(){var t,n=this.options.icons.submenu,r=this.element.find(this.options.menus);r.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),r=t.prev("a"),i=e("").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);r.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",r.attr("id"))}),t=r.add(this.element),t.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","presentation").children("a").uniqueId().addClass("ui-corner-all").attr({tabIndex:-1,role:this._itemRole()}),t.children(":not(.ui-menu-item)").each(function(){var t=e(this);/[^\-—–\s]/.test(t.text())||t.addClass("ui-widget-content ui-menu-divider")}),t.children(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},focus:function(e,t){var n,r;this.blur(e,e&&e.type==="focus"),this._scrollIntoView(t),this.active=t.first(),r=this.active.children("a").addClass("ui-state-focus"),this.options.role&&this.element.attr("aria-activedescendant",r.attr("id")),this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"),e&&e.type==="keydown"?this._close():this.timer=this._delay(function(){this._close()},this.delay),n=t.children(".ui-menu"),n.length&&/^mouse/.test(e.type)&&this._startOpening(n),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var n,r,i,s,o,u;this._hasScroll()&&(n=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,r=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,i=t.offset().top-this.activeMenu.offset().top-n-r,s=this.activeMenu.scrollTop(),o=this.activeMenu.height(),u=t.height(),i<0?this.activeMenu.scrollTop(s+i):i+u>o&&this.activeMenu.scrollTop(s+i-o+u))},blur:function(e,t){t||clearTimeout(this.timer);if(!this.active)return;this.active.children("a").removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active})},_startOpening:function(e){clearTimeout(this.timer);if(e.attr("aria-hidden")!=="true")return;this.timer=this._delay(function(){this._close(),this._open(e)},this.delay)},_open:function(t){var n=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(n)},collapseAll:function(t,n){clearTimeout(this.timer),this.timer=this._delay(function(){var r=n?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));r.length||(r=this.element),this._close(r),this.blur(t),this.activeMenu=r},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find("a.ui-state-active").removeClass("ui-state-active")},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").children(".ui-menu-item").first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,n){var r;this.active&&(e==="first"||e==="last"?r=this.active[e==="first"?"prevAll":"nextAll"](".ui-menu-item").eq(-1):r=this.active[e+"All"](".ui-menu-item").eq(0));if(!r||!r.length||!this.active)r=this.activeMenu.children(".ui-menu-item")[t]();this.focus(n,r)},nextPage:function(t){var n,r,i;if(!this.active){this.next(t);return}if(this.isLastItem())return;this._hasScroll()?(r=this.active.offset().top,i=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return n=e(this),n.offset().top-r-i<0}),this.focus(t,n)):this.focus(t,this.activeMenu.children(".ui-menu-item")[this.active?"last":"first"]())},previousPage:function(t){var n,r,i;if(!this.active){this.next(t);return}if(this.isFirstItem())return;this._hasScroll()?(r=this.active.offset().top,i=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return n=e(this),n.offset().top-r+i>0}),this.focus(t,n)):this.focus(t,this.activeMenu.children(".ui-menu-item").first())},_hasScroll:function(){return this.element.outerHeight()
    ").appendTo(this.element),this.oldValue=this._value(),this._refreshValue()},_destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow"),this.valueDiv.remove()},value:function(e){return e===t?this._value():(this._setOption("value",e),this)},_setOption:function(e,t){e==="value"&&(this.options.value=t,this._refreshValue(),this._value()===this.options.max&&this._trigger("complete")),this._super(e,t)},_value:function(){var e=this.options.value;return typeof e!="number"&&(e=0),Math.min(this.options.max,Math.max(this.min,e))},_percentage:function(){return 100*this._value()/this.options.max},_refreshValue:function(){var e=this.value(),t=this._percentage();this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),this.valueDiv.toggle(e>this.min).toggleClass("ui-corner-right",e===this.options.max).width(t.toFixed(0)+"%"),this.element.attr("aria-valuenow",e)}})})(jQuery);(function(e,t){e.widget("ui.resizable",e.ui.mouse,{version:"1.9.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1e3},_create:function(){var t=this,n=this.options;this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!n.aspectRatio,aspectRatio:n.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:n.helper||n.ghost||n.animate?n.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e('
    ').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("resizable",this.element.data("resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=n.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se");if(this.handles.constructor==String){this.handles=="all"&&(this.handles="n,e,s,w,se,sw,ne,nw");var r=this.handles.split(",");this.handles={};for(var i=0;i');u.css({zIndex:n.zIndex}),"se"==s&&u.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(u)}}this._renderAxis=function(t){t=t||this.element;for(var n in this.handles){this.handles[n].constructor==String&&(this.handles[n]=e(this.handles[n],this.element).show());if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var r=e(this.handles[n],this.element),i=0;i=/sw|ne|nw|se|n|s/.test(n)?r.outerHeight():r.outerWidth();var s=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");t.css(s,i),this._proportionallyResize()}if(!e(this.handles[n]).length)continue}},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){if(!t.resizing){if(this.className)var e=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);t.axis=e&&e[1]?e[1]:"se"}}),n.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){if(n.disabled)return;e(this).removeClass("ui-resizable-autohide"),t._handles.show()}).mouseleave(function(){if(n.disabled)return;t.resizing||(e(this).addClass("ui-resizable-autohide"),t._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){t(this.element);var n=this.element;this.originalElement.css({position:n.css("position"),width:n.outerWidth(),height:n.outerHeight(),top:n.css("top"),left:n.css("left")}).insertAfter(n),n.remove()}return this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_mouseCapture:function(t){var n=!1;for(var r in this.handles)e(this.handles[r])[0]==t.target&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(t){var r=this.options,i=this.element.position(),s=this.element;this.resizing=!0,this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()},(s.is(".ui-draggable")||/absolute/.test(s.css("position")))&&s.css({position:"absolute",top:i.top,left:i.left}),this._renderProxy();var o=n(this.helper.css("left")),u=n(this.helper.css("top"));r.containment&&(o+=e(r.containment).scrollLeft()||0,u+=e(r.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:o,top:u},this.size=this._helper?{width:s.outerWidth(),height:s.outerHeight()}:{width:s.width(),height:s.height()},this.originalSize=this._helper?{width:s.outerWidth(),height:s.outerHeight()}:{width:s.width(),height:s.height()},this.originalPosition={left:o,top:u},this.sizeDiff={width:s.outerWidth()-s.width(),height:s.outerHeight()-s.height()},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio=typeof r.aspectRatio=="number"?r.aspectRatio:this.originalSize.width/this.originalSize.height||1;var a=e(".ui-resizable-"+this.axis).css("cursor");return e("body").css("cursor",a=="auto"?this.axis+"-resize":a),s.addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(e){var t=this.helper,n=this.options,r={},i=this,s=this.originalMousePosition,o=this.axis,u=e.pageX-s.left||0,a=e.pageY-s.top||0,f=this._change[o];if(!f)return!1;var l=f.apply(this,[e,u,a]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)l=this._updateRatio(l,e);return l=this._respectSize(l,e),this._propagate("resize",e),t.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"}),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),this._updateCache(l),this._trigger("resize",e,this.ui()),!1},_mouseStop:function(t){this.resizing=!1;var n=this.options,r=this;if(this._helper){var i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),o=s&&e.ui.hasScroll(i[0],"left")?0:r.sizeDiff.height,u=s?0:r.sizeDiff.width,a={width:r.helper.width()-u,height:r.helper.height()-o},f=parseInt(r.element.css("left"),10)+(r.position.left-r.originalPosition.left)||null,l=parseInt(r.element.css("top"),10)+(r.position.top-r.originalPosition.top)||null;n.animate||this.element.css(e.extend(a,{top:l,left:f})),r.helper.height(r.size.height),r.helper.width(r.size.width),this._helper&&!n.animate&&this._proportionallyResize()}return e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t=this.options,n,i,s,o,u;u={minWidth:r(t.minWidth)?t.minWidth:0,maxWidth:r(t.maxWidth)?t.maxWidth:Infinity,minHeight:r(t.minHeight)?t.minHeight:0,maxHeight:r(t.maxHeight)?t.maxHeight:Infinity};if(this._aspectRatio||e)n=u.minHeight*this.aspectRatio,s=u.minWidth/this.aspectRatio,i=u.maxHeight*this.aspectRatio,o=u.maxWidth/this.aspectRatio,n>u.minWidth&&(u.minWidth=n),s>u.minHeight&&(u.minHeight=s),ie.width,l=r(e.height)&&i.minHeight&&i.minHeight>e.height;f&&(e.width=i.minWidth),l&&(e.height=i.minHeight),u&&(e.width=i.maxWidth),a&&(e.height=i.maxHeight);var c=this.originalPosition.left+this.originalSize.width,h=this.position.top+this.size.height,p=/sw|nw|w/.test(o),d=/nw|ne|n/.test(o);f&&p&&(e.left=c-i.minWidth),u&&p&&(e.left=c-i.maxWidth),l&&d&&(e.top=h-i.minHeight),a&&d&&(e.top=h-i.maxHeight);var v=!e.width&&!e.height;return v&&!e.left&&e.top?e.top=null:v&&!e.top&&e.left&&(e.left=null),e},_proportionallyResize:function(){var t=this.options;if(!this._proportionallyResizeElements.length)return;var n=this.helper||this.element;for(var r=0;r');var r=e.ui.ie6?1:0,i=e.ui.ie6?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+i,height:this.element.outerHeight()+i,position:"absolute",left:this.elementOffset.left-r+"px",top:this.elementOffset.top-r+"px",zIndex:++n.zIndex}),this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,t,n){return{width:this.originalSize.width+t}},w:function(e,t,n){var r=this.options,i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,n){var r=this.options,i=this.originalSize,s=this.originalPosition;return{top:s.top+n,height:i.height-n}},s:function(e,t,n){return{height:this.originalSize.height+n}},se:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},sw:function(t,n,r){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,n,r]))},ne:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,n,r]))},nw:function(t,n,r){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,n,r]))}},_propagate:function(t,n){e.ui.plugin.call(this,t,[n,this.ui()]),t!="resize"&&this._trigger(t,n,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","alsoResize",{start:function(t,n){var r=e(this).data("resizable"),i=r.options,s=function(t){e(t).each(function(){var t=e(this);t.data("resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};typeof i.alsoResize=="object"&&!i.alsoResize.parentNode?i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)}):s(i.alsoResize)},resize:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.originalSize,o=r.originalPosition,u={height:r.size.height-s.height||0,width:r.size.width-s.width||0,top:r.position.top-o.top||0,left:r.position.left-o.left||0},a=function(t,r){e(t).each(function(){var t=e(this),i=e(this).data("resizable-alsoresize"),s={},o=r&&r.length?r:t.parents(n.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var n=(i[t]||0)+(u[t]||0);n&&n>=0&&(s[t]=n||null)}),t.css(s)})};typeof i.alsoResize=="object"&&!i.alsoResize.nodeType?e.each(i.alsoResize,function(e,t){a(e,t)}):a(i.alsoResize)},stop:function(t,n){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","animate",{stop:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r._proportionallyResizeElements,o=s.length&&/textarea/i.test(s[0].nodeName),u=o&&e.ui.hasScroll(s[0],"left")?0:r.sizeDiff.height,a=o?0:r.sizeDiff.width,f={width:r.size.width-a,height:r.size.height-u},l=parseInt(r.element.css("left"),10)+(r.position.left-r.originalPosition.left)||null,c=parseInt(r.element.css("top"),10)+(r.position.top-r.originalPosition.top)||null;r.element.animate(e.extend(f,c&&l?{top:c,left:l}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var n={width:parseInt(r.element.css("width"),10),height:parseInt(r.element.css("height"),10),top:parseInt(r.element.css("top"),10),left:parseInt(r.element.css("left"),10)};s&&s.length&&e(s[0]).css({width:n.width,height:n.height}),r._updateCache(n),r._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(t,r){var i=e(this).data("resizable"),s=i.options,o=i.element,u=s.containment,a=u instanceof e?u.get(0):/parent/.test(u)?o.parent().get(0):u;if(!a)return;i.containerElement=e(a);if(/document/.test(u)||u==document)i.containerOffset={left:0,top:0},i.containerPosition={left:0,top:0},i.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight};else{var f=e(a),l=[];e(["Top","Right","Left","Bottom"]).each(function(e,t){l[e]=n(f.css("padding"+t))}),i.containerOffset=f.offset(),i.containerPosition=f.position(),i.containerSize={height:f.innerHeight()-l[3],width:f.innerWidth()-l[1]};var c=i.containerOffset,h=i.containerSize.height,p=i.containerSize.width,d=e.ui.hasScroll(a,"left")?a.scrollWidth:p,v=e.ui.hasScroll(a)?a.scrollHeight:h;i.parentData={element:a,left:c.left,top:c.top,width:d,height:v}}},resize:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.containerSize,o=r.containerOffset,u=r.size,a=r.position,f=r._aspectRatio||t.shiftKey,l={top:0,left:0},c=r.containerElement;c[0]!=document&&/static/.test(c.css("position"))&&(l=o),a.left<(r._helper?o.left:0)&&(r.size.width=r.size.width+(r._helper?r.position.left-o.left:r.position.left-l.left),f&&(r.size.height=r.size.width/r.aspectRatio),r.position.left=i.helper?o.left:0),a.top<(r._helper?o.top:0)&&(r.size.height=r.size.height+(r._helper?r.position.top-o.top:r.position.top),f&&(r.size.width=r.size.height*r.aspectRatio),r.position.top=r._helper?o.top:0),r.offset.left=r.parentData.left+r.position.left,r.offset.top=r.parentData.top+r.position.top;var h=Math.abs((r._helper?r.offset.left-l.left:r.offset.left-l.left)+r.sizeDiff.width),p=Math.abs((r._helper?r.offset.top-l.top:r.offset.top-o.top)+r.sizeDiff.height),d=r.containerElement.get(0)==r.element.parent().get(0),v=/relative|absolute/.test(r.containerElement.css("position"));d&&v&&(h-=r.parentData.left),h+r.size.width>=r.parentData.width&&(r.size.width=r.parentData.width-h,f&&(r.size.height=r.size.width/r.aspectRatio)),p+r.size.height>=r.parentData.height&&(r.size.height=r.parentData.height-p,f&&(r.size.width=r.size.height*r.aspectRatio))},stop:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.position,o=r.containerOffset,u=r.containerPosition,a=r.containerElement,f=e(r.helper),l=f.offset(),c=f.outerWidth()-r.sizeDiff.width,h=f.outerHeight()-r.sizeDiff.height;r._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:l.left-u.left-o.left,width:c,height:h}),r._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:l.left-u.left-o.left,width:c,height:h})}}),e.ui.plugin.add("resizable","ghost",{start:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.size;r.ghost=r.originalElement.clone(),r.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:""),r.ghost.appendTo(r.helper)},resize:function(t,n){var r=e(this).data("resizable"),i=r.options;r.ghost&&r.ghost.css({position:"relative",height:r.size.height,width:r.size.width})},stop:function(t,n){var r=e(this).data("resizable"),i=r.options;r.ghost&&r.helper&&r.helper.get(0).removeChild(r.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(t,n){var r=e(this).data("resizable"),i=r.options,s=r.size,o=r.originalSize,u=r.originalPosition,a=r.axis,f=i._aspectRatio||t.shiftKey;i.grid=typeof i.grid=="number"?[i.grid,i.grid]:i.grid;var l=Math.round((s.width-o.width)/(i.grid[0]||1))*(i.grid[0]||1),c=Math.round((s.height-o.height)/(i.grid[1]||1))*(i.grid[1]||1);/^(se|s|e)$/.test(a)?(r.size.width=o.width+l,r.size.height=o.height+c):/^(ne)$/.test(a)?(r.size.width=o.width+l,r.size.height=o.height+c,r.position.top=u.top-c):/^(sw)$/.test(a)?(r.size.width=o.width+l,r.size.height=o.height+c,r.position.left=u.left-l):(r.size.width=o.width+l,r.size.height=o.height+c,r.position.top=u.top-c,r.position.left=u.left-l)}});var n=function(e){return parseInt(e,10)||0},r=function(e){return!isNaN(parseInt(e,10))}})(jQuery);(function(e,t){e.widget("ui.selectable",e.ui.mouse,{version:"1.9.2",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch"},_create:function(){var t=this;this.element.addClass("ui-selectable"),this.dragged=!1;var n;this.refresh=function(){n=e(t.options.filter,t.element[0]),n.addClass("ui-selectee"),n.each(function(){var t=e(this),n=t.offset();e.data(this,"selectable-item",{element:this,$element:t,left:n.left,top:n.top,right:n.left+t.outerWidth(),bottom:n.top+t.outerHeight(),startselected:!1,selected:t.hasClass("ui-selected"),selecting:t.hasClass("ui-selecting"),unselecting:t.hasClass("ui-unselecting")})})},this.refresh(),this.selectees=n.addClass("ui-selectee"),this._mouseInit(),this.helper=e("
    ")},_destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item"),this.element.removeClass("ui-selectable ui-selectable-disabled"),this._mouseDestroy()},_mouseStart:function(t){var n=this;this.opos=[t.pageX,t.pageY];if(this.options.disabled)return;var r=this.options;this.selectees=e(r.filter,this.element[0]),this._trigger("start",t),e(r.appendTo).append(this.helper),this.helper.css({left:t.clientX,top:t.clientY,width:0,height:0}),r.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var r=e.data(this,"selectable-item");r.startselected=!0,!t.metaKey&&!t.ctrlKey&&(r.$element.removeClass("ui-selected"),r.selected=!1,r.$element.addClass("ui-unselecting"),r.unselecting=!0,n._trigger("unselecting",t,{unselecting:r.element}))}),e(t.target).parents().andSelf().each(function(){var r=e.data(this,"selectable-item");if(r){var i=!t.metaKey&&!t.ctrlKey||!r.$element.hasClass("ui-selected");return r.$element.removeClass(i?"ui-unselecting":"ui-selected").addClass(i?"ui-selecting":"ui-unselecting"),r.unselecting=!i,r.selecting=i,r.selected=i,i?n._trigger("selecting",t,{selecting:r.element}):n._trigger("unselecting",t,{unselecting:r.element}),!1}})},_mouseDrag:function(t){var n=this;this.dragged=!0;if(this.options.disabled)return;var r=this.options,i=this.opos[0],s=this.opos[1],o=t.pageX,u=t.pageY;if(i>o){var a=o;o=i,i=a}if(s>u){var a=u;u=s,s=a}return this.helper.css({left:i,top:s,width:o-i,height:u-s}),this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!a||a.element==n.element[0])return;var f=!1;r.tolerance=="touch"?f=!(a.left>o||a.rightu||a.bottomi&&a.rights&&a.bottom").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(i.range==="min"||i.range==="max"?" ui-slider-range-"+i.range:""))),r=i.values&&i.values.length||1;for(t=s.length;tn&&(i=n,s=e(this),o=t)}),c.range===!0&&this.values(1)===c.min&&(o+=1,s=e(this.handles[o])),u=this._start(t,o),u===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,s.addClass("ui-state-active").focus(),a=s.offset(),f=!e(t.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=f?{left:0,top:0}:{left:t.pageX-a.left-s.width()/2,top:t.pageY-a.top-s.height()/2-(parseInt(s.css("borderTopWidth"),10)||0)-(parseInt(s.css("borderBottomWidth"),10)||0)+(parseInt(s.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(t,o,r),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(e){var t={x:e.pageX,y:e.pageY},n=this._normValueFromMouse(t);return this._slide(e,this._handleIndex,n),!1},_mouseStop:function(e){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(e,this._handleIndex),this._change(e,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(e){var t,n,r,i,s;return this.orientation==="horizontal"?(t=this.elementSize.width,n=e.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(t=this.elementSize.height,n=e.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),r=n/t,r>1&&(r=1),r<0&&(r=0),this.orientation==="vertical"&&(r=1-r),i=this._valueMax()-this._valueMin(),s=this._valueMin()+r*i,this._trimAlignValue(s)},_start:function(e,t){var n={handle:this.handles[t],value:this.value()};return this.options.values&&this.options.values.length&&(n.value=this.values(t),n.values=this.values()),this._trigger("start",e,n)},_slide:function(e,t,n){var r,i,s;this.options.values&&this.options.values.length?(r=this.values(t?0:1),this.options.values.length===2&&this.options.range===!0&&(t===0&&n>r||t===1&&n1){this.options.values[t]=this._trimAlignValue(n),this._refreshValue(),this._change(null,t);return}if(!arguments.length)return this._values();if(!e.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(t):this.value();r=this.options.values,i=arguments[0];for(s=0;s=this._valueMax())return this._valueMax();var t=this.options.step>0?this.options.step:1,n=(e-this._valueMin())%t,r=e-n;return Math.abs(n)*2>=t&&(r+=n>0?t:-t),parseFloat(r.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var t,n,r,i,s,o=this.options.range,u=this.options,a=this,f=this._animateOff?!1:u.animate,l={};this.options.values&&this.options.values.length?this.handles.each(function(r){n=(a.values(r)-a._valueMin())/(a._valueMax()-a._valueMin())*100,l[a.orientation==="horizontal"?"left":"bottom"]=n+"%",e(this).stop(1,1)[f?"animate":"css"](l,u.animate),a.options.range===!0&&(a.orientation==="horizontal"?(r===0&&a.range.stop(1,1)[f?"animate":"css"]({left:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({width:n-t+"%"},{queue:!1,duration:u.animate})):(r===0&&a.range.stop(1,1)[f?"animate":"css"]({bottom:n+"%"},u.animate),r===1&&a.range[f?"animate":"css"]({height:n-t+"%"},{queue:!1,duration:u.animate}))),t=n}):(r=this.value(),i=this._valueMin(),s=this._valueMax(),n=s!==i?(r-i)/(s-i)*100:0,l[this.orientation==="horizontal"?"left":"bottom"]=n+"%",this.handle.stop(1,1)[f?"animate":"css"](l,u.animate),o==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[f?"animate":"css"]({width:n+"%"},u.animate),o==="max"&&this.orientation==="horizontal"&&this.range[f?"animate":"css"]({width:100-n+"%"},{queue:!1,duration:u.animate}),o==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[f?"animate":"css"]({height:n+"%"},u.animate),o==="max"&&this.orientation==="vertical"&&this.range[f?"animate":"css"]({height:100-n+"%"},{queue:!1,duration:u.animate}))}})})(jQuery);(function(e,t){e.widget("ui.sortable",e.ui.mouse,{version:"1.9.2",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3},_create:function(){var e=this.options;this.containerCache={},this.element.addClass("ui-sortable"),this.refresh(),this.floating=this.items.length?e.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):!1,this.offset=this.element.offset(),this._mouseInit(),this.ready=!0},_destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled"),this._mouseDestroy();for(var e=this.items.length-1;e>=0;e--)this.items[e].item.removeData(this.widgetName+"-item");return this},_setOption:function(t,n){t==="disabled"?(this.options[t]=n,this.widget().toggleClass("ui-sortable-disabled",!!n)):e.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(t,n){var r=this;if(this.reverting)return!1;if(this.options.disabled||this.options.type=="static")return!1;this._refreshItems(t);var i=null,s=e(t.target).parents().each(function(){if(e.data(this,r.widgetName+"-item")==r)return i=e(this),!1});e.data(t.target,r.widgetName+"-item")==r&&(i=e(t.target));if(!i)return!1;if(this.options.handle&&!n){var o=!1;e(this.options.handle,i).find("*").andSelf().each(function(){this==t.target&&(o=!0)});if(!o)return!1}return this.currentItem=i,this._removeCurrentsFromItems(),!0},_mouseStart:function(t,n,r){var i=this.options;this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(t),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},e.extend(this.offset,{click:{left:t.pageX-this.offset.left,top:t.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(t),this.originalPageX=t.pageX,this.originalPageY=t.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!=this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),i.containment&&this._setContainment(),i.cursor&&(e("body").css("cursor")&&(this._storedCursor=e("body").css("cursor")),e("body").css("cursor",i.cursor)),i.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",i.opacity)),i.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",i.zIndex)),this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",t,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions();if(!r)for(var s=this.containers.length-1;s>=0;s--)this.containers[s]._trigger("activate",t,this._uiHash(this));return e.ui.ddmanager&&(e.ui.ddmanager.current=this),e.ui.ddmanager&&!i.dropBehaviour&&e.ui.ddmanager.prepareOffsets(this,t),this.dragging=!0,this.helper.addClass("ui-sortable-helper"),this._mouseDrag(t),!0},_mouseDrag:function(t){this.position=this._generatePosition(t),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs);if(this.options.scroll){var n=this.options,r=!1;this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-t.pageY=0;i--){var s=this.items[i],o=s.item[0],u=this._intersectsWithPointer(s);if(!u)continue;if(s.instance!==this.currentContainer)continue;if(o!=this.currentItem[0]&&this.placeholder[u==1?"next":"prev"]()[0]!=o&&!e.contains(this.placeholder[0],o)&&(this.options.type=="semi-dynamic"?!e.contains(this.element[0],o):!0)){this.direction=u==1?"down":"up";if(this.options.tolerance!="pointer"&&!this._intersectsWithSides(s))break;this._rearrange(t,s),this._trigger("change",t,this._uiHash());break}}return this._contactContainers(t),e.ui.ddmanager&&e.ui.ddmanager.drag(this,t),this._trigger("sort",t,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(t,n){if(!t)return;e.ui.ddmanager&&!this.options.dropBehaviour&&e.ui.ddmanager.drop(this,t);if(this.options.revert){var r=this,i=this.placeholder.offset();this.reverting=!0,e(this.helper).animate({left:i.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:i.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){r._clear(t)})}else this._clear(t,n);return!1},cancel:function(){if(this.dragging){this._mouseUp({target:null}),this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var t=this.containers.length-1;t>=0;t--)this.containers[t]._trigger("deactivate",null,this._uiHash(this)),this.containers[t].containerCache.over&&(this.containers[t]._trigger("out",null,this._uiHash(this)),this.containers[t].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),e.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?e(this.domPosition.prev).after(this.currentItem):e(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(t){var n=this._getItemsAsjQuery(t&&t.connected),r=[];return t=t||{},e(n).each(function(){var n=(e(t.item||this).attr(t.attribute||"id")||"").match(t.expression||/(.+)[-=_](.+)/);n&&r.push((t.key||n[1]+"[]")+"="+(t.key&&t.expression?n[1]:n[2]))}),!r.length&&t.key&&r.push(t.key+"="),r.join("&")},toArray:function(t){var n=this._getItemsAsjQuery(t&&t.connected),r=[];return t=t||{},n.each(function(){r.push(e(t.item||this).attr(t.attribute||"id")||"")}),r},_intersectsWith:function(e){var t=this.positionAbs.left,n=t+this.helperProportions.width,r=this.positionAbs.top,i=r+this.helperProportions.height,s=e.left,o=s+e.width,u=e.top,a=u+e.height,f=this.offset.click.top,l=this.offset.click.left,c=r+f>u&&r+fs&&t+le[this.floating?"width":"height"]?c:s0?"down":"up")},_getDragHorizontalDirection:function(){var e=this.positionAbs.left-this.lastPositionAbs.left;return e!=0&&(e>0?"right":"left")},refresh:function(e){return this._refreshItems(e),this.refreshPositions(),this},_connectWith:function(){var e=this.options;return e.connectWith.constructor==String?[e.connectWith]:e.connectWith},_getItemsAsjQuery:function(t){var n=[],r=[],i=this._connectWith();if(i&&t)for(var s=i.length-1;s>=0;s--){var o=e(i[s]);for(var u=o.length-1;u>=0;u--){var a=e.data(o[u],this.widgetName);a&&a!=this&&!a.options.disabled&&r.push([e.isFunction(a.options.items)?a.options.items.call(a.element):e(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a])}}r.push([e.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):e(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var s=r.length-1;s>=0;s--)r[s][0].each(function(){n.push(this)});return e(n)},_removeCurrentsFromItems:function(){var t=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=e.grep(this.items,function(e){for(var n=0;n=0;s--){var o=e(i[s]);for(var u=o.length-1;u>=0;u--){var a=e.data(o[u],this.widgetName);a&&a!=this&&!a.options.disabled&&(r.push([e.isFunction(a.options.items)?a.options.items.call(a.element[0],t,{item:this.currentItem}):e(a.options.items,a.element),a]),this.containers.push(a))}}for(var s=r.length-1;s>=0;s--){var f=r[s][1],l=r[s][0];for(var u=0,c=l.length;u=0;n--){var r=this.items[n];if(r.instance!=this.currentContainer&&this.currentContainer&&r.item[0]!=this.currentItem[0])continue;var i=this.options.toleranceElement?e(this.options.toleranceElement,r.item):r.item;t||(r.width=i.outerWidth(),r.height=i.outerHeight());var s=i.offset();r.left=s.left,r.top=s.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(var n=this.containers.length-1;n>=0;n--){var s=this.containers[n].element.offset();this.containers[n].containerCache.left=s.left,this.containers[n].containerCache.top=s.top,this.containers[n].containerCache.width=this.containers[n].element.outerWidth(),this.containers[n].containerCache.height=this.containers[n].element.outerHeight()}return this},_createPlaceholder:function(t){t=t||this;var n=t.options;if(!n.placeholder||n.placeholder.constructor==String){var r=n.placeholder;n.placeholder={element:function(){var n=e(document.createElement(t.currentItem[0].nodeName)).addClass(r||t.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];return r||(n.style.visibility="hidden"),n},update:function(e,i){if(r&&!n.forcePlaceholderSize)return;i.height()||i.height(t.currentItem.innerHeight()-parseInt(t.currentItem.css("paddingTop")||0,10)-parseInt(t.currentItem.css("paddingBottom")||0,10)),i.width()||i.width(t.currentItem.innerWidth()-parseInt(t.currentItem.css("paddingLeft")||0,10)-parseInt(t.currentItem.css("paddingRight")||0,10))}}}t.placeholder=e(n.placeholder.element.call(t.element,t.currentItem)),t.currentItem.after(t.placeholder),n.placeholder.update(t,t.placeholder)},_contactContainers:function(t){var n=null,r=null;for(var i=this.containers.length-1;i>=0;i--){if(e.contains(this.currentItem[0],this.containers[i].element[0]))continue;if(this._intersectsWith(this.containers[i].containerCache)){if(n&&e.contains(this.containers[i].element[0],n.element[0]))continue;n=this.containers[i],r=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",t,this._uiHash(this)),this.containers[i].containerCache.over=0)}if(!n)return;if(this.containers.length===1)this.containers[r]._trigger("over",t,this._uiHash(this)),this.containers[r].containerCache.over=1;else{var s=1e4,o=null,u=this.containers[r].floating?"left":"top",a=this.containers[r].floating?"width":"height",f=this.positionAbs[u]+this.offset.click[u];for(var l=this.items.length-1;l>=0;l--){if(!e.contains(this.containers[r].element[0],this.items[l].item[0]))continue;if(this.items[l].item[0]==this.currentItem[0])continue;var c=this.items[l].item.offset()[u],h=!1;Math.abs(c-f)>Math.abs(c+this.items[l][a]-f)&&(h=!0,c+=this.items[l][a]),Math.abs(c-f)this.containment[2]&&(s=this.containment[2]+this.offset.click.left),t.pageY-this.offset.click.top>this.containment[3]&&(o=this.containment[3]+this.offset.click.top));if(n.grid){var u=this.originalPageY+Math.round((o-this.originalPageY)/n.grid[1])*n.grid[1];o=this.containment?u-this.offset.click.topthis.containment[3]?u-this.offset.click.topthis.containment[2]?a-this.offset.click.left=0;i--)n||r.push(function(e){return function(t){e._trigger("deactivate",t,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over&&(r.push(function(e){return function(t){e._trigger("out",t,this._uiHash(this))}}.call(this,this.containers[i])),this.containers[i].containerCache.over=0);this._storedCursor&&e("body").css("cursor",this._storedCursor),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex),this.dragging=!1;if(this.cancelHelperRemoval){if(!n){this._trigger("beforeStop",t,this._uiHash());for(var i=0;i",widgetEventPrefix:"spin",options:{culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var t={},n=this.element;return e.each(["min","max","step"],function(e,r){var i=n.attr(r);i!==undefined&&i.length&&(t[r]=i)}),t},_events:{keydown:function(e){this._start(e)&&this._keydown(e)&&e.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(e){if(this.cancelBlur){delete this.cancelBlur;return}this._refresh(),this.previous!==this.element.val()&&this._trigger("change",e)},mousewheel:function(e,t){if(!t)return;if(!this.spinning&&!this._start(e))return!1;this._spin((t>0?1:-1)*this.options.step,e),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(e)},100),e.preventDefault()},"mousedown .ui-spinner-button":function(t){function r(){var e=this.element[0]===this.document[0].activeElement;e||(this.element.focus(),this.previous=n,this._delay(function(){this.previous=n}))}var n;n=this.element[0]===this.document[0].activeElement?this.previous:this.element.val(),t.preventDefault(),r.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,r.call(this)});if(this._start(t)===!1)return;this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(t){if(!e(t.currentTarget).hasClass("ui-state-active"))return;if(this._start(t)===!1)return!1;this._repeat(null,e(t.currentTarget).hasClass("ui-spinner-up")?1:-1,t)},"mouseleave .ui-spinner-button":"_stop"},_draw:function(){var e=this.uiSpinner=this.element.addClass("ui-spinner-input").attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml());this.element.attr("role","spinbutton"),this.buttons=e.find(".ui-spinner-button").attr("tabIndex",-1).button().removeClass("ui-corner-all"),this.buttons.height()>Math.ceil(e.height()*.5)&&e.height()>0&&e.height(e.height()),this.options.disabled&&this.disable()},_keydown:function(t){var n=this.options,r=e.ui.keyCode;switch(t.keyCode){case r.UP:return this._repeat(null,1,t),!0;case r.DOWN:return this._repeat(null,-1,t),!0;case r.PAGE_UP:return this._repeat(null,n.page,t),!0;case r.PAGE_DOWN:return this._repeat(null,-n.page,t),!0}return!1},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""+""+""+""+""},_start:function(e){return!this.spinning&&this._trigger("start",e)===!1?!1:(this.counter||(this.counter=1),this.spinning=!0,!0)},_repeat:function(e,t,n){e=e||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,t,n)},e),this._spin(t*this.options.step,n)},_spin:function(e,t){var n=this.value()||0;this.counter||(this.counter=1),n=this._adjustValue(n+e*this._increment(this.counter));if(!this.spinning||this._trigger("spin",t,{value:n})!==!1)this._value(n),this.counter++},_increment:function(t){var n=this.options.incremental;return n?e.isFunction(n)?n(t):Math.floor(t*t*t/5e4-t*t/500+17*t/200+1):1},_precision:function(){var e=this._precisionOf(this.options.step);return this.options.min!==null&&(e=Math.max(e,this._precisionOf(this.options.min))),e},_precisionOf:function(e){var t=e.toString(),n=t.indexOf(".");return n===-1?0:t.length-n-1},_adjustValue:function(e){var t,n,r=this.options;return t=r.min!==null?r.min:0,n=e-t,n=Math.round(n/r.step)*r.step,e=t+n,e=parseFloat(e.toFixed(this._precision())),r.max!==null&&e>r.max?r.max:r.min!==null&&e1&&e.href.replace(r,"")===location.href.replace(r,"").replace(/\s/g,"%20")}var n=0,r=/#.*$/;e.widget("ui.tabs",{version:"1.9.2",delay:300,options:{active:null,collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_create:function(){var t=this,n=this.options,r=n.active,i=location.hash.substring(1);this.running=!1,this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all").toggleClass("ui-tabs-collapsible",n.collapsible).delegate(".ui-tabs-nav > li","mousedown"+this.eventNamespace,function(t){e(this).is(".ui-state-disabled")&&t.preventDefault()}).delegate(".ui-tabs-anchor","focus"+this.eventNamespace,function(){e(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this._processTabs();if(r===null){i&&this.tabs.each(function(t,n){if(e(n).attr("aria-controls")===i)return r=t,!1}),r===null&&(r=this.tabs.index(this.tabs.filter(".ui-tabs-active")));if(r===null||r===-1)r=this.tabs.length?0:!1}r!==!1&&(r=this.tabs.index(this.tabs.eq(r)),r===-1&&(r=n.collapsible?!1:0)),n.active=r,!n.collapsible&&n.active===!1&&this.anchors.length&&(n.active=0),e.isArray(n.disabled)&&(n.disabled=e.unique(n.disabled.concat(e.map(this.tabs.filter(".ui-state-disabled"),function(e){return t.tabs.index(e)}))).sort()),this.options.active!==!1&&this.anchors.length?this.active=this._findActive(this.options.active):this.active=e(),this._refresh(),this.active.length&&this.load(n.active)},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):e()}},_tabKeydown:function(t){var n=e(this.document[0].activeElement).closest("li"),r=this.tabs.index(n),i=!0;if(this._handlePageNav(t))return;switch(t.keyCode){case e.ui.keyCode.RIGHT:case e.ui.keyCode.DOWN:r++;break;case e.ui.keyCode.UP:case e.ui.keyCode.LEFT:i=!1,r--;break;case e.ui.keyCode.END:r=this.anchors.length-1;break;case e.ui.keyCode.HOME:r=0;break;case e.ui.keyCode.SPACE:t.preventDefault(),clearTimeout(this.activating),this._activate(r);return;case e.ui.keyCode.ENTER:t.preventDefault(),clearTimeout(this.activating),this._activate(r===this.options.active?!1:r);return;default:return}t.preventDefault(),clearTimeout(this.activating),r=this._focusNextTab(r,i),t.ctrlKey||(n.attr("aria-selected","false"),this.tabs.eq(r).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",r)},this.delay))},_panelKeydown:function(t){if(this._handlePageNav(t))return;t.ctrlKey&&t.keyCode===e.ui.keyCode.UP&&(t.preventDefault(),this.active.focus())},_handlePageNav:function(t){if(t.altKey&&t.keyCode===e.ui.keyCode.PAGE_UP)return this._activate(this._focusNextTab(this.options.active-1,!1)),!0;if(t.altKey&&t.keyCode===e.ui.keyCode.PAGE_DOWN)return this._activate(this._focusNextTab(this.options.active+1,!0)),!0},_findNextTab:function(t,n){function i(){return t>r&&(t=0),t<0&&(t=r),t}var r=this.tabs.length-1;while(e.inArray(i(),this.options.disabled)!==-1)t=n?t+1:t-1;return t},_focusNextTab:function(e,t){return e=this._findNextTab(e,t),this.tabs.eq(e).focus(),e},_setOption:function(e,t){if(e==="active"){this._activate(t);return}if(e==="disabled"){this._setupDisabled(t);return}this._super(e,t),e==="collapsible"&&(this.element.toggleClass("ui-tabs-collapsible",t),!t&&this.options.active===!1&&this._activate(0)),e==="event"&&this._setupEvents(t),e==="heightStyle"&&this._setupHeightStyle(t)},_tabId:function(e){return e.attr("aria-controls")||"ui-tabs-"+i()},_sanitizeSelector:function(e){return e?e.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var t=this.options,n=this.tablist.children(":has(a[href])");t.disabled=e.map(n.filter(".ui-state-disabled"),function(e){return n.index(e)}),this._processTabs(),t.active===!1||!this.anchors.length?(t.active=!1,this.active=e()):this.active.length&&!e.contains(this.tablist[0],this.active[0])?this.tabs.length===t.disabled.length?(t.active=!1,this.active=e()):this._activate(this._findNextTab(Math.max(0,t.active-1),!1)):t.active=this.tabs.index(this.active),this._refresh()},_refresh:function(){this._setupDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-expanded":"false","aria-hidden":"true"}),this.active.length?(this.active.addClass("ui-tabs-active ui-state-active").attr({"aria-selected":"true",tabIndex:0}),this._getPanelForTab(this.active).show().attr({"aria-expanded":"true","aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var t=this;this.tablist=this._getList().addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").attr("role","tablist"),this.tabs=this.tablist.find("> li:has(a[href])").addClass("ui-state-default ui-corner-top").attr({role:"tab",tabIndex:-1}),this.anchors=this.tabs.map(function(){return e("a",this)[0]}).addClass("ui-tabs-anchor").attr({role:"presentation",tabIndex:-1}),this.panels=e(),this.anchors.each(function(n,r){var i,o,u,a=e(r).uniqueId().attr("id"),f=e(r).closest("li"),l=f.attr("aria-controls");s(r)?(i=r.hash,o=t.element.find(t._sanitizeSelector(i))):(u=t._tabId(f),i="#"+u,o=t.element.find(i),o.length||(o=t._createPanel(u),o.insertAfter(t.panels[n-1]||t.tablist)),o.attr("aria-live","polite")),o.length&&(t.panels=t.panels.add(o)),l&&f.data("ui-tabs-aria-controls",l),f.attr({"aria-controls":i.substring(1),"aria-labelledby":a}),o.attr("aria-labelledby",a)}),this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").attr("role","tabpanel")},_getList:function(){return this.element.find("ol,ul").eq(0)},_createPanel:function(t){return e("
    ").attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)},_setupDisabled:function(t){e.isArray(t)&&(t.length?t.length===this.anchors.length&&(t=!0):t=!1);for(var n=0,r;r=this.tabs[n];n++)t===!0||e.inArray(n,t)!==-1?e(r).addClass("ui-state-disabled").attr("aria-disabled","true"):e(r).removeClass("ui-state-disabled").removeAttr("aria-disabled");this.options.disabled=t},_setupEvents:function(t){var n={click:function(e){e.preventDefault()}};t&&e.each(t.split(" "),function(e,t){n[t]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(this.anchors,n),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(t){var n,r,i=this.element.parent();t==="fill"?(e.support.minHeight||(r=i.css("overflow"),i.css("overflow","hidden")),n=i.height(),this.element.siblings(":visible").each(function(){var t=e(this),r=t.css("position");if(r==="absolute"||r==="fixed")return;n-=t.outerHeight(!0)}),r&&i.css("overflow",r),this.element.children().not(this.panels).each(function(){n-=e(this).outerHeight(!0)}),this.panels.each(function(){e(this).height(Math.max(0,n-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):t==="auto"&&(n=0,this.panels.each(function(){n=Math.max(n,e(this).height("").height())}).height(n))},_eventHandler:function(t){var n=this.options,r=this.active,i=e(t.currentTarget),s=i.closest("li"),o=s[0]===r[0],u=o&&n.collapsible,a=u?e():this._getPanelForTab(s),f=r.length?this._getPanelForTab(r):e(),l={oldTab:r,oldPanel:f,newTab:u?e():s,newPanel:a};t.preventDefault();if(s.hasClass("ui-state-disabled")||s.hasClass("ui-tabs-loading")||this.running||o&&!n.collapsible||this._trigger("beforeActivate",t,l)===!1)return;n.active=u?!1:this.tabs.index(s),this.active=o?e():s,this.xhr&&this.xhr.abort(),!f.length&&!a.length&&e.error("jQuery UI Tabs: Mismatching fragment identifier."),a.length&&this.load(this.tabs.index(s),t),this._toggle(t,l)},_toggle:function(t,n){function o(){r.running=!1,r._trigger("activate",t,n)}function u(){n.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),i.length&&r.options.show?r._show(i,r.options.show,o):(i.show(),o())}var r=this,i=n.newPanel,s=n.oldPanel;this.running=!0,s.length&&this.options.hide?this._hide(s,this.options.hide,function(){n.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),u()}):(n.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),s.hide(),u()),s.attr({"aria-expanded":"false","aria-hidden":"true"}),n.oldTab.attr("aria-selected","false"),i.length&&s.length?n.oldTab.attr("tabIndex",-1):i.length&&this.tabs.filter(function(){return e(this).attr("tabIndex")===0}).attr("tabIndex",-1),i.attr({"aria-expanded":"true","aria-hidden":"false"}),n.newTab.attr({"aria-selected":"true",tabIndex:0})},_activate:function(t){var n,r=this._findActive(t);if(r[0]===this.active[0])return;r.length||(r=this.active),n=r.find(".ui-tabs-anchor")[0],this._eventHandler({target:n,currentTarget:n,preventDefault:e.noop})},_findActive:function(t){return t===!1?e():this.tabs.eq(t)},_getIndex:function(e){return typeof e=="string"&&(e=this.anchors.index(this.anchors.filter("[href$='"+e+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.element.removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible"),this.tablist.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all").removeAttr("role"),this.anchors.removeClass("ui-tabs-anchor").removeAttr("role").removeAttr("tabIndex").removeData("href.tabs").removeData("load.tabs").removeUniqueId(),this.tabs.add(this.panels).each(function(){e.data(this,"ui-tabs-destroy")?e(this).remove():e(this).removeClass("ui-state-default ui-state-active ui-state-disabled ui-corner-top ui-corner-bottom ui-widget-content ui-tabs-active ui-tabs-panel").removeAttr("tabIndex").removeAttr("aria-live").removeAttr("aria-busy").removeAttr("aria-selected").removeAttr("aria-labelledby").removeAttr("aria-hidden").removeAttr("aria-expanded").removeAttr("role")}),this.tabs.each(function(){var t=e(this),n=t.data("ui-tabs-aria-controls");n?t.attr("aria-controls",n):t.removeAttr("aria-controls")}),this.panels.show(),this.options.heightStyle!=="content"&&this.panels.css("height","")},enable:function(n){var r=this.options.disabled;if(r===!1)return;n===t?r=!1:(n=this._getIndex(n),e.isArray(r)?r=e.map(r,function(e){return e!==n?e:null}):r=e.map(this.tabs,function(e,t){return t!==n?t:null})),this._setupDisabled(r)},disable:function(n){var r=this.options.disabled;if(r===!0)return;if(n===t)r=!0;else{n=this._getIndex(n);if(e.inArray(n,r)!==-1)return;e.isArray(r)?r=e.merge([n],r).sort():r=[n]}this._setupDisabled(r)},load:function(t,n){t=this._getIndex(t);var r=this,i=this.tabs.eq(t),o=i.find(".ui-tabs-anchor"),u=this._getPanelForTab(i),a={tab:i,panel:u};if(s(o[0]))return;this.xhr=e.ajax(this._ajaxSettings(o,n,a)),this.xhr&&this.xhr.statusText!=="canceled"&&(i.addClass("ui-tabs-loading"),u.attr("aria-busy","true"),this.xhr.success(function(e){setTimeout(function(){u.html(e),r._trigger("load",n,a)},1)}).complete(function(e,t){setTimeout(function(){t==="abort"&&r.panels.stop(!1,!0),i.removeClass("ui-tabs-loading"),u.removeAttr("aria-busy"),e===r.xhr&&delete r.xhr},1)}))},_ajaxSettings:function(t,n,r){var i=this;return{url:t.attr("href"),beforeSend:function(t,s){return i._trigger("beforeLoad",n,e.extend({jqXHR:t,ajaxSettings:s},r))}}},_getPanelForTab:function(t){var n=e(t).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+n))}}),e.uiBackCompat!==!1&&(e.ui.tabs.prototype._ui=function(e,t){return{tab:e,panel:t,index:this.anchors.index(e)}},e.widget("ui.tabs",e.ui.tabs,{url:function(e,t){this.anchors.eq(e).attr("href",t)}}),e.widget("ui.tabs",e.ui.tabs,{options:{ajaxOptions:null,cache:!1},_create:function(){this._super();var t=this;this._on({tabsbeforeload:function(n,r){if(e.data(r.tab[0],"cache.tabs")){n.preventDefault();return}r.jqXHR.success(function(){t.options.cache&&e.data(r.tab[0],"cache.tabs",!0)})}})},_ajaxSettings:function(t,n,r){var i=this.options.ajaxOptions;return e.extend({},i,{error:function(e,t){try{i.error(e,t,r.tab.closest("li").index(),r.tab[0])}catch(n){}}},this._superApply(arguments))},_setOption:function(e,t){e==="cache"&&t===!1&&this.anchors.removeData("cache.tabs"),this._super(e,t)},_destroy:function(){this.anchors.removeData("cache.tabs"),this._super()},url:function(e){this.anchors.eq(e).removeData("cache.tabs"),this._superApply(arguments)}}),e.widget("ui.tabs",e.ui.tabs,{abort:function(){this.xhr&&this.xhr.abort()}}),e.widget("ui.tabs",e.ui.tabs,{options:{spinner:"Loading…"},_create:function(){this._super(),this._on({tabsbeforeload:function(e,t){if(e.target!==this.element[0]||!this.options.spinner)return;var n=t.tab.find("span"),r=n.html();n.html(this.options.spinner),t.jqXHR.complete(function(){n.html(r)})}})}}),e.widget("ui.tabs",e.ui.tabs,{options:{enable:null,disable:null},enable:function(t){var n=this.options,r;if(t&&n.disabled===!0||e.isArray(n.disabled)&&e.inArray(t,n.disabled)!==-1)r=!0;this._superApply(arguments),r&&this._trigger("enable",null,this._ui(this.anchors[t],this.panels[t]))},disable:function(t){var n=this.options,r;if(t&&n.disabled===!1||e.isArray(n.disabled)&&e.inArray(t,n.disabled)===-1)r=!0;this._superApply(arguments),r&&this._trigger("disable",null,this._ui(this.anchors[t],this.panels[t]))}}),e.widget("ui.tabs",e.ui.tabs,{options:{add:null,remove:null,tabTemplate:"
  25. #{label}
  26. "},add:function(n,r,i){i===t&&(i=this.anchors.length);var s,o,u=this.options,a=e(u.tabTemplate.replace(/#\{href\}/g,n).replace(/#\{label\}/g,r)),f=n.indexOf("#")?this._tabId(a):n.replace("#","");return a.addClass("ui-state-default ui-corner-top").data("ui-tabs-destroy",!0),a.attr("aria-controls",f),s=i>=this.tabs.length,o=this.element.find("#"+f),o.length||(o=this._createPanel(f),s?i>0?o.insertAfter(this.panels.eq(-1)):o.appendTo(this.element):o.insertBefore(this.panels[i])),o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").hide(),s?a.appendTo(this.tablist):a.insertBefore(this.tabs[i]),u.disabled=e.map(u.disabled,function(e){return e>=i?++e:e}),this.refresh(),this.tabs.length===1&&u.active===!1&&this.option("active",0),this._trigger("add",null,this._ui(this.anchors[i],this.panels[i])),this},remove:function(t){t=this._getIndex(t);var n=this.options,r=this.tabs.eq(t).remove(),i=this._getPanelForTab(r).remove();return r.hasClass("ui-tabs-active")&&this.anchors.length>2&&this._activate(t+(t+1=t?--e:e}),this.refresh(),this._trigger("remove",null,this._ui(r.find("a")[0],i[0])),this}}),e.widget("ui.tabs",e.ui.tabs,{length:function(){return this.anchors.length}}),e.widget("ui.tabs",e.ui.tabs,{options:{idPrefix:"ui-tabs-"},_tabId:function(t){var n=t.is("li")?t.find("a[href]"):t;return n=n[0],e(n).closest("li").attr("aria-controls")||n.title&&n.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF\-]/g,"")||this.options.idPrefix+i()}}),e.widget("ui.tabs",e.ui.tabs,{options:{panelTemplate:"
    "},_createPanel:function(t){return e(this.options.panelTemplate).attr("id",t).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").data("ui-tabs-destroy",!0)}}),e.widget("ui.tabs",e.ui.tabs,{_create:function(){var e=this.options;e.active===null&&e.selected!==t&&(e.active=e.selected===-1?!1:e.selected),this._super(),e.selected=e.active,e.selected===!1&&(e.selected=-1)},_setOption:function(e,t){if(e!=="selected")return this._super(e,t);var n=this.options;this._super("active",t===-1?!1:t),n.selected=n.active,n.selected===!1&&(n.selected=-1)},_eventHandler:function(){this._superApply(arguments),this.options.selected=this.options.active,this.options.selected===!1&&(this.options.selected=-1)}}),e.widget("ui.tabs",e.ui.tabs,{options:{show:null,select:null},_create:function(){this._super(),this.options.active!==!1&&this._trigger("show",null,this._ui(this.active.find(".ui-tabs-anchor")[0],this._getPanelForTab(this.active)[0]))},_trigger:function(e,t,n){var r,i,s=this._superApply(arguments);return s?(e==="beforeActivate"?(r=n.newTab.length?n.newTab:n.oldTab,i=n.newPanel.length?n.newPanel:n.oldPanel,s=this._super("select",t,{tab:r.find(".ui-tabs-anchor")[0],panel:i[0],index:r.closest("li").index()})):e==="activate"&&n.newTab.length&&(s=this._super("show",t,{tab:n.newTab.find(".ui-tabs-anchor")[0],panel:n.newPanel[0],index:n.newTab.closest("li").index()})),s):!1}}),e.widget("ui.tabs",e.ui.tabs,{select:function(e){e=this._getIndex(e);if(e===-1){if(!this.options.collapsible||this.options.selected===-1)return;e=this.options.selected}this.anchors.eq(e).trigger(this.options.event+this.eventNamespace)}}),function(){var t=0;e.widget("ui.tabs",e.ui.tabs,{options:{cookie:null},_create:function(){var e=this.options,t;e.active==null&&e.cookie&&(t=parseInt(this._cookie(),10),t===-1&&(t=!1),e.active=t),this._super()},_cookie:function(n){var r=[this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+ ++t)];return arguments.length&&(r.push(n===!1?-1:n),r.push(this.options.cookie)),e.cookie.apply(null,r)},_refresh:function(){this._super(),this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},_eventHandler:function(){this._superApply(arguments),this.options.cookie&&this._cookie(this.options.active,this.options.cookie)},_destroy:function(){this._super(),this.options.cookie&&this._cookie(null,this.options.cookie)}})}(),e.widget("ui.tabs",e.ui.tabs,{_trigger:function(t,n,r){var i=e.extend({},r);return t==="load"&&(i.panel=i.panel[0],i.tab=i.tab.find(".ui-tabs-anchor")[0]),this._super(t,n,i)}}),e.widget("ui.tabs",e.ui.tabs,{options:{fx:null},_getFx:function(){var t,n,r=this.options.fx;return r&&(e.isArray(r)?(t=r[0],n=r[1]):t=n=r),r?{show:n,hide:t}:null},_toggle:function(e,t){function o(){n.running=!1,n._trigger("activate",e,t)}function u(){t.newTab.closest("li").addClass("ui-tabs-active ui-state-active"),r.length&&s.show?r.animate(s.show,s.show.duration,function(){o()}):(r.show(),o())}var n=this,r=t.newPanel,i=t.oldPanel,s=this._getFx();if(!s)return this._super(e,t);n.running=!0,i.length&&s.hide?i.animate(s.hide,s.hide.duration,function(){t.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),u()}):(t.oldTab.closest("li").removeClass("ui-tabs-active ui-state-active"),i.hide(),u())}}))})(jQuery);(function(e){function n(t,n){var r=(t.attr("aria-describedby")||"").split(/\s+/);r.push(n),t.data("ui-tooltip-id",n).attr("aria-describedby",e.trim(r.join(" ")))}function r(t){var n=t.data("ui-tooltip-id"),r=(t.attr("aria-describedby")||"").split(/\s+/),i=e.inArray(n,r);i!==-1&&r.splice(i,1),t.removeData("ui-tooltip-id"),r=e.trim(r.join(" ")),r?t.attr("aria-describedby",r):t.removeAttr("aria-describedby")}var t=0;e.widget("ui.tooltip",{version:"1.9.2",options:{content:function(){return e(this).attr("title")},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,tooltipClass:null,track:!1,close:null,open:null},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.options.disabled&&this._disable()},_setOption:function(t,n){var r=this;if(t==="disabled"){this[n?"_disable":"_enable"](),this.options[t]=n;return}this._super(t,n),t==="content"&&e.each(this.tooltips,function(e,t){r._updateContent(t)})},_disable:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0)}),this.element.find(this.options.items).andSelf().each(function(){var t=e(this);t.is("[title]")&&t.data("ui-tooltip-title",t.attr("title")).attr("title","")})},_enable:function(){this.element.find(this.options.items).andSelf().each(function(){var t=e(this);t.data("ui-tooltip-title")&&t.attr("title",t.data("ui-tooltip-title"))})},open:function(t){var n=this,r=e(t?t.target:this.element).closest(this.options.items);if(!r.length||r.data("ui-tooltip-id"))return;r.attr("title")&&r.data("ui-tooltip-title",r.attr("title")),r.data("ui-tooltip-open",!0),t&&t.type==="mouseover"&&r.parents().each(function(){var t=e(this),r;t.data("ui-tooltip-open")&&(r=e.Event("blur"),r.target=r.currentTarget=this,n.close(r,!0)),t.attr("title")&&(t.uniqueId(),n.parents[this.id]={element:this,title:t.attr("title")},t.attr("title",""))}),this._updateContent(r,t)},_updateContent:function(e,t){var n,r=this.options.content,i=this,s=t?t.type:null;if(typeof r=="string")return this._open(t,e,r);n=r.call(e[0],function(n){if(!e.data("ui-tooltip-open"))return;i._delay(function(){t&&(t.type=s),this._open(t,e,n)})}),n&&this._open(t,e,n)},_open:function(t,r,i){function f(e){a.of=e;if(s.is(":hidden"))return;s.position(a)}var s,o,u,a=e.extend({},this.options.position);if(!i)return;s=this._find(r);if(s.length){s.find(".ui-tooltip-content").html(i);return}r.is("[title]")&&(t&&t.type==="mouseover"?r.attr("title",""):r.removeAttr("title")),s=this._tooltip(r),n(r,s.attr("id")),s.find(".ui-tooltip-content").html(i),this.options.track&&t&&/^mouse/.test(t.type)?(this._on(this.document,{mousemove:f}),f(t)):s.position(e.extend({of:r},this.options.position)),s.hide(),this._show(s,this.options.show),this.options.show&&this.options.show.delay&&(u=setInterval(function(){s.is(":visible")&&(f(a.of),clearInterval(u))},e.fx.interval)),this._trigger("open",t,{tooltip:s}),o={keyup:function(t){if(t.keyCode===e.ui.keyCode.ESCAPE){var n=e.Event(t);n.currentTarget=r[0],this.close(n,!0)}},remove:function(){this._removeTooltip(s)}};if(!t||t.type==="mouseover")o.mouseleave="close";if(!t||t.type==="focusin")o.focusout="close";this._on(!0,r,o)},close:function(t){var n=this,i=e(t?t.currentTarget:this.element),s=this._find(i);if(this.closing)return;i.data("ui-tooltip-title")&&i.attr("title",i.data("ui-tooltip-title")),r(i),s.stop(!0),this._hide(s,this.options.hide,function(){n._removeTooltip(e(this))}),i.removeData("ui-tooltip-open"),this._off(i,"mouseleave focusout keyup"),i[0]!==this.element[0]&&this._off(i,"remove"),this._off(this.document,"mousemove"),t&&t.type==="mouseleave"&&e.each(this.parents,function(t,r){e(r.element).attr("title",r.title),delete n.parents[t]}),this.closing=!0,this._trigger("close",t,{tooltip:s}),this.closing=!1},_tooltip:function(n){var r="ui-tooltip-"+t++,i=e("
    ").attr({id:r,role:"tooltip"}).addClass("ui-tooltip ui-widget ui-corner-all ui-widget-content "+(this.options.tooltipClass||""));return e("
    ").addClass("ui-tooltip-content").appendTo(i),i.appendTo(this.document[0].body),e.fn.bgiframe&&i.bgiframe(),this.tooltips[r]=n,i},_find:function(t){var n=t.data("ui-tooltip-id");return n?e("#"+n):e()},_removeTooltip:function(e){e.remove(),delete this.tooltips[e.attr("id")]},_destroy:function(){var t=this;e.each(this.tooltips,function(n,r){var i=e.Event("blur");i.target=i.currentTarget=r[0],t.close(i,!0),e("#"+n).remove(),r.data("ui-tooltip-title")&&(r.attr("title",r.data("ui-tooltip-title")),r.removeData("ui-tooltip-title"))})}})})(jQuery); \ No newline at end of file +(function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)})(function(e){function t(t,s){var n,a,o,r=t.nodeName.toLowerCase();return"area"===r?(n=t.parentNode,a=n.name,t.href&&a&&"map"===n.nodeName.toLowerCase()?(o=e("img[usemap='#"+a+"']")[0],!!o&&i(o)):!1):(/input|select|textarea|button|object/.test(r)?!t.disabled:"a"===r?t.href||s:s)&&i(t)}function i(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}function s(e){for(var t,i;e.length&&e[0]!==document;){if(t=e.css("position"),("absolute"===t||"relative"===t||"fixed"===t)&&(i=parseInt(e.css("zIndex"),10),!isNaN(i)&&0!==i))return i;e=e.parent()}return 0}function n(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},e.extend(this._defaults,this.regional[""]),this.regional.en=e.extend(!0,{},this.regional[""]),this.regional["en-US"]=e.extend(!0,{},this.regional.en),this.dpDiv=a(e("
    "))}function a(t){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return t.delegate(i,"mouseout",function(){e(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).removeClass("ui-datepicker-next-hover")}).delegate(i,"mouseover",o)}function o(){e.datepicker._isDisabledDatepicker(v.inline?v.dpDiv.parent()[0]:v.input[0])||(e(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),e(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&e(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&e(this).addClass("ui-datepicker-next-hover"))}function r(t,i){e.extend(t,i);for(var s in i)null==i[s]&&(t[s]=i[s]);return t}function h(e){return function(){var t=this.element.val();e.apply(this,arguments),this._refresh(),t!==this.element.val()&&this._trigger("change")}}e.ui=e.ui||{},e.extend(e.ui,{version:"1.11.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({scrollParent:function(t){var i=this.css("position"),s="absolute"===i,n=t?/(auto|scroll|hidden)/:/(auto|scroll)/,a=this.parents().filter(function(){var t=e(this);return s&&"static"===t.css("position")?!1:n.test(t.css("overflow")+t.css("overflow-y")+t.css("overflow-x"))}).eq(0);return"fixed"!==i&&a.length?a:e(this[0].ownerDocument||document)},uniqueId:function(){var e=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++e)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(i){return t(i,!isNaN(e.attr(i,"tabindex")))},tabbable:function(i){var s=e.attr(i,"tabindex"),n=isNaN(s);return(n||s>=0)&&t(i,!n)}}),e("").outerWidth(1).jquery||e.each(["Width","Height"],function(t,i){function s(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],a=i.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+i]=function(t){return void 0===t?o["inner"+i].call(this):this.each(function(){e(this).css(a,s(this,t)+"px")})},e.fn["outer"+i]=function(t,n){return"number"!=typeof t?o["outer"+i].call(this,t):this.each(function(){e(this).css(a,s(this,t,!0,n)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),disableSelection:function(){var e="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.bind(e+".ui-disableSelection",function(e){e.preventDefault()})}}(),enableSelection:function(){return this.unbind(".ui-disableSelection")},zIndex:function(t){if(void 0!==t)return this.css("zIndex",t);if(this.length)for(var i,s,n=e(this[0]);n.length&&n[0]!==document;){if(i=n.css("position"),("absolute"===i||"relative"===i||"fixed"===i)&&(s=parseInt(n.css("zIndex"),10),!isNaN(s)&&0!==s))return s;n=n.parent()}return 0}}),e.ui.plugin={add:function(t,i,s){var n,a=e.ui[t].prototype;for(n in s)a.plugins[n]=a.plugins[n]||[],a.plugins[n].push([i,s[n]])},call:function(e,t,i,s){var n,a=e.plugins[t];if(a&&(s||e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType))for(n=0;a.length>n;n++)e.options[a[n][0]]&&a[n][1].apply(e.element,i)}};var l=0,u=Array.prototype.slice;e.cleanData=function(t){return function(i){var s,n,a;for(a=0;null!=(n=i[a]);a++)try{s=e._data(n,"events"),s&&s.remove&&e(n).triggerHandler("remove")}catch(o){}t(i)}}(e.cleanData),e.widget=function(t,i,s){var n,a,o,r,h={},l=t.split(".")[0];return t=t.split(".")[1],n=l+"-"+t,s||(s=i,i=e.Widget),e.expr[":"][n.toLowerCase()]=function(t){return!!e.data(t,n)},e[l]=e[l]||{},a=e[l][t],o=e[l][t]=function(e,t){return this._createWidget?(arguments.length&&this._createWidget(e,t),void 0):new o(e,t)},e.extend(o,a,{version:s.version,_proto:e.extend({},s),_childConstructors:[]}),r=new i,r.options=e.widget.extend({},r.options),e.each(s,function(t,s){return e.isFunction(s)?(h[t]=function(){var e=function(){return i.prototype[t].apply(this,arguments)},n=function(e){return i.prototype[t].apply(this,e)};return function(){var t,i=this._super,a=this._superApply;return this._super=e,this._superApply=n,t=s.apply(this,arguments),this._super=i,this._superApply=a,t}}(),void 0):(h[t]=s,void 0)}),o.prototype=e.widget.extend(r,{widgetEventPrefix:a?r.widgetEventPrefix||t:t},h,{constructor:o,namespace:l,widgetName:t,widgetFullName:n}),a?(e.each(a._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete a._childConstructors):i._childConstructors.push(o),e.widget.bridge(t,o),o},e.widget.extend=function(t){for(var i,s,n=u.call(arguments,1),a=0,o=n.length;o>a;a++)for(i in n[a])s=n[a][i],n[a].hasOwnProperty(i)&&void 0!==s&&(t[i]=e.isPlainObject(s)?e.isPlainObject(t[i])?e.widget.extend({},t[i],s):e.widget.extend({},s):s);return t},e.widget.bridge=function(t,i){var s=i.prototype.widgetFullName||t;e.fn[t]=function(n){var a="string"==typeof n,o=u.call(arguments,1),r=this;return n=!a&&o.length?e.widget.extend.apply(null,[n].concat(o)):n,a?this.each(function(){var i,a=e.data(this,s);return"instance"===n?(r=a,!1):a?e.isFunction(a[n])&&"_"!==n.charAt(0)?(i=a[n].apply(a,o),i!==a&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):e.error("no such method '"+n+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; "+"attempted to call method '"+n+"'")}):this.each(function(){var t=e.data(this,s);t?(t.option(n||{}),t._init&&t._init()):e.data(this,s,new i(n,this))}),r}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{disabled:!1,create:null},_createWidget:function(t,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=l++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,i){var s,n,a,o=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(o={},s=t.split("."),t=s.shift(),s.length){for(n=o[t]=e.widget.extend({},this.options[t]),a=0;s.length-1>a;a++)n[s[a]]=n[s[a]]||{},n=n[s[a]];if(t=s.pop(),1===arguments.length)return void 0===n[t]?null:n[t];n[t]=i}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=i}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled",!!t),t&&(this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus"))),this},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_on:function(t,i,s){var n,a=this;"boolean"!=typeof t&&(s=i,i=t,t=!1),s?(i=n=e(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),e.each(s,function(s,o){function r(){return t||a.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?a[o]:o).apply(a,arguments):void 0}"string"!=typeof o&&(r.guid=o.guid=o.guid||r.guid||e.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+a.eventNamespace,u=h[2];u?n.delegate(u,l,r):i.bind(l,r)})},_off:function(t,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.unbind(i).undelegate(i),this.bindings=e(this.bindings.not(t).get()),this.focusable=e(this.focusable.not(t).get()),this.hoverable=e(this.hoverable.not(t).get())},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,o=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(o)&&o.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var o,r=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),o=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),o&&e.effects&&e.effects.effect[r]?s[t](n):r!==t&&s[r]?s[r](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}}),e.widget;var d=!1;e(document).mouseup(function(){d=!1}),e.widget("ui.mouse",{version:"1.11.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(t){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(t),this._mouseDownEvent=t;var i=this,s=1===t.which,n="string"==typeof this.options.cancel&&t.target.nodeName?e(t.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(t)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(t)!==!1,!this._mouseStarted)?(t.preventDefault(),!0):(!0===e.data(t.target,this.widgetName+".preventClickEvent")&&e.removeData(t.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return i._mouseMove(e)},this._mouseUpDelegate=function(e){return i._mouseUp(e)},this.document.bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),t.preventDefault(),d=!0,!0)):!0}},_mouseMove:function(t){if(this._mouseMoved){if(e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button)return this._mouseUp(t);if(!t.which)return this._mouseUp(t)}return(t.which||t.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return this.document.unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),d=!1,!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),function(){function t(e,t,i){return[parseFloat(e[0])*(p.test(e[0])?t/100:1),parseFloat(e[1])*(p.test(e[1])?i/100:1)]}function i(t,i){return parseInt(e.css(t,i),10)||0}function s(t){var i=t[0];return 9===i.nodeType?{width:t.width(),height:t.height(),offset:{top:0,left:0}}:e.isWindow(i)?{width:t.width(),height:t.height(),offset:{top:t.scrollTop(),left:t.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:t.outerWidth(),height:t.outerHeight(),offset:t.offset()}}e.ui=e.ui||{};var n,a,o=Math.max,r=Math.abs,h=Math.round,l=/left|center|right/,u=/top|center|bottom/,d=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,p=/%$/,f=e.fn.position;e.position={scrollbarWidth:function(){if(void 0!==n)return n;var t,i,s=e("
    "),a=s.children()[0];return e("body").append(s),t=a.offsetWidth,s.css("overflow","scroll"),i=a.offsetWidth,t===i&&(i=s[0].clientWidth),s.remove(),n=t-i},getScrollInfo:function(t){var i=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),s=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),n="scroll"===i||"auto"===i&&t.widthi?"left":t>0?"right":"center",vertical:0>a?"top":s>0?"bottom":"middle"};d>m&&m>r(t+i)&&(h.horizontal="center"),c>g&&g>r(s+a)&&(h.vertical="middle"),h.important=o(r(t),r(i))>o(r(s),r(a))?"horizontal":"vertical",n.using.call(this,e,h)}),u.offset(e.extend(M,{using:l}))})},e.ui.position={fit:{left:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=e.left-t.collisionPosition.marginLeft,h=n-r,l=r+t.collisionWidth-a-n;t.collisionWidth>a?h>0&&0>=l?(i=e.left+h+t.collisionWidth-a-n,e.left+=h-i):e.left=l>0&&0>=h?n:h>l?n+a-t.collisionWidth:n:h>0?e.left+=h:l>0?e.left-=l:e.left=o(e.left-r,e.left)},top:function(e,t){var i,s=t.within,n=s.isWindow?s.scrollTop:s.offset.top,a=t.within.height,r=e.top-t.collisionPosition.marginTop,h=n-r,l=r+t.collisionHeight-a-n;t.collisionHeight>a?h>0&&0>=l?(i=e.top+h+t.collisionHeight-a-n,e.top+=h-i):e.top=l>0&&0>=h?n:h>l?n+a-t.collisionHeight:n:h>0?e.top+=h:l>0?e.top-=l:e.top=o(e.top-r,e.top)}},flip:{left:function(e,t){var i,s,n=t.within,a=n.offset.left+n.scrollLeft,o=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=e.left-t.collisionPosition.marginLeft,u=l-h,d=l+t.collisionWidth-o-h,c="left"===t.my[0]?-t.elemWidth:"right"===t.my[0]?t.elemWidth:0,p="left"===t.at[0]?t.targetWidth:"right"===t.at[0]?-t.targetWidth:0,f=-2*t.offset[0];0>u?(i=e.left+c+p+f+t.collisionWidth-o-a,(0>i||r(u)>i)&&(e.left+=c+p+f)):d>0&&(s=e.left-t.collisionPosition.marginLeft+c+p+f-h,(s>0||d>r(s))&&(e.left+=c+p+f))},top:function(e,t){var i,s,n=t.within,a=n.offset.top+n.scrollTop,o=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=e.top-t.collisionPosition.marginTop,u=l-h,d=l+t.collisionHeight-o-h,c="top"===t.my[1],p=c?-t.elemHeight:"bottom"===t.my[1]?t.elemHeight:0,f="top"===t.at[1]?t.targetHeight:"bottom"===t.at[1]?-t.targetHeight:0,m=-2*t.offset[1];0>u?(s=e.top+p+f+m+t.collisionHeight-o-a,e.top+p+f+m>u&&(0>s||r(u)>s)&&(e.top+=p+f+m)):d>0&&(i=e.top-t.collisionPosition.marginTop+p+f+m-h,e.top+p+f+m>d&&(i>0||d>r(i))&&(e.top+=p+f+m))}},flipfit:{left:function(){e.ui.position.flip.left.apply(this,arguments),e.ui.position.fit.left.apply(this,arguments)},top:function(){e.ui.position.flip.top.apply(this,arguments),e.ui.position.fit.top.apply(this,arguments)}}},function(){var t,i,s,n,o,r=document.getElementsByTagName("body")[0],h=document.createElement("div");t=document.createElement(r?"div":"body"),s={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},r&&e.extend(s,{position:"absolute",left:"-1000px",top:"-1000px"});for(o in s)t.style[o]=s[o];t.appendChild(h),i=r||document.documentElement,i.insertBefore(t,i.firstChild),h.style.cssText="position: absolute; left: 10.7432222px;",n=e(h).offset().left,a=n>10&&11>n,t.innerHTML="",i.removeChild(t)}()}(),e.ui.position,e.widget("ui.accordion",{version:"1.11.2",options:{active:0,animate:{},collapsible:!1,event:"click",header:"> li > :first-child,> :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var t=this.options;this.prevShow=this.prevHide=e(),this.element.addClass("ui-accordion ui-widget ui-helper-reset").attr("role","tablist"),t.collapsible||t.active!==!1&&null!=t.active||(t.active=0),this._processPanels(),0>t.active&&(t.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():e()}},_createIcons:function(){var t=this.options.icons;t&&(e("").addClass("ui-accordion-header-icon ui-icon "+t.header).prependTo(this.headers),this.active.children(".ui-accordion-header-icon").removeClass(t.header).addClass(t.activeHeader),this.headers.addClass("ui-accordion-icons"))},_destroyIcons:function(){this.headers.removeClass("ui-accordion-icons").children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role"),this.headers.removeClass("ui-accordion-header ui-accordion-header-active ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("aria-controls").removeAttr("tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-state-disabled").css("display","").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){return"active"===e?(this._activate(t),void 0):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||this.options.active!==!1||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()),"disabled"===e&&(this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this.headers.add(this.headers.next()).toggleClass("ui-state-disabled",!!t)),void 0)},_keydown:function(t){if(!t.altKey&&!t.ctrlKey){var i=e.ui.keyCode,s=this.headers.length,n=this.headers.index(t.target),a=!1;switch(t.keyCode){case i.RIGHT:case i.DOWN:a=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:a=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(t);break;case i.HOME:a=this.headers[0];break;case i.END:a=this.headers[s-1]}a&&(e(t.target).attr("tabIndex",-1),e(a).attr("tabIndex",0),a.focus(),t.preventDefault())}},_panelKeyDown:function(t){t.keyCode===e.ui.keyCode.UP&&t.ctrlKey&&e(t.currentTarget).prev().focus()},refresh:function(){var t=this.options;this._processPanels(),t.active===!1&&t.collapsible===!0||!this.headers.length?(t.active=!1,this.active=e()):t.active===!1?this._activate(0):this.active.length&&!e.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(t.active=!1,this.active=e()):this._activate(Math.max(0,t.active-1)):t.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;this.headers=this.element.find(this.options.header).addClass("ui-accordion-header ui-state-default ui-corner-all"),this.panels=this.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom").filter(":not(.ui-accordion-content-active)").hide(),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var t,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active).addClass("ui-accordion-header-active ui-state-active ui-corner-top").removeClass("ui-corner-all"),this.active.next().addClass("ui-accordion-content-active").show(),this.headers.attr("role","tab").each(function(){var t=e(this),i=t.uniqueId().attr("id"),s=t.next(),n=s.uniqueId().attr("id");t.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(t=n.height(),this.element.siblings(":visible").each(function(){var i=e(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(t-=i.outerHeight(!0))}),this.headers.each(function(){t-=e(this).outerHeight(!0)}),this.headers.next().each(function(){e(this).height(Math.max(0,t-e(this).innerHeight()+e(this).height()))}).css("overflow","auto")):"auto"===s&&(t=0,this.headers.next().each(function(){t=Math.max(t,e(this).css("height","").height())}).height(t))},_activate:function(t){var i=this._findActive(t)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:e.noop}))},_findActive:function(t){return"number"==typeof t?this.headers.eq(t):e()},_setupEvents:function(t){var i={keydown:"_keydown"};t&&e.each(t.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(t){var i=this.options,s=this.active,n=e(t.currentTarget),a=n[0]===s[0],o=a&&i.collapsible,r=o?e():n.next(),h=s.next(),l={oldHeader:s,oldPanel:h,newHeader:o?e():n,newPanel:r};t.preventDefault(),a&&!i.collapsible||this._trigger("beforeActivate",t,l)===!1||(i.active=o?!1:this.headers.index(n),this.active=a?e():n,this._toggle(l),s.removeClass("ui-accordion-header-active ui-state-active"),i.icons&&s.children(".ui-accordion-header-icon").removeClass(i.icons.activeHeader).addClass(i.icons.header),a||(n.removeClass("ui-corner-all").addClass("ui-accordion-header-active ui-state-active ui-corner-top"),i.icons&&n.children(".ui-accordion-header-icon").removeClass(i.icons.header).addClass(i.icons.activeHeader),n.next().addClass("ui-accordion-content-active")))},_toggle:function(t){var i=t.newPanel,s=this.prevShow.length?this.prevShow:t.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,t):(s.hide(),i.show(),this._toggleComplete(t)),s.attr({"aria-hidden":"true"}),s.prev().attr("aria-selected","false"),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===e(this).attr("tabIndex")}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true",tabIndex:0,"aria-expanded":"true"})},_animate:function(e,t,i){var s,n,a,o=this,r=0,h=e.length&&(!t.length||e.index()",delay:300,options:{icons:{submenu:"ui-icon-carat-1-e"},items:"> *",menus:"ul",position:{my:"left-1 top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content").toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length).attr({role:this.options.role,tabIndex:0}),this.options.disabled&&this.element.addClass("ui-state-disabled").attr("aria-disabled","true"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target);!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&e(this.document[0].activeElement).closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.currentTarget);i.siblings(".ui-state-active").removeClass("ui-state-active"),this.focus(t,i) +}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay(function(){e.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-menu-icons ui-front").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(),this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").removeUniqueId().removeClass("ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function(){var t=e(this);t.data("ui-menu-submenu-carat")&&t.remove()}),this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")},_keydown:function(t){var i,s,n,a,o=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:o=!1,s=this.previousFilter||"",n=String.fromCharCode(t.keyCode),a=!1,clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}o&&t.preventDefault()},_activate:function(e){this.active.is(".ui-state-disabled")||(this.active.is("[aria-haspopup='true']")?this.expand(e):this.select(e))},refresh:function(){var t,i,s=this,n=this.options.icons.submenu,a=this.element.find(this.options.menus);this.element.toggleClass("ui-menu-icons",!!this.element.find(".ui-icon").length),a.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-front").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=e(this),i=t.parent(),s=e("").addClass("ui-menu-icon ui-icon "+n).data("ui-menu-submenu-carat",!0);i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))}),t=a.add(this.element),i=t.find(this.options.items),i.not(".ui-menu-item").each(function(){var t=e(this);s._isDivider(t)&&t.addClass("ui-widget-content ui-menu-divider")}),i.not(".ui-menu-item, .ui-menu-divider").addClass("ui-menu-item").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){"icons"===e&&this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(t.submenu),"disabled"===e&&this.element.toggleClass("ui-state-disabled",!!t).attr("aria-disabled",t),this._super(e,t)},focus:function(e,t){var i,s;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.addClass("ui-state-focus").removeClass("ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),this.active.parent().closest(".ui-menu-item").addClass("ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=t.children(".ui-menu"),i.length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,o,r;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),o=this.activeMenu.height(),r=t.outerHeight(),0>n?this.activeMenu.scrollTop(a+n):n+r>o&&this.activeMenu.scrollTop(a+n-o+r))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this.active.removeClass("ui-state-focus"),this.active=null,this._trigger("blur",e,{item:this.active}))},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(e)},this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this.activeMenu=s},this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false").end().find(".ui-state-active").not(".ui-state-focus").removeClass("ui-state-active")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay(function(){this.focus(e,t)}))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=e(this),0>i.offset().top-s-n}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(t),void 0)},previousPage:function(t){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=e(this),i.offset().top-s+n>0}),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())),void 0):(this.next(t),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),a="textarea"===n,o="input"===n;this.isMultiLine=a?!0:o?!1:this.element.prop("isContentEditable"),this.valueMethod=this.element[a||o?"val":"text"],this.isNewMenu=!0,this.element.addClass("ui-autocomplete-input").attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,i=!0,void 0;t=!1,s=!1,i=!1;var a=e.ui.keyCode;switch(n.keyCode){case a.PAGE_UP:t=!0,this._move("previousPage",n);break;case a.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case a.UP:t=!0,this._keyEvent("previous",n);break;case a.DOWN:t=!0,this._keyEvent("next",n);break;case a.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case a.TAB:this.menu.active&&this.menu.select(n);break;case a.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){return s?(s=!1,e.preventDefault(),void 0):(this._searchTimeout(e),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(e),this._change(e),void 0)}}),this._initSource(),this.menu=e("
    * The Group indicators can be also injected via custom soap definitions as XML node into WSDL structure. * - * In the following example, class Foo will create a XML node ... with children attributes expected in pre-defined order. + * In the following example, class Foo will create a XML node <xsd:Foo><xsd:sequence> ... </xsd:sequence></xsd:Foo> with children attributes expected in pre-defined order. *
      * / *
      *   * @soap-indicator sequence
    @@ -142,7 +142,7 @@
      *     public $date_of_birth;
      * }
      * 
    - * In the example above, WSDL generator would inject under XML node the code block defined by @soap-wsdl lines. + * In the example above, WSDL generator would inject under XML node <xsd:User> the code block defined by @soap-wsdl lines. * * By inserting into SOAP URL link the parameter "?makedoc", WSDL generator will output human-friendly overview of all complex data types rather than XML WSDL file. * Each complex type is described in a separate HTML table and recognizes also the '@example' PHPDoc tag. See {@link buildHtmlDocs()}. @@ -153,6 +153,10 @@ */ class CWsdlGenerator extends CComponent { + const STYLE_RPC = 'rpc'; + const STYLE_DOCUMENT = 'document'; + const USE_ENCODED = 'encoded'; + const USE_LITERAL = 'literal'; /** * @var string the namespace to be used in the generated WSDL. * If not set, it defaults to the name of the class that WSDL is generated upon. @@ -163,6 +167,24 @@ class CWsdlGenerator extends CComponent * If not set, it defaults to "urn:{$className}wsdl". */ public $serviceName; + /** + * @var array + * soap:body operation style options + */ + public $operationBodyStyle = array( + 'use' => self::USE_ENCODED, + 'encodingStyle' => 'http://schemas.xmlsoap.org/soap/encoding/', + ); + /** + * @var array + * soap:operation style + */ + public $bindingStyle = self::STYLE_RPC; + /** + * @var string + * soap:operation transport + */ + public $bindingTransport = 'http://schemas.xmlsoap.org/soap/http'; protected static $typeMap=array( 'string'=>'xsd:string', @@ -194,6 +216,11 @@ class CWsdlGenerator extends CComponent */ protected $types; + /** + * @var array + */ + protected $elements; + /** * @var array Map of request and response types for all operations. */ @@ -210,6 +237,7 @@ public function generateWsdl($className, $serviceUrl, $encoding='UTF-8') { $this->operations=array(); $this->types=array(); + $this->elements=array(); $this->messages=array(); if($this->serviceName===null) $this->serviceName=$className; @@ -245,25 +273,90 @@ protected function processMethod($method) $comment=preg_replace('/^\s*\**(\s*?$|\s*)/m','',$comment); $params=$method->getParameters(); $message=array(); + $headers=array(); $n=preg_match_all('/^@param\s+([\w\.]+(\[\s*\])?)\s*?(.*)$/im',$comment,$matches); if($n>count($params)) $n=count($params); + if ($this->bindingStyle == self::STYLE_RPC) + { + for($i=0;$i<$n;++$i) + $message[$params[$i]->getName()]=array( + 'type'=>$this->processType($matches[1][$i]), + 'doc'=>trim($matches[3][$i]), + ); + } + else + { + $this->elements[$methodName] = array(); + for($i=0;$i<$n;++$i) + $this->elements[$methodName][$params[$i]->getName()]=array( + 'type'=>$this->processType($matches[1][$i]), + 'nillable'=>$params[$i]->isOptional(), + ); + $message['parameters'] = array('element'=>'tns:'.$methodName); + } + + $this->messages[$methodName.'In']=$message; + + $n=preg_match_all('/^@header\s+([\w\.]+(\[\s*\])?)\s*?(.*)$/im',$comment,$matches); for($i=0;$i<$n;++$i) - $message[$params[$i]->getName()]=array($this->processType($matches[1][$i]), trim($matches[3][$i])); // name => type, doc + { + $name = $matches[1][$i]; + $type = $this->processType($matches[1][$i]); + $doc = trim($matches[3][$i]); + if ($this->bindingStyle == self::STYLE_RPC) + { + $headers[$name]=array($type,$doc); + } + else + { + $this->elements[$name][$name]=array('type'=>$type); + $headers[$name] = array('element'=>$type); + } + } - $this->messages[$methodName.'Request']=$message; + if ($headers !== array()) + { + $this->messages[$methodName.'Headers']=$headers; + $headerKeys = array_keys($headers); + $firstHeaderKey = reset($headerKeys); + $firstHeader = $headers[$firstHeaderKey]; + } + else + { + $firstHeader = null; + } - if(preg_match('/^@return\s+([\w\.]+(\[\s*\])?)\s*?(.*)$/im',$comment,$matches)) - $return=array($this->processType($matches[1]),trim($matches[2])); // type, doc + if ($this->bindingStyle == self::STYLE_RPC) + { + if(preg_match('/^@return\s+([\w\.]+(\[\s*\])?)\s*?(.*)$/im',$comment,$matches)) + $return=array( + 'type'=>$this->processType($matches[1]), + 'doc'=>trim($matches[2]), + ); + else + $return=null; + $this->messages[$methodName.'Out']=array('return'=>$return); + } else - $return=null; - $this->messages[$methodName.'Response']=array('return'=>$return); + { + if(preg_match('/^@return\s+([\w\.]+(\[\s*\])?)\s*?(.*)$/im',$comment,$matches)) + { + $this->elements[$methodName.'Response'][$methodName.'Result']=array( + 'type'=>$this->processType($matches[1]), + ); + } + $this->messages[$methodName.'Out']=array('parameters'=>array('element'=>'tns:'.$methodName.'Response')); + } if(preg_match('/^\/\*+\s*([^@]*?)\n@/s',$comment,$matches)) $doc=trim($matches[1]); else $doc=''; - $this->operations[$methodName]=$doc; + $this->operations[$methodName]=array( + 'doc'=>$doc, + 'headers'=>$firstHeader === null ? null : array('input'=>array($methodName.'Headers', $firstHeaderKey)), + ); } /** @@ -435,7 +528,7 @@ protected function buildDOM($serviceUrl,$encoding) */ protected function addTypes($dom) { - if($this->types===array()) + if($this->types===array() && $this->elements===array()) return; $types=$dom->createElement('wsdl:types'); $schema=$dom->createElement('xsd:schema'); @@ -451,21 +544,33 @@ protected function addTypes($dom) $complexType->setAttribute('name',substr($xmlType,4)); else $complexType->setAttribute('name',$xmlType); - $complexContent=$dom->createElement('xsd:complexContent'); - $restriction=$dom->createElement('xsd:restriction'); - $restriction->setAttribute('base','soap-enc:Array'); - $attribute=$dom->createElement('xsd:attribute'); - $attribute->setAttribute('ref','soap-enc:arrayType'); - $attribute->setAttribute('wsdl:arrayType',substr($xmlType,0,strlen($xmlType)-5).'[]'); - - $arrayType=($dppos=strpos($xmlType,':')) !==false ? substr($xmlType,$dppos + 1) : $xmlType; // strip namespace, if any - $arrayType=substr($arrayType,0,-5); // strip 'Array' from name - $arrayType=(isset(self::$typeMap[$arrayType]) ? 'xsd:' : 'tns:') .$arrayType.'[]'; - $attribute->setAttribute('wsdl:arrayType',$arrayType); - - $restriction->appendChild($attribute); - $complexContent->appendChild($restriction); - $complexType->appendChild($complexContent); + + $arrayType = ($dppos=strpos($xmlType,':')) !==false ? substr($xmlType,$dppos + 1) : $xmlType; // strip namespace, if any + $arrayType = substr($arrayType,0,-5); // strip 'Array' from name + if ($this->operationBodyStyle['use'] == self::USE_ENCODED) + { + $complexContent=$dom->createElement('xsd:complexContent'); + $restriction=$dom->createElement('xsd:restriction'); + $restriction->setAttribute('base','soap-enc:Array'); + $attribute=$dom->createElement('xsd:attribute'); + $attribute->setAttribute('ref','soap-enc:arrayType'); + $attribute->setAttribute('arrayType',(isset(self::$typeMap[$arrayType]) ? 'xsd:' : 'tns:') .$arrayType.'[]'); + + $restriction->appendChild($attribute); + $complexContent->appendChild($restriction); + $complexType->appendChild($complexContent); + } + else + { + $sequence=$dom->createElement('xsd:sequence'); + $element=$dom->createElement('xsd:element'); + $element->setAttribute('name','item'); + $element->setAttribute('type',(isset(self::$typeMap[$arrayType]) ? self::$typeMap[$arrayType] : 'tns:'.$arrayType)); + $element->setAttribute('minOccurs','0'); + $element->setAttribute('maxOccurs','unbounded'); + $sequence->appendChild($element); + $complexType->appendChild($sequence); + } } elseif(is_array($xmlType)) { @@ -503,8 +608,32 @@ protected function addTypes($dom) } } $schema->appendChild($complexType); - $types->appendChild($schema); } + foreach($this->elements as $name=>$parameters) + { + $element=$dom->createElement('xsd:element'); + $element->setAttribute('name',$name); + $complexType=$dom->createElement('xsd:complexType'); + if (!empty($parameters)) + { + $sequence=$dom->createElement('xsd:sequence'); + foreach($parameters as $paramName=>$paramOpts) + { + $innerElement=$dom->createElement('xsd:element'); + $innerElement->setAttribute('name',$paramName); + $innerElement->setAttribute('type',$paramOpts['type']); + if (isset($paramOpts['nillable']) && $paramOpts['nillable']) + { + $innerElement->setAttribute('nillable','true'); + } + $sequence->appendChild($innerElement); + } + $complexType->appendChild($sequence); + } + $element->appendChild($complexType); + $schema->appendChild($element); + } + $types->appendChild($schema); $dom->documentElement->appendChild($types); } @@ -523,7 +652,14 @@ protected function addMessages($dom) { $partElement=$dom->createElement('wsdl:part'); $partElement->setAttribute('name',$partName); - $partElement->setAttribute('type',$part[0]); + if (isset($part['type'])) + { + $partElement->setAttribute('type',$part['type']); + } + if (isset($part['element'])) + { + $partElement->setAttribute('element',$part['element']); + } $element->appendChild($partElement); } } @@ -539,8 +675,8 @@ protected function addPortTypes($dom) $portType=$dom->createElement('wsdl:portType'); $portType->setAttribute('name',$this->serviceName.'PortType'); $dom->documentElement->appendChild($portType); - foreach($this->operations as $name=>$doc) - $portType->appendChild($this->createPortElement($dom,$name,$doc)); + foreach($this->operations as $name=>$operation) + $portType->appendChild($this->createPortElement($dom,$name,$operation['doc'])); } /** @@ -554,9 +690,9 @@ protected function createPortElement($dom,$name,$doc) $operation->setAttribute('name',$name); $input=$dom->createElement('wsdl:input'); - $input->setAttribute('message', 'tns:'.$name.'Request'); + $input->setAttribute('message', 'tns:'.$name.'In'); $output=$dom->createElement('wsdl:output'); - $output->setAttribute('message', 'tns:'.$name.'Response'); + $output->setAttribute('message', 'tns:'.$name.'Out'); $operation->appendChild($dom->createElement('wsdl:documentation',$doc)); $operation->appendChild($input); @@ -575,37 +711,70 @@ protected function addBindings($dom) $binding->setAttribute('type','tns:'.$this->serviceName.'PortType'); $soapBinding=$dom->createElement('soap:binding'); - $soapBinding->setAttribute('style','rpc'); - $soapBinding->setAttribute('transport','http://schemas.xmlsoap.org/soap/http'); + $soapBinding->setAttribute('style',$this->bindingStyle); + $soapBinding->setAttribute('transport',$this->bindingTransport); $binding->appendChild($soapBinding); $dom->documentElement->appendChild($binding); - foreach($this->operations as $name=>$doc) - $binding->appendChild($this->createOperationElement($dom,$name)); + foreach($this->operations as $name=>$operation) + $binding->appendChild($this->createOperationElement($dom,$name,$operation['headers'])); } /** * @param DOMDocument $dom Represents an entire HTML or XML document; serves as the root of the document tree * @param string $name method name + * @param array $headers array like array('input'=>array(MESSAGE,PART),'output=>array(MESSAGE,PART)) */ - protected function createOperationElement($dom,$name) + protected function createOperationElement($dom,$name,$headers=null) { $operation=$dom->createElement('wsdl:operation'); $operation->setAttribute('name', $name); $soapOperation=$dom->createElement('soap:operation'); $soapOperation->setAttribute('soapAction', $this->namespace.'#'.$name); - $soapOperation->setAttribute('style','rpc'); + if ($this->bindingStyle == self::STYLE_RPC) + { + $soapOperation->setAttribute('style', self::STYLE_RPC); + } $input=$dom->createElement('wsdl:input'); $output=$dom->createElement('wsdl:output'); $soapBody=$dom->createElement('soap:body'); - $soapBody->setAttribute('use', 'encoded'); - $soapBody->setAttribute('namespace', $this->namespace); - $soapBody->setAttribute('encodingStyle', 'http://schemas.xmlsoap.org/soap/encoding/'); + $operationBodyStyle=$this->operationBodyStyle; + if ($this->bindingStyle == self::STYLE_RPC && !isset($operationBodyStyle['namespace'])) + { + $operationBodyStyle['namespace'] = $this->namespace; + } + foreach($operationBodyStyle as $attributeName=>$attributeValue) + { + $soapBody->setAttribute($attributeName, $attributeValue); + } $input->appendChild($soapBody); $output->appendChild(clone $soapBody); + if (is_array($headers)) + { + if (isset($headers['input']) && is_array($headers['input']) && count($headers['input'])==2) + { + $soapHeader = $dom->createElement('soap:header'); + foreach($operationBodyStyle as $attributeName=>$attributeValue) { + $soapHeader->setAttribute($attributeName, $attributeValue); + } + $soapHeader->setAttribute('message', $headers['input'][0]); + $soapHeader->setAttribute('part', $headers['input'][1]); + $input->appendChild($soapHeader); + } + if (isset($headers['output']) && is_array($headers['output']) && count($headers['output'])==2) + { + $soapHeader = $dom->createElement('soap:header'); + foreach($operationBodyStyle as $attributeName=>$attributeValue) { + $soapHeader->setAttribute($attributeName, $attributeValue); + } + $soapHeader->setAttribute('message', $headers['output'][0]); + $soapHeader->setAttribute('part', $headers['output'][1]); + $output->appendChild($soapHeader); + } + } $operation->appendChild($soapOperation); $operation->appendChild($input); @@ -648,7 +817,7 @@ protected function addService($dom,$serviceUrl) *
  27. Max - maximum number of occurrences
  28. *
  29. Description - Detailed description of the attribute.
  30. *
  31. Example - Attribute example value if provided via PHPDoc property @example.
  32. - *
      + *
    * * @param bool $return If true, generated HTML output will be returned rather than directly sent to output buffer */ diff --git a/framework/web/widgets/CActiveForm.php b/framework/web/widgets/CActiveForm.php index 1605fd4..339e436 100644 --- a/framework/web/widgets/CActiveForm.php +++ b/framework/web/widgets/CActiveForm.php @@ -161,7 +161,7 @@ class CActiveForm extends CWidget */ public $stateful=false; /** - * @var string the CSS class name for error messages. + * @var string the CSS class name for error messages. * Since 1.1.14 this defaults to 'errorMessage' defined in {@link CHtml::$errorMessageCss}. * Individual {@link error} call may override this value by specifying the 'class' HTML option. */ @@ -331,7 +331,7 @@ public function init() echo CHtml::statefulForm($this->action, $this->method, $this->htmlOptions); else echo CHtml::beginForm($this->action, $this->method, $this->htmlOptions); - + if($this->errorMessageCssClass===null) $this->errorMessageCssClass=CHtml::$errorMessageCss; } @@ -410,9 +410,9 @@ public function run() *
      *
    • inputID
    • *
    - * When an CActiveForm input field uses a custom ID, for ajax/client validation to work properly + * When an CActiveForm input field uses a custom ID, for ajax/client validation to work properly * inputID should be set to the same ID - * + * * Example: *
     	 * 
    @@ -421,7 +421,7 @@ public function run() * error($model,'attribute',array('inputID'=>'custom-id')); ?> *
    *
    - * + * * When client-side validation is enabled, an option named "clientValidation" is also recognized. * This option should take a piece of JavaScript code to perform client-side validation. In the code, * the variables are predefined: @@ -515,7 +515,10 @@ public function error($model,$attribute,$htmlOptions=array(),$enableAjaxValidati $option['clientValidation']=new CJavaScriptExpression("function(value, messages, attribute) {\n".implode("\n",$validators)."\n}"); } - $html=CHtml::error($model,$attribute,$htmlOptions); + if(empty($option['hideErrorMessage']) && empty($this->clientOptions['hideErrorMessage'])) + $html=CHtml::error($model,$attribute,$htmlOptions); + else + $html=''; if($html==='') { if(isset($htmlOptions['style'])) @@ -695,9 +698,73 @@ public function timeField($model,$attribute,$htmlOptions=array()) } /** - * Renders a time field for a model attribute. - * This method is a wrapper of {@link CHtml::activeTimeField}. - * Please check {@link CHtml::activeTimeField} for detailed information + * Renders a datetime field for a model attribute. + * This method is a wrapper of {@link CHtml::activeDateTimeField}. + * Please check {@link CHtml::activeDateTimeField} for detailed information + * about the parameters for this method. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. + * @return string the generated input field + * @since 1.1.16 + */ + public function dateTimeField($model,$attribute,$htmlOptions=array()) + { + return CHtml::activeDateTimeField($model,$attribute,$htmlOptions); + } + + /** + * Renders a local datetime field for a model attribute. + * This method is a wrapper of {@link CHtml::activeDateTimeLocalField}. + * Please check {@link CHtml::activeDateTimeLocalField} for detailed information + * about the parameters for this method. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. + * @return string the generated input field + * @since 1.1.16 + */ + public function dateTimeLocalField($model,$attribute,$htmlOptions=array()) + { + return CHtml::activeDateTimeLocalField($model,$attribute,$htmlOptions); + } + + /** + * Renders a week field for a model attribute. + * This method is a wrapper of {@link CHtml::activeWeekField}. + * Please check {@link CHtml::activeWeekField} for detailed information + * about the parameters for this method. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. + * @return string the generated input field + * @since 1.1.16 + */ + public function weekField($model,$attribute,$htmlOptions=array()) + { + return CHtml::activeWeekField($model,$attribute,$htmlOptions); + } + + /** + * Renders a color picker field for a model attribute. + * This method is a wrapper of {@link CHtml::activeColorField}. + * Please check {@link CHtml::activeColorField} for detailed information + * about the parameters for this method. + * @param CModel $model the data model + * @param string $attribute the attribute + * @param array $htmlOptions additional HTML attributes. + * @return string the generated input field + * @since 1.1.16 + */ + public function colorField($model,$attribute,$htmlOptions=array()) + { + return CHtml::activeColorField($model,$attribute,$htmlOptions); + } + + /** + * Renders a tel field for a model attribute. + * This method is a wrapper of {@link CHtml::activeTelField}. + * Please check {@link CHtml::activeTelField} for detailed information * about the parameters for this method. * @param CModel $model the data model * @param string $attribute the attribute diff --git a/framework/web/widgets/CHtmlPurifier.php b/framework/web/widgets/CHtmlPurifier.php index f893c30..23d33d3 100644 --- a/framework/web/widgets/CHtmlPurifier.php +++ b/framework/web/widgets/CHtmlPurifier.php @@ -88,7 +88,7 @@ public function purify($content) /** * Set the options for HTML Purifier and create a new HTML Purifier instance based on these options. * @param mixed $options the options for HTML Purifier - * @return CHtmlPurifier + * @return static the object instance itself */ public function setOptions($options) { diff --git a/framework/web/widgets/captcha/CCaptcha.php b/framework/web/widgets/captcha/CCaptcha.php index c19c488..5570203 100644 --- a/framework/web/widgets/captcha/CCaptcha.php +++ b/framework/web/widgets/captcha/CCaptcha.php @@ -27,6 +27,9 @@ * A {@link CCaptchaValidator} may be used to validate that the user enters * a verification code matching the code displayed in the CAPTCHA image. * + * When combining CCaptcha with CActiveForm or CForm, make sure ajaxValidation is disabled. Performing ajax validation causes + * your Captcha to be refreshed, rendering the code invalid on the next validation attempt. + * * @author Qiang Xue * @package system.web.widgets.captcha * @since 1.0 diff --git a/framework/web/widgets/captcha/CCaptchaAction.php b/framework/web/widgets/captcha/CCaptchaAction.php index 9443831..5a2f586 100644 --- a/framework/web/widgets/captcha/CCaptchaAction.php +++ b/framework/web/widgets/captcha/CCaptchaAction.php @@ -258,7 +258,7 @@ protected function renderImageGD($code) $this->foreColor % 0x100); if($this->fontFile === null) - $this->fontFile = dirname(__FILE__) . '/SpicyRice.ttf'; + $this->fontFile = dirname(__FILE__).DIRECTORY_SEPARATOR.'SpicyRice.ttf'; $length = strlen($code); $box = imagettfbbox(30,0,$this->fontFile,$code); @@ -301,7 +301,7 @@ protected function renderImageImagick($code) $image->newImage($this->width,$this->height,$backColor); if($this->fontFile===null) - $this->fontFile=dirname(__FILE__).'/SpicyRice.ttf'; + $this->fontFile=dirname(__FILE__).DIRECTORY_SEPARATOR.'SpicyRice.ttf'; $draw=new ImagickDraw(); $draw->setFont($this->fontFile); @@ -331,6 +331,6 @@ protected function renderImageImagick($code) header('Content-Transfer-Encoding: binary'); header("Content-Type: image/png"); $image->setImageFormat('png'); - echo $image; + echo $image->getImageBlob(); } -} \ No newline at end of file +} diff --git a/framework/web/widgets/pagers/CLinkPager.php b/framework/web/widgets/pagers/CLinkPager.php index 26751b8..d5ed129 100644 --- a/framework/web/widgets/pagers/CLinkPager.php +++ b/framework/web/widgets/pagers/CLinkPager.php @@ -66,18 +66,22 @@ class CLinkPager extends CBasePager public $maxButtonCount=10; /** * @var string the text label for the next page button. Defaults to 'Next >'. + * Setting this to false will disable this button. */ public $nextPageLabel; /** * @var string the text label for the previous page button. Defaults to '< Previous'. + * Setting this to false will disable this button. */ public $prevPageLabel; /** * @var string the text label for the first page button. Defaults to '<< First'. + * Setting this to false will disable this button. */ public $firstPageLabel; /** * @var string the text label for the last page button. Defaults to 'Last >>'. + * Setting this to false will disable this button. */ public $lastPageLabel; /** @@ -149,26 +153,32 @@ protected function createPageButtons() list($beginPage,$endPage)=$this->getPageRange(); $currentPage=$this->getCurrentPage(false); // currentPage is calculated in getPageRange() $buttons=array(); - + // first page - $buttons[]=$this->createPageButton($this->firstPageLabel,0,$this->firstPageCssClass,$currentPage<=0,false); - + if ($this->firstPageLabel !== false) { + $buttons[]=$this->createPageButton($this->firstPageLabel,0,$this->firstPageCssClass,$currentPage<=0,false); + } // prev page - if(($page=$currentPage-1)<0) - $page=0; - $buttons[]=$this->createPageButton($this->prevPageLabel,$page,$this->previousPageCssClass,$currentPage<=0,false); + if ($this->prevPageLabel !== false) { + if(($page=$currentPage-1)<0) + $page=0; + $buttons[]=$this->createPageButton($this->prevPageLabel,$page,$this->previousPageCssClass,$currentPage<=0,false); + } // internal pages for($i=$beginPage;$i<=$endPage;++$i) $buttons[]=$this->createPageButton($i+1,$i,$this->internalPageCssClass,false,$i==$currentPage); - + // next page - if(($page=$currentPage+1)>=$pageCount-1) - $page=$pageCount-1; - $buttons[]=$this->createPageButton($this->nextPageLabel,$page,$this->nextPageCssClass,$currentPage>=$pageCount-1,false); - + if ($this->nextPageLabel !== false) { + if(($page=$currentPage+1)>=$pageCount-1) + $page=$pageCount-1; + $buttons[]=$this->createPageButton($this->nextPageLabel,$page,$this->nextPageCssClass,$currentPage>=$pageCount-1,false); + } // last page - $buttons[]=$this->createPageButton($this->lastPageLabel,$pageCount-1,$this->lastPageCssClass,$currentPage>=$pageCount-1,false); + if ($this->lastPageLabel !== false) { + $buttons[]=$this->createPageButton($this->lastPageLabel,$pageCount-1,$this->lastPageCssClass,$currentPage>=$pageCount-1,false); + } return $buttons; } diff --git a/framework/yiilite.php b/framework/yiilite.php index b7d33cb..553d571 100644 --- a/framework/yiilite.php +++ b/framework/yiilite.php @@ -40,7 +40,7 @@ class YiiBase private static $_logger; public static function getVersion() { - return '1.1.14'; + return '1.1.16'; } public static function createWebApplication($config=null) { @@ -145,7 +145,8 @@ public static function import($alias,$forceInclude=false) } if(($pos=strrpos($alias,'.'))===false) // a simple class name { - if($forceInclude && self::autoload($alias)) + // try to autoload the class with an autoloader if $forceInclude is true + if($forceInclude && (Yii::autoload($alias,true) || class_exists($alias,true))) self::$_imports[$alias]=$alias; return $alias; } @@ -211,13 +212,15 @@ public static function setPathOfAlias($alias,$path) else self::$_aliases[$alias]=rtrim($path,'\\/'); } - public static function autoload($className) + public static function autoload($className,$classMapOnly=false) { // use include so that the error PHP file may appear if(isset(self::$classMap[$className])) include(self::$classMap[$className]); elseif(isset(self::$_coreClasses[$className])) include(YII_PATH.self::$_coreClasses[$className]); + elseif($classMapOnly) + return false; else { // include class file relying on include_path @@ -420,6 +423,9 @@ public static function registerAutoloader($callback, $append=false) 'CDbExpression' => '/db/schema/CDbExpression.php', 'CDbSchema' => '/db/schema/CDbSchema.php', 'CDbTableSchema' => '/db/schema/CDbTableSchema.php', + 'CCubridColumnSchema' => '/db/schema/cubrid/CCubridColumnSchema.php', + 'CCubridSchema' => '/db/schema/cubrid/CCubridSchema.php', + 'CCubridTableSchema' => '/db/schema/cubrid/CCubridTableSchema.php', 'CMssqlColumnSchema' => '/db/schema/mssql/CMssqlColumnSchema.php', 'CMssqlCommandBuilder' => '/db/schema/mssql/CMssqlCommandBuilder.php', 'CMssqlPdoAdapter' => '/db/schema/mssql/CMssqlPdoAdapter.php', @@ -461,6 +467,7 @@ public static function registerAutoloader($callback, $append=false) 'CLogRouter' => '/logging/CLogRouter.php', 'CLogger' => '/logging/CLogger.php', 'CProfileLogRoute' => '/logging/CProfileLogRoute.php', + 'CSysLogRoute' => '/logging/CSysLogRoute.php', 'CWebLogRoute' => '/logging/CWebLogRoute.php', 'CDateTimeParser' => '/utils/CDateTimeParser.php', 'CFileHelper' => '/utils/CFileHelper.php', @@ -699,7 +706,7 @@ public function __call($name,$parameters) return call_user_func_array(array($object,$name),$parameters); } } - if(class_exists('Closure', false) && $this->canGetProperty($name) && $this->$name instanceof Closure) + if(class_exists('Closure', false) && ($this->canGetProperty($name) || property_exists($this, $name)) && $this->$name instanceof Closure) return call_user_func_array($this->$name, $parameters); throw new CException(Yii::t('yii','{class} and its behaviors do not have a method or closure named "{name}".', array('{class}'=>get_class($this), '{name}'=>$name))); @@ -1022,7 +1029,7 @@ public function getModules() { return $this->_moduleConfig; } - public function setModules($modules) + public function setModules($modules,$merge=true) { foreach($modules as $id=>$module) { @@ -1031,15 +1038,18 @@ public function setModules($modules) $id=$module; $module=array(); } - if(!isset($module['class'])) - { - Yii::setPathOfAlias($id,$this->getModulePath().DIRECTORY_SEPARATOR.$id); - $module['class']=$id.'.'.ucfirst($id).'Module'; - } - if(isset($this->_moduleConfig[$id])) + if(isset($this->_moduleConfig[$id]) && $merge) $this->_moduleConfig[$id]=CMap::mergeArray($this->_moduleConfig[$id],$module); else + { + if(!isset($module['class'])) + { + if (Yii::getPathOfAlias($id)===false) + Yii::setPathOfAlias($id,$this->getModulePath().DIRECTORY_SEPARATOR.$id); + $module['class']=$id.'.'.ucfirst($id).'Module'; + } $this->_moduleConfig[$id]=$module; + } } } public function hasComponent($id) @@ -1138,6 +1148,7 @@ abstract class CApplication extends CModule public $name='My Application'; public $charset='UTF-8'; public $sourceLanguage='en_us'; + public $localeClass='CLocale'; private $_id; private $_basePath; private $_runtimePath; @@ -1289,15 +1300,19 @@ public function findLocalizedFile($srcFile,$srcLanguage=null,$language=null) } public function getLocale($localeID=null) { - return CLocale::getInstance($localeID===null?$this->getLanguage():$localeID); + return call_user_func_array(array($this->localeClass, 'getInstance'),array($localeID===null?$this->getLanguage():$localeID)); } public function getLocaleDataPath() { - return CLocale::$dataPath===null ? Yii::getPathOfAlias('system.i18n.data') : CLocale::$dataPath; + $vars=get_class_vars($this->localeClass); + if(empty($vars['dataPath'])) + return Yii::getPathOfAlias('system.i18n.data'); + return $vars['dataPath']; } public function setLocaleDataPath($value) { - CLocale::$dataPath=$value; + $property=new ReflectionProperty($this->localeClass,'dataPath'); + $property->setValue($value); } public function getNumberFormatter() { @@ -1785,7 +1800,7 @@ public function createController($route,$owner=null) $className=ucfirst($id).'Controller'; $classFile=$basePath.DIRECTORY_SEPARATOR.$className.'.php'; if($owner->controllerNamespace!==null) - $className=$owner->controllerNamespace.'\\'.$className; + $className=$owner->controllerNamespace.'\\'.str_replace('/','\\',$controllerID).$className; if(is_file($classFile)) { if(!class_exists($className,false)) @@ -2262,6 +2277,7 @@ class CHttpRequest extends CApplicationComponent private $_preferredLanguages; private $_csrfToken; private $_restParams; + private $_httpVersion; public function init() { parent::init(); @@ -2333,6 +2349,18 @@ public function getPut($name,$defaultValue=null) else return $defaultValue; } + public function getPatch($name,$defaultValue=null) + { + if($this->getIsPatchViaPostRequest()) + return $this->getPost($name, $defaultValue); + if($this->getIsPatchRequest()) + { + $restParams=$this->getRestParams(); + return isset($restParams[$name]) ? $restParams[$name] : $defaultValue; + } + else + return $defaultValue; + } public function getRestParams() { if($this->_restParams===null) @@ -2447,7 +2475,13 @@ public function getPathInfo() $pathInfo=substr($_SERVER['PHP_SELF'],strlen($scriptUrl)); else throw new CException(Yii::t('yii','CHttpRequest is unable to determine the path info of the request.')); - $this->_pathInfo=trim($pathInfo,'/'); + if($pathInfo==='/') + $pathInfo=''; + elseif($pathInfo[0]==='/') + $pathInfo=substr($pathInfo,1); + if(($posEnd=strlen($pathInfo)-1)>0 && $pathInfo[$posEnd]==='/') + $pathInfo=substr($pathInfo,0,$posEnd); + $this->_pathInfo=$pathInfo; } return $this->_pathInfo; } @@ -2508,13 +2542,15 @@ public function getQueryString() } public function getIsSecureConnection() { - return isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS']=='on' || $_SERVER['HTTPS']==1) - || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO']=='https'; + return isset($_SERVER['HTTPS']) && (strcasecmp($_SERVER['HTTPS'],'on')===0 || $_SERVER['HTTPS']==1) + || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_PROTO'],'https')===0; } public function getRequestType() { if(isset($_POST['_method'])) return strtoupper($_POST['_method']); + elseif(isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) + return strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']); return strtoupper(isset($_SERVER['REQUEST_METHOD'])?$_SERVER['REQUEST_METHOD']:'GET'); } public function getIsPostRequest() @@ -2537,6 +2573,14 @@ protected function getIsPutViaPostRequest() { return isset($_POST['_method']) && !strcasecmp($_POST['_method'],'PUT'); } + public function getIsPatchRequest() + { + return (isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'PATCH')) || $this->getIsPatchViaPostRequest(); + } + protected function getIsPatchViaPostRequest() + { + return isset($_POST['_method']) && !strcasecmp($_POST['_method'],'PATCH'); + } public function getIsAjaxRequest() { return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest'; @@ -2736,10 +2780,23 @@ public function getPreferredLanguages() } return $this->_preferredLanguages; } - public function getPreferredLanguage() + public function getPreferredLanguage($languages=array()) { $preferredLanguages=$this->getPreferredLanguages(); - return !empty($preferredLanguages) ? CLocale::getCanonicalID($preferredLanguages[0]) : false; + if(empty($languages)) { + return !empty($preferredLanguages) ? CLocale::getCanonicalID($preferredLanguages[0]) : false; + } + foreach ($preferredLanguages as $preferredLanguage) { + $preferredLanguage=CLocale::getCanonicalID($preferredLanguage); + foreach ($languages as $language) { + $language=CLocale::getCanonicalID($language); + // en_us==en_us, en==en_us, en_us==en + if($language===$acceptedLanguage || strpos($acceptedLanguage,$language.'_')===0 || strpos($language,$acceptedLanguage.'_')===0) { + return $language; + } + } + } + return reset($languages); } public function sendFile($fileName,$content,$mimeType=null,$terminate=true) { @@ -2751,6 +2808,7 @@ public function sendFile($fileName,$content,$mimeType=null,$terminate=true) $fileSize=(function_exists('mb_strlen') ? mb_strlen($content,'8bit') : strlen($content)); $contentStart=0; $contentEnd=$fileSize-1; + $httpVersion=$this->getHttpVersion(); if(isset($_SERVER['HTTP_RANGE'])) { header('Accept-Ranges: bytes'); @@ -2784,11 +2842,11 @@ public function sendFile($fileName,$content,$mimeType=null,$terminate=true) header("Content-Range: bytes $contentStart-$contentEnd/$fileSize"); throw new CHttpException(416,'Requested Range Not Satisfiable'); } - header('HTTP/1.1 206 Partial Content'); + header("HTTP/$httpVersion 206 Partial Content"); header("Content-Range: bytes $contentStart-$contentEnd/$fileSize"); } else - header('HTTP/1.1 200 OK'); + header("HTTP/$httpVersion 200 OK"); $length=$contentEnd-$contentStart+1; // Calculate new content length header('Pragma: public'); header('Expires: 0'); @@ -2866,6 +2924,7 @@ public function validateCsrfToken($event) { if ($this->getIsPostRequest() || $this->getIsPutRequest() || + $this->getIsPatchRequest() || $this->getIsDeleteRequest()) { $cookies=$this->getCookies(); @@ -2878,6 +2937,9 @@ public function validateCsrfToken($event) case 'PUT': $userToken=$this->getPut($this->csrfTokenName); break; + case 'PATCH': + $userToken=$this->getPatch($this->csrfTokenName); + break; case 'DELETE': $userToken=$this->getDelete($this->csrfTokenName); } @@ -2892,6 +2954,17 @@ public function validateCsrfToken($event) throw new CHttpException(400,Yii::t('yii','The CSRF token could not be verified.')); } } + public function getHttpVersion() + { + if($this->_httpVersion===null) + { + if(isset($_SERVER['SERVER_PROTOCOL']) && $_SERVER['SERVER_PROTOCOL']==='HTTP/1.0') + $this->_httpVersion='1.0'; + else + $this->_httpVersion='1.1'; + } + return $this->_httpVersion; + } } class CCookieCollection extends CMap { @@ -3237,6 +3310,7 @@ public function __construct($route,$pattern) } $this->route=trim($route,'/'); $tr2['/']=$tr['/']='\\/'; + $tr['.']='\\.'; if(strpos($route,'<')!==false && preg_match_all('/<(\w+)>/',$route,$matches2)) { foreach($matches2[1] as $name) @@ -3434,8 +3508,16 @@ public function widget($className,$properties=array(),$captureOutput=false) { ob_start(); ob_implicit_flush(false); - $widget=$this->createWidget($className,$properties); - $widget->run(); + try + { + $widget=$this->createWidget($className,$properties); + $widget->run(); + } + catch(Exception $e) + { + ob_end_clean(); + throw $e; + } return ob_get_clean(); } else @@ -4013,8 +4095,8 @@ public function runWithParams($params) $method=new ReflectionMethod($this, 'run'); if($method->getNumberOfParameters()>0) return $this->runWithParamsInternal($this, $method, $params); - else - return $this->run(); + $this->run(); + return true; } protected function runWithParamsInternal($object, $method, $params) { @@ -4054,8 +4136,8 @@ public function runWithParams($params) $method=new ReflectionMethod($controller, $methodName); if($method->getNumberOfParameters()>0) return $this->runWithParamsInternal($controller, $method, $params); - else - return $controller->$methodName(); + $controller->$methodName(); + return true; } } class CWebUser extends CApplicationComponent implements IWebUser @@ -4502,7 +4584,8 @@ public function setSessionID($value) } public function regenerateID($deleteOldSession=false) { - session_regenerate_id($deleteOldSession); + if($this->getIsStarted()) + session_regenerate_id($deleteOldSession); } public function getSessionName() { @@ -4813,6 +4896,13 @@ public static function form($action='',$method='post',$htmlOptions=array()) public static function beginForm($action='',$method='post',$htmlOptions=array()) { $htmlOptions['action']=$url=self::normalizeUrl($action); + if(strcasecmp($method,'get')!==0 && strcasecmp($method,'post')!==0) + { + $customMethod=$method; + $method='post'; + } + else + $customMethod=false; $htmlOptions['method']=$method; $form=self::tag('form',$htmlOptions,false,false); $hiddens=array(); @@ -4829,8 +4919,10 @@ public static function beginForm($action='',$method='post',$htmlOptions=array()) $request=Yii::app()->request; if($request->enableCsrfValidation && !strcasecmp($method,'post')) $hiddens[]=self::hiddenField($request->csrfTokenName,$request->getCsrfToken(),array('id'=>false)); + if($customMethod!==false) + $hiddens[]=self::hiddenField('_method',$customMethod); if($hiddens!==array()) - $form.="\n".self::tag('div',array('style'=>'display:none'),implode("\n",$hiddens)); + $form.="\n".implode("\n",$hiddens); return $form; } public static function endForm() @@ -4930,11 +5022,21 @@ public static function label($label,$for,$htmlOptions=array()) } return self::tag('label',$htmlOptions,$label); } + public static function colorField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('color',$name,$value,$htmlOptions); + } public static function textField($name,$value='',$htmlOptions=array()) { self::clientChange('change',$htmlOptions); return self::inputField('text',$name,$value,$htmlOptions); } + public static function searchField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('search',$name,$value,$htmlOptions); + } public static function numberField($name,$value='',$htmlOptions=array()) { self::clientChange('change',$htmlOptions); @@ -4955,6 +5057,21 @@ public static function timeField($name,$value='',$htmlOptions=array()) self::clientChange('change',$htmlOptions); return self::inputField('time',$name,$value,$htmlOptions); } + public static function dateTimeField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('datetime',$name,$value,$htmlOptions); + } + public static function dateTimeLocalField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('datetime-local',$name,$value,$htmlOptions); + } + public static function weekField($name,$value='',$htmlOptions=array()) + { + self::clientChange('change',$htmlOptions); + return self::inputField('week',$name,$value,$htmlOptions); + } public static function emailField($name,$value='',$htmlOptions=array()) { self::clientChange('change',$htmlOptions); @@ -5089,7 +5206,7 @@ public static function listBox($name,$select,$data,$htmlOptions=array()) public static function checkBoxList($name,$select,$data,$htmlOptions=array()) { $template=isset($htmlOptions['template'])?$htmlOptions['template']:'{input} {label}'; - $separator=isset($htmlOptions['separator'])?$htmlOptions['separator']:"
    \n"; + $separator=isset($htmlOptions['separator'])?$htmlOptions['separator']:self::tag('br'); $container=isset($htmlOptions['container'])?$htmlOptions['container']:'span'; unset($htmlOptions['template'],$htmlOptions['separator'],$htmlOptions['container']); if(substr($name,-2)!=='[]') @@ -5166,7 +5283,7 @@ public static function checkBoxList($name,$select,$data,$htmlOptions=array()) public static function radioButtonList($name,$select,$data,$htmlOptions=array()) { $template=isset($htmlOptions['template'])?$htmlOptions['template']:'{input} {label}'; - $separator=isset($htmlOptions['separator'])?$htmlOptions['separator']:"
    \n"; + $separator=isset($htmlOptions['separator'])?$htmlOptions['separator']:self::tag('br'); $container=isset($htmlOptions['container'])?$htmlOptions['container']:'span'; unset($htmlOptions['template'],$htmlOptions['separator'],$htmlOptions['container']); $labelOptions=isset($htmlOptions['labelOptions'])?$htmlOptions['labelOptions']:array(); @@ -5175,7 +5292,7 @@ public static function radioButtonList($name,$select,$data,$htmlOptions=array()) { if(!is_array($htmlOptions['empty'])) $htmlOptions['empty']=array(''=>$htmlOptions['empty']); - $data=array_merge($htmlOptions['empty'],$data); + $data=CMap::mergeArray($htmlOptions['empty'],$data); unset($htmlOptions['empty']); } $items=array(); @@ -5363,6 +5480,30 @@ public static function activeTimeField($model,$attribute,$htmlOptions=array()) self::clientChange('change',$htmlOptions); return self::activeInputField('time',$model,$attribute,$htmlOptions); } + public static function activeDateTimeField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('datetime',$model,$attribute,$htmlOptions); + } + public static function activeDateTimeLocalField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('datetime-local',$model,$attribute,$htmlOptions); + } + public static function activeWeekField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('week',$model,$attribute,$htmlOptions); + } + public static function activeColorField($model,$attribute,$htmlOptions=array()) + { + self::resolveNameID($model,$attribute,$htmlOptions); + self::clientChange('change',$htmlOptions); + return self::activeInputField('color',$model,$attribute,$htmlOptions); + } public static function activeTelField($model,$attribute,$htmlOptions=array()) { self::resolveNameID($model,$attribute,$htmlOptions); @@ -5633,7 +5774,9 @@ public static function activeName($model,$attribute) protected static function activeInputField($type,$model,$attribute,$htmlOptions) { $htmlOptions['type']=$type; - if($type==='text' || $type==='password') + if($type==='text'||$type==='password'||$type==='color'||$type==='date'||$type==='datetime'|| + $type==='datetime-local'||$type==='email'||$type==='month'||$type==='number'||$type==='range'|| + $type==='search'||$type==='tel'||$type==='time'||$type==='url'||$type==='week') { if(!isset($htmlOptions['maxlength'])) { @@ -5844,9 +5987,9 @@ protected static function addErrorCss(&$htmlOptions) public static function renderAttributes($htmlOptions) { static $specialAttributes=array( - 'async'=>1, 'autofocus'=>1, 'autoplay'=>1, + 'async'=>1, 'checked'=>1, 'controls'=>1, 'declare'=>1, @@ -5856,6 +5999,7 @@ public static function renderAttributes($htmlOptions) 'formnovalidate'=>1, 'hidden'=>1, 'ismap'=>1, + 'itemscope'=>1, 'loop'=>1, 'multiple'=>1, 'muted'=>1, @@ -5885,7 +6029,10 @@ public static function renderAttributes($htmlOptions) { if(isset($specialAttributes[$name])) { - if($value) + if($value===false && $name==='async') { + $html .= ' ' . $name.'="false"'; + } + elseif($value) { $html .= ' ' . $name; if(self::$renderSpecialAttributesValue) @@ -6184,13 +6331,14 @@ protected function renderScriptBatch(array $scripts) $scriptContent = $scriptValue['content']; unset($scriptValue['content']); $scriptHtmlOptions = $scriptValue; + ksort($scriptHtmlOptions); } else { $scriptContent = $scriptValue; $scriptHtmlOptions = array(); } - $key=serialize(ksort($scriptHtmlOptions)); + $key=serialize($scriptHtmlOptions); $scriptBatches[$key]['htmlOptions']=$scriptHtmlOptions; $scriptBatches[$key]['scripts'][]=$scriptContent; } @@ -6395,6 +6543,10 @@ public function registerCoreScript($name) $params=func_get_args(); $this->recordCachingAction('clientScript','registerCoreScript',$params); } + elseif(YII_DEBUG) + throw new CException('There is no CClientScript package: '.$name); + else + Yii::log('There is no CClientScript package: '.$name,CLogger::LEVEL_WARNING,'system.web.CClientScript'); return $this; } public function registerCssFile($url,$media='') @@ -7401,7 +7553,10 @@ public function refreshMetaData() } public function tableName() { - return get_class($this); + $tableName = get_class($this); + if(($pos=strrpos($tableName,'\\')) !== false) + return substr($tableName,$pos+1); + return $tableName; } public function primaryKey() { @@ -7641,7 +7796,7 @@ public function insert($attributes=null) if($this->beforeSave()) { $builder=$this->getCommandBuilder(); - $table=$this->getMetaData()->tableSchema; + $table=$this->getTableSchema(); $command=$builder->createInsertCommand($table,$this->getAttributes($attributes)); if($command->execute()) { @@ -7767,7 +7922,7 @@ public function equals($record) } public function getPrimaryKey() { - $table=$this->getMetaData()->tableSchema; + $table=$this->getTableSchema(); if(is_string($table->primaryKey)) return $this->{$table->primaryKey}; elseif(is_array($table->primaryKey)) @@ -7783,7 +7938,7 @@ public function getPrimaryKey() public function setPrimaryKey($value) { $this->_pk=$this->getPrimaryKey(); - $table=$this->getMetaData()->tableSchema; + $table=$this->getTableSchema(); if(is_string($table->primaryKey)) $this->{$table->primaryKey}=$value; elseif(is_array($table->primaryKey)) @@ -7808,7 +7963,7 @@ protected function query($criteria,$all=false) { if(!$all) $criteria->limit=1; - $command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria,$this->getTableAlias()); + $command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria); return $all ? $this->populateRecords($command->queryAll(), true, $criteria->index) : $this->populateRecord($command->queryRow()); } else @@ -7936,8 +8091,8 @@ public function findAllBySql($sql,$params=array()) } public function count($condition='',$params=array()) { - $builder=$this->getCommandBuilder(); $this->beforeCount(); + $builder=$this->getCommandBuilder(); $criteria=$builder->createCriteria($condition,$params); $this->applyScopes($criteria); if(empty($criteria->with)) @@ -8106,6 +8261,7 @@ class CBaseActiveRelation extends CComponent public $params=array(); public $group=''; public $join=''; + public $joinOptions=''; public $having=''; public $order=''; public function __construct($name,$className,$foreignKey,$options=array()) @@ -8174,6 +8330,7 @@ class CStatRelation extends CBaseActiveRelation { public $select='COUNT(*)'; public $defaultValue=0; + public $scopes; public function mergeWith($criteria,$fromScope=false) { if($criteria instanceof CDbCriteria) @@ -8288,9 +8445,9 @@ public function __construct($model) if(($table=$model->getDbConnection()->getSchema()->getTable($tableName))===null) throw new CDbException(Yii::t('yii','The table "{table}" for active record class "{class}" cannot be found in the database.', array('{class}'=>$this->_modelClassName,'{table}'=>$tableName))); - if($table->primaryKey===null) + if(($modelPk=$model->primaryKey())!==null || $table->primaryKey===null) { - $table->primaryKey=$model->primaryKey(); + $table->primaryKey=$modelPk; if(is_string($table->primaryKey) && isset($table->columns[$table->primaryKey])) $table->columns[$table->primaryKey]->isPrimaryKey=true; elseif(is_array($table->primaryKey)) @@ -8350,9 +8507,10 @@ class CDbConnection extends CApplicationComponent public $tablePrefix; public $initSQLs; public $driverMap=array( + 'cubrid'=>'CCubridSchema', // CUBRID 'pgsql'=>'CPgsqlSchema', // PostgreSQL 'mysqli'=>'CMysqlSchema', // MySQL - 'mysql'=>'CMysqlSchema', // MySQL + 'mysql'=>'CMysqlSchema', // MySQL,MariaDB 'sqlite'=>'CSqliteSchema', // sqlite 3 'sqlite2'=>'CSqliteSchema', // sqlite 2 'mssql'=>'CMssqlSchema', // Mssql driver on windows hosts @@ -8361,6 +8519,7 @@ class CDbConnection extends CApplicationComponent 'oci'=>'COciSchema', // Oracle driver ); public $pdoClass = 'PDO'; + private $_driverName; private $_attributes=array(); private $_active=false; private $_pdo; @@ -8444,9 +8603,8 @@ protected function close() protected function createPdoInstance() { $pdoClass=$this->pdoClass; - if(($pos=strpos($this->connectionString,':'))!==false) + if(($driver=$this->getDriverName())!==null) { - $driver=strtolower(substr($this->connectionString,0,$pos)); if($driver==='mssql' || $driver==='dblib') $pdoClass='CMssqlPdoAdapter'; elseif($driver==='sqlsrv') @@ -8588,9 +8746,15 @@ public function setPersistent($value) } public function getDriverName() { - if(($pos=strpos($this->connectionString, ':'))!==false) - return strtolower(substr($this->connectionString, 0, $pos)); - // return $this->getAttribute(PDO::ATTR_DRIVER_NAME); + if($this->_driverName!==null) + return $this->_driverName; + elseif(($pos=strpos($this->connectionString,':'))!==false) + return $this->_driverName=strtolower(substr($this->connectionString,0,$pos)); + //return $this->getAttribute(PDO::ATTR_DRIVER_NAME); + } + public function setDriverName($driverName) + { + $this->_driverName=strtolower($driverName); } public function getClientVersion() { @@ -8815,7 +8979,7 @@ public function getColumnType($type) else return $type; } - public function createTable($table, $columns, $options=null) + public function createTable($table,$columns,$options=null) { $cols=array(); foreach($columns as $name=>$type) @@ -8828,7 +8992,7 @@ public function createTable($table, $columns, $options=null) $sql="CREATE TABLE ".$this->quoteTableName($table)." (\n".implode(",\n",$cols)."\n)"; return $options===null ? $sql : $sql.' '.$options; } - public function renameTable($table, $newName) + public function renameTable($table,$newName) { return 'RENAME TABLE ' . $this->quoteTableName($table) . ' TO ' . $this->quoteTableName($newName); } @@ -8840,58 +9004,61 @@ public function truncateTable($table) { return "TRUNCATE TABLE ".$this->quoteTableName($table); } - public function addColumn($table, $column, $type) + public function addColumn($table,$column,$type) { return 'ALTER TABLE ' . $this->quoteTableName($table) . ' ADD ' . $this->quoteColumnName($column) . ' ' . $this->getColumnType($type); } - public function dropColumn($table, $column) + public function dropColumn($table,$column) { return "ALTER TABLE ".$this->quoteTableName($table) ." DROP COLUMN ".$this->quoteColumnName($column); } - public function renameColumn($table, $name, $newName) + public function renameColumn($table,$name,$newName) { return "ALTER TABLE ".$this->quoteTableName($table) . " RENAME COLUMN ".$this->quoteColumnName($name) . " TO ".$this->quoteColumnName($newName); } - public function alterColumn($table, $column, $type) + public function alterColumn($table,$column,$type) { return 'ALTER TABLE ' . $this->quoteTableName($table) . ' CHANGE ' . $this->quoteColumnName($column) . ' ' . $this->quoteColumnName($column) . ' ' . $this->getColumnType($type); } - public function addForeignKey($name, $table, $columns, $refTable, $refColumns, $delete=null, $update=null) + public function addForeignKey($name,$table,$columns,$refTable,$refColumns,$delete=null,$update=null) { - $columns=preg_split('/\s*,\s*/',$columns,-1,PREG_SPLIT_NO_EMPTY); + if(is_string($columns)) + $columns=preg_split('/\s*,\s*/',$columns,-1,PREG_SPLIT_NO_EMPTY); foreach($columns as $i=>$col) $columns[$i]=$this->quoteColumnName($col); - $refColumns=preg_split('/\s*,\s*/',$refColumns,-1,PREG_SPLIT_NO_EMPTY); + if(is_string($refColumns)) + $refColumns=preg_split('/\s*,\s*/',$refColumns,-1,PREG_SPLIT_NO_EMPTY); foreach($refColumns as $i=>$col) $refColumns[$i]=$this->quoteColumnName($col); $sql='ALTER TABLE '.$this->quoteTableName($table) .' ADD CONSTRAINT '.$this->quoteColumnName($name) - .' FOREIGN KEY ('.implode(', ', $columns).')' + .' FOREIGN KEY ('.implode(', ',$columns).')' .' REFERENCES '.$this->quoteTableName($refTable) - .' ('.implode(', ', $refColumns).')'; + .' ('.implode(', ',$refColumns).')'; if($delete!==null) $sql.=' ON DELETE '.$delete; if($update!==null) $sql.=' ON UPDATE '.$update; return $sql; } - public function dropForeignKey($name, $table) + public function dropForeignKey($name,$table) { return 'ALTER TABLE '.$this->quoteTableName($table) .' DROP CONSTRAINT '.$this->quoteColumnName($name); } - public function createIndex($name, $table, $column, $unique=false) + public function createIndex($name,$table,$columns,$unique=false) { $cols=array(); - $columns=preg_split('/\s*,\s*/',$column,-1,PREG_SPLIT_NO_EMPTY); + if(is_string($columns)) + $columns=preg_split('/\s*,\s*/',$columns,-1,PREG_SPLIT_NO_EMPTY); foreach($columns as $col) { if(strpos($col,'(')!==false) @@ -8903,7 +9070,7 @@ public function createIndex($name, $table, $column, $unique=false) . $this->quoteTableName($name).' ON ' . $this->quoteTableName($table).' ('.implode(', ',$cols).')'; } - public function dropIndex($name, $table) + public function dropIndex($name,$table) { return 'DROP INDEX '.$this->quoteTableName($name).' ON '.$this->quoteTableName($table); } @@ -8915,7 +9082,7 @@ public function addPrimaryKey($name,$table,$columns) $columns[$i]=$this->quoteColumnName($col); return 'ALTER TABLE ' . $this->quoteTableName($table) . ' ADD CONSTRAINT ' . $this->quoteColumnName($name) . ' PRIMARY KEY (' - . implode(', ', $columns). ' )'; + . implode(', ',$columns). ' )'; } public function dropPrimaryKey($name,$table) { @@ -8927,9 +9094,11 @@ class CSqliteSchema extends CDbSchema { public $columnTypes=array( 'pk' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL', + 'bigpk' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL', 'string' => 'varchar(255)', 'text' => 'text', 'integer' => 'integer', + 'bigint' => 'integer', 'float' => 'float', 'decimal' => 'decimal', 'datetime' => 'datetime', @@ -9297,7 +9466,7 @@ private function queryInternal($method,$mode,$params=array()) && ($cache=Yii::app()->getComponent($this->_connection->queryCacheID))!==null) { $this->_connection->queryCachingCount--; - $cacheKey='yii:dbquery'.$this->_connection->connectionString.':'.$this->_connection->username; + $cacheKey='yii:dbquery'.':'.$method.':'.$this->_connection->connectionString.':'.$this->_connection->username; $cacheKey.=':'.$this->getText().':'.serialize(array_merge($this->_paramLog,$params)); if(($result=$cache->get($cacheKey))!==false) { @@ -9348,8 +9517,6 @@ public function buildQuery($query) $sql.=' '.(!empty($query['select']) ? $query['select'] : '*'); if(!empty($query['from'])) $sql.="\nFROM ".$query['from']; - else - throw new CDbException(Yii::t('yii','The DB query must contain the "from" portion.')); if(!empty($query['join'])) $sql.="\n".(is_array($query['join']) ? implode("\n",$query['join']) : $query['join']); if(!empty($query['where'])) @@ -9508,6 +9675,14 @@ public function naturalJoin($table) { return $this->joinInternal('natural join', $table); } + public function naturalLeftJoin($table) + { + return $this->joinInternal('natural left join', $table); + } + public function naturalRightJoin($table) + { + return $this->joinInternal('natural right join', $table); + } public function group($columns) { if(is_string($columns) && strpos($columns,'(')!==false) @@ -9723,9 +9898,9 @@ public function dropForeignKey($name, $table) { return $this->setText($this->getConnection()->getSchema()->dropForeignKey($name, $table))->execute(); } - public function createIndex($name, $table, $column, $unique=false) + public function createIndex($name, $table, $columns, $unique=false) { - return $this->setText($this->getConnection()->getSchema()->createIndex($name, $table, $column, $unique))->execute(); + return $this->setText($this->getConnection()->getSchema()->createIndex($name, $table, $columns, $unique))->execute(); } public function dropIndex($name, $table) { @@ -9927,7 +10102,7 @@ abstract protected function validateAttribute($object,$attribute); public static function createValidator($name,$object,$attributes,$params=array()) { if(is_string($attributes)) - $attributes=preg_split('/[\s,]+/',$attributes,-1,PREG_SPLIT_NO_EMPTY); + $attributes=preg_split('/\s*,\s*/',$attributes,-1,PREG_SPLIT_NO_EMPTY); if(isset($params['on'])) { if(is_array($params['on'])) diff --git a/framework/zii/widgets/CBaseListView.php b/framework/zii/widgets/CBaseListView.php index 7a6f5cc..0ed6edf 100644 --- a/framework/zii/widgets/CBaseListView.php +++ b/framework/zii/widgets/CBaseListView.php @@ -72,6 +72,11 @@ abstract class CBaseListView extends CWidget * */ public $summaryText; + /** + * @var string the HTML tag name for the container of the {@link summaryText} property. + * @since 1.1.16 + */ + public $summaryTagName='div'; /** * @var string the message to be displayed when {@link dataProvider} does not have any data. */ @@ -80,8 +85,15 @@ abstract class CBaseListView extends CWidget * @var string the HTML tag name for the container of the {@link emptyText} property. */ public $emptyTagName='span'; + /** + * @var string the CSS class name for the container of the {@link emptyText} property. Defaults to 'empty'. + * @since 1.1.16 + */ + public $emptyCssClass='empty'; /** * @var string the CSS class name for the container of all data item display. Defaults to 'items'. + * Note, this property must not contain false, null or empty string values. Otherwise such values may + * cause undefined behavior. */ public $itemsCssClass='items'; /** @@ -90,6 +102,8 @@ abstract class CBaseListView extends CWidget public $summaryCssClass='summary'; /** * @var string the CSS class name for the pager container. Defaults to 'pager'. + * Note, this property must not contain false, null or empty string values. Otherwise such values may + * cause undefined behavior. */ public $pagerCssClass='pager'; /** @@ -179,7 +193,7 @@ protected function renderSection($matches) public function renderEmptyText() { $emptyText=$this->emptyText===null ? Yii::t('zii','No results found.') : $this->emptyText; - echo CHtml::tag($this->emptyTagName, array('class'=>'empty'), $emptyText); + echo CHtml::tag($this->emptyTagName, array('class'=>$this->emptyCssClass), $emptyText); } /** @@ -205,7 +219,7 @@ public function renderSummary() if(($count=$this->dataProvider->getItemCount())<=0) return; - echo '
    '; + echo CHtml::openTag($this->summaryTagName, array('class'=>$this->summaryCssClass)); if($this->enablePagination) { $pagination=$this->dataProvider->getPagination(); @@ -239,7 +253,7 @@ public function renderSummary() '{pages}'=>1, )); } - echo '
    '; + echo CHtml::closeTag($this->summaryTagName); } /** diff --git a/framework/zii/widgets/CBreadcrumbs.php b/framework/zii/widgets/CBreadcrumbs.php index 20728b4..bef6b7a 100644 --- a/framework/zii/widgets/CBreadcrumbs.php +++ b/framework/zii/widgets/CBreadcrumbs.php @@ -110,13 +110,15 @@ public function run() if(empty($this->links)) return; + $definedLinks = $this->links; + echo CHtml::openTag($this->tagName,$this->htmlOptions)."\n"; $links=array(); if($this->homeLink===null) - $links[]=CHtml::link(Yii::t('zii','Home'),Yii::app()->homeUrl); + $definedLinks=array_merge(array(Yii::t('zii','Home') => Yii::app()->homeUrl),$definedLinks); elseif($this->homeLink!==false) $links[]=$this->homeLink; - foreach($this->links as $label=>$url) + foreach($definedLinks as $label=>$url) { if(is_string($label) || is_array($url)) $links[]=strtr($this->activeLinkTemplate,array( diff --git a/framework/zii/widgets/CDetailView.php b/framework/zii/widgets/CDetailView.php index 95f081b..debf34f 100644 --- a/framework/zii/widgets/CDetailView.php +++ b/framework/zii/widgets/CDetailView.php @@ -77,7 +77,9 @@ class CDetailView extends CWidget * If the below "value" element is specified, this will be ignored. *
  33. value: the value to be displayed. If this is not specified, the above "name" element will be used * to retrieve the corresponding attribute value for display. Note that this value will be formatted according - * to the "type" option as described below.
  34. + * to the "type" option as described below. This can also be an anonymous function whose return value will be + * used as a value. The signature of the function should be function($data) where data refers to + * the {@link data} property of the detail view widget. *
  35. type: the type of the attribute that determines how the attribute value would be formatted. * Please see above for possible values. *
  36. cssClass: the CSS class to be used for this item. This option is available since version 1.1.3.
  37. @@ -209,7 +211,7 @@ public function run() if(!isset($attribute['type'])) $attribute['type']='text'; if(isset($attribute['value'])) - $value=is_callable($attribute['value']) ? call_user_func($attribute['value'],$this->data) : $attribute['value']; + $value=is_object($attribute['value']) && get_class($attribute['value']) === 'Closure' ? call_user_func($attribute['value'],$this->data) : $attribute['value']; elseif(isset($attribute['name'])) $value=CHtml::value($this->data,$attribute['name']); else diff --git a/framework/zii/widgets/CListView.php b/framework/zii/widgets/CListView.php index c622945..76c5aaa 100644 --- a/framework/zii/widgets/CListView.php +++ b/framework/zii/widgets/CListView.php @@ -22,7 +22,7 @@ * when the user browser disables JavaScript, the sorting and pagination automatically degenerate * to normal page requests and are still functioning as expected. * - * CListView should be used together with a {@link IDataProvider data provider}, preferrably a + * CListView should be used together with a {@link IDataProvider data provider}, preferably a * {@link CActiveDataProvider}. * * The minimal code needed to use CListView is as follows: @@ -140,7 +140,7 @@ class CListView extends CBaseListView * Example (add in a call to CGridView): *
     	 *  ...
    -	 *  'ajaxUpdateError'=>'function(xhr,ts,et,err){ $("#myerrordiv").text(err); }',
    +	 *  'ajaxUpdateError'=>'function(xhr,ts,et,err,id){ $("#"+id).text(err); }',
     	 *  ...
     	 * 
    * @since 1.1.13 diff --git a/framework/zii/widgets/CMenu.php b/framework/zii/widgets/CMenu.php index 79a3234..bf14c43 100644 --- a/framework/zii/widgets/CMenu.php +++ b/framework/zii/widgets/CMenu.php @@ -22,7 +22,7 @@ * $this->widget('zii.widgets.CMenu', array( * 'items'=>array( * // Important: you need to specify url as 'controller/action', - * // not just as 'controller' even if default acion is used. + * // not just as 'controller' even if default action is used. * array('label'=>'Home', 'url'=>array('site/index')), * // 'Products' menu item will be selected no matter which tag parameter value is since it's not specified. * array('label'=>'Products', 'url'=>array('product/index'), 'items'=>array( @@ -46,8 +46,10 @@ class CMenu extends CWidget * @var array list of menu items. Each menu item is specified as an array of name-value pairs. * Possible option names include the following: *
      - *
    • label: string, optional, specifies the menu item label. When {@link encodeLabel} is true, the label + *
    • label: string, optional, specifies the menu item label. When {@link encodeLabel} or own encodeLabel option is true, the label * will be HTML-encoded. If the label is not specified, it defaults to an empty string.
    • + *
    • encodeLabel: boolean whether the label for menu item should be HTML-encoded. + * When this option is set, it will override the global setting {@link encodeLabel}. This option has been available since version 1.1.15.
    • *
    • url: string or array, optional, specifies the URL of the menu item. It is passed to {@link CHtml::normalizeUrl} * to generate a valid URL. If this is not set, the menu item will be rendered as a span text.
    • *
    • visible: boolean, optional, whether this menu item is visible. Defaults to true. @@ -269,7 +271,8 @@ protected function normalizeItems($items,$route,&$active) } if(!isset($item['label'])) $item['label']=''; - if($this->encodeLabel) + $encodeLabel = isset($item['encodeLabel']) ? $item['encodeLabel'] : $this->encodeLabel; + if($encodeLabel) $items[$i]['label']=CHtml::encode($item['label']); $hasActiveChild=false; if(isset($item['items'])) diff --git a/framework/zii/widgets/assets/gridview/jquery.yiigridview.js b/framework/zii/widgets/assets/gridview/jquery.yiigridview.js index af47c8f..8b9ffc3 100644 --- a/framework/zii/widgets/assets/gridview/jquery.yiigridview.js +++ b/framework/zii/widgets/assets/gridview/jquery.yiigridview.js @@ -54,6 +54,8 @@ ajaxUpdate: [], ajaxVar: 'ajax', ajaxType: 'GET', + csrfTokenName: null, + csrfToken: null, pagerClass: 'pager', loadingClass: 'loading', filterClass: 'filters', @@ -89,11 +91,16 @@ // Check to see if History.js is enabled for our Browser if (settings.enableHistory && window.History.enabled) { // Ajaxify this link - var url = $(this).attr('href').split('?'), - params = $.deparam.querystring('?'+ (url[1] || '')); + var href = $(this).attr('href'); + if(href){ + var url = href.split('?'), + params = $.deparam.querystring('?'+ (url[1] || '')); - delete params[settings.ajaxVar]; - window.History.pushState(null, document.title, decodeURIComponent($.param.querystring(url[0], params))); + delete params[settings.ajaxVar]; + + var updateUrl = $.param.querystring(url[0], params); + window.History.pushState({url: updateUrl}, document.title, decodeURIComponent(updateUrl)); + } } else { $('#' + id).yiiGridView('update', {url: $(this).attr('href')}); } @@ -125,7 +132,9 @@ params = $.deparam.querystring($.param.querystring(url, data)); delete params[settings.ajaxVar]; - window.History.pushState(null, document.title, decodeURIComponent($.param.querystring(url.substr(0, url.indexOf('?')), params))); + + var updateUrl = $.param.querystring(url.substr(0, url.indexOf('?')), params); + window.History.pushState({url: updateUrl}, document.title, decodeURIComponent(updateUrl)); } else { $('#' + id).yiiGridView('update', {data: data}); } @@ -135,7 +144,10 @@ if (settings.enableHistory && settings.ajaxUpdate !== false && window.History.enabled) { $(window).bind('statechange', function() { // Note: We are using statechange instead of popstate var State = window.History.getState(); // Note: We are using History.getState() instead of event.state - $('#' + id).yiiGridView('update', {url: State.url}); + if (State.data.url === undefined) { + State.data.url = State.url; + } + $('#' + id).yiiGridView('update', State.data); }); } @@ -299,7 +311,7 @@ } if (settings.ajaxUpdateError !== undefined) { - settings.ajaxUpdateError(XHR, textStatus, errorThrown, err); + settings.ajaxUpdateError(XHR, textStatus, errorThrown, err, id); } else if (err) { alert(err); } @@ -315,6 +327,12 @@ options.data = $(settings.filterSelector).serialize(); } } + if (settings.csrfTokenName && settings.csrfToken) { + if (typeof options.data=='string') + options.data+='&'+settings.csrfTokenName+'='+settings.csrfToken; + else + options.data[settings.csrfTokenName] = settings.csrfToken; + } if(yiiXHR[id] != null){ yiiXHR[id].abort(); } diff --git a/framework/zii/widgets/assets/listview/jquery.yiilistview.js b/framework/zii/widgets/assets/listview/jquery.yiilistview.js index 9c8527a..20e0246 100644 --- a/framework/zii/widgets/assets/listview/jquery.yiilistview.js +++ b/framework/zii/widgets/assets/listview/jquery.yiilistview.js @@ -35,11 +35,16 @@ if(settings.ajaxUpdate.length > 0) { $(document).on('click.yiiListView', settings.updateSelector,function(){ if(settings.enableHistory && window.History.enabled) { - var url = $(this).attr('href').split('?'), - params = $.deparam.querystring('?'+ (url[1] || '')); + var href = $(this).attr('href'); + if(href){ + var url = href.split('?'), + params = $.deparam.querystring('?'+ (url[1] || '')); - delete params[settings.ajaxVar]; - window.History.pushState(null, document.title, decodeURIComponent($.param.querystring(url[0], params))); + delete params[settings.ajaxVar]; + + var updateUrl = $.param.querystring(url[0], params); + window.History.pushState({url: updateUrl}, document.title, decodeURIComponent(updateUrl)); + } } else { $.fn.yiiListView.update(id, {url: $(this).attr('href')}); } @@ -49,7 +54,10 @@ if(settings.enableHistory && window.History.enabled) { $(window).bind('statechange', function() { // Note: We are using statechange instead of popstate var State = window.History.getState(); // Note: We are using History.getState() instead of event.state - $.fn.yiiListView.update(id, {url: State.url}); + if (State.data.url === undefined) { + State.data.url = State.url; + } + $.fn.yiiListView.update(id, State.data); }); } } @@ -152,29 +160,29 @@ } if (settings.ajaxUpdateError !== undefined) { - settings.ajaxUpdateError(XHR, textStatus, errorThrown, err); + settings.ajaxUpdateError(XHR, textStatus, errorThrown, err, id); } else if (err) { alert(err); } } }, options || {}); - + if(options.data!=undefined && options.type=='GET') { options.url = $.param.querystring(options.url, options.data); options.data = {}; } - + if(settings.ajaxVar) options.url = $.param.querystring(options.url, settings.ajaxVar+'='+id); - + if(yiiXHR[id] != null) { - yiiXHR[id].abort(); + yiiXHR[id].abort(); } - + $('#'+id).addClass(settings.loadingClass); if(settings.beforeAjaxUpdate != undefined) - settings.beforeAjaxUpdate(id); + settings.beforeAjaxUpdate(id, options); yiiXHR[id] = $.ajax(options); }; diff --git a/framework/zii/widgets/grid/CButtonColumn.php b/framework/zii/widgets/grid/CButtonColumn.php index 20ca54b..6f31bcc 100644 --- a/framework/zii/widgets/grid/CButtonColumn.php +++ b/framework/zii/widgets/grid/CButtonColumn.php @@ -152,7 +152,7 @@ class CButtonColumn extends CGridColumn *
       	 *  array(
       	 *     class'=>'CButtonColumn',
      -	 *     'afterDelete'=>'function(link,success,data){ if(success) alert("Delete completed successfuly"); }',
      +	 *     'afterDelete'=>'function(link,success,data){ if(success) alert("Delete completed successfully"); }',
       	 *  ),
       	 * 
      */ @@ -305,13 +305,15 @@ protected function registerClientScript() } /** - * Renders the data cell content. + * Returns the data cell content. * This method renders the view, update and delete buttons in the data cell. * @param integer $row the row number (zero-based) - * @param mixed $data the data associated with the row + * @return string the data cell content. + * @since 1.1.16 */ - protected function renderDataCellContent($row,$data) + public function getDataCellContent($row) { + $data=$this->grid->dataProvider->data[$row]; $tr=array(); ob_start(); foreach($this->buttons as $id=>$button) @@ -321,7 +323,7 @@ protected function renderDataCellContent($row,$data) ob_clean(); } ob_end_clean(); - echo strtr($this->template,$tr); + return strtr($this->template,$tr); } /** diff --git a/framework/zii/widgets/grid/CCheckBoxColumn.php b/framework/zii/widgets/grid/CCheckBoxColumn.php index 5a582bd..57134f9 100644 --- a/framework/zii/widgets/grid/CCheckBoxColumn.php +++ b/framework/zii/widgets/grid/CCheckBoxColumn.php @@ -187,43 +187,39 @@ public function init() } /** - * Renders the header cell content. + * Returns the header cell content. * This method will render a checkbox in the header when {@link selectableRows} is greater than 1 * or in case {@link selectableRows} is null when {@link CGridView::selectableRows} is greater than 1. + * @return string the header cell content. + * @since 1.1.16 */ - protected function renderHeaderCellContent() + public function getHeaderCellContent() { if(trim($this->headerTemplate)==='') - { - echo $this->grid->blankDisplay; - return; - } + return $this->grid->blankDisplay; - $item = ''; if($this->selectableRows===null && $this->grid->selectableRows>1) - $item = CHtml::checkBox($this->id.'_all',false,array('class'=>'select-on-check-all')); + $item=CHtml::checkBox($this->id.'_all',false,array('class'=>'select-on-check-all')); elseif($this->selectableRows>1) - $item = CHtml::checkBox($this->id.'_all',false); + $item=CHtml::checkBox($this->id.'_all',false); else - { - ob_start(); - parent::renderHeaderCellContent(); - $item = ob_get_clean(); - } + $item=parent::getHeaderCellContent(); - echo strtr($this->headerTemplate,array( + return strtr($this->headerTemplate,array( '{item}'=>$item, )); } /** - * Renders the data cell content. + * Returns the data cell content. * This method renders a checkbox in the data cell. * @param integer $row the row number (zero-based) - * @param mixed $data the data associated with the row + * @return string the data cell content. + * @since 1.1.16 */ - protected function renderDataCellContent($row,$data) + public function getDataCellContent($row) { + $data=$this->grid->dataProvider->data[$row]; if($this->value!==null) $value=$this->evaluateExpression($this->value,array('data'=>$data,'row'=>$row)); elseif($this->name!==null) @@ -243,6 +239,6 @@ protected function renderDataCellContent($row,$data) unset($options['name']); $options['value']=$value; $options['id']=$this->id.'_'.$row; - echo CHtml::checkBox($name,$checked,$options); + return CHtml::checkBox($name,$checked,$options); } } diff --git a/framework/zii/widgets/grid/CDataColumn.php b/framework/zii/widgets/grid/CDataColumn.php index 7d2abc9..3d8fc81 100644 --- a/framework/zii/widgets/grid/CDataColumn.php +++ b/framework/zii/widgets/grid/CDataColumn.php @@ -85,58 +85,63 @@ public function init() } /** - * Renders the filter cell content. - * This method will render the {@link filter} as is if it is a string. + * Returns the filter cell content. + * This method will return the {@link filter} as is if it is a string. * If {@link filter} is an array, it is assumed to be a list of options, and a dropdown selector will be rendered. * Otherwise if {@link filter} is not false, a text field is rendered. - * @since 1.1.1 + * @return string the filter cell content + * @since 1.1.16 */ - protected function renderFilterCellContent() + public function getFilterCellContent() { if(is_string($this->filter)) - echo $this->filter; + return $this->filter; elseif($this->filter!==false && $this->grid->filter!==null && $this->name!==null && strpos($this->name,'.')===false) { if(is_array($this->filter)) - echo CHtml::activeDropDownList($this->grid->filter, $this->name, $this->filter, array('id'=>false,'prompt'=>'')); + return CHtml::activeDropDownList($this->grid->filter, $this->name, $this->filter, array('id'=>false,'prompt'=>'')); elseif($this->filter===null) - echo CHtml::activeTextField($this->grid->filter, $this->name, array('id'=>false)); + return CHtml::activeTextField($this->grid->filter, $this->name, array('id'=>false)); } else - parent::renderFilterCellContent(); + return parent::getFilterCellContent(); } /** - * Renders the header cell content. + * Returns the header cell content. * This method will render a link that can trigger the sorting if the column is sortable. + * @return string the header cell content. + * @since 1.1.16 */ - protected function renderHeaderCellContent() + public function getHeaderCellContent() { if($this->grid->enableSorting && $this->sortable && $this->name!==null) - echo $this->grid->dataProvider->getSort()->link($this->name,$this->header,array('class'=>'sort-link')); + return $this->grid->dataProvider->getSort()->link($this->name,$this->header,array('class'=>'sort-link')); elseif($this->name!==null && $this->header===null) { if($this->grid->dataProvider instanceof CActiveDataProvider) - echo CHtml::encode($this->grid->dataProvider->model->getAttributeLabel($this->name)); + return CHtml::encode($this->grid->dataProvider->model->getAttributeLabel($this->name)); else - echo CHtml::encode($this->name); + return CHtml::encode($this->name); } else - parent::renderHeaderCellContent(); + return parent::getHeaderCellContent(); } /** - * Renders the data cell content. + * Returns the data cell content. * This method evaluates {@link value} or {@link name} and renders the result. * @param integer $row the row number (zero-based) - * @param mixed $data the data associated with the row + * @return string the data cell content. + * @since 1.1.16 */ - protected function renderDataCellContent($row,$data) + public function getDataCellContent($row) { + $data=$this->grid->dataProvider->data[$row]; if($this->value!==null) $value=$this->evaluateExpression($this->value,array('data'=>$data,'row'=>$row)); elseif($this->name!==null) $value=CHtml::value($data,$this->name); - echo $value===null ? $this->grid->nullDisplay : $this->grid->getFormatter()->format($value,$this->type); + return $value===null ? $this->grid->nullDisplay : $this->grid->getFormatter()->format($value,$this->type); } } diff --git a/framework/zii/widgets/grid/CGridColumn.php b/framework/zii/widgets/grid/CGridColumn.php index 48e3d61..277c88f 100644 --- a/framework/zii/widgets/grid/CGridColumn.php +++ b/framework/zii/widgets/grid/CGridColumn.php @@ -20,6 +20,9 @@ * * @property boolean $hasFooter Whether this column has a footer cell. * This is determined based on whether {@link footer} is set. + * @property string $filterCellContent The filter cell content. + * @property string $headerCellContent The header cell content. + * @property string $footerCellContent The footer cell content. * * @author Qiang Xue * @package zii.widgets.grid @@ -163,44 +166,90 @@ public function renderFooterCell() } /** - * Renders the header cell content. - * The default implementation simply renders {@link header}. + * Returns the header cell content. + * The default implementation simply returns {@link header}. * This method may be overridden to customize the rendering of the header cell. + * @return string the header cell content. + * @since 1.1.16 + */ + public function getHeaderCellContent() + { + return trim($this->header)!=='' ? $this->header : $this->grid->blankDisplay; + } + + /** + * Renders the header cell content. + * @deprecated since 1.1.16. Use {@link getHeaderCellContent()} instead. */ protected function renderHeaderCellContent() { - echo trim($this->header)!=='' ? $this->header : $this->grid->blankDisplay; + echo $this->getHeaderCellContent(); } /** - * Renders the footer cell content. - * The default implementation simply renders {@link footer}. + * Returns the footer cell content. + * The default implementation simply returns {@link footer}. * This method may be overridden to customize the rendering of the footer cell. + * @return string the footer cell content. + * @since 1.1.16 + */ + public function getFooterCellContent() + { + return trim($this->footer)!=='' ? $this->footer : $this->grid->blankDisplay; + } + + /** + * Renders the footer cell content. + * @deprecated since 1.1.16. Use {@link getFooterCellContent()} instead. */ protected function renderFooterCellContent() { - echo trim($this->footer)!=='' ? $this->footer : $this->grid->blankDisplay; + echo $this->getFooterCellContent(); } /** - * Renders the data cell content. + * Returns the data cell content. * This method SHOULD be overridden to customize the rendering of the data cell. * @param integer $row the row number (zero-based) + * The data for this row is available via $this->grid->dataProvider->data[$row]; + * @return string the data cell content. + * @since 1.1.16 + */ + public function getDataCellContent($row) + { + return $this->grid->blankDisplay; + } + + /** + * Renders the data cell content. + * @param integer $row the row number (zero-based) * @param mixed $data the data associated with the row + * @deprecated since 1.1.16. Use {@link getDataCellContent()} instead. */ protected function renderDataCellContent($row,$data) { - echo $this->grid->blankDisplay; + echo $this->getDataCellContent($row); } /** - * Renders the filter cell content. - * The default implementation simply renders a space. + * Returns the filter cell content. + * The default implementation simply returns an empty column. * This method may be overridden to customize the rendering of the filter cell (if any). + * @return string the filter cell content. + * @since 1.1.16 + */ + public function getFilterCellContent() + { + return $this->grid->blankDisplay; + } + + /** + * Renders the filter cell content. * @since 1.1.1 + * @deprecated since 1.1.16. Use {@link getFilterCellContent()} instead. */ protected function renderFilterCellContent() { - echo $this->grid->blankDisplay; + echo $this->getFilterCellContent(); } } diff --git a/framework/zii/widgets/grid/CGridView.php b/framework/zii/widgets/grid/CGridView.php index 1a44182..eeb11b7 100644 --- a/framework/zii/widgets/grid/CGridView.php +++ b/framework/zii/widgets/grid/CGridView.php @@ -25,7 +25,7 @@ * when the user browser disables JavaScript, the sorting and pagination automatically degenerate * to normal page requests and are still functioning as expected. * - * CGridView should be used together with a {@link IDataProvider data provider}, preferrably a + * CGridView should be used together with a {@link IDataProvider data provider}, preferably a * {@link CActiveDataProvider}. * * The minimal code needed to use CGridView is as follows: @@ -182,14 +182,14 @@ class CGridView extends CBaseListView * Possible values (besides null) are "timeout", "error", "notmodified" and "parsererror"
    • *
    • errorThrown is an optional exception object, if one occurred.
    • *
    • errorMessage is the CGridView default error message derived from xhr and errorThrown. - * Usefull if you just want to display this error differently. CGridView by default displays this error with an javascript.alert()
    • + * Useful if you just want to display this error differently. CGridView by default displays this error with an javascript.alert() *
    * Note: This handler is not called for JSONP requests, because they do not use an XMLHttpRequest. * * Example (add in a call to CGridView): *
     	 *  ...
    -	 *  'ajaxUpdateError'=>'function(xhr,ts,et,err){ $("#myerrordiv").text(err); }',
    +	 *  'ajaxUpdateError'=>'function(xhr,ts,et,err,id){ $("#"+id).text(err); }',
     	 *  ...
     	 * 
    */ @@ -444,8 +444,14 @@ public function registerClientScript() ); if($this->ajaxUrl!==null) $options['url']=CHtml::normalizeUrl($this->ajaxUrl); - if($this->ajaxType!==null) + if($this->ajaxType!==null) { $options['ajaxType']=strtoupper($this->ajaxType); + $request=Yii::app()->getRequest(); + if ($options['ajaxType']=='POST' && $request->enableCsrfValidation) { + $options['csrfTokenName']=$request->csrfTokenName; + $options['csrfToken']=$request->getCsrfToken(); + } + } if($this->enablePagination) $options['pageVar']=$this->dataProvider->getPagination()->pageVar; foreach(array('beforeAjaxUpdate', 'afterAjaxUpdate', 'ajaxUpdateError', 'selectionChanged') as $event) @@ -613,10 +619,25 @@ public function renderTableRow($row) echo CHtml::openTag('tr', $htmlOptions)."\n"; foreach($this->columns as $column) - $column->renderDataCell($row); + $this->renderDataCell($column, $row); echo "\n"; } + /** + * A seam for people extending CGridView to be able to hook onto the data cell rendering process. + * + * By overriding only this method we will not need to copypaste and modify the whole entirety of `renderTableRow`. + * Or override `renderDataCell()` method of all possible CGridColumn descendants. + * + * @param CGridColumn $column The Column instance to + * @param integer $row + * @since 1.1.17 + */ + protected function renderDataCell($column, $row) + { + $column->renderDataCell($row); + } + /** * @return boolean whether the table should render a footer. * This is true if any of the {@link columns} has a true {@link CGridColumn::hasFooter} value. diff --git a/framework/zii/widgets/grid/CLinkColumn.php b/framework/zii/widgets/grid/CLinkColumn.php index f73b8a2..c8c47b4 100644 --- a/framework/zii/widgets/grid/CLinkColumn.php +++ b/framework/zii/widgets/grid/CLinkColumn.php @@ -87,13 +87,15 @@ class CLinkColumn extends CGridColumn public $linkHtmlOptions=array(); /** - * Renders the data cell content. + * Returns the data cell content. * This method renders a hyperlink in the data cell. * @param integer $row the row number (zero-based) - * @param mixed $data the data associated with the row + * @return string the data cell content. + * @since 1.1.16 */ - protected function renderDataCellContent($row,$data) + public function getDataCellContent($row) { + $data=$this->grid->dataProvider->data[$row]; if($this->urlExpression!==null) $url=$this->evaluateExpression($this->urlExpression,array('data'=>$data,'row'=>$row)); else @@ -104,8 +106,8 @@ protected function renderDataCellContent($row,$data) $label=$this->label; $options=$this->linkHtmlOptions; if(is_string($this->imageUrl)) - echo CHtml::link(CHtml::image($this->imageUrl,$label),$url,$options); + return CHtml::link(CHtml::image($this->imageUrl,$label),$url,$options); else - echo CHtml::link($label,$url,$options); + return CHtml::link($label,$url,$options); } } diff --git a/framework/zii/widgets/jui/CJuiAccordion.php b/framework/zii/widgets/jui/CJuiAccordion.php index e76cc6e..b3c3f49 100644 --- a/framework/zii/widgets/jui/CJuiAccordion.php +++ b/framework/zii/widgets/jui/CJuiAccordion.php @@ -28,7 +28,7 @@ * ), * // additional javascript options for the accordion plugin * 'options'=>array( - * 'animated'=>'bounceslide', + * 'animate'=>'bounceslide', * ), * )); * diff --git a/framework/zii/widgets/jui/CJuiTabs.php b/framework/zii/widgets/jui/CJuiTabs.php index 72317c8..90e2dd2 100644 --- a/framework/zii/widgets/jui/CJuiTabs.php +++ b/framework/zii/widgets/jui/CJuiTabs.php @@ -82,7 +82,7 @@ class CJuiTabs extends CJuiWidget * The token "{title}" in the template will be replaced with the panel title and * the token "{url}" will be replaced with "#TabID" or with the url of the ajax request. */ - public $headerTemplate='
  38. {title}
  39. '; + public $headerTemplate='
  40. {title}
  41. '; /** * @var string the template that is used to generated every tab content. * The token "{content}" in the template will be replaced with the panel content @@ -135,15 +135,4 @@ public function run() $options=CJavaScript::encode($this->options); Yii::app()->getClientScript()->registerScript(__CLASS__.'#'.$id,"jQuery('#{$id}').tabs($options);"); } - - /** - * Registers the core script files. - * This method overrides the parent implementation by registering the cookie plugin when cookie option is used. - */ - protected function registerCoreScripts() - { - parent::registerCoreScripts(); - if(isset($this->options['cookie'])) - Yii::app()->getClientScript()->registerCoreScript('cookie'); - } } \ No newline at end of file diff --git a/includeFiles/ru/phone b/includeFiles/ru/phone index bd82eba..548d2eb 100644 --- a/includeFiles/ru/phone +++ b/includeFiles/ru/phone @@ -1 +1 @@ -998 93 544 66 77 \ No newline at end of file ++99893 544 11 10 \ No newline at end of file diff --git a/protected/extensions/ckeditor/ECKEditor.php b/protected/extensions/ckeditor/ECKEditor.php new file mode 100644 index 0000000..64ea4e7 --- /dev/null +++ b/protected/extensions/ckeditor/ECKEditor.php @@ -0,0 +1,365 @@ +'Arial, Helvetica, sans-serif', + 'Comic Sans MS'=>'Comic Sans MS, cursive', + 'Courier New'=>'Courier New, Courier, monospace', + 'Georgia'=>'Georgia, serif', + 'Lucida Sans Unicode'=>'Lucida Sans Unicode, Lucida Grande, sans-serif', + 'Tahoma'=>'Tahoma, Geneva, sans-serif', + 'Times New Roman'=>'Times New Roman, Times, serif', + 'Trebuchet MS'=>'Trebuchet MS, Helvetica, sans-serif', + 'Verdana'=>'Verdana, Geneva, sans-serif', + ); + + private $fontSizes = array( + '8'=>'8px', + '9'=>'9px', + '10'=>'10px', + '11'=>'11px', + '12'=>'12px', + '14'=>'14px', + '16'=>'16px', + '18'=>'18px', + '20'=>'20px', + '22'=>'22px', + '24'=>'24px', + '26'=>'26px', + '28'=>'28px', + '36'=>'36px', + '48'=>'48px', + '72'=>'72px' + ); + + private $toolbar=array(); + + public $skin='moono'; + private $theme='default'; + + public $config_file=''; + + + public function __construct($owner=null) { + parent::__construct($owner); + + $_SESSION['KCFINDER']['disabled'] = false; // enables the file browser in the admin + $_SESSION['KCFINDER']['uploadURL'] = Yii::app()->baseUrl."/uploads/"; // URL for the uploads folder + $_SESSION['KCFINDER']['uploadDir'] = $_SERVER['DOCUMENT_ROOT']."/uploads/"; // path to the uploads folder + + $this->setLanguage(Yii::app()->language); + } + + public function setLanguage($value){ + $lang = (($p = strpos($value, '_')) !== false) ? str_replace('_', '-', $value) : $value; + if (in_array($lang, $this->allowedLanguages)) { + $this->language = $lang; + } + else { + $suffix = empty($lang) ? 'en' : ($p !== false) ? strtolower(substr($lang, 0, $p)) : strtolower($lang); + if (in_array($suffix, $this->allowedLanguages)) $this->language = $suffix; + } + if(isset($this->allowedLanguages[$lang])) + $this->language=$lang; + } + + public function getLanguage(){ + return $this->language; + } + + public function setOptions($value){ + if (!is_array($value)) + throw new CException(Yii::t(__CLASS__, 'options must be an array')); + + $this->options=$value; + } + + public function getOptions(){ + return $this->options; + } + + public function setHeight($value) + { + if (!preg_match("/[\d]+[px|\%]/", $value)) + throw new CException(Yii::t(__CLASS__, 'height must be a string of digits terminated by "%" or "px"')); + $this->height = $value; + } + + public function getHeight() + { + return $this->height; + } + + public function setWidth($value) + { + if (!preg_match("/[\d]+[px|\%]/", $value)) + throw new CException(Yii::t('ETinyMce', 'width must be a string of digits terminated by "%" or "px"')); + $this->width = $value; + } + + public function getWidth() + { + return $this->width; + } + + public function setFontFamilies($value) + { + if (!is_array($value)) + throw new CException(Yii::t(__CLASS__, 'fontFamilies must be an array of strings')); + $this->fontFamilies = $value; + } + + public function getFontFamilies() + { + return $this->fontFamilies; + } + + public function setFontSizes($value) + { + if (!is_array($value)) + throw new CException(Yii::t(__CLASS__, 'fontSizes must be an array of integers')); + $this->fontSizes = $value; + } + + public function getFontSizes() + { + return $this->fontSizes; + } + + public function setEditorTemplate($value) + { + if (!in_array($value, $this->allowedEditorTemplates)) + throw new CException(Yii::t(__CLASS__, 'editorTemplate must be one of {temp}', array('{temp}'=>implode(',', $this->validEditorTemplates)))); + $this->editorTemplate = $value; + } + + public function getEditorTemplate() + { + return $this->editorTemplate; + } + + public function setPlugins($value) + { + if (!is_array($value)) + throw new CException(Yii::t(__CLASS__, 'plugins must be an array of strings')); + $this->plugins = $value; + } + + public function getPlugins() + { + return $this->plugins; + } + + public function setContentCSS($value) + { + if (!is_string($value)) + throw new CException(Yii::t(__CLASS__, 'contentCSS must be an URL')); + $this->contentCSS = $value; + } + + public function getContentCSS() + { + return $this->contentCSS; + } + + public function setToolbar($value){ + if(is_array($value)||is_string($value)){ + $this->toolbar=$value; + }else throw new CException(Yii::t(__CLASS__, 'toolbar must be an array or string')); + } + + public function getToolbar() + { + return $this->toolbar; + } + + public function setSkin($value) + { + if (!is_string($value)) + throw new CException(Yii::t(__CLASS__, 'Skin must be a string')); + $this->skin = $value; + } + + public function getSkin() + { + return $this->skin; + } + + public function setTheme($value) + { + if (!is_string($value)) + throw new CException(Yii::t(__CLASS__, 'Theme must be a string')); + $this->theme = $value; + } + + public function getTheme() + { + return $this->theme; + } + + protected function makeOptions() + { + list($name,$id) = $this->resolveNameID(); + + $options['language'] = $this->language; + + // to make the content look like if it were in your target page + if ($this->contentCSS !== '') { + $options['contentsCss'] = $this->contentCSS; + } + + switch ($this->editorTemplate) { + case 'full': + $options['toolbar']='Full'; + break; + case 'basic': + $options['toolbar']='Basic'; + break; + default: + $options['toolbar']=$this->toolbar; + } + + $fontFamilies=''; + foreach($this->fontFamilies as $k=>$v){ + $fontFamilies.=$k.'/'.$v.';'; + } + $options['font_names']=$fontFamilies; + + $fontSizes=''; + foreach($this->fontSizes as $k=>$v){ + $fontSizes.=$k.'/'.$v.';'; + } + $options['fontSize_sizes']=$fontSizes; + + $options['extraPlugins'] = implode(',', $this->plugins); + + $options['skin']=$this->skin; + $options['theme']=$this->theme; + $options['height']=$this->height; + + // опции для файлменеджера + $baseDir = Yii::app()->baseUrl.'/protected/extensions/ckeditor'; + + $options['filebrowserBrowseUrl']=$baseDir."/kcfinder/browse.php?type=files"; + $options['filebrowserImageBrowseUrl']=$baseDir."/kcfinder/browse.php?type=images"; + $options['filebrowserFlashBrowseUrl']=$baseDir."/kcfinder/browse.php?type=flash"; + $options['filebrowserUploadUrl']=$baseDir."/kcfinder/upload.php?type=files"; + $options['filebrowserImageUploadUrl']=$baseDir."/kcfinder/upload.php?type=images"; + $options['filebrowserFlashUploadUrl']=$baseDir."/kcfinder/upload.php?type=flash"; + + + + + // here any option is overriden by user's options + if (is_array($this->options)) { + $options = array_merge($options, $this->options); + } + + return CJavaScript::encode($options); + } + + public function run(){ + parent::run(); + + list($name, $id) = $this->resolveNameID(); + + $baseDir = dirname(__FILE__); + $assets = Yii::app()->getAssetManager()->publish($baseDir.DIRECTORY_SEPARATOR.'assets'); + + $options = $this->makeOptions(); + + $cs = Yii::app()->getClientScript(); + + $cs->registerScriptFile($assets.'/ckeditor.js'); + + $this->htmlOptions['id'] = $id; + if (!array_key_exists('style', $this->htmlOptions)) { + $this->htmlOptions['style'] = "width:{$this->width};height:{$this->height};"; + } + if (!array_key_exists('cols', $this->htmlOptions)) { + $this->htmlOptions['cols'] = self::COLS; + } + if (!array_key_exists('rows', $this->htmlOptions)) { + $this->htmlOptions['rows'] = self::ROWS; + } + + + if($this->editorTemplate=='basic') { + $js =<<height'}); +EOP; + } + else { + $js =<<registerScript('Yii.'.get_class($this).'#'.$id, $js, CClientScript::POS_LOAD); + + if($this->hasModel()) { + $html = CHtml::activeTextArea($this->model, $this->attribute, $this->htmlOptions); + } + else { + $html = CHtml::textArea($name, $this->value, $this->htmlOptions); + } + + echo $html; + + $js_conf =<<Text

    . + ev.editor.dataProcessor.writer.setRules( '*', { + indent: false, + breakBeforeOpen: true, + breakAfterOpen: false, + breakBeforeClose: false, + breakAfterClose: true + }); + }); +} +EOP; + $cs->registerScript('body', $js_conf, CClientScript::POS_LOAD); + + } +} +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/CHANGES.md b/protected/extensions/ckeditor/assets/CHANGES.md new file mode 100644 index 0000000..6234060 --- /dev/null +++ b/protected/extensions/ckeditor/assets/CHANGES.md @@ -0,0 +1,138 @@ +CKEditor 4 Changelog +==================== + +## CKEditor 4.1.1 + +* Added new translation: Albanian. +* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete*/*Backspace* in an empty table cell moves the cursor to the next/previous cell. +* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a mouseup event. +* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the Filebrowser plugin. +* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start. +* [#10268](http://dev.ckeditor.com/ticket/10268): "Show Blocks" does not recover after switching to source view. +* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in `textarea` should not be modified by the `htmlDataProcessor`. +* [#10320](http://dev.ckeditor.com/ticket/10320): Justify plugin should add elements to the ACF based on current Enter mode. +* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks `tabSpaces`. Unified `data-cke-*` attributes filtering. +* [#10315](http://dev.ckeditor.com/ticket/10315): [Webkit] Undo manager should not record snapshots after a filling character was added/removed. +* [#10291](http://dev.ckeditor.com/ticket/10291): [Webkit] Space after a filling character should be secured. +* [#10330](http://dev.ckeditor.com/ticket/10330): [Webkit] The filling character is not removed on `keydown` in specific cases. +* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop. +* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: `undoManager#update` does not refresh the command state. +* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `` using `removeformat`. + +## CKEditor 4.1 + +* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with Enter key does not work with Advanced Content Filter in several cases. +* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the `filter.allowedContent` property always contains rules in the same format. +* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `` elements anymore. +* Minor issues in plugin integration with Advanced Content Filter: + * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter. + * [#10195](http://dev.ckeditor.com/ticket/10195): Image plugin no longer registers rules for links to Advanced Content Filter. + * [#10213](http://dev.ckeditor.com/ticket/10213): Justify plugin is now correctly registering rules to Advanced Content Filter when `config.justifyClasses` is defined. + +## CKEditor 4.1 RC + +* [#9829](http://dev.ckeditor.com/ticket/9829): Data and features activation based on editor configuration. + + Brand new data filtering system that works in 2 modes: + + * based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its + current configuration can handle, + * based on `config.allowedContent` rules - the data will be filtered and the editor features (toolbar items, commands, + keystrokes) will be enabled if they are allowed. + + See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter). +* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced "Shared Spaces" - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances. +* [#9907](http://dev.ckeditor.com/ticket/9907): Added the `contentPreview` event for preview data manipulation. +* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the `sourcedialog` plugin that brings raw HTML editing for inline editor instances. +* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, `toHtml` and `toDataFormat`, allowing for better integration with data processing. See API documentation: [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml), [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat). +* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter `htmlParser.fragment`, `htmlParser.element` etc. by many `htmlParser.filter`s before writing structure to an HTML string. +* Included in [#10103](http://dev.ckeditor.com/ticket/10103): + * Introduced the `editor.status` property to make it easier to check the current status of the editor. See [API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status). + * Default `command` state is now `CKEDITOR.TRISTATE_DISABLE`. It will be activated on `editor.instanceReady` or immediately after being added if the editor is already initialized. +* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `` as a default tag for strikethrough, which replaces obsolete `` in HTML5. + +## CKEditor 4.0.3 + +* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when Autogrow is enabled. +* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view. +* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling editor.destroy(). + +## CKEditor 4.0.2 + +* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding `CKEDITOR.getUrl` with `CKEDITOR_GETURL`. +* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in dialog window footer have different look and size (Moono, Kama). +* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with `styleSet.add()` are displayed in wrong order. +* [#9887](http://dev.ckeditor.com/ticket/9887): Disable magicline when `editor.readOnly` is set. +* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on `getData()` if set via the Document Properties dialog window. +* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin. +* [#9851](http://dev.ckeditor.com/ticket/9851): The `selectionChange` event is not fired when mouse selection ended outside editable. +* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll. +* [#9872](http://dev.ckeditor.com/ticket/9872): `editor.checkDirty()` returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag. +* [#9893](http://dev.ckeditor.com/ticket/9893): Fixed broken toolbar when editing mixed direction content in Quirks mode. +* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the Link dialog window when the Anchor option is used and no anchors are available. +* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with divarea-based editors. +* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable. +* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed magicline keystrokes. +* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time. +* [#9947](http://dev.ckeditor.com/ticket/9947): [Webkit] Editor overflows parent container in some edge cases. +* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken sourcearea view when an RTL language is set. +* [#10123](http://dev.ckeditor.com/ticket/10123): [Webkit] Fixed: Several dialog windows have broken layout since the latest Webkit release. +* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items. + +## CKEditor 4.0.1.1 + +* Security update: Added protection against XSS attack and possible path disclosure in PHP sample. + +## CKEditor 4.0.1 + +Fixed issues: + +* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in new Moono skin. +* Accessibility issues (mainly on inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844). +* Magic-line: + * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic-line. + * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic-line support for forms. + * [#9573](http://dev.ckeditor.com/ticket/9573): Magic-line doesn't disappear on `mouseout` in the specific case. +* [#9754](http://dev.ckeditor.com/ticket/9754): [Webkit] Cut & paste simple unformatted text generates inline wrapper in Webkits. +* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS-Word. +* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging. +* Context menu: + * [#9712](http://dev.ckeditor.com/ticket/9712): Context menu open destroys editor focus. + * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over floating toolbar. + * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates JS error in inline mode when editor attached to header element. +* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing window. +* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div based editor puts editing area under bottom UI space. +* [#9528](http://dev.ckeditor.com/ticket/9528): Host page's `box-sizing` style shouldn't influence editor UI elements. +* [#9503](http://dev.ckeditor.com/ticket/9503): Forms plugin adds context menu listeners only on supported input types. Added support for `tel, email, search` and `url` input types. +* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in narrow window. +* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog doesn't populate width correctly. +* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in nested table removes outer table cell. +* [#9815](http://dev.ckeditor.com/ticket/9815): Can't edit dialog fields on editor initialized in jQuery UI modal dialog. +* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialogs do not show completely in small window. +* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a div stay permanently even after user exists editing the div. +* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing format combo by clicking on its button. +* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when `border-width` style is specified. +* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read only mode. +* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected image. +* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `
    `.
    +* [#9709](http://dev.ckeditor.com/ticket/9709): PasteFromWord should not depend on configuration from other styles.
    +* [#9726](http://dev.ckeditor.com/ticket/9726): Removed color dialog dependency from table tools.
    +* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly on Accessibility Instructions dialog.
    +* [#9771](http://dev.ckeditor.com/ticket/9771): [Webkit & Opera] Fixed scrolling issues when pasting.
    +* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] onChange isn't fired for checkboxes in dialogs.
    +* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When we open toolbar menu for the first time & press down arrow key, focus goes to next toolbar button instead of menu options.
    +* [#9847](http://dev.ckeditor.com/ticket/9847): Elements path shouldn't be initialized on inline editor.
    +* [#9853](http://dev.ckeditor.com/ticket/9853): `Editor#addRemoveFormatFilter` is exposed before it really works.
    +* [#8893](http://dev.ckeditor.com/ticket/8893): Value of `pasteFromWordCleanupFile` config is now taken from instance configuration.
    +* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "live preview" checkbox from UI color picker.
    +
    +
    +## CKEditor 4.0
    +
    +The first stable release of the new CKEditor 4 code line.
    +
    +The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever
    +possible. The list of relevant changes can be found in the [API Changes page of
    +the CKEditor 4 documentation][1].
    +
    +[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes"
    diff --git a/protected/extensions/ckeditor/assets/LICENSE.md b/protected/extensions/ckeditor/assets/LICENSE.md
    new file mode 100644
    index 0000000..cf70e61
    --- /dev/null
    +++ b/protected/extensions/ckeditor/assets/LICENSE.md
    @@ -0,0 +1,1264 @@
    +Software License Agreement
    +==========================
    +
    +CKEditor - The text editor for Internet - http://ckeditor.com
    +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
    +
    +Licensed under the terms of any of the following licenses at your
    +choice:
    +
    + - GNU General Public License Version 2 or later (the "GPL")
    +   http://www.gnu.org/licenses/gpl.html
    +   (See Appendix A)
    +
    + - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
    +   http://www.gnu.org/licenses/lgpl.html
    +   (See Appendix B)
    +
    + - Mozilla Public License Version 1.1 or later (the "MPL")
    +   http://www.mozilla.org/MPL/MPL-1.1.html
    +   (See Appendix C)
    +
    +You are not required to, but if you want to explicitly declare the
    +license you have chosen to be bound to when using, reproducing,
    +modifying and distributing this software, just include a text file
    +titled "legal.txt" in your version of this software, indicating your
    +license choice. In any case, your choice will not restrict any
    +recipient of your version of this software to use, reproduce, modify
    +and distribute this software under any of the above licenses.
    +
    +Sources of Intellectual Property Included in CKEditor
    +-----------------------------------------------------
    +
    +Where not otherwise indicated, all CKEditor content is authored by
    +CKSource engineers and consists of CKSource-owned intellectual
    +property. In some specific instances, CKEditor will incorporate work
    +done by developers outside of CKSource with their express permission.
    +
    +Trademarks
    +----------
    +
    +CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
    +and product names are trademarks, registered trademarks or service
    +marks of their respective holders.
    +
    +---
    +
    +Appendix A: The GPL License
    +---------------------------
    +
    +GNU GENERAL PUBLIC LICENSE
    +Version 2, June 1991
    +
    + Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
    + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +License is intended to guarantee your freedom to share and change free
    +software-to make sure the software is free for all its users.  This
    +General Public License applies to most of the Free Software
    +Foundation's software and to any other program whose authors commit to
    +using it.  (Some other Free Software Foundation software is covered by
    +the GNU Lesser General Public License instead.)  You can apply it to
    +your programs, too.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +this service if you wish), that you receive source code or can get it
    +if you want it, that you can change the software or use pieces of it
    +in new free programs; and that you know you can do these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +anyone to deny you these rights or to ask you to surrender the rights.
    +These restrictions translate to certain responsibilities for you if you
    +distribute copies of the software, or if you modify it.
    +
    +  For example, if you distribute copies of such a program, whether
    +gratis or for a fee, you must give the recipients all the rights that
    +you have.  You must make sure that they, too, receive or can get the
    +source code.  And you must show them these terms so they know their
    +rights.
    +
    +  We protect your rights with two steps: (1) copyright the software, and
    +(2) offer you this license which gives you legal permission to copy,
    +distribute and/or modify the software.
    +
    +  Also, for each author's protection and ours, we want to make certain
    +that everyone understands that there is no warranty for this free
    +software.  If the software is modified by someone else and passed on, we
    +want its recipients to know that what they have is not the original, so
    +that any problems introduced by others will not reflect on the original
    +authors' reputations.
    +
    +  Finally, any free program is threatened constantly by software
    +patents.  We wish to avoid the danger that redistributors of a free
    +program will individually obtain patent licenses, in effect making the
    +program proprietary.  To prevent this, we have made it clear that any
    +patent must be licensed for everyone's free use or not licensed at all.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +GNU GENERAL PUBLIC LICENSE
    +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License applies to any program or other work which contains
    +a notice placed by the copyright holder saying it may be distributed
    +under the terms of this General Public License.  The "Program", below,
    +refers to any such program or work, and a "work based on the Program"
    +means either the Program or any derivative work under copyright law:
    +that is to say, a work containing the Program or a portion of it,
    +either verbatim or with modifications and/or translated into another
    +language.  (Hereinafter, translation is included without limitation in
    +the term "modification".)  Each licensee is addressed as "you".
    +
    +Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running the Program is not restricted, and the output from the Program
    +is covered only if its contents constitute a work based on the
    +Program (independent of having been made by running the Program).
    +Whether that is true depends on what the Program does.
    +
    +  1. You may copy and distribute verbatim copies of the Program's
    +source code as you receive it, in any medium, provided that you
    +conspicuously and appropriately publish on each copy an appropriate
    +copyright notice and disclaimer of warranty; keep intact all the
    +notices that refer to this License and to the absence of any warranty;
    +and give any other recipients of the Program a copy of this License
    +along with the Program.
    +
    +You may charge a fee for the physical act of transferring a copy, and
    +you may at your option offer warranty protection in exchange for a fee.
    +
    +  2. You may modify your copy or copies of the Program or any portion
    +of it, thus forming a work based on the Program, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) You must cause the modified files to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    b) You must cause any work that you distribute or publish, that in
    +    whole or in part contains or is derived from the Program or any
    +    part thereof, to be licensed as a whole at no charge to all third
    +    parties under the terms of this License.
    +
    +    c) If the modified program normally reads commands interactively
    +    when run, you must cause it, when started running for such
    +    interactive use in the most ordinary way, to print or display an
    +    announcement including an appropriate copyright notice and a
    +    notice that there is no warranty (or else, saying that you provide
    +    a warranty) and that users may redistribute the program under
    +    these conditions, and telling the user how to view a copy of this
    +    License.  (Exception: if the Program itself is interactive but
    +    does not normally print such an announcement, your work based on
    +    the Program is not required to print an announcement.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Program,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Program, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Program.
    +
    +In addition, mere aggregation of another work not based on the Program
    +with the Program (or with a work based on the Program) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may copy and distribute the Program (or a work based on it,
    +under Section 2) in object code or executable form under the terms of
    +Sections 1 and 2 above provided that you also do one of the following:
    +
    +    a) Accompany it with the complete corresponding machine-readable
    +    source code, which must be distributed under the terms of Sections
    +    1 and 2 above on a medium customarily used for software interchange; or,
    +
    +    b) Accompany it with a written offer, valid for at least three
    +    years, to give any third party, for a charge no more than your
    +    cost of physically performing source distribution, a complete
    +    machine-readable copy of the corresponding source code, to be
    +    distributed under the terms of Sections 1 and 2 above on a medium
    +    customarily used for software interchange; or,
    +
    +    c) Accompany it with the information you received as to the offer
    +    to distribute corresponding source code.  (This alternative is
    +    allowed only for noncommercial distribution and only if you
    +    received the program in object code or executable form with such
    +    an offer, in accord with Subsection b above.)
    +
    +The source code for a work means the preferred form of the work for
    +making modifications to it.  For an executable work, complete source
    +code means all the source code for all modules it contains, plus any
    +associated interface definition files, plus the scripts used to
    +control compilation and installation of the executable.  However, as a
    +special exception, the source code distributed need not include
    +anything that is normally distributed (in either source or binary
    +form) with the major components (compiler, kernel, and so on) of the
    +operating system on which the executable runs, unless that component
    +itself accompanies the executable.
    +
    +If distribution of executable or object code is made by offering
    +access to copy from a designated place, then offering equivalent
    +access to copy the source code from the same place counts as
    +distribution of the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  4. You may not copy, modify, sublicense, or distribute the Program
    +except as expressly provided under this License.  Any attempt
    +otherwise to copy, modify, sublicense or distribute the Program is
    +void, and will automatically terminate your rights under this License.
    +However, parties who have received copies, or rights, from you under
    +this License will not have their licenses terminated so long as such
    +parties remain in full compliance.
    +
    +  5. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Program or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Program (or any work based on the
    +Program), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Program or works based on it.
    +
    +  6. Each time you redistribute the Program (or any work based on the
    +Program), the recipient automatically receives a license from the
    +original licensor to copy, distribute or modify the Program subject to
    +these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties to
    +this License.
    +
    +  7. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Program at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Program by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Program.
    +
    +If any portion of this section is held invalid or unenforceable under
    +any particular circumstance, the balance of the section is intended to
    +apply and the section as a whole is intended to apply in other
    +circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system, which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  8. If the distribution and/or use of the Program is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Program under this License
    +may add an explicit geographical distribution limitation excluding
    +those countries, so that distribution is permitted only in or among
    +countries not thus excluded.  In such case, this License incorporates
    +the limitation as if written in the body of this License.
    +
    +  9. The Free Software Foundation may publish revised and/or new versions
    +of the General Public License from time to time.  Such new versions will
    +be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Program
    +specifies a version number of this License which applies to it and "any
    +later version", you have the option of following the terms and conditions
    +either of that version or of any later version published by the Free
    +Software Foundation.  If the Program does not specify a version number of
    +this License, you may choose any version ever published by the Free Software
    +Foundation.
    +
    +  10. If you wish to incorporate parts of the Program into other free
    +programs whose distribution conditions are different, write to the author
    +to ask for permission.  For software which is copyrighted by the Free
    +Software Foundation, write to the Free Software Foundation; we sometimes
    +make exceptions for this.  Our decision will be guided by the two goals
    +of preserving the free status of all derivatives of our free software and
    +of promoting the sharing and reuse of software generally.
    +
    +NO WARRANTY
    +
    +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
    +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
    +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
    +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
    +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
    +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
    +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
    +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
    +REPAIR OR CORRECTION.
    +
    +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
    +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
    +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
    +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
    +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
    +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
    +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
    +POSSIBILITY OF SUCH DAMAGES.
    +
    +END OF TERMS AND CONDITIONS
    +
    +
    +Appendix B: The LGPL License
    +----------------------------
    +
    +GNU LESSER GENERAL PUBLIC LICENSE
    +Version 2.1, February 1999
    +
    + Copyright (C) 1991, 1999 Free Software Foundation, Inc.
    +     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +[This is the first released version of the Lesser GPL.  It also counts
    + as the successor of the GNU Library Public License, version 2, hence
    + the version number 2.1.]
    +
    +Preamble
    +
    +  The licenses for most software are designed to take away your
    +freedom to share and change it.  By contrast, the GNU General Public
    +Licenses are intended to guarantee your freedom to share and change
    +free software-to make sure the software is free for all its users.
    +
    +  This license, the Lesser General Public License, applies to some
    +specially designated software packages-typically libraries-of the
    +Free Software Foundation and other authors who decide to use it.  You
    +can use it too, but we suggest you first think carefully about whether
    +this license or the ordinary General Public License is the better
    +strategy to use in any particular case, based on the explanations below.
    +
    +  When we speak of free software, we are referring to freedom of use,
    +not price.  Our General Public Licenses are designed to make sure that
    +you have the freedom to distribute copies of free software (and charge
    +for this service if you wish); that you receive source code or can get
    +it if you want it; that you can change the software and use pieces of
    +it in new free programs; and that you are informed that you can do
    +these things.
    +
    +  To protect your rights, we need to make restrictions that forbid
    +distributors to deny you these rights or to ask you to surrender these
    +rights.  These restrictions translate to certain responsibilities for
    +you if you distribute copies of the library or if you modify it.
    +
    +  For example, if you distribute copies of the library, whether gratis
    +or for a fee, you must give the recipients all the rights that we gave
    +you.  You must make sure that they, too, receive or can get the source
    +code.  If you link other code with the library, you must provide
    +complete object files to the recipients, so that they can relink them
    +with the library after making changes to the library and recompiling
    +it.  And you must show them these terms so they know their rights.
    +
    +  We protect your rights with a two-step method: (1) we copyright the
    +library, and (2) we offer you this license, which gives you legal
    +permission to copy, distribute and/or modify the library.
    +
    +  To protect each distributor, we want to make it very clear that
    +there is no warranty for the free library.  Also, if the library is
    +modified by someone else and passed on, the recipients should know
    +that what they have is not the original version, so that the original
    +author's reputation will not be affected by problems that might be
    +introduced by others.
    +
    +  Finally, software patents pose a constant threat to the existence of
    +any free program.  We wish to make sure that a company cannot
    +effectively restrict the users of a free program by obtaining a
    +restrictive license from a patent holder.  Therefore, we insist that
    +any patent license obtained for a version of the library must be
    +consistent with the full freedom of use specified in this license.
    +
    +  Most GNU software, including some libraries, is covered by the
    +ordinary GNU General Public License.  This license, the GNU Lesser
    +General Public License, applies to certain designated libraries, and
    +is quite different from the ordinary General Public License.  We use
    +this license for certain libraries in order to permit linking those
    +libraries into non-free programs.
    +
    +  When a program is linked with a library, whether statically or using
    +a shared library, the combination of the two is legally speaking a
    +combined work, a derivative of the original library.  The ordinary
    +General Public License therefore permits such linking only if the
    +entire combination fits its criteria of freedom.  The Lesser General
    +Public License permits more lax criteria for linking other code with
    +the library.
    +
    +  We call this license the "Lesser" General Public License because it
    +does Less to protect the user's freedom than the ordinary General
    +Public License.  It also provides other free software developers Less
    +of an advantage over competing non-free programs.  These disadvantages
    +are the reason we use the ordinary General Public License for many
    +libraries.  However, the Lesser license provides advantages in certain
    +special circumstances.
    +
    +  For example, on rare occasions, there may be a special need to
    +encourage the widest possible use of a certain library, so that it becomes
    +a de-facto standard.  To achieve this, non-free programs must be
    +allowed to use the library.  A more frequent case is that a free
    +library does the same job as widely used non-free libraries.  In this
    +case, there is little to gain by limiting the free library to free
    +software only, so we use the Lesser General Public License.
    +
    +  In other cases, permission to use a particular library in non-free
    +programs enables a greater number of people to use a large body of
    +free software.  For example, permission to use the GNU C Library in
    +non-free programs enables many more people to use the whole GNU
    +operating system, as well as its variant, the GNU/Linux operating
    +system.
    +
    +  Although the Lesser General Public License is Less protective of the
    +users' freedom, it does ensure that the user of a program that is
    +linked with the Library has the freedom and the wherewithal to run
    +that program using a modified version of the Library.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.  Pay close attention to the difference between a
    +"work based on the library" and a "work that uses the library".  The
    +former contains code derived from the library, whereas the latter must
    +be combined with the library in order to run.
    +
    +GNU LESSER GENERAL PUBLIC LICENSE
    +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    +
    +  0. This License Agreement applies to any software library or other
    +program which contains a notice placed by the copyright holder or
    +other authorized party saying it may be distributed under the terms of
    +this Lesser General Public License (also called "this License").
    +Each licensee is addressed as "you".
    +
    +  A "library" means a collection of software functions and/or data
    +prepared so as to be conveniently linked with application programs
    +(which use some of those functions and data) to form executables.
    +
    +  The "Library", below, refers to any such software library or work
    +which has been distributed under these terms.  A "work based on the
    +Library" means either the Library or any derivative work under
    +copyright law: that is to say, a work containing the Library or a
    +portion of it, either verbatim or with modifications and/or translated
    +straightforwardly into another language.  (Hereinafter, translation is
    +included without limitation in the term "modification".)
    +
    +  "Source code" for a work means the preferred form of the work for
    +making modifications to it.  For a library, complete source code means
    +all the source code for all modules it contains, plus any associated
    +interface definition files, plus the scripts used to control compilation
    +and installation of the library.
    +
    +  Activities other than copying, distribution and modification are not
    +covered by this License; they are outside its scope.  The act of
    +running a program using the Library is not restricted, and output from
    +such a program is covered only if its contents constitute a work based
    +on the Library (independent of the use of the Library in a tool for
    +writing it).  Whether that is true depends on what the Library does
    +and what the program that uses the Library does.
    +
    +  1. You may copy and distribute verbatim copies of the Library's
    +complete source code as you receive it, in any medium, provided that
    +you conspicuously and appropriately publish on each copy an
    +appropriate copyright notice and disclaimer of warranty; keep intact
    +all the notices that refer to this License and to the absence of any
    +warranty; and distribute a copy of this License along with the
    +Library.
    +
    +  You may charge a fee for the physical act of transferring a copy,
    +and you may at your option offer warranty protection in exchange for a
    +fee.
    +
    +  2. You may modify your copy or copies of the Library or any portion
    +of it, thus forming a work based on the Library, and copy and
    +distribute such modifications or work under the terms of Section 1
    +above, provided that you also meet all of these conditions:
    +
    +    a) The modified work must itself be a software library.
    +
    +    b) You must cause the files modified to carry prominent notices
    +    stating that you changed the files and the date of any change.
    +
    +    c) You must cause the whole of the work to be licensed at no
    +    charge to all third parties under the terms of this License.
    +
    +    d) If a facility in the modified Library refers to a function or a
    +    table of data to be supplied by an application program that uses
    +    the facility, other than as an argument passed when the facility
    +    is invoked, then you must make a good faith effort to ensure that,
    +    in the event an application does not supply such function or
    +    table, the facility still operates, and performs whatever part of
    +    its purpose remains meaningful.
    +
    +    (For example, a function in a library to compute square roots has
    +    a purpose that is entirely well-defined independent of the
    +    application.  Therefore, Subsection 2d requires that any
    +    application-supplied function or table used by this function must
    +    be optional: if the application does not supply it, the square
    +    root function must still compute square roots.)
    +
    +These requirements apply to the modified work as a whole.  If
    +identifiable sections of that work are not derived from the Library,
    +and can be reasonably considered independent and separate works in
    +themselves, then this License, and its terms, do not apply to those
    +sections when you distribute them as separate works.  But when you
    +distribute the same sections as part of a whole which is a work based
    +on the Library, the distribution of the whole must be on the terms of
    +this License, whose permissions for other licensees extend to the
    +entire whole, and thus to each and every part regardless of who wrote
    +it.
    +
    +Thus, it is not the intent of this section to claim rights or contest
    +your rights to work written entirely by you; rather, the intent is to
    +exercise the right to control the distribution of derivative or
    +collective works based on the Library.
    +
    +In addition, mere aggregation of another work not based on the Library
    +with the Library (or with a work based on the Library) on a volume of
    +a storage or distribution medium does not bring the other work under
    +the scope of this License.
    +
    +  3. You may opt to apply the terms of the ordinary GNU General Public
    +License instead of this License to a given copy of the Library.  To do
    +this, you must alter all the notices that refer to this License, so
    +that they refer to the ordinary GNU General Public License, version 2,
    +instead of to this License.  (If a newer version than version 2 of the
    +ordinary GNU General Public License has appeared, then you can specify
    +that version instead if you wish.)  Do not make any other change in
    +these notices.
    +
    +  Once this change is made in a given copy, it is irreversible for
    +that copy, so the ordinary GNU General Public License applies to all
    +subsequent copies and derivative works made from that copy.
    +
    +  This option is useful when you wish to copy part of the code of
    +the Library into a program that is not a library.
    +
    +  4. You may copy and distribute the Library (or a portion or
    +derivative of it, under Section 2) in object code or executable form
    +under the terms of Sections 1 and 2 above provided that you accompany
    +it with the complete corresponding machine-readable source code, which
    +must be distributed under the terms of Sections 1 and 2 above on a
    +medium customarily used for software interchange.
    +
    +  If distribution of object code is made by offering access to copy
    +from a designated place, then offering equivalent access to copy the
    +source code from the same place satisfies the requirement to
    +distribute the source code, even though third parties are not
    +compelled to copy the source along with the object code.
    +
    +  5. A program that contains no derivative of any portion of the
    +Library, but is designed to work with the Library by being compiled or
    +linked with it, is called a "work that uses the Library".  Such a
    +work, in isolation, is not a derivative work of the Library, and
    +therefore falls outside the scope of this License.
    +
    +  However, linking a "work that uses the Library" with the Library
    +creates an executable that is a derivative of the Library (because it
    +contains portions of the Library), rather than a "work that uses the
    +library".  The executable is therefore covered by this License.
    +Section 6 states terms for distribution of such executables.
    +
    +  When a "work that uses the Library" uses material from a header file
    +that is part of the Library, the object code for the work may be a
    +derivative work of the Library even though the source code is not.
    +Whether this is true is especially significant if the work can be
    +linked without the Library, or if the work is itself a library.  The
    +threshold for this to be true is not precisely defined by law.
    +
    +  If such an object file uses only numerical parameters, data
    +structure layouts and accessors, and small macros and small inline
    +functions (ten lines or less in length), then the use of the object
    +file is unrestricted, regardless of whether it is legally a derivative
    +work.  (Executables containing this object code plus portions of the
    +Library will still fall under Section 6.)
    +
    +  Otherwise, if the work is a derivative of the Library, you may
    +distribute the object code for the work under the terms of Section 6.
    +Any executables containing that work also fall under Section 6,
    +whether or not they are linked directly with the Library itself.
    +
    +  6. As an exception to the Sections above, you may also combine or
    +link a "work that uses the Library" with the Library to produce a
    +work containing portions of the Library, and distribute that work
    +under terms of your choice, provided that the terms permit
    +modification of the work for the customer's own use and reverse
    +engineering for debugging such modifications.
    +
    +  You must give prominent notice with each copy of the work that the
    +Library is used in it and that the Library and its use are covered by
    +this License.  You must supply a copy of this License.  If the work
    +during execution displays copyright notices, you must include the
    +copyright notice for the Library among them, as well as a reference
    +directing the user to the copy of this License.  Also, you must do one
    +of these things:
    +
    +    a) Accompany the work with the complete corresponding
    +    machine-readable source code for the Library including whatever
    +    changes were used in the work (which must be distributed under
    +    Sections 1 and 2 above); and, if the work is an executable linked
    +    with the Library, with the complete machine-readable "work that
    +    uses the Library", as object code and/or source code, so that the
    +    user can modify the Library and then relink to produce a modified
    +    executable containing the modified Library.  (It is understood
    +    that the user who changes the contents of definitions files in the
    +    Library will not necessarily be able to recompile the application
    +    to use the modified definitions.)
    +
    +    b) Use a suitable shared library mechanism for linking with the
    +    Library.  A suitable mechanism is one that (1) uses at run time a
    +    copy of the library already present on the user's computer system,
    +    rather than copying library functions into the executable, and (2)
    +    will operate properly with a modified version of the library, if
    +    the user installs one, as long as the modified version is
    +    interface-compatible with the version that the work was made with.
    +
    +    c) Accompany the work with a written offer, valid for at
    +    least three years, to give the same user the materials
    +    specified in Subsection 6a, above, for a charge no more
    +    than the cost of performing this distribution.
    +
    +    d) If distribution of the work is made by offering access to copy
    +    from a designated place, offer equivalent access to copy the above
    +    specified materials from the same place.
    +
    +    e) Verify that the user has already received a copy of these
    +    materials or that you have already sent this user a copy.
    +
    +  For an executable, the required form of the "work that uses the
    +Library" must include any data and utility programs needed for
    +reproducing the executable from it.  However, as a special exception,
    +the materials to be distributed need not include anything that is
    +normally distributed (in either source or binary form) with the major
    +components (compiler, kernel, and so on) of the operating system on
    +which the executable runs, unless that component itself accompanies
    +the executable.
    +
    +  It may happen that this requirement contradicts the license
    +restrictions of other proprietary libraries that do not normally
    +accompany the operating system.  Such a contradiction means you cannot
    +use both them and the Library together in an executable that you
    +distribute.
    +
    +  7. You may place library facilities that are a work based on the
    +Library side-by-side in a single library together with other library
    +facilities not covered by this License, and distribute such a combined
    +library, provided that the separate distribution of the work based on
    +the Library and of the other library facilities is otherwise
    +permitted, and provided that you do these two things:
    +
    +    a) Accompany the combined library with a copy of the same work
    +    based on the Library, uncombined with any other library
    +    facilities.  This must be distributed under the terms of the
    +    Sections above.
    +
    +    b) Give prominent notice with the combined library of the fact
    +    that part of it is a work based on the Library, and explaining
    +    where to find the accompanying uncombined form of the same work.
    +
    +  8. You may not copy, modify, sublicense, link with, or distribute
    +the Library except as expressly provided under this License.  Any
    +attempt otherwise to copy, modify, sublicense, link with, or
    +distribute the Library is void, and will automatically terminate your
    +rights under this License.  However, parties who have received copies,
    +or rights, from you under this License will not have their licenses
    +terminated so long as such parties remain in full compliance.
    +
    +  9. You are not required to accept this License, since you have not
    +signed it.  However, nothing else grants you permission to modify or
    +distribute the Library or its derivative works.  These actions are
    +prohibited by law if you do not accept this License.  Therefore, by
    +modifying or distributing the Library (or any work based on the
    +Library), you indicate your acceptance of this License to do so, and
    +all its terms and conditions for copying, distributing or modifying
    +the Library or works based on it.
    +
    +  10. Each time you redistribute the Library (or any work based on the
    +Library), the recipient automatically receives a license from the
    +original licensor to copy, distribute, link with or modify the Library
    +subject to these terms and conditions.  You may not impose any further
    +restrictions on the recipients' exercise of the rights granted herein.
    +You are not responsible for enforcing compliance by third parties with
    +this License.
    +
    +  11. If, as a consequence of a court judgment or allegation of patent
    +infringement or for any other reason (not limited to patent issues),
    +conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot
    +distribute so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you
    +may not distribute the Library at all.  For example, if a patent
    +license would not permit royalty-free redistribution of the Library by
    +all those who receive copies directly or indirectly through you, then
    +the only way you could satisfy both it and this License would be to
    +refrain entirely from distribution of the Library.
    +
    +If any portion of this section is held invalid or unenforceable under any
    +particular circumstance, the balance of the section is intended to apply,
    +and the section as a whole is intended to apply in other circumstances.
    +
    +It is not the purpose of this section to induce you to infringe any
    +patents or other property right claims or to contest validity of any
    +such claims; this section has the sole purpose of protecting the
    +integrity of the free software distribution system which is
    +implemented by public license practices.  Many people have made
    +generous contributions to the wide range of software distributed
    +through that system in reliance on consistent application of that
    +system; it is up to the author/donor to decide if he or she is willing
    +to distribute software through any other system and a licensee cannot
    +impose that choice.
    +
    +This section is intended to make thoroughly clear what is believed to
    +be a consequence of the rest of this License.
    +
    +  12. If the distribution and/or use of the Library is restricted in
    +certain countries either by patents or by copyrighted interfaces, the
    +original copyright holder who places the Library under this License may add
    +an explicit geographical distribution limitation excluding those countries,
    +so that distribution is permitted only in or among countries not thus
    +excluded.  In such case, this License incorporates the limitation as if
    +written in the body of this License.
    +
    +  13. The Free Software Foundation may publish revised and/or new
    +versions of the Lesser General Public License from time to time.
    +Such new versions will be similar in spirit to the present version,
    +but may differ in detail to address new problems or concerns.
    +
    +Each version is given a distinguishing version number.  If the Library
    +specifies a version number of this License which applies to it and
    +"any later version", you have the option of following the terms and
    +conditions either of that version or of any later version published by
    +the Free Software Foundation.  If the Library does not specify a
    +license version number, you may choose any version ever published by
    +the Free Software Foundation.
    +
    +  14. If you wish to incorporate parts of the Library into other free
    +programs whose distribution conditions are incompatible with these,
    +write to the author to ask for permission.  For software which is
    +copyrighted by the Free Software Foundation, write to the Free
    +Software Foundation; we sometimes make exceptions for this.  Our
    +decision will be guided by the two goals of preserving the free status
    +of all derivatives of our free software and of promoting the sharing
    +and reuse of software generally.
    +
    +NO WARRANTY
    +
    +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
    +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
    +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
    +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
    +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
    +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
    +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
    +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
    +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
    +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
    +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
    +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
    +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
    +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
    +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
    +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
    +DAMAGES.
    +
    +END OF TERMS AND CONDITIONS
    +
    +
    +Appendix C: The MPL License
    +---------------------------
    +
    +MOZILLA PUBLIC LICENSE
    +Version 1.1
    +
    +1. Definitions.
    +
    +     1.0.1. "Commercial Use" means distribution or otherwise making the
    +     Covered Code available to a third party.
    +
    +     1.1. "Contributor" means each entity that creates or contributes to
    +     the creation of Modifications.
    +
    +     1.2. "Contributor Version" means the combination of the Original
    +     Code, prior Modifications used by a Contributor, and the Modifications
    +     made by that particular Contributor.
    +
    +     1.3. "Covered Code" means the Original Code or Modifications or the
    +     combination of the Original Code and Modifications, in each case
    +     including portions thereof.
    +
    +     1.4. "Electronic Distribution Mechanism" means a mechanism generally
    +     accepted in the software development community for the electronic
    +     transfer of data.
    +
    +     1.5. "Executable" means Covered Code in any form other than Source
    +     Code.
    +
    +     1.6. "Initial Developer" means the individual or entity identified
    +     as the Initial Developer in the Source Code notice required by Exhibit
    +     A.
    +
    +     1.7. "Larger Work" means a work which combines Covered Code or
    +     portions thereof with code not governed by the terms of this License.
    +
    +     1.8. "License" means this document.
    +
    +     1.8.1. "Licensable" means having the right to grant, to the maximum
    +     extent possible, whether at the time of the initial grant or
    +     subsequently acquired, any and all of the rights conveyed herein.
    +
    +     1.9. "Modifications" means any addition to or deletion from the
    +     substance or structure of either the Original Code or any previous
    +     Modifications. When Covered Code is released as a series of files, a
    +     Modification is:
    +          A. Any addition to or deletion from the contents of a file
    +          containing Original Code or previous Modifications.
    +
    +          B. Any new file that contains any part of the Original Code or
    +          previous Modifications.
    +
    +     1.10. "Original Code" means Source Code of computer software code
    +     which is described in the Source Code notice required by Exhibit A as
    +     Original Code, and which, at the time of its release under this
    +     License is not already Covered Code governed by this License.
    +
    +     1.10.1. "Patent Claims" means any patent claim(s), now owned or
    +     hereafter acquired, including without limitation,  method, process,
    +     and apparatus claims, in any patent Licensable by grantor.
    +
    +     1.11. "Source Code" means the preferred form of the Covered Code for
    +     making modifications to it, including all modules it contains, plus
    +     any associated interface definition files, scripts used to control
    +     compilation and installation of an Executable, or source code
    +     differential comparisons against either the Original Code or another
    +     well known, available Covered Code of the Contributor's choice. The
    +     Source Code can be in a compressed or archival form, provided the
    +     appropriate decompression or de-archiving software is widely available
    +     for no charge.
    +
    +     1.12. "You" (or "Your")  means an individual or a legal entity
    +     exercising rights under, and complying with all of the terms of, this
    +     License or a future version of this License issued under Section 6.1.
    +     For legal entities, "You" includes any entity which controls, is
    +     controlled by, or is under common control with You. For purposes of
    +     this definition, "control" means (a) the power, direct or indirect,
    +     to cause the direction or management of such entity, whether by
    +     contract or otherwise, or (b) ownership of more than fifty percent
    +     (50%) of the outstanding shares or beneficial ownership of such
    +     entity.
    +
    +2. Source Code License.
    +
    +     2.1. The Initial Developer Grant.
    +     The Initial Developer hereby grants You a world-wide, royalty-free,
    +     non-exclusive license, subject to third party intellectual property
    +     claims:
    +          (a)  under intellectual property rights (other than patent or
    +          trademark) Licensable by Initial Developer to use, reproduce,
    +          modify, display, perform, sublicense and distribute the Original
    +          Code (or portions thereof) with or without Modifications, and/or
    +          as part of a Larger Work; and
    +
    +          (b) under Patents Claims infringed by the making, using or
    +          selling of Original Code, to make, have made, use, practice,
    +          sell, and offer for sale, and/or otherwise dispose of the
    +          Original Code (or portions thereof).
    +
    +          (c) the licenses granted in this Section 2.1(a) and (b) are
    +          effective on the date Initial Developer first distributes
    +          Original Code under the terms of this License.
    +
    +          (d) Notwithstanding Section 2.1(b) above, no patent license is
    +          granted: 1) for code that You delete from the Original Code; 2)
    +          separate from the Original Code;  or 3) for infringements caused
    +          by: i) the modification of the Original Code or ii) the
    +          combination of the Original Code with other software or devices.
    +
    +     2.2. Contributor Grant.
    +     Subject to third party intellectual property claims, each Contributor
    +     hereby grants You a world-wide, royalty-free, non-exclusive license
    +
    +          (a)  under intellectual property rights (other than patent or
    +          trademark) Licensable by Contributor, to use, reproduce, modify,
    +          display, perform, sublicense and distribute the Modifications
    +          created by such Contributor (or portions thereof) either on an
    +          unmodified basis, with other Modifications, as Covered Code
    +          and/or as part of a Larger Work; and
    +
    +          (b) under Patent Claims infringed by the making, using, or
    +          selling of  Modifications made by that Contributor either alone
    +          and/or in combination with its Contributor Version (or portions
    +          of such combination), to make, use, sell, offer for sale, have
    +          made, and/or otherwise dispose of: 1) Modifications made by that
    +          Contributor (or portions thereof); and 2) the combination of
    +          Modifications made by that Contributor with its Contributor
    +          Version (or portions of such combination).
    +
    +          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
    +          effective on the date Contributor first makes Commercial Use of
    +          the Covered Code.
    +
    +          (d)    Notwithstanding Section 2.2(b) above, no patent license is
    +          granted: 1) for any code that Contributor has deleted from the
    +          Contributor Version; 2)  separate from the Contributor Version;
    +          3)  for infringements caused by: i) third party modifications of
    +          Contributor Version or ii)  the combination of Modifications made
    +          by that Contributor with other software  (except as part of the
    +          Contributor Version) or other devices; or 4) under Patent Claims
    +          infringed by Covered Code in the absence of Modifications made by
    +          that Contributor.
    +
    +3. Distribution Obligations.
    +
    +     3.1. Application of License.
    +     The Modifications which You create or to which You contribute are
    +     governed by the terms of this License, including without limitation
    +     Section 2.2. The Source Code version of Covered Code may be
    +     distributed only under the terms of this License or a future version
    +     of this License released under Section 6.1, and You must include a
    +     copy of this License with every copy of the Source Code You
    +     distribute. You may not offer or impose any terms on any Source Code
    +     version that alters or restricts the applicable version of this
    +     License or the recipients' rights hereunder. However, You may include
    +     an additional document offering the additional rights described in
    +     Section 3.5.
    +
    +     3.2. Availability of Source Code.
    +     Any Modification which You create or to which You contribute must be
    +     made available in Source Code form under the terms of this License
    +     either on the same media as an Executable version or via an accepted
    +     Electronic Distribution Mechanism to anyone to whom you made an
    +     Executable version available; and if made available via Electronic
    +     Distribution Mechanism, must remain available for at least twelve (12)
    +     months after the date it initially became available, or at least six
    +     (6) months after a subsequent version of that particular Modification
    +     has been made available to such recipients. You are responsible for
    +     ensuring that the Source Code version remains available even if the
    +     Electronic Distribution Mechanism is maintained by a third party.
    +
    +     3.3. Description of Modifications.
    +     You must cause all Covered Code to which You contribute to contain a
    +     file documenting the changes You made to create that Covered Code and
    +     the date of any change. You must include a prominent statement that
    +     the Modification is derived, directly or indirectly, from Original
    +     Code provided by the Initial Developer and including the name of the
    +     Initial Developer in (a) the Source Code, and (b) in any notice in an
    +     Executable version or related documentation in which You describe the
    +     origin or ownership of the Covered Code.
    +
    +     3.4. Intellectual Property Matters
    +          (a) Third Party Claims.
    +          If Contributor has knowledge that a license under a third party's
    +          intellectual property rights is required to exercise the rights
    +          granted by such Contributor under Sections 2.1 or 2.2,
    +          Contributor must include a text file with the Source Code
    +          distribution titled "LEGAL" which describes the claim and the
    +          party making the claim in sufficient detail that a recipient will
    +          know whom to contact. If Contributor obtains such knowledge after
    +          the Modification is made available as described in Section 3.2,
    +          Contributor shall promptly modify the LEGAL file in all copies
    +          Contributor makes available thereafter and shall take other steps
    +          (such as notifying appropriate mailing lists or newsgroups)
    +          reasonably calculated to inform those who received the Covered
    +          Code that new knowledge has been obtained.
    +
    +          (b) Contributor APIs.
    +          If Contributor's Modifications include an application programming
    +          interface and Contributor has knowledge of patent licenses which
    +          are reasonably necessary to implement that API, Contributor must
    +          also include this information in the LEGAL file.
    +
    +               (c)    Representations.
    +          Contributor represents that, except as disclosed pursuant to
    +          Section 3.4(a) above, Contributor believes that Contributor's
    +          Modifications are Contributor's original creation(s) and/or
    +          Contributor has sufficient rights to grant the rights conveyed by
    +          this License.
    +
    +     3.5. Required Notices.
    +     You must duplicate the notice in Exhibit A in each file of the Source
    +     Code.  If it is not possible to put such notice in a particular Source
    +     Code file due to its structure, then You must include such notice in a
    +     location (such as a relevant directory) where a user would be likely
    +     to look for such a notice.  If You created one or more Modification(s)
    +     You may add your name as a Contributor to the notice described in
    +     Exhibit A.  You must also duplicate this License in any documentation
    +     for the Source Code where You describe recipients' rights or ownership
    +     rights relating to Covered Code.  You may choose to offer, and to
    +     charge a fee for, warranty, support, indemnity or liability
    +     obligations to one or more recipients of Covered Code. However, You
    +     may do so only on Your own behalf, and not on behalf of the Initial
    +     Developer or any Contributor. You must make it absolutely clear than
    +     any such warranty, support, indemnity or liability obligation is
    +     offered by You alone, and You hereby agree to indemnify the Initial
    +     Developer and every Contributor for any liability incurred by the
    +     Initial Developer or such Contributor as a result of warranty,
    +     support, indemnity or liability terms You offer.
    +
    +     3.6. Distribution of Executable Versions.
    +     You may distribute Covered Code in Executable form only if the
    +     requirements of Section 3.1-3.5 have been met for that Covered Code,
    +     and if You include a notice stating that the Source Code version of
    +     the Covered Code is available under the terms of this License,
    +     including a description of how and where You have fulfilled the
    +     obligations of Section 3.2. The notice must be conspicuously included
    +     in any notice in an Executable version, related documentation or
    +     collateral in which You describe recipients' rights relating to the
    +     Covered Code. You may distribute the Executable version of Covered
    +     Code or ownership rights under a license of Your choice, which may
    +     contain terms different from this License, provided that You are in
    +     compliance with the terms of this License and that the license for the
    +     Executable version does not attempt to limit or alter the recipient's
    +     rights in the Source Code version from the rights set forth in this
    +     License. If You distribute the Executable version under a different
    +     license You must make it absolutely clear that any terms which differ
    +     from this License are offered by You alone, not by the Initial
    +     Developer or any Contributor. You hereby agree to indemnify the
    +     Initial Developer and every Contributor for any liability incurred by
    +     the Initial Developer or such Contributor as a result of any such
    +     terms You offer.
    +
    +     3.7. Larger Works.
    +     You may create a Larger Work by combining Covered Code with other code
    +     not governed by the terms of this License and distribute the Larger
    +     Work as a single product. In such a case, You must make sure the
    +     requirements of this License are fulfilled for the Covered Code.
    +
    +4. Inability to Comply Due to Statute or Regulation.
    +
    +     If it is impossible for You to comply with any of the terms of this
    +     License with respect to some or all of the Covered Code due to
    +     statute, judicial order, or regulation then You must: (a) comply with
    +     the terms of this License to the maximum extent possible; and (b)
    +     describe the limitations and the code they affect. Such description
    +     must be included in the LEGAL file described in Section 3.4 and must
    +     be included with all distributions of the Source Code. Except to the
    +     extent prohibited by statute or regulation, such description must be
    +     sufficiently detailed for a recipient of ordinary skill to be able to
    +     understand it.
    +
    +5. Application of this License.
    +
    +     This License applies to code to which the Initial Developer has
    +     attached the notice in Exhibit A and to related Covered Code.
    +
    +6. Versions of the License.
    +
    +     6.1. New Versions.
    +     Netscape Communications Corporation ("Netscape") may publish revised
    +     and/or new versions of the License from time to time. Each version
    +     will be given a distinguishing version number.
    +
    +     6.2. Effect of New Versions.
    +     Once Covered Code has been published under a particular version of the
    +     License, You may always continue to use it under the terms of that
    +     version. You may also choose to use such Covered Code under the terms
    +     of any subsequent version of the License published by Netscape. No one
    +     other than Netscape has the right to modify the terms applicable to
    +     Covered Code created under this License.
    +
    +     6.3. Derivative Works.
    +     If You create or use a modified version of this License (which you may
    +     only do in order to apply it to code which is not already Covered Code
    +     governed by this License), You must (a) rename Your license so that
    +     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
    +     "MPL", "NPL" or any confusingly similar phrase do not appear in your
    +     license (except to note that your license differs from this License)
    +     and (b) otherwise make it clear that Your version of the license
    +     contains terms which differ from the Mozilla Public License and
    +     Netscape Public License. (Filling in the name of the Initial
    +     Developer, Original Code or Contributor in the notice described in
    +     Exhibit A shall not of themselves be deemed to be modifications of
    +     this License.)
    +
    +7. DISCLAIMER OF WARRANTY.
    +
    +     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
    +     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
    +     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
    +     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
    +     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
    +     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
    +     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
    +     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
    +     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
    +     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
    +
    +8. TERMINATION.
    +
    +     8.1.  This License and the rights granted hereunder will terminate
    +     automatically if You fail to comply with terms herein and fail to cure
    +     such breach within 30 days of becoming aware of the breach. All
    +     sublicenses to the Covered Code which are properly granted shall
    +     survive any termination of this License. Provisions which, by their
    +     nature, must remain in effect beyond the termination of this License
    +     shall survive.
    +
    +     8.2.  If You initiate litigation by asserting a patent infringement
    +     claim (excluding declatory judgment actions) against Initial Developer
    +     or a Contributor (the Initial Developer or Contributor against whom
    +     You file such action is referred to as "Participant")  alleging that:
    +
    +     (a)  such Participant's Contributor Version directly or indirectly
    +     infringes any patent, then any and all rights granted by such
    +     Participant to You under Sections 2.1 and/or 2.2 of this License
    +     shall, upon 60 days notice from Participant terminate prospectively,
    +     unless if within 60 days after receipt of notice You either: (i)
    +     agree in writing to pay Participant a mutually agreeable reasonable
    +     royalty for Your past and future use of Modifications made by such
    +     Participant, or (ii) withdraw Your litigation claim with respect to
    +     the Contributor Version against such Participant.  If within 60 days
    +     of notice, a reasonable royalty and payment arrangement are not
    +     mutually agreed upon in writing by the parties or the litigation claim
    +     is not withdrawn, the rights granted by Participant to You under
    +     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
    +     the 60 day notice period specified above.
    +
    +     (b)  any software, hardware, or device, other than such Participant's
    +     Contributor Version, directly or indirectly infringes any patent, then
    +     any rights granted to You by such Participant under Sections 2.1(b)
    +     and 2.2(b) are revoked effective as of the date You first made, used,
    +     sold, distributed, or had made, Modifications made by that
    +     Participant.
    +
    +     8.3.  If You assert a patent infringement claim against Participant
    +     alleging that such Participant's Contributor Version directly or
    +     indirectly infringes any patent where such claim is resolved (such as
    +     by license or settlement) prior to the initiation of patent
    +     infringement litigation, then the reasonable value of the licenses
    +     granted by such Participant under Sections 2.1 or 2.2 shall be taken
    +     into account in determining the amount or value of any payment or
    +     license.
    +
    +     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
    +     all end user license agreements (excluding distributors and resellers)
    +     which have been validly granted by You or any distributor hereunder
    +     prior to termination shall survive termination.
    +
    +9. LIMITATION OF LIABILITY.
    +
    +     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
    +     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
    +     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
    +     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
    +     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
    +     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
    +     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
    +     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
    +     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
    +     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
    +     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
    +     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
    +     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
    +     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
    +
    +10. U.S. GOVERNMENT END USERS.
    +
    +     The Covered Code is a "commercial item," as that term is defined in
    +     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
    +     software" and "commercial computer software documentation," as such
    +     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
    +     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
    +     all U.S. Government End Users acquire Covered Code with only those
    +     rights set forth herein.
    +
    +11. MISCELLANEOUS.
    +
    +     This License represents the complete agreement concerning subject
    +     matter hereof. If any provision of this License is held to be
    +     unenforceable, such provision shall be reformed only to the extent
    +     necessary to make it enforceable. This License shall be governed by
    +     California law provisions (except to the extent applicable law, if
    +     any, provides otherwise), excluding its conflict-of-law provisions.
    +     With respect to disputes in which at least one party is a citizen of,
    +     or an entity chartered or registered to do business in the United
    +     States of America, any litigation relating to this License shall be
    +     subject to the jurisdiction of the Federal Courts of the Northern
    +     District of California, with venue lying in Santa Clara County,
    +     California, with the losing party responsible for costs, including
    +     without limitation, court costs and reasonable attorneys' fees and
    +     expenses. The application of the United Nations Convention on
    +     Contracts for the International Sale of Goods is expressly excluded.
    +     Any law or regulation which provides that the language of a contract
    +     shall be construed against the drafter shall not apply to this
    +     License.
    +
    +12. RESPONSIBILITY FOR CLAIMS.
    +
    +     As between Initial Developer and the Contributors, each party is
    +     responsible for claims and damages arising, directly or indirectly,
    +     out of its utilization of rights under this License and You agree to
    +     work with Initial Developer and Contributors to distribute such
    +     responsibility on an equitable basis. Nothing herein is intended or
    +     shall be deemed to constitute any admission of liability.
    +
    +13. MULTIPLE-LICENSED CODE.
    +
    +     Initial Developer may designate portions of the Covered Code as
    +     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
    +     Developer permits you to utilize portions of the Covered Code under
    +     Your choice of the NPL or the alternative licenses, if any, specified
    +     by the Initial Developer in the file described in Exhibit A.
    +
    +EXHIBIT A -Mozilla Public License.
    +
    +     ``The contents of this file are subject to the Mozilla Public License
    +     Version 1.1 (the "License"); you may not use this file except in
    +     compliance with the License. You may obtain a copy of the License at
    +     http://www.mozilla.org/MPL/
    +
    +     Software distributed under the License is distributed on an "AS IS"
    +     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
    +     License for the specific language governing rights and limitations
    +     under the License.
    +
    +     The Original Code is ______________________________________.
    +
    +     The Initial Developer of the Original Code is ________________________.
    +     Portions created by ______________________ are Copyright (C) ______
    +     _______________________. All Rights Reserved.
    +
    +     Contributor(s): ______________________________________.
    +
    +     Alternatively, the contents of this file may be used under the terms
    +     of the _____ license (the  "[___] License"), in which case the
    +     provisions of [______] License are applicable instead of those
    +     above.  If you wish to allow use of your version of this file only
    +     under the terms of the [____] License and not to allow others to use
    +     your version of this file under the MPL, indicate your decision by
    +     deleting  the provisions above and replace  them with the notice and
    +     other provisions required by the [___] License.  If you do not delete
    +     the provisions above, a recipient may use your version of this file
    +     under either the MPL or the [___] License."
    +
    +     [NOTE: The text of this Exhibit A may differ slightly from the text of
    +     the notices in the Source Code files of the Original Code. You should
    +     use the text of this Exhibit A rather than the text found in the
    +     Original Code Source Code for Your Modifications.]
    diff --git a/protected/extensions/ckeditor/assets/README.md b/protected/extensions/ckeditor/assets/README.md
    new file mode 100644
    index 0000000..378c267
    --- /dev/null
    +++ b/protected/extensions/ckeditor/assets/README.md
    @@ -0,0 +1,39 @@
    +CKEditor 4
    +==========
    +
    +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.  
    +http://ckeditor.com - See LICENSE.md for license information.
    +
    +CKEditor is a text editor to be used inside web pages. It's not a replacement
    +for desktop text editors like Word or OpenOffice, but a component to be used as
    +part of web applications and websites.
    +
    +## Documentation
    +
    +The full editor documentation is available online at the following address:
    +http://docs.ckeditor.com
    +
    +## Installation
    +
    +Installing CKEditor is an easy task. Just follow these simple steps:
    +
    + 1. **Download** the latest version from the CKEditor website:
    +    http://ckeditor.com. You should have already completed this step, but be
    +    sure you have the very latest version.
    + 2. **Extract** (decompress) the downloaded file into the root of your website.
    +
    +**Note:** CKEditor is by default installed in the `ckeditor` folder. You can
    +place the files in whichever you want though.
    +
    +## Checking Your Installation
    +
    +The editor comes with a few sample pages that can be used to verify that
    +installation proceeded properly. Take a look at the `samples` directory.
    +
    +To test your installation, just call the following page at your website:
    +
    +	http:////samples/index.html
    +
    +For example:
    +
    +	http://www.example.com/ckeditor/samples/index.html
    diff --git a/protected/extensions/ckeditor/assets/build-config.js b/protected/extensions/ckeditor/assets/build-config.js
    new file mode 100644
    index 0000000..02d94c7
    --- /dev/null
    +++ b/protected/extensions/ckeditor/assets/build-config.js
    @@ -0,0 +1,139 @@
    +
    +/**
    + * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
    + * For licensing, see LICENSE.html or http://ckeditor.com/license
    + */
    +
    +/**
    + * This file was added automatically by CKEditor builder.
    + * You may re-use it at any time at http://ckeditor.com/builder to build CKEditor again.
    + * 
    + * NOTE: 
    + *    This file is not used by CKEditor, you may remove it.
    + *    Changing this file will not change your CKEditor configuration.
    + */
    +
    +var CKBUILDER_CONFIG = {
    +	skin: 'moono',
    +	preset: 'standard',
    +	ignore: [
    +		'dev',
    +		'.gitignore',
    +		'.gitattributes',
    +		'README.md',
    +		'.mailmap'
    +	],
    +	plugins : {
    +		'about' : 1,
    +		'a11yhelp' : 1,
    +		'basicstyles' : 1,
    +		'blockquote' : 1,
    +		'clipboard' : 1,
    +		'contextmenu' : 1,
    +		'resize' : 1,
    +		'toolbar' : 1,
    +		'elementspath' : 1,
    +		'enterkey' : 1,
    +		'entities' : 1,
    +		'filebrowser' : 1,
    +		'floatingspace' : 1,
    +		'format' : 1,
    +		'htmlwriter' : 1,
    +		'horizontalrule' : 1,
    +		'wysiwygarea' : 1,
    +		'image' : 1,
    +		'indent' : 1,
    +		'link' : 1,
    +		'list' : 1,
    +		'magicline' : 1,
    +		'maximize' : 1,
    +		'pastetext' : 1,
    +		'pastefromword' : 1,
    +		'removeformat' : 1,
    +		'sourcearea' : 1,
    +		'specialchar' : 1,
    +		'scayt' : 1,
    +		'stylescombo' : 1,
    +		'tab' : 1,
    +		'table' : 1,
    +		'tabletools' : 1,
    +		'undo' : 1,
    +		'wsc' : 1,
    +		'dialog' : 1,
    +		'dialogui' : 1,
    +		'menu' : 1,
    +		'floatpanel' : 1,
    +		'panel' : 1,
    +		'button' : 1,
    +		'popup' : 1,
    +		'richcombo' : 1,
    +		'listblock' : 1,
    +		'fakeobjects' : 1,
    +		'menubutton' : 1
    +	},
    +	languages : {
    +		'af' : 1,
    +		'sq' : 1,
    +		'ar' : 1,
    +		'eu' : 1,
    +		'bn' : 1,
    +		'bs' : 1,
    +		'bg' : 1,
    +		'ca' : 1,
    +		'zh-cn' : 1,
    +		'zh' : 1,
    +		'hr' : 1,
    +		'cs' : 1,
    +		'da' : 1,
    +		'nl' : 1,
    +		'en' : 1,
    +		'en-au' : 1,
    +		'en-ca' : 1,
    +		'en-gb' : 1,
    +		'eo' : 1,
    +		'et' : 1,
    +		'fo' : 1,
    +		'fi' : 1,
    +		'fr' : 1,
    +		'fr-ca' : 1,
    +		'gl' : 1,
    +		'ka' : 1,
    +		'de' : 1,
    +		'el' : 1,
    +		'gu' : 1,
    +		'he' : 1,
    +		'hi' : 1,
    +		'hu' : 1,
    +		'is' : 1,
    +		'it' : 1,
    +		'ja' : 1,
    +		'km' : 1,
    +		'ko' : 1,
    +		'ku' : 1,
    +		'lv' : 1,
    +		'lt' : 1,
    +		'mk' : 1,
    +		'ms' : 1,
    +		'mn' : 1,
    +		'no' : 1,
    +		'nb' : 1,
    +		'fa' : 1,
    +		'pl' : 1,
    +		'pt-br' : 1,
    +		'pt' : 1,
    +		'ro' : 1,
    +		'ru' : 1,
    +		'sr' : 1,
    +		'sr-latn' : 1,
    +		'sk' : 1,
    +		'sl' : 1,
    +		'es' : 1,
    +		'sv' : 1,
    +		'th' : 1,
    +		'tr' : 1,
    +		'ug' : 1,
    +		'uk' : 1,
    +		'vi' : 1,
    +		'cy' : 1,
    +	}
    +};
    \ No newline at end of file
    diff --git a/protected/extensions/ckeditor/assets/ckeditor.js b/protected/extensions/ckeditor/assets/ckeditor.js
    new file mode 100644
    index 0000000..7ee976f
    --- /dev/null
    +++ b/protected/extensions/ckeditor/assets/ckeditor.js
    @@ -0,0 +1,851 @@
    +/*
    +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
    +For licensing, see LICENSE.html or http://ckeditor.com/license
    +*/
    +(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a={timestamp:"D3NA",version:"4.1.1",revision:"5a2a7e3",rnd:Math.floor(900*Math.random())+100,_:{pending:[]},status:"unloaded",basePath:function(){var b=window.CKEDITOR_BASEPATH||"";if(!b)for(var a=document.getElementsByTagName("script"),d=0;d=0;p--)if(n[p].priority<=l){n.splice(p+1,0,i);return{removeListener:m}}n.unshift(i)}return{removeListener:m}},
    +once:function(){var b=arguments[1];arguments[1]=function(a){a.removeListener();return b.apply(this,arguments)};return this.on.apply(this,arguments)},capture:function(){CKEDITOR.event.useCapture=1;var b=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return b},fire:function(){var b=0,a=function(){b=1},d=0,j=function(){d=1};return function(l,i,m){var n=c(this)[l],l=b,r=d;b=d=0;if(n){var p=n.listeners;if(p.length)for(var p=p.slice(0),g,h=0;h=0&&d.listeners.splice(j,1)}},removeAllListeners:function(){var b=c(this),a;for(a in b)delete b[a]},hasListeners:function(b){return(b=c(this)[b])&&b.listeners.length>0}}}());
    +CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,c){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,c,this)},CKEDITOR.editor.prototype.fireOnce=function(a,c){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,c,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype));
    +CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),c=window.opera,b={ie:eval("/*@cc_on!@*/false"),opera:!!c&&c.version,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat",mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var b=document.domain,a=window.location.hostname;return b!=a&&b!="["+a+"]"},secure:location.protocol==
    +"https:"};b.gecko=navigator.product=="Gecko"&&!b.webkit&&!b.opera;if(b.webkit)a.indexOf("chrome")>-1?b.chrome=true:b.safari=true;var f=0;if(b.ie){f=b.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;b.ie9Compat=f==9;b.ie8Compat=f==8;b.ie7Compat=f==7;b.ie6Compat=f<7||b.quirks}if(b.gecko){var e=a.match(/rv:([\d\.]+)/);if(e){e=e[1].split(".");f=e[0]*1E4+(e[1]||0)*100+(e[2]||0)*1}}b.opera&&(f=parseFloat(c.version()));b.air&&(f=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));
    +b.webkit&&(f=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));b.version=f;b.isCompatible=b.iOS&&f>=534||!b.mobile&&(b.ie&&f>6||b.gecko&&f>=10801||b.opera&&f>=9.5||b.air&&f>=1||b.webkit&&f>=522||false);b.cssClass="cke_browser_"+(b.ie?"ie":b.gecko?"gecko":b.opera?"opera":b.webkit?"webkit":"unknown");if(b.quirks)b.cssClass=b.cssClass+" cke_browser_quirks";if(b.ie){b.cssClass=b.cssClass+(" cke_browser_ie"+(b.quirks||b.version<7?"6":b.version));if(b.quirks)b.cssClass=b.cssClass+" cke_browser_iequirks"}if(b.gecko)if(f<
    +10900)b.cssClass=b.cssClass+" cke_browser_gecko18";else if(f<=11E3)b.cssClass=b.cssClass+" cke_browser_gecko19";if(b.air)b.cssClass=b.cssClass+" cke_browser_air";return b}());
    +"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a=
    +CKEDITOR.loadFullCore,c=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():c&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},c*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={};
    +(function(){var a=[],c=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.opera?"-o-":CKEDITOR.env.ie?"-ms-":"";CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(b,a){if(!b&&!a)return true;if(!b||!a||b.length!=a.length)return false;for(var e=0;e"+a+""):e.push('');return e.join("")},htmlEncode:function(b){return(""+b).replace(/&/g,"&").replace(/>/g,">").replace(//g,">")},getNextNumber:function(){var b=0;return function(){return++b}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(b,a){var e=a(b);e.prototype=b.prototype;return e},setTimeout:function(b,a,e,d,c){c||(c=window);e||(e=c);return c.setTimeout(function(){d?b.apply(e,[].concat(d)):b.apply(e)},a||0)},trim:function(){var b=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(a){return a.replace(b,"")}}(),ltrim:function(){var b=/^[ \t\n\r]+/g;
    +return function(a){return a.replace(b,"")}}(),rtrim:function(){var b=/[ \t\n\r]+$/g;return function(a){return a.replace(b,"")}}(),indexOf:function(b,a){if(typeof a=="function")for(var e=0,d=b.length;e=0?b[e]:null},bind:function(b,a){return function(){return b.apply(a,arguments)}},createClass:function(b){var a=b.$,
    +e=b.base,d=b.privates||b._,c=b.proto,b=b.statics;!a&&(a=function(){e&&this.base.apply(this,arguments)});if(d)var l=a,a=function(){var b=this._||(this._={}),a;for(a in d){var f=d[a];b[a]=typeof f=="function"?CKEDITOR.tools.bind(f,this):f}l.apply(this,arguments)};if(e){a.prototype=this.prototypedCopy(e.prototype);a.prototype.constructor=a;a.base=e;a.baseProto=e.prototype;a.prototype.base=function(){this.base=e.prototype.base;e.apply(this,arguments);this.base=arguments.callee}}c&&this.extend(a.prototype,
    +c,true);b&&this.extend(a,b,true);return a},addFunction:function(b,f){return a.push(function(){return b.apply(f||this,arguments)})-1},removeFunction:function(b){a[b]=null},callFunction:function(b){var f=a[b];return f&&f.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var b=/^-?\d+\.?\d*px$/,a;return function(e){a=CKEDITOR.tools.trim(e+"")+"px";return b.test(a)?a:e||""}}(),convertToPx:function(){var b;return function(a){if(!b){b=CKEDITOR.dom.element.createFromHtml('
    ', +CKEDITOR.document);CKEDITOR.document.getBody().append(b)}if(!/%$/.test(a)){b.setStyle("width",a);return b.$.clientWidth}return a}}(),repeat:function(b,a){return Array(a+1).join(b)},tryThese:function(){for(var b,a=0,e=arguments.length;a8)&&c)a=c+":"+a;return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0];return a= +a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){var a=new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView);return(this.getWindow=function(){return a})()},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.isCustomDomain()&&(this.$.domain=document.domain); +this.$.write(a);this.$.close()}});CKEDITOR.dom.nodeList=function(a){this.$=a};CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){if(a<0||a>=this.$.length)return null;return(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,c){typeof a=="string"&&(a=(c?c.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)}; +CKEDITOR.dom.element.get=function(a){return(a=typeof a=="string"?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,c){var b=new CKEDITOR.dom.element("div",c);b.setHtml(a);return b.getFirst().remove()}; +CKEDITOR.dom.element.setMarker=function(a,c,b,f){var e=c.getCustomData("list_marker_id")||c.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),d=c.getCustomData("list_marker_names")||c.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[e]=c;d[b]=1;return c.setCustomData(b,f)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var c in a)CKEDITOR.dom.element.clearMarkers(a,a[c],1)}; +CKEDITOR.dom.element.clearMarkers=function(a,c,b){var f=c.getCustomData("list_marker_names"),e=c.getCustomData("list_marker_id"),d;for(d in f)c.removeCustomData(d);c.removeCustomData("list_marker_names");if(b){c.removeCustomData("list_marker_id");delete a[e]}}; +(function(){function a(b){for(var a=0,e=0,d=c[b].length;e]*>/g, +""):b},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var b=this.$.ownerDocument.createElement("div");b.appendChild(this.$.cloneNode(true));return b.innerHTML},getClientRect:function(){var b=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!b.width&&(b.width=b.right-b.left);!b.height&&(b.height=b.bottom-b.top);return b},setHtml:function(){var b=function(b){return this.$.innerHTML=b};return CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(b){try{return this.$.innerHTML= +b}catch(a){this.$.innerHTML="";var c=new CKEDITOR.dom.element("body",this.getDocument());c.$.innerHTML=b;for(c=c.getChildren();c.count();)this.append(c.getItem(0));return b}}:b}(),setText:function(b){CKEDITOR.dom.element.prototype.setText=this.$.innerText!=void 0?function(b){return this.$.innerText=b}:function(b){return this.$.textContent=b};return this.setText(b)},getAttribute:function(){var b=function(b){return this.$.getAttribute(b,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)? +function(b){switch(b){case "class":b="className";break;case "http-equiv":b="httpEquiv";break;case "name":return this.$.name;case "tabindex":b=this.$.getAttribute(b,2);b!==0&&this.$.tabIndex===0&&(b=null);return b;case "checked":b=this.$.attributes.getNamedItem(b);return(b.specified?b.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[b];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified? +this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(b,2)}:b}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie?function(b){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(b)]}:function(b){var a=this.getWindow().$.getComputedStyle(this.$,null);return a?a.getPropertyValue(b):""},getDtd:function(){var b=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return b};return b},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag, +getTabIndex:CKEDITOR.env.ie?function(){var b=this.$.tabIndex;b===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&&(b=-1);return b}:CKEDITOR.env.webkit?function(){var b=this.$.tabIndex;if(b==void 0){b=parseInt(this.getAttribute("tabindex"),10);isNaN(b)&&(b=-1)}return b}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id|| +null},getNameAtt:function(){return this.$.name||null},getName:function(){var b=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&!(document.documentMode>8)){var a=this.$.scopeName;a!="HTML"&&(b=a.toLowerCase()+":"+b)}return(this.getName=function(){return b})()},getValue:function(){return this.$.value},getFirst:function(b){var a=this.$.firstChild;(a=a&&new CKEDITOR.dom.node(a))&&(b&&!b(a))&&(a=a.getNext(b));return a},getLast:function(b){var a=this.$.lastChild;(a=a&&new CKEDITOR.dom.node(a))&&(b&&!b(a))&& +(a=a.getPrevious(b));return a},getStyle:function(b){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(b)]},is:function(){var b=this.getName();if(typeof arguments[0]=="object")return!!arguments[0][b];for(var a=0;a0&&(a>2||!c[b[0].nodeName]||a==2&&!c[b[1].nodeName])},hasAttribute:function(){function b(b){b=this.$.attributes.getNamedItem(b); +return!(!b||!b.specified)}return CKEDITOR.env.ie&&CKEDITOR.env.version<8?function(a){return a=="name"?!!this.$.name:b.call(this,a)}:b}(),hide:function(){this.setStyle("display","none")},moveChildren:function(b,a){var c=this.$,b=b.$;if(c!=b){var d;if(a)for(;d=c.lastChild;)b.insertBefore(c.removeChild(d),b.firstChild);else for(;d=c.firstChild;)b.appendChild(c.removeChild(d))}},mergeSiblings:function(){function b(b,a,c){if(a&&a.type==CKEDITOR.NODE_ELEMENT){for(var j=[];a.data("cke-bookmark")||a.isEmptyInlineRemoveable();){j.push(a); +a=c?a.getNext():a.getPrevious();if(!a||a.type!=CKEDITOR.NODE_ELEMENT)return}if(b.isIdentical(a)){for(var l=c?b.getLast():b.getFirst();j.length;)j.shift().move(b,!c);a.moveChildren(b,!c);a.remove();l&&l.type==CKEDITOR.NODE_ELEMENT&&l.mergeSiblings()}}}return function(a){if(a===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){b(this,this.getNext(),true);b(this,this.getPrevious())}}}(),show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var b=function(b, +a){this.$.setAttribute(b,a);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)?function(a,c){a=="class"?this.$.className=c:a=="style"?this.$.style.cssText=c:a=="tabindex"?this.$.tabIndex=c:a=="checked"?this.$.checked=c:a=="contenteditable"?b.call(this,"contentEditable",c):b.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(a,c){if(a=="src"&&c.match(/^http:\/\//))try{b.apply(this,arguments)}catch(d){}else b.apply(this,arguments); +return this}:b}(),setAttributes:function(b){for(var a in b)this.setAttribute(a,b[a]);return this},setValue:function(b){this.$.value=b;return this},removeAttribute:function(){var b=function(b){this.$.removeAttribute(b)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)?function(b){b=="class"?b="className":b=="tabindex"?b="tabIndex":b=="contenteditable"&&(b="contentEditable");this.$.removeAttribute(b)}:b}(),removeAttributes:function(b){if(CKEDITOR.tools.isArray(b))for(var a=0;a< +b.length;a++)this.removeAttribute(b[a]);else for(a in b)b.hasOwnProperty(a)&&this.removeAttribute(a)},removeStyle:function(b){var a=this.$.style;if(!a.removeProperty&&(b=="border"||b=="margin"||b=="padding")){var c=["top","left","right","bottom"],d;b=="border"&&(d=["color","style","width"]);for(var a=[],j=0;j=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+b+")")}else this.setStyle("opacity",b)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", +"none"));if(CKEDITOR.env.ie||CKEDITOR.env.opera){this.setAttribute("unselectable","on");for(var b,a=this.getElementsByTag("*"),c=0,d=a.count();c0)m(0,a===true?i:a===false?j:i<0?i:j);if(c&&(l<0||d>0))m(l<0?l:d,0)},setState:function(b,a,c){a=a||"cke";switch(b){case CKEDITOR.TRISTATE_ON:this.addClass(a+"_on");this.removeClass(a+"_off");this.removeClass(a+"_disabled");c&&this.setAttribute("aria-pressed",true);c&&this.removeAttribute("aria-disabled"); +break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(a+"_disabled");this.removeClass(a+"_off");this.removeClass(a+"_on");c&&this.setAttribute("aria-disabled",true);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(a+"_off");this.removeClass(a+"_on");this.removeClass(a+"_disabled");c&&this.removeAttribute("aria-pressed");c&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var b=this.$;try{b.contentWindow.document}catch(a){b.src=b.src}return b&&new CKEDITOR.dom.document(b.contentWindow.document)}, +copyAttributes:function(b,a){for(var c=this.$.attributes,a=a||{},d=0;d=0&&a0&&c;)c=b(c,a.shift());else c=b(c,a);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){this.on("contextmenu", +function(b){b.data.getTarget().hasClass("cke_enable_context_menu")||b.data.preventDefault()})},getDirection:function(b){return b?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(b,a){b="data-"+b;if(a===void 0)return this.getAttribute(b);a===false?this.removeAttribute(b):this.setAttribute(b,a);return null},getEditor:function(){var b=CKEDITOR.instances, +a,c;for(a in b){c=b[a];if(c.element.equals(this)&&c.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO)return c}return null}});var c={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(b,c,e){if(typeof c=="number"){if(e&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))c=c-a.call(this,b);this.setStyle(b,c+"px")}};CKEDITOR.dom.element.prototype.getSize=function(b, +c){var e=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(b)],this.$["client"+CKEDITOR.tools.capitalize(b)])||0;c&&(e=e-a.call(this,b));return e}})();CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a}; +CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)}},!0,{append:1,appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1}); +(function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var d,n=c.startContainer;d=c.endContainer;var r=c.startOffset,p=c.endOffset,g,h=this.guard,u=this.type,f=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var k=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),e=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(p):d.getNext();this._.guardLTR=function(a,b){return(!b||!k.equals(a))&&(!e|| +!a.equals(e))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var F=n.type==CKEDITOR.NODE_ELEMENT?n:n.getParent(),D=n.type==CKEDITOR.NODE_ELEMENT?r?n.getChild(r-1):null:n.getPrevious();this._.guardRTL=function(a,b){return(!b||!F.equals(a))&&(!D||!a.equals(D))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var B=a?this._.guardRTL:this._.guardLTR;g=h?function(a,b){return B(a,b)===false?false:h(a,b)}:B;if(this.current)d=this.current[f](false,u,g);else{if(a)d.type== +CKEDITOR.NODE_ELEMENT&&(d=p>0?d.getChild(p-1):g(d,true)===false?null:d.getPreviousSourceNode(true,u,g));else{d=n;if(d.type==CKEDITOR.NODE_ELEMENT&&!(d=d.getChild(r)))d=g(n,true)===false?null:n.getNextSourceNode(true,u,g)}d&&g(d)===false&&(d=null)}for(;d&&!this._.end;){this.current=d;if(!this.evaluator||this.evaluator(d)!==false){if(!b)return d}else if(b&&this.evaluator)return false;d=d[f](false,u,g)}this.end();return this.current=null}function c(b){for(var c,d=null;c=a.call(this,b);)d=c;return d} +CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1},next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return a.call(this,0,1)!==false},checkBackward:function(){return a.call(this,1,1)!==false},lastForward:function(){return c.call(this)},lastBackward:function(){return c.call(this,1)},reset:function(){delete this.current;this._={}}}});var b={block:1,"list-item":1,table:1,"table-row-group":1, +"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,"table-caption":1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){a=a?CKEDITOR.tools.extend({},CKEDITOR.dtd.$block,a||{}):CKEDITOR.dtd.$block;return this.getComputedStyle("float")=="none"&&b[this.getComputedStyle("display")]||a[this.getName()]};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary= +function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark=function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(d){var n,r;n=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(r=d.getParent())&&c(r);n=a?n:n||c(d);return!!(b^n)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible= +function(a){var b=CKEDITOR.dom.walker.whitespaces();return function(c){if(b(c))c=1;else{c.type==CKEDITOR.NODE_TEXT&&(c=c.getParent());c=!c.$.offsetHeight}return!!(a^c)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!e(a)&&!d(a)}return function(c){var d=!CKEDITOR.env.ie?c.is&&c.is("br"):c.getText&&f.test(c.getText());if(d){d=c.getParent();c=c.getNext(b);d=d.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&& +c.isBlockBoundary())}return!!(a^d)}};var f=/^[\t\r\n ]*(?: |\xa0)$/,e=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark();CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(d(a)||e(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty));return a&&(!CKEDITOR.env.ie?a.is&&a.is("br"):a.getText&&f.test(a.getText()))?a:false}})(); +CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var c=a instanceof CKEDITOR.dom.document;this.document=c?a:a.getDocument();this.root=c?a.getBody():a}; +(function(){function a(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(true),g=CKEDITOR.dom.walker.bogus();return function(h){if(c(h)||b(h))return true;if(g(h)&&!a)return a=true;return h.type==CKEDITOR.NODE_TEXT&&(h.hasAscendant("pre")||CKEDITOR.tools.trim(h.getText()).length)||h.type==CKEDITOR.NODE_ELEMENT&&!h.is(d)?false:true}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(g){return c(g)||b(g)?true:!a&&j(g)|| +g.type==CKEDITOR.NODE_ELEMENT&&g.is(CKEDITOR.dtd.$removeEmpty)}}function b(a){return!l(a)&&!i(a)}var f=function(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},e=function(a,b,c,g){a.optimizeBookmark();var h=a.startContainer,d=a.endContainer,f=a.startOffset,k=a.endOffset,e,j;if(d.type==CKEDITOR.NODE_TEXT)d=d.split(k);else if(d.getChildCount()>0)if(k>=d.getChildCount()){d=d.append(a.document.createText(""));j=true}else d=d.getChild(k); +if(h.type==CKEDITOR.NODE_TEXT){h.split(f);h.equals(d)&&(d=h.getNext())}else if(f)if(f>=h.getChildCount()){h=h.append(a.document.createText(""));e=true}else h=h.getChild(f).getPrevious();else{h=h.append(a.document.createText(""),1);e=true}var f=h.getParents(),k=d.getParents(),l,i,q;for(l=0;l0&&!s.equals(d)&&(A=m.append(s.clone()));if(!f[c]||s.$.parentNode!=f[c].$.parentNode)for(s=s.getPrevious();s;){if(s.equals(f[c])||s.equals(h))break;v=s.getPrevious();if(b==2)m.$.insertBefore(s.$.cloneNode(true),m.$.firstChild);else{s.remove();b==1&&m.$.insertBefore(s.$,m.$.firstChild)}s=v}m&&(m=A)}if(b==2){i=a.startContainer;if(i.type==CKEDITOR.NODE_TEXT){i.$.data=i.$.data+i.$.nextSibling.data; +i.$.parentNode.removeChild(i.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data;a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(i&&q&&(h.$.parentNode!=i.$.parentNode||d.$.parentNode!=q.$.parentNode)){b=q.getIndex();e&&q.$.parentNode==h.$.parentNode&&b--;if(g&&i.type==CKEDITOR.NODE_ELEMENT){g=CKEDITOR.dom.element.createFromHtml(' ',a.document);g.insertAfter(i);i.mergeSiblings(false); +a.moveToBookmark({startNode:g})}else a.setStart(q.getParent(),b)}a.collapse(true)}e&&h.remove();j&&d.$.parentNode&&d.remove()},d={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},j=CKEDITOR.dom.walker.bogus(),l=new CKEDITOR.dom.walker.whitespaces,i=new CKEDITOR.dom.walker.bookmark,m=/^[\t\r\n ]*(?: |\xa0)$/;CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root); +a.startContainer=this.startContainer;a.startOffset=this.startOffset;a.endContainer=this.endContainer;a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this.endContainer=this.startContainer;this.endOffset=this.startOffset}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,2,a);return a},deleteContents:function(a){this.collapsed|| +e(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,1,b,a);return b},createBookmark:function(a){var b,c,g,h,d=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml(" ");if(a){g="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",g+(d?"C":"S"))}if(!d){c=b.clone();c.setHtml(" ");a&&c.setAttribute("id",g+"E");h=this.clone();h.collapse();h.insertNode(c)}h= +this.clone();h.collapse(true);h.insertNode(b);if(c){this.setStartAfter(b);this.setEndBefore(c)}else this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?g+(d?"C":"S"):b,endNode:a?g+"E":c,serializable:a,collapsed:d}},createBookmark2:function(a){var b=this.startContainer,c=this.endContainer,g=this.startOffset,h=this.endOffset,d=this.collapsed,f,k;if(!b||!c)return{start:0,end:0};if(a){if(b.type==CKEDITOR.NODE_ELEMENT){if((f=b.getChild(g))&&f.type==CKEDITOR.NODE_TEXT&&g>0&&f.getPrevious().type== +CKEDITOR.NODE_TEXT){b=f;g=0}f&&f.type==CKEDITOR.NODE_ELEMENT&&(g=f.getIndex(1))}for(;b.type==CKEDITOR.NODE_TEXT&&(k=b.getPrevious())&&k.type==CKEDITOR.NODE_TEXT;){b=k;g=g+k.getLength()}if(!d){if(c.type==CKEDITOR.NODE_ELEMENT){if((f=c.getChild(h))&&f.type==CKEDITOR.NODE_TEXT&&h>0&&f.getPrevious().type==CKEDITOR.NODE_TEXT){c=f;h=0}f&&f.type==CKEDITOR.NODE_ELEMENT&&(h=f.getIndex(1))}for(;c.type==CKEDITOR.NODE_TEXT&&(k=c.getPrevious())&&k.type==CKEDITOR.NODE_TEXT;){c=k;h=h+k.getLength()}}}return{start:b.getAddress(a), +end:d?null:c.getAddress(a),startOffset:g,endOffset:h,normalized:a,collapsed:d,is2:true}},moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,g=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,c);g?this.setEnd(g,a):this.collapse(true)}else{b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode;a=c?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a); +a.remove()}else this.collapse(true)}},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,g=this.endOffset,h;if(a.type==CKEDITOR.NODE_ELEMENT){h=a.getChildCount();if(h>c)a=a.getChild(c);else if(h<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){h=b.getChildCount();if(h>g)b=b.getChild(g).getPreviousSourceNode(true);else if(h<1)b=b.getPreviousSourceNode(); +else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,g=this.endContainer,c=c.equals(g)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(g);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>= +a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer, +g=this.startOffset,h=this.collapsed;if((!a||h)&&c&&c.type==CKEDITOR.NODE_TEXT){if(g)if(g>=c.getLength()){g=c.getIndex()+1;c=c.getParent()}else{var d=c.split(g),g=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(d,this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset=this.endOffset+1}else{g=c.getIndex();c=c.getParent()}this.setStart(c,g);if(h){this.collapse(true);return}}c=this.endContainer;g=this.endOffset;if(!b&&!h&&c&&c.type== +CKEDITOR.NODE_TEXT){if(g){g>=c.getLength()||c.split(g);g=c.getIndex()+1}else g=c.getIndex();c=c.getParent();this.setEnd(c,g)}},enlarge:function(a,b){switch(a){case CKEDITOR.ENLARGE_INLINE:var c=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break;var g=this.getCommonAncestor(),h=this.root,d,f,k,e,j,l=false,i,q;i=this.startContainer;q=this.startOffset;if(i.type==CKEDITOR.NODE_TEXT){if(q){i=!CKEDITOR.tools.trim(i.substring(0,q)).length&&i;l=!!i}if(i&&!(e=i.getPrevious()))k=i.getParent()}else{q&& +(e=i.getChild(q-1)||i.getLast());e||(k=i)}for(;k||e;){if(k&&!e){!j&&k.equals(g)&&(j=true);if(c?k.isBlockBoundary():!h.contains(k))break;if(!l||k.getComputedStyle("display")!="inline"){l=false;j?d=k:this.setStartBefore(k)}e=k.getPrevious()}for(;e;){i=false;if(e.type==CKEDITOR.NODE_COMMENT)e=e.getPrevious();else{if(e.type==CKEDITOR.NODE_TEXT){q=e.getText();/[^\s\ufeff]/.test(q)&&(e=null);i=/[\s\ufeff]$/.test(q)}else if((e.$.offsetWidth>0||b&&e.is("br"))&&!e.data("cke-bookmark"))if(l&&CKEDITOR.dtd.$removeEmpty[e.getName()]){q= +e.getText();if(/[^\s\ufeff]/.test(q))e=null;else for(var m=e.$.getElementsByTagName("*"),s=0,A;A=m[s++];)if(!CKEDITOR.dtd.$removeEmpty[A.nodeName.toLowerCase()]){e=null;break}e&&(i=!!q.length)}else e=null;i&&(l?j?d=k:k&&this.setStartBefore(k):l=true);if(e){i=e.getPrevious();if(!k&&!i){k=e;e=null;break}e=i}else k=null}}k&&(k=k.getParent())}i=this.endContainer;q=this.endOffset;k=e=null;j=l=false;if(i.type==CKEDITOR.NODE_TEXT){i=!CKEDITOR.tools.trim(i.substring(q)).length&&i;l=!(i&&i.getLength());if(i&& +!(e=i.getNext()))k=i.getParent()}else(e=i.getChild(q))||(k=i);for(;k||e;){if(k&&!e){!j&&k.equals(g)&&(j=true);if(c?k.isBlockBoundary():!h.contains(k))break;if(!l||k.getComputedStyle("display")!="inline"){l=false;j?f=k:k&&this.setEndAfter(k)}e=k.getNext()}for(;e;){i=false;if(e.type==CKEDITOR.NODE_TEXT){q=e.getText();/[^\s\ufeff]/.test(q)&&(e=null);i=/^[\s\ufeff]/.test(q)}else if(e.type==CKEDITOR.NODE_ELEMENT){if((e.$.offsetWidth>0||b&&e.is("br"))&&!e.data("cke-bookmark"))if(l&&CKEDITOR.dtd.$removeEmpty[e.getName()]){q= +e.getText();if(/[^\s\ufeff]/.test(q))e=null;else{m=e.$.getElementsByTagName("*");for(s=0;A=m[s++];)if(!CKEDITOR.dtd.$removeEmpty[A.nodeName.toLowerCase()]){e=null;break}}e&&(i=!!q.length)}else e=null}else i=1;i&&l&&(j?f=k:this.setEndAfter(k));if(e){i=e.getNext();if(!k&&!i){k=e;e=null;break}e=i}else k=null}k&&(k=k.getParent())}if(d&&f){g=d.contains(f)?f:d;this.setStartBefore(g);this.setEndAfter(g)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:k=new CKEDITOR.dom.range(this.root); +h=this.root;k.setStartAt(h,CKEDITOR.POSITION_AFTER_START);k.setEnd(this.startContainer,this.startOffset);k=new CKEDITOR.dom.walker(k);var v,o,x=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),I=function(a){var b=x(a);b||(v=a);return b},c=function(a){var b=I(a);!b&&(a.is&&a.is("br"))&&(o=a);return b};k.guard=I;k=k.lastBackward();v=v||h;this.setStartAt(v,!v.is("br")&&(!k&&this.checkStartOfBlock()||k&&v.contains(k))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END); +if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){k=this.clone();k=new CKEDITOR.dom.walker(k);var G=CKEDITOR.dom.walker.whitespaces(),C=CKEDITOR.dom.walker.bookmark();k.evaluator=function(a){return!G(a)&&!C(a)};if((k=k.previous())&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("br"))break}k=this.clone();k.collapse();k.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);k=new CKEDITOR.dom.walker(k);k.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?c:I;v=null;k=k.lastForward();v=v||h;this.setEndAt(v,!k&&this.checkEndOfBlock()||k&& +v.contains(k)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);o&&this.setEndAfter(o)}},shrink:function(a,b,c){if(!this.collapsed){var a=a||CKEDITOR.SHRINK_TEXT,g=this.clone(),h=this.startContainer,d=this.endContainer,e=this.startOffset,f=this.endOffset,j=1,i=1;if(h&&h.type==CKEDITOR.NODE_TEXT)if(e)if(e>=h.getLength())g.setStartAfter(h);else{g.setStartBefore(h);j=0}else g.setStartBefore(h);if(d&&d.type==CKEDITOR.NODE_TEXT)if(f)if(f>=d.getLength())g.setEndAfter(d);else{g.setEndAfter(d); +i=0}else g.setEndBefore(d);var g=new CKEDITOR.dom.walker(g),l=CKEDITOR.dom.walker.bookmark();g.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var m;g.guard=function(b,g){if(l(b))return true;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||g&&b.equals(m)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary())return false;!g&&b.type==CKEDITOR.NODE_ELEMENT&&(m=b);return true};if(j)(h=g[a==CKEDITOR.SHRINK_ELEMENT?"lastForward": +"next"]())&&this.setStartAt(h,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);if(i){g.reset();(g=g[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(g,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!j&&!i)}},insertNode:function(a){this.optimizeBookmark();this.trim(false,true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)}, +moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this.startContainer=a;this.startOffset=b;if(!this.endContainer){this.endContainer= +a;this.endOffset=b}f(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex()+1;a=a.getParent()}this.endContainer=a;this.endOffset=b;if(!this.startContainer){this.startContainer=a;this.startOffset=b}f(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(), +a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}f(this)},setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type== +CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}f(this)},fixBlock:function(a,b){var c=this.createBookmark(),g=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(g);g.trim();CKEDITOR.env.ie||g.appendBogus();this.insertNode(g);this.moveToBookmark(c);return g},splitBlock:function(a){var b= +new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),g=b.block,h=c.block,d=null;if(!b.blockLimit.equals(c.blockLimit))return null;if(a!="br"){if(!g){g=this.fixBlock(true,a);h=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}h||(h=this.fixBlock(false,a))}a=g&&this.checkStartOfBlock();b=h&&this.checkEndOfBlock();this.deleteContents();if(g&&g.equals(h))if(b){d=new CKEDITOR.dom.elementPath(this.startContainer,this.root); +this.moveToPosition(h,CKEDITOR.POSITION_AFTER_END);h=null}else if(a){d=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(g,CKEDITOR.POSITION_BEFORE_START);g=null}else{h=this.splitElement(g);!CKEDITOR.env.ie&&!g.is("ul","ol")&&g.appendBogus()}return{previousBlock:g,nextBlock:h,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:d}},splitElement:function(a){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false); +b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(g){return function(a){return b(a)||(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())||g.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(),d=this[b?"endPath":"startPath"](),e=d.block||d.blockLimit,f;e&&!e.equals(d.root)&&!e.getFirst(a(e));){f= +e.getParent();this[b?"setEndAt":"setStartAt"](e,CKEDITOR.POSITION_AFTER_END);e.remove(1);e=f}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var d=b==CKEDITOR.START,g=this.clone();g.collapse(d);g[d?"setStartAt":"setEndAt"](a,d?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);g=new CKEDITOR.dom.walker(g); +g.evaluator=c(d);return g[d?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var b=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.ltrim(b.substring(0,c));m.test(b)&&this.trim(0,1)}this.trim();b=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(true);c.setStartAt(b.block||b.blockLimit,CKEDITOR.POSITION_AFTER_START);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkBackward()},checkEndOfBlock:function(){var b= +this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.rtrim(b.substring(c));m.test(b)&&this.trim(1,0)}this.trim();b=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(false);c.setEndAt(b.block||b.blockLimit,CKEDITOR.POSITION_BEFORE_END);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START); +c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")=="false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b= +b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,c){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(false)){this.moveToPosition(a,c?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var d=0;a;){if(a.type==CKEDITOR.NODE_TEXT){c&&this.checkEndOfBlock()&&m.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,c?CKEDITOR.POSITION_AFTER_END: +CKEDITOR.POSITION_BEFORE_START);d=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable()){this.moveToPosition(a,c?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);d=1}else c&&(a.is("br")&&this.checkEndOfBlock())&&this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);var g=a,h=d,e=void 0;g.type==CKEDITOR.NODE_ELEMENT&&g.isEditable(false)&&(e=g[c?"getLast":"getFirst"](b));!h&&!e&&(e=g[c?"getPrevious":"getNext"](b));a=e}return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)}, +moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,true)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a= +this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml(" ",this.document),b,c,d,h=this.clone();h.optimize();if(d=h.startContainer.type==CKEDITOR.NODE_TEXT){c=h.startContainer.getText();b=h.startContainer.split(h.startOffset); +a.insertAfter(h.startContainer)}else h.insertNode(a);a.scrollIntoView();if(d){h.startContainer.setText(c);b.remove()}a.remove()}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2; +(function(){function a(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function c(a,b,c){for(a=a.getNextSourceNode(b,null,c);!f(a);)a=a.getNextSourceNode(b,null,c);return a}var b=/^[\r\n\t ]+$/,f=CKEDITOR.dom.walker.bookmark(false,true),e=CKEDITOR.dom.walker.whitespaces(true),d=function(a){return f(a)&&e(a)};a.prototype={getNextParagraph:function(a){a=a||"p";if(!CKEDITOR.dtd[this.range.root.getName()][a])return null;var e, +i,m,n,r,p;if(!this._.started){i=this.range.clone();i.shrink(CKEDITOR.NODE_ELEMENT,true);n=i.endContainer.hasAscendant("pre",true)||i.startContainer.hasAscendant("pre",true);i.enlarge(this.forceBrBreak&&!n||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!i.collapsed){n=new CKEDITOR.dom.walker(i.clone());var g=CKEDITOR.dom.walker.bookmark(true,true);n.evaluator=g;this._.nextNode=n.next();n=new CKEDITOR.dom.walker(i.clone());n.evaluator=g;n=n.previous();this._.lastNode= +n.getNextSourceNode(true);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){g=this.range.clone();g.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END);if(g.checkEndOfBlock()){g=new CKEDITOR.dom.elementPath(g.endContainer,g.root);this._.lastNode=(g.block||g.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode){this._.lastNode=this._.docEndMarker=i.document.createText("");this._.lastNode.insertAfter(n)}i= +null}this._.started=1}g=this._.nextNode;n=this._.lastNode;for(this._.nextNode=null;g;){var h=0,u=g.hasAscendant("pre"),w=g.type!=CKEDITOR.NODE_ELEMENT,k=0;if(w)g.type==CKEDITOR.NODE_TEXT&&b.test(g.getText())&&(w=0);else{var t=g.getName();if(g.isBlockBoundary(this.forceBrBreak&&!u&&{br:1})){if(t=="br")w=1;else if(!i&&!g.getChildCount()&&t!="hr"){e=g;m=g.equals(n);break}if(i){i.setEndAt(g,CKEDITOR.POSITION_BEFORE_START);if(t!="br")this._.nextNode=g}h=1}else{if(g.getFirst()){if(!i){i=this.range.clone(); +i.setStartAt(g,CKEDITOR.POSITION_BEFORE_START)}g=g.getFirst();continue}w=1}}if(w&&!i){i=this.range.clone();i.setStartAt(g,CKEDITOR.POSITION_BEFORE_START)}m=(!h||w)&&g.equals(n);if(i&&!h)for(;!g.getNext(d)&&!m;){t=g.getParent();if(t.isBlockBoundary(this.forceBrBreak&&!u&&{br:1})){h=1;w=0;m||t.equals(n);i.setEndAt(t,CKEDITOR.POSITION_BEFORE_END);break}g=t;w=1;m=g.equals(n);k=1}w&&i.setEndAt(g,CKEDITOR.POSITION_AFTER_END);g=c(g,k,n);if((m=!g)||h&&i)break}if(!e){if(!i){this._.docEndMarker&&this._.docEndMarker.remove(); +return this._.nextNode=null}e=new CKEDITOR.dom.elementPath(i.startContainer,i.root);g=e.blockLimit;h={div:1,th:1,td:1};e=e.block;if(!e&&g&&!this.enforceRealBlocks&&h[g.getName()]&&i.checkStartOfBlock()&&i.checkEndOfBlock()&&!g.equals(i.root))e=g;else if(!e||this.enforceRealBlocks&&e.getName()=="li"){e=this.range.document.createElement(a);i.extractContents().appendTo(e);e.trim();i.insertNode(e);r=p=true}else if(e.getName()!="li"){if(!i.checkStartOfBlock()||!i.checkEndOfBlock()){e=e.clone(false);i.extractContents().appendTo(e); +e.trim();p=i.splitBlock();r=!p.wasStartOfBlock;p=!p.wasEndOfBlock;i.insertNode(e)}}else if(!m)this._.nextNode=e.equals(n)?null:c(i.getBoundaryNodes().endNode,1,n)}if(r)(i=e.getPrevious())&&i.type==CKEDITOR.NODE_ELEMENT&&(i.getName()=="br"?i.remove():i.getLast()&&i.getLast().$.nodeName.toLowerCase()=="br"&&i.getLast().remove());if(p)(i=e.getLast())&&i.type==CKEDITOR.NODE_ELEMENT&&i.getName()=="br"&&(CKEDITOR.env.ie||i.getPrevious(f)||i.getNext(f))&&i.remove();if(!this._.nextNode)this._.nextNode=m|| +e.equals(n)||!n?null:c(e,1,n);return e}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})(); +CKEDITOR.command=function(a,c){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return false;this.editorFocus&&a.focus();return this.fire("exec")===false?true:c.exec.call(this,a,b)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}this.enable();return this.fire("refresh",{editor:a,path:b})===false?true:c.refresh&&c.refresh.apply(this,arguments)!== +false};var b;this.checkAllowed=function(){return typeof b=="boolean"?b:b=a.filter.checkFeature(this)};CKEDITOR.tools.extend(this,c,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!c.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)}; +CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||!this.checkAllowed())return false;this.previousState=this.state;this.state=a;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?this.setState(CKEDITOR.TRISTATE_ON): +this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3; +CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]}; +(function(){function a(a,b,d,g,h){var f=b.name;if((g||typeof a.elements!="function"||a.elements(f))&&(!a.match||a.match(b))){if(g=!h){a:if(a.nothingRequired)g=true;else{if(h=a.requiredClasses){f=b.classes;for(g=0;g0;){k=d[--f];if(e&&(k.type==CKEDITOR.NODE_TEXT||k.type==CKEDITOR.NODE_ELEMENT&&D.$inline[k.name])){if(!j){j=new CKEDITOR.htmlParser.element(b);j.insertAfter(a);c.push({check:"parent-down",el:j})}j.add(k,0)}else{j=null;k.insertAfter(a);h.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(k.type== +CKEDITOR.NODE_ELEMENT&&!D[h.name][k.name])&&c.push({check:"el-up",el:k})}}a.remove()}}else if(d=="style")a.remove();else{a.parent&&c.push({check:"it",el:a.parent});a.replaceWithChildren()}}function u(a,b,c){var d,g;for(d=0;d";if(e in this._.cachedChecks)return this._.cachedChecks[e];h=j(a).$1;g=h.styles;var k=h.classes;h.name=h.elements;h.classes=k=k?k.split(/\s*,\s*/): +[];h.styles=d(g);h.attributes=d(h.attributes);h.children=[];k.length&&(h.attributes["class"]=k.join(" "));if(g)h.attributes.style=CKEDITOR.tools.writeCssText(h.styles);g=h}else{h=a.getDefinition();g=h.styles;k=h.attributes||{};if(g){g=B(g);k.style=CKEDITOR.tools.writeCssText(g,true)}else g={};g={name:h.element,attributes:k,classes:k["class"]?k["class"].split(/\s+/):[],styles:g,children:[]}}var k=CKEDITOR.tools.clone(g),o=[],p;if(b!==false&&(p=this._.transformations[g.name])){for(h=0;h0?false:CKEDITOR.tools.objectCompare(g.attributes,k.attributes,true)?true:false;typeof a=="string"&&(this._.cachedChecks[e]=b);return b}};var s={styles:1,attributes:1,classes:1},A={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},v=/^([a-z0-9*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,o={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/, +classes:/\(([^\)]+)\)/},x=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a,"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];if(d){/^\d+$/.test(d)&&(d=d+"px");a.styles[c]=d}}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],h=d&&d.match(/^(\d+)(?:\.\d*)?px$/); +h?a.attributes[c]=h[1]:d==z&&(a.attributes[c]=z)}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b=a.attributes.align;if(b=="left"||b=="right")a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if(b=="left"||b=="right")a.attributes.align=b}delete a.styles["float"]},matchesStyle:w,transform:function(a,b){if(typeof b=="string")a.name=b;else{var c=b.getDefinition(),d=c.styles,h=c.attributes, +g,e,k,f;a.name=c.element;for(g in h)if(g=="class"){c=a.classes.join("|");for(k=h[g].split(/\s+/);f=k.pop();)c.indexOf(f)==-1&&a.classes.push(f)}else a.attributes[g]=h[g];for(e in d)a.styles[e]=d[e]}}}})(); +(function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(){this._.timer&&clearTimeout(this._.timer);if(!this.hasFocus&&!this._.locked){var a=CKEDITOR.currentInstance;a&&a.focusManager.blur(1);this.hasFocus=true;(a=this._.editor.container)&&a.addClass("cke_focus");this._.editor.fire("focus")}},lock:function(){this._.locked= +1},unlock:function(){delete this._.locked},blur:function(a){function c(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?c.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;c.call(this)},b,this)}},add:function(a,c){var b=a.getCustomData("focusmanager");if(!b||b!=this){b&&b.remove(a);var b= +"focus",f="blur";if(c)if(CKEDITOR.env.ie){b="focusin";f="focusout"}else CKEDITOR.event.useCapture=1;var e={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.currentActive=a;this.focus()}};a.on(b,e.focus,this);a.on(f,e.blur,this);if(c)CKEDITOR.event.useCapture=0;a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",e)}},remove:function(a){a.removeCustomData("focusmanager");var c=a.removeCustomData("focusmanager_handlers");a.removeListener("blur", +c.blur);a.removeListener("focus",c.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this}; +(function(){var a,c=function(b){var b=b.data,c=b.getKeystroke(),d=this.keystrokes[c],j=this._.editor;a=j.fire("key",{keyCode:c})===false;if(!a){d&&(a=j.execCommand(d,{from:"keystrokeHandler"})!==false);a||(a=!!this.blockedKeystrokes[c])}a&&b.preventDefault(true);return!a},b=function(b){if(a){a=false;b.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",c,this);if(CKEDITOR.env.opera||CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}})(); +(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},load:function(a,c,b){if(!a||!CKEDITOR.lang.languages[a])a=this.detect(c,a);this[a]?b(a,this[a]):CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+ +a+".js"),function(){b(a,this[a])},this)},detect:function(a,c){var b=this.languages,c=c||navigator.userLanguage||navigator.language||a,f=c.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),e=f[1],f=f[2];b[e+"-"+f]?e=e+"-"+f:b[e]||(e=null);CKEDITOR.lang.detect=e?function(){return e}:function(a){return a};return e||a}}})(); +CKEDITOR.scriptLoader=function(){var a={},c={};return{load:function(b,f,e,d){var j=typeof b=="string";j&&(b=[b]);e||(e=CKEDITOR);var l=b.length,i=[],m=[],n=function(a){f&&(j?f.call(e,a):f.call(e,i,m))};if(l===0)n(true);else{var r=function(a,b){(b?i:m).push(a);if(--l<=0){d&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");n(b)}},p=function(b,d){a[b]=1;var h=c[b];delete c[b];for(var g=0;g +1)){var h=new CKEDITOR.dom.element("script");h.setAttributes({type:"text/javascript",src:b});if(f)if(CKEDITOR.env.ie)h.$.onreadystatechange=function(){if(h.$.readyState=="loaded"||h.$.readyState=="complete"){h.$.onreadystatechange=null;p(b,true)}};else{h.$.onload=function(){setTimeout(function(){p(b,true)},0)};h.$.onerror=function(){p(b,false)}}h.appendTo(CKEDITOR.document.getHead())}}};d&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var h=0;h=0)p=a.langCode;else{p=a.langCode.replace(/-.*/,"");p=p!=a.langCode&&CKEDITOR.tools.indexOf(o,p)>=0?p:CKEDITOR.tools.indexOf(o,"en")>=0?"en":o[0]}if(!j.langEntries||!j.langEntries[p])e.push(CKEDITOR.getUrl(j.path+"lang/"+p+".js"));else{a.lang[k]=j.langEntries[p];p=null}}g.push(p);d.push(j)}CKEDITOR.scriptLoader.load(e, +function(){for(var c=["beforeInit","init","afterInit"],e=0;e]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))","g")}}; +(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,c={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var f,e,d=0,j;f=this._.htmlPartsRegex.exec(b);){e=f.index;if(e>d){d=b.substring(d,e);if(j)j.push(d);else this.onText(d)}d= +this._.htmlPartsRegex.lastIndex;if(e=f[1]){e=e.toLowerCase();if(j&&CKEDITOR.dtd.$cdata[e]){this.onCDATA(j.join(""));j=null}if(!j){this.onTagClose(e);continue}}if(j)j.push(f[0]);else if(e=f[3]){e=e.toLowerCase();if(!/="/.test(e)){var l={},i;f=f[4];var m=!!(f&&f.charAt(f.length-1)=="/");if(f)for(;i=a.exec(f);){var n=i[1].toLowerCase();i=i[2]||i[3]||i[4]||"";l[n]=!i&&c[n]?n:i}this.onTagOpen(e,l,m);!j&&CKEDITOR.dtd.$cdata[e]&&(j=[])}}else if(e=f[2])this.onComment(e)}if(b.length>d)this.onText(b.substring(d, +b.length))}}})(); +CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("<",a)},openTagClose:function(a,c){c?this._.output.push(" />"):this._.output.push(">")},attribute:function(a,c){typeof c=="string"&&(c=CKEDITOR.tools.htmlEncodeAttr(c));this._.output.push(" ",a,'="',c,'"')},closeTag:function(a){this._.output.push("")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("<\!--",a,"--\>")},write:function(a){this._.output.push(a)}, +reset:function(){this._.output=[];this._.indent=false},getHtml:function(a){var c=this._.output.join("");a&&this.reset();return c}}});"use strict"; +(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,c=CKEDITOR.tools.indexOf(a,this),b=this.previous,f=this.next;b&&(b.next=f);f&&(f.previous=b);a.splice(c,1);this.parent=null},replaceWith:function(a){var c=this.parent.children,b=CKEDITOR.tools.indexOf(c,this),f=a.previous=this.previous,e=a.next=this.next;f&&(f.next=a);e&&(e.previous=a);c[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var c=a.parent.children, +b=CKEDITOR.tools.indexOf(c,a),f=a.next;c.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;f&&(f.previous=this);this.parent=a.parent},insertBefore:function(a){var c=a.parent.children,b=CKEDITOR.tools.indexOf(c,a);c.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent}}})();"use strict";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:false}}; +CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a){var c=this.value;if(!(c=a.onComment(c,this))){this.remove();return false}if(typeof c!="string"){this.replaceWith(c);return false}this.value=c;return true},writeHtml:function(a,c){c&&this.filter(c);a.comment(this.value)}});"use strict"; +(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a){if(!(this.value=a.onText(this.value,this))){this.remove();return false}},writeHtml:function(a,c){c&&this.filter(c);a.text(this.value)}})})();"use strict"; +(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}}; +(function(){function a(a){return a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var c=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},f=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1});CKEDITOR.htmlParser.fragment.fromHtml=function(e,d,j){function l(a){var b;if(u.length>0)for(var c=0;c=0;b--)if(a==u[b].name){u.splice(b,1);return}for(var c=[],d=[],g=k;g!=h&&g.name!=a;){g._.isBlockLike||d.unshift(g);c.push(g);g=g.returnPoint||g.parent}if(g!=h){for(b=0;b0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length===0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this; +this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},filter:function(a){a.onRoot(this);this.filterChildren(a)},filterChildren:function(a,b){if(this.childrenFilteredBy!=a.id){if(b&&!this.parent)a.onRoot(this);this.childrenFilteredBy=a.id;for(var c=0;c=0;f--)if(n=b[f]){n.pri=c;a.splice(e,0,n)}}}function b(a,b,c){if(b)for(var e in b){var m=a[e];a[e]=f(m,b[e],c);m||a.$length++}}function f(a,b,f){if(b){b.pri=f;if(a){if(a.splice)c(a,b,f);else{a=a.pri>f?[b,a]:[a,b];a.filter=e}return a}return b.filter=b}}function e(a){for(var b= +a.type||a instanceof CKEDITOR.htmlParser.fragment,c=0;c7||e.name in CKEDITOR.dtd.tr||e.name in CKEDITOR.dtd.$listItem))h=false;else{h=b(e);h=!h||e.name=="form"&&h.name=="input"}h&&e.add(g(a))}}}function k(a,b){if((!p||!CKEDITOR.env.ie)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type== +CKEDITOR.NODE_TEXT&&(c=a.value.match(F))){if(c.index){j(a,new CKEDITOR.htmlParser.text(a.value.substring(0,c.index)));a.value=c[0]}if(CKEDITOR.env.ie&&p&&(!b||a.parent.name in r))return true;if(!p)if((c=a.previous)&&c.name=="br"||!c||d(c))return true}return false}var o={elements:{}},p=c=="html",r=CKEDITOR.tools.extend({},z),u;for(u in r)"#"in B[u]||delete r[u];for(u in r)o.elements[u]=h(p,a.config.fillEmptyBlocks!==false);o.root=h(p);o.elements.br=function(a){return function(b){if(b.parent.type!= +CKEDITOR.NODE_DOCUMENT_FRAGMENT){var c=b.attributes;if("data-cke-bogus"in c||"data-cke-eol"in c)delete c["data-cke-bogus"];else{for(c=b.next;c&&e(c);)c=c.next;var h=f(b);!c&&d(b.parent)?l(b.parent,g(a)):d(c)&&(h&&!d(h))&&j(c,g(a))}}}}(p);return o}function c(a){return a.enterMode!=CKEDITOR.ENTER_BR&&a.autoParagraph!==false?a.enterMode==CKEDITOR.ENTER_DIV?"div":"p":false}function b(a){for(a=a.children[a.children.length-1];a&&e(a);)a=a.previous;return a}function f(a){for(a=a.previous;a&&e(a);)a=a.previous; +return a}function e(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function d(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in z||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function j(a,b){var c=a.parent.children,g=CKEDITOR.tools.indexOf(c,a);c.splice(g,0,b);c=a.previous;a.previous=b;b.next=a;b.parent=a.parent;if(c){b.previous=c;c.next=b}}function l(a,b){var c=a.children[a.children.length-1];a.children.push(b); +b.parent=a;if(c){c.next=b;b.previous=c}}function i(a){var b=a.parent.children,c=CKEDITOR.tools.indexOf(b,a),g=a.previous,a=a.next;g&&(g.next=a);a&&(a.previous=g);b.splice(c,1)}function m(a){var b=a.parent;return b?CKEDITOR.tools.indexOf(b.children,a):-1}function n(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function r(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}} +function p(a){return a.replace(o,function(a,b,c){return"<"+b+c.replace(x,function(a,b){return!/^on/.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function g(a,b){return a.replace(b,function(a,b,c){a.indexOf("/g,">")+"");return""+encodeURIComponent(a)+""})}function h(a){return a.replace(C,function(a,b){return decodeURIComponent(b)})}function u(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g, +function(a){return"<\!--"+D+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function w(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function k(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function t(a,b){for(var c=[],g=b.config.protectedSource,d=b._.dataStore||(b._.dataStore= +{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,g=[//gi,//gi].concat(g),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),h=0;h"});a=a.replace(e,function(a,b,g){return"<\!--"+D+(b?"{C}":"")+encodeURIComponent(c[g]).replace(/--/g,"%2D%2D")+ +"--\>"});return a.replace(/(['"]).*?\1/g,function(a){return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){d[d.id]=decodeURIComponent(b);return"{cke_protected_"+d.id++ +"}"})})}CKEDITOR.htmlDataProcessor=function(b){var d,e,f=this;this.editor=b;this.dataFilter=d=new CKEDITOR.htmlParser.filter;this.htmlFilter=e=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;d.addRules(s);d.addRules(a(b,"data"));e.addRules(A);e.addRules(a(b,"html"));b.on("toHtml",function(a){var a= +a.data,d=a.dataValue,d=t(d,b),d=g(d,G),d=p(d),d=g(d,I),d=d.replace(Q,"$1cke:$2"),d=d.replace(E,""),d=CKEDITOR.env.opera?d:d.replace(/(]*>)(\r\n|\n)/g,"$1$2$2"),e=a.context||b.editable().getName(),f;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&e=="pre"){e="div";d="
    "+d+"
    ";f=1}e=b.document.createElement(e);e.setHtml("a"+d);d=e.getHtml().substr(1);d=d.replace(RegExp(" data-cke-"+CKEDITOR.rnd+"-","ig")," ");f&&(d=d.replace(/^
    |<\/pre>$/gi,""));d=d.replace(L,"$1$2");
    +d=h(d);d=w(d);a.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(d,a.context,a.fixForBody===false?false:c(b.config))},null,null,5);b.on("toHtml",function(a){a.data.dataValue.filterChildren(f.dataFilter,true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue=u(b)},null,null,15);b.on("toDataFormat",function(a){a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(a.data.dataValue,b.editable().getName(),
    +c(b.config))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(f.htmlFilter,true)},null,null,10);b.on("toDataFormat",function(a){var c=a.data.dataValue,g=f.writer;g.reset();c.writeChildrenHtml(g);c=g.getHtml(true);c=w(c);c=k(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,c,g){var d=this.editor;!b&&b!==null&&(b=d.editable().getName());return d.fire("toHtml",{dataValue:a,context:b,fixForBody:c,dontFilter:!!g}).dataValue},
    +toDataFormat:function(a){return this.editor.fire("toDataFormat",{dataValue:a}).dataValue}};var F=/(?: |\xa0)$/,D="{cke_protected}",B=CKEDITOR.dtd,q=["caption","colgroup","col","thead","tfoot","tbody"],z=CKEDITOR.tools.extend({},B.$blockLimit,B.$block),s={elements:{},attributeNames:[[/^on/,"data-cke-pa-on"]]},A={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false;
    +for(var c=["name","href","src"],g,d=0;d-1&&g>-1&&c!=g)){c=m(a);g=m(b)}return c>g?1:-1})},embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;c&&(a.attributes.width=c);b&&(a.attributes.height=
    +b)}},param:function(a){a.children=[];a.isEmpty=true;return a},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false},span:function(a){a.attributes["class"]=="Apple-style-span"&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));
    +if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b=a.children[0];!b&&l(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""}},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||false}}};if(CKEDITOR.env.ie)A.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};for(var v in{input:1,textarea:1}){s.elements[v]=n;A.elements[v]=r}var o=/<(a|area|img|input|source)\b([^>]*)>/gi,
    +x=/\b(on\w+|href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,I=/(?:])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,G=/(])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,C=/([^<]*)<\/cke:encoded>/gi,Q=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,L=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,E=/]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict";
    +CKEDITOR.htmlParser.element=function(a,c){this.name=a;this.attributes=c||{};this.children=[];var b=a||"",f=b.match(/^cke:(.*)/);f&&(b=f[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&&!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}};
    +CKEDITOR.htmlParser.cssStyle=function(a){var c={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/"/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,f,e){f=="font-family"&&(e=e.replace(/["']/g,""));c[f.toLowerCase()]=e});return{rules:c,populate:function(a){var c=this.toString();if(c)a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c},toString:function(){var a=[],f;
    +for(f in c)c[f]&&a.push(f,":",c[f],";");return a.join("")}}};
    +(function(){var a=function(a,c){a=a[0];c=c[0];return ac?1:0},c=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:c.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a){var c=this,e,d;if(!c.parent)a.onRoot(c);for(;;){e=c.name;if(!(d=a.onElementName(e))){this.remove();return false}c.name=d;if(!(c=a.onElement(c))){this.remove();return false}if(c!==
    +this){this.replaceWith(c);return false}if(c.name==e)break;if(c.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(c);return false}if(!c.name){this.replaceWithChildren();return false}}e=c.attributes;var j,l;for(j in e){l=j;for(d=e[j];;)if(l=a.onAttributeName(j))if(l!=j){delete e[j];j=l}else break;else{delete e[j];break}l&&((d=a.onAttribute(c,l,d))===false?delete e[l]:e[l]=d)}c.isEmpty||this.filterChildren(a);return true},filterChildren:c.filterChildren,writeHtml:function(b,c){c&&this.filter(c);var e=this.name,
    +d=[],j=this.attributes,l,i;b.openTag(e,j);for(l in j)d.push([l,j[l]]);b.sortAttributes&&d.sort(a);l=0;for(i=d.length;l{voiceLabel}<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation">{bottomHtml}'));b=CKEDITOR.dom.element.createFromHtml(e.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.lang.editor,
    +topHtml:m?''+m+"":"",contentId:a.ui.spaceId("contents"),bottomHtml:n?''+n+"":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(f==CKEDITOR.ELEMENT_MODE_REPLACE){c.hide();b.insertAfter(c)}else c.append(b);a.container=b;m&&a.ui.space("top").unselectable();n&&a.ui.space("bottom").unselectable();c=
    +a.config.width;f=a.config.height;c&&b.setStyle("width",CKEDITOR.tools.cssLength(c));f&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(f));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}function f(a){var b=a.element;if(a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&b.is("textarea")){var c=b.$.form&&new CKEDITOR.dom.element(b.$.form);if(c){var e=function(){a.updateElement()};c.on("submit",e);if(!c.$.submit.nodeName&&!c.$.submit.length)c.$.submit=
    +CKEDITOR.tools.override(c.$.submit,function(b){return function(){a.updateElement();b.apply?b.apply(this,arguments):b()}});a.on("destroy",function(){c.removeListener("submit",e)})}}}CKEDITOR.replace=function(b,c){return a(b,c,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b,c,e){return a(b,c,e,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b",k="",a=i+a.replace(f,function(){return k+i})+k}a=a.replace(/\n/g,"
    ");b||(a=a.replace(RegExp("
    (?=)"),function(a){return e.repeat(a,2)}));a=a.replace(/^ | $/g," ");a=a.replace(/(>|\s) /g,function(a,b){return b+" "}).replace(/ (?=<)/g," ");n(this,"text",a)},insertElement:function(a){d(this);for(var c=this.editor,g=c.config.enterMode, +e=c.getSelection(),f=e.getRanges(),i=a.getName(),k=CKEDITOR.dtd.$block[i],m,n,l,B=f.length-1;B>=0;B--){m=f[B];if(!m.checkReadOnly()){m.deleteContents(1);n=!B&&a||a.clone(1);var q,z;if(k)for(;(q=m.getCommonAncestor(0,1))&&(z=CKEDITOR.dtd[q.getName()])&&(!z||!z[i]);)if(q.getName()in CKEDITOR.dtd.span)m.splitElement(q);else if(m.checkStartOfBlock()&&m.checkEndOfBlock()){m.setStartBefore(q);m.collapse(true);q.remove()}else m.splitBlock(g==CKEDITOR.ENTER_DIV?"div":"p",c.editable());m.insertNode(n);l|| +(l=n)}}if(l){m.moveToPosition(l,CKEDITOR.POSITION_AFTER_END);if(k)if((a=l.getNext(b))&&a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$block))a.getDtd()["#"]?m.moveToElementEditStart(a):m.moveToElementEditEnd(l);else if(!a&&g!=CKEDITOR.ENTER_BR){a=m.fixBlock(true,g==CKEDITOR.ENTER_DIV?"div":"p");m.moveToElementEditStart(a)}}e.selectRanges([m]);j(this,CKEDITOR.env.opera)},setData:function(a,b){!b&&this.editor.dataProcessor&&(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);this.editor.fire("dataReady")}, +getData:function(a){var b=this.getHtml();!a&&this.editor.dataProcessor&&(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")|| +a.config.ignoreEmptyParagraph!==false&&(b=b.replace(l,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml", +function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+ +a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(a){CKEDITOR.env.opera&&CKEDITOR.document.getActive().equals(this.isInline()?this:this.getWindow().getFrame())?a.cancel():this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus()})}this.isInline()&& +this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var b=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var g=a.config.contentsLangDirection;this.getDirection(1)!=g&&this.changeAttr("dir",g);var d=CKEDITOR.getCss();if(d){g=b.getHead();if(!g.getCustomData("stylesheet")){d=b.appendStyleText(d);d=new CKEDITOR.dom.element(d.ownerNode||d.owningElement);g.setCustomData("stylesheet",d);d.data("cke-temp",1)}}g= +b.getCustomData("stylesheet_ref")||0;b.setCustomData("stylesheet_ref",g+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a=a.data,b=a.getTarget();b.is("a")&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.keyCode,g;if(c in{8:1,46:1}){var d=a.getSelection(),b=d.getRanges()[0],h=b.startPath(),f,p,j,c=c==8;if(d=e(d)){a.fire("saveSnapshot"); +b.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d.remove();b.select();a.fire("saveSnapshot");g=1}else if(b.collapsed)if((f=h.block)&&b[c?"checkStartOfBlock":"checkEndOfBlock"]()&&(j=f[c?"getPrevious":"getNext"](i))&&j.is("table")){a.fire("saveSnapshot");b[c?"checkEndOfBlock":"checkStartOfBlock"]()&&f.remove();b["moveToElementEdit"+(c?"End":"Start")](j);b.select();a.fire("saveSnapshot");g=1}else if(h.blockLimit&&h.blockLimit.is("td")&&(p=h.blockLimit.getAscendant("table"))&&b.checkBoundaryOfElement(p, +c?CKEDITOR.START:CKEDITOR.END)&&(j=p[c?"getPrevious":"getNext"](i))){a.fire("saveSnapshot");b["moveToElementEdit"+(c?"End":"Start")](j);b.checkStartOfBlock()&&b.checkEndOfBlock()?j.remove():b.select();a.fire("saveSnapshot");g=1}else if((p=h.contains(["td","th","caption"]))&&b.checkBoundaryOfElement(p,c?CKEDITOR.START:CKEDITOR.END))g=1}return!g});CKEDITOR.env.ie&&this.attachListener(this,"click",c);!CKEDITOR.env.ie&&!CKEDITOR.env.opera&&this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget(); +if(c.is("img","hr","input","textarea","select")){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button==2){b=b.data.getTarget();if(!b.getOuterHtml().replace(l,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this, +"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref",c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}delete this.editor}}}); +CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var l=/(^|]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,i=CKEDITOR.dom.walker.whitespaces(true),m=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement", +function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty();c.fire("lockSnapshot");a(b);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode", +function(){var a=b.editable();if(a&&a.isInline()){var c=this.lang.editor+", "+this.name;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);a.changeAttr("title",c);if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var d=CKEDITOR.tools.getNextId(),e=CKEDITOR.dom.element.createFromHtml(''+this.lang.common.editorHelp+"");c.append(e);a.changeAttr("aria-describedby",d)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}"); +var n=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function c(b,d){var g,e,h,f,o=[],i=d.range.startContainer;g=d.range.startPath();for(var i=k[i.getName()],j=0,m=b.getChildren(),n=m.count(),l=-1,u=-1,t=0,w=g.contains(k.$list);j-1)o[l].firstNotAllowed=1;if(u>-1)o[u].lastNotAllowed=1;return o}function d(b,c){var e=[],h=b.getChildren(),f=h.count(),i,o=0,j=k[c],p=!b.is(k.$inline)||b.is("br");for(p&&e.push(" ");o ",s.document);s.insertNode(x);s.setStartAfter(x)}I=new CKEDITOR.dom.elementPath(s.startContainer);q.endPath=G=new CKEDITOR.dom.elementPath(s.endContainer);if(!s.collapsed){var o=G.block||G.blockLimit,Q=s.getCommonAncestor(); +o&&(!o.equals(Q)&&!o.contains(Q)&&s.checkEndOfBlock())&&q.zombies.push(o);s.deleteContents()}for(;(C=a(s.startContainer)&&s.startContainer.getChild(s.startOffset-1))&&a(C)&&C.isBlockBoundary()&&I.contains(C);)s.moveToPosition(C,CKEDITOR.POSITION_BEFORE_END);f(s,q.blockLimit,I,G);if(x){s.setEndBefore(x);s.collapse();x.remove()}x=s.startPath();if(o=x.contains(e,false,1)){s.splitElement(o);q.inlineStylesRoot=o;q.inlineStylesPeak=x.lastElement}x=s.createBookmark();(o=x.startNode.getPrevious(b))&&a(o)&& +e(o)&&v.push(o);(o=x.startNode.getNext(b))&&a(o)&&e(o)&&v.push(o);for(o=x.startNode;(o=o.getParent())&&e(o);)v.push(o);s.moveToBookmark(x);if(t){C=t;t=q.range;if(q.type=="text"&&q.inlineStylesRoot){x=C;C=q.inlineStylesPeak;s=C.getDocument().createText("{cke-peak}");for(v=q.inlineStylesRoot.getParent();!C.equals(v);){s=s.appendTo(C.clone());C=C.getParent()}C=s.getOuterHtml().replace("{cke-peak}",x)}x=q.blockLimit.getName();if(/^\s+|\s+$/.test(C)&&"span"in CKEDITOR.dtd[x]){var L=' '; +C=L+C+L}C=q.editor.dataProcessor.toHtml(C,null,false,q.dontFilter);x=t.document.createElement("body");x.setHtml(C);if(L){x.getFirst().remove();x.getLast().remove()}if((L=t.startPath().block)&&!(L.getChildCount()==1&&L.getBogus()))a:{var E;if(x.getChildCount()==1&&a(E=x.getFirst())&&E.is(l)){L=E.getElementsByTag("*");t=0;for(s=L.count();t0;else{y=E.startPath();if(!G.isBlock&&(N=q.editor.config.enterMode!=CKEDITOR.ENTER_BR&&q.editor.config.autoParagraph!==false?q.editor.config.enterMode==CKEDITOR.ENTER_DIV?"div":"p":false)&&!y.block&&y.blockLimit&&y.blockLimit.equals(E.root)){N=L.createElement(N);!CKEDITOR.env.ie&&N.appendBogus();E.insertNode(N);!CKEDITOR.env.ie&&(J=N.getBogus())&&J.remove();E.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END)}if((y= +E.startPath().block)&&!y.equals(H)){if(J=y.getBogus()){J.remove();C.push(y)}H=y}G.firstNotAllowed&&(s=1);if(s&&G.isElement){y=E.startContainer;for(K=null;y&&!k[y.getName()][G.name];){if(y.equals(t)){y=null;break}K=y;y=y.getParent()}if(y){if(K){O=E.splitElement(K);q.zombies.push(O);q.zombies.push(K)}}else{K=t.getName();P=!x;y=x==I.length-1;K=d(G.node,K);for(var M=[],R=K.length,T=0,U=void 0,V=0,W=-1;T1&&f&&f.intersectsNode(c.$)){d=[e.anchorOffset,e.focusOffset];f=e.focusNode==c.$&&e.focusOffset>0;e.anchorNode==c.$&&e.anchorOffset>0&&d[0]--;f&&d[1]--;var i;f=e;if(!f.isCollapsed){i=f.getRangeAt(0);i.setStart(f.anchorNode,f.anchorOffset);i.setEnd(f.focusNode,f.focusOffset);i=i.collapsed}i&&d.unshift(d.pop())}}c.setText(j(c.getText()));if(d){c=e.getRangeAt(0);c.setStart(c.startContainer,d[0]);c.setEnd(c.startContainer,d[1]);e.removeAllRanges();e.addRange(c)}}}function j(a){return a.replace(/\u200B( )?/g, +function(a){return a[1]?" ":""})}var l,i,m=CKEDITOR.dom.walker.invisible(1);CKEDITOR.on("instanceCreated",function(b){function g(){var a=e.getSelection();a&&a.removeAllRanges()}var e=b.editor;e.define("selectionChange",{errorProof:1});e.on("contentDom",function(){var b=e.document,g=CKEDITOR.document,f=e.editable(),i=b.getBody(),j=b.getDocumentElement(),p=f.isInline(),m;CKEDITOR.env.gecko&&f.attachListener(f,"focus",function(a){a.removeListener();if(m!==0){a=e.getSelection().getNative();if(a.isCollapsed&& +a.anchorNode==f.$){a=e.createRange();a.moveToElementEditStart(f);a.select()}}},null,null,-2);f.attachListener(f,"focus",function(){e.unlockSelection(m);m=0},null,null,-1);f.attachListener(f,"mousedown",function(){m=0});if(CKEDITOR.env.ie||CKEDITOR.env.opera||p){var l,r=function(){l=e.getSelection(1);l.lock()};n?f.attachListener(f,"beforedeactivate",r,null,null,-1):f.attachListener(e,"selectionCheck",r,null,null,-1);f.attachListener(f,"blur",function(){e.lockSelection(l);m=1},null,null,-1)}if(CKEDITOR.env.ie&& +!p){var s;f.attachListener(f,"mousedown",function(a){a.data.$.button==2&&e.document.$.selection.type=="None"&&(s=e.window.getScrollPosition())});f.attachListener(f,"mouseup",function(a){if(a.data.$.button==2&&s){e.document.$.documentElement.scrollLeft=s.x;e.document.$.documentElement.scrollTop=s.y}s=null});if(b.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)j.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=i.$.createTextRange();try{c.moveToPoint(a.x, +a.y)}catch(e){}d.setEndPoint(f.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){j.removeListener("mousemove",b);g.removeListener("mouseup",c);j.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y7){j.on("mousedown", +function(a){if(a.data.getTarget().is("html")){g.on("mouseup",A);j.on("mouseup",A)}});var A=function(){g.removeListener("mouseup",A);j.removeListener("mouseup",A);var a=CKEDITOR.document.$.selection,c=a.createRange();a.type!="None"&&c.parentElement().ownerDocument==b.$&&c.select()}}}}f.attachListener(f,"selectionchange",a,e);f.attachListener(f,"keyup",c,e);f.attachListener(f,"focus",function(){e.forceNextSelectionCheck();e.selectionChange(1)});if(p?CKEDITOR.env.webkit||CKEDITOR.env.gecko:CKEDITOR.env.opera){var v; +f.attachListener(f,"mousedown",function(){v=1});f.attachListener(b.getDocumentElement(),"mouseup",function(){v&&c.call(e);v=0})}else f.attachListener(CKEDITOR.env.ie?f:b.getDocumentElement(),"mouseup",c,e);CKEDITOR.env.webkit&&f.attachListener(b,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:d(f)}},null,null,-1)});e.on("contentDomUnload",e.forceNextSelectionCheck,e);e.on("dataReady",function(){e.selectionChange(1)});CKEDITOR.env.ie9Compat&& +e.on("beforeDestroy",g,null,null,9);CKEDITOR.env.webkit&&e.on("setData",g);e.on("contentDomUnload",function(){e.unlockSelection()})});CKEDITOR.on("instanceReady",function(a){var b=a.editor;if(CKEDITOR.env.webkit){b.on("selectionChange",function(){var a=b.editable(),c=e(a);c&&(c.getCustomData("ready")?d(a):c.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",function(){d(b.editable())},null,null,-1);var c,f,a=function(){var a=b.editable();if(a)if(a=e(a)){var d=b.document.$.defaultView.getSelection(); +d.type=="Caret"&&d.anchorNode==a.$&&(f=1);c=a.getText();a.setText(j(c))}},i=function(){var a=b.editable();if(a)if(a=e(a)){a.setText(c);if(f){b.document.$.defaultView.getSelection().setPosition(a.$,a.getLength());f=0}}};b.on("beforeUndoImage",a);b.on("afterUndoImage",i);b.on("beforeGetData",a,null,null,0);b.on("getData",i)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:c).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if(this._.savedSelection&&!a)return this._.savedSelection; +return(a=this.editable())?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath}; +CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var n=typeof window.getSelection!="function";CKEDITOR.dom.selection=function(a){var b=a instanceof CKEDITOR.dom.element;this.document= +a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=b?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(CKEDITOR.env.webkit){a=this.document.getWindow().$.getSelection();if(a.type=="None"&&this.document.getActive().equals(this.root)||a.type=="Caret"&&a.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT){var c=new CKEDITOR.dom.range(this.root);c.moveToPosition(this.root,CKEDITOR.POSITION_AFTER_START);b=this.document.$.createRange();b.setStart(c.startContainer.$,c.startOffset);b.collapse(1); +var d=this.root.on("focus",function(a){a.cancel()},null,null,-100);a.addRange(b);d.removeListener()}}var a=this.getNative(),e;if(a)if(a.getRangeAt)e=(c=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(c.commonAncestorContainer);else{try{c=a.createRange()}catch(f){}e=c&&CKEDITOR.dom.element.get(c.item&&c.item(0)||c.parentElement())}if(!e||!this.root.equals(e)&&!this.root.contains(e)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=null;this._.cache.selectedText= +"";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var r={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype={getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=n?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:n?function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_NONE; +try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset-c.startOffset==1&&r[d.childNodes[c.startOffset].nodeName.toLowerCase()])b= +CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=n?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement(),e=d.ownerDocument;if(!d.hasChildNodes())return{container:d,offset:0};for(var f=d.children,h,i,j=b.duplicate(),m=0,p=f.length-1,l=-1,n,o;m<=p;){l=Math.floor((m+p)/2);h=f[l];j.moveToElementText(h);n=j.compareEndPoints("StartToStart",b);if(n>0)p=l-1;else if(n<0)m=l+1;else{if(CKEDITOR.env.ie9Compat&& +h.tagName=="BR"){f=e.defaultView.getSelection();return{container:f[c?"anchorNode":"focusNode"],offset:f[c?"anchorOffset":"focusOffset"]}}return{container:d,offset:a(h)}}}if(l==-1||l==f.length-1&&n<0){j.moveToElementText(d);j.setEndPoint("StartToStart",b);e=j.text.replace(/(\r\n|\r)/g,"\n").length;f=d.childNodes;if(!e){h=f[f.length-1];return h.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:f.length}:{container:h,offset:h.nodeValue.length}}for(d=f.length;e>0&&d>0;){i=f[--d];if(i.nodeType==CKEDITOR.NODE_TEXT){o= +i;e=e-i.nodeValue.length}}return{container:o,offset:-e}}j.collapse(n>0?true:false);j.setEndPoint(n>0?"StartToStart":"EndToStart",b);e=j.text.replace(/(\r\n|\r)/g,"\n").length;if(!e)return{container:d,offset:a(h)+(n>0?0:1)};for(;e>0;)try{i=h[n>0?"previousSibling":"nextSibling"];if(i.nodeType==CKEDITOR.NODE_TEXT){e=e-i.nodeValue.length;o=i}h=i}catch(x){return{container:d,offset:a(h)}}return{container:o,offset:n>0?-e:o.nodeValue.length+e}};return function(){var a=this.getNative(),c=a&&a.createRange(), +d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e=b.getLength()?l.setStartAfter(b):l.setStartBefore(b));i&&i.type==CKEDITOR.NODE_TEXT&&(m?l.setEndAfter(i):l.setEndBefore(i));b=new CKEDITOR.dom.walker(l);b.evaluator=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&a.isReadOnly()){var b=f.clone();f.setEndBefore(a);f.collapsed&&d.splice(e--,1);if(!(a.getPosition(l.endContainer)&CKEDITOR.POSITION_CONTAINS)){b.setStartAfter(a);b.collapsed||d.splice(e+1,0,b)}return true}return false};b.next()}}return c.ranges}}(),getStartElement:function(){var a=this._.cache; +if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b=c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent(); +b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0],c,d,e=2;e&&(!(c=a.getEnclosedNode())||!(c.type== +CKEDITOR.NODE_ELEMENT&&r[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache;if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=n?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked= +1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges();this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body",1)&&(b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={}},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){if(a.length)if(this.isLocked){var b=CKEDITOR.document.getActive();this.unlock(); +this.selectRanges(a);this.lock();!b.equals(this.root)&&b.focus()}else{if(n){var c=CKEDITOR.dom.walker.whitespaces(true),e=/\ufeff|\u00a0/,i={table:1,tbody:1,tr:1};if(a.length>1){b=a[a.length-1];a[0].setEnd(b.endContainer,b.endOffset)}var b=a[0],a=b.collapsed,k,j,m,l=b.getEnclosedNode();if(l&&l.type==CKEDITOR.NODE_ELEMENT&&l.getName()in r&&(!l.is("a")||!l.getText()))try{m=l.$.createControlRange();m.addElement(l.$);m.select();return}catch(B){}(b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.getName()in +i||b.endContainer.type==CKEDITOR.NODE_ELEMENT&&b.endContainer.getName()in i)&&b.shrink(CKEDITOR.NODE_ELEMENT,true);m=b.createBookmark();var i=m.startNode,q;if(!a)q=m.endNode;m=b.document.$.body.createTextRange();m.moveToElementText(i.$);m.moveStart("character",1);if(q){e=b.document.$.body.createTextRange();e.moveToElementText(q.$);m.setEndPoint("EndToEnd",e);m.moveEnd("character",-1)}else{k=i.getNext(c);j=i.hasAscendant("pre");k=!(k&&k.getText&&k.getText().match(e))&&(j||!i.hasPrevious()||i.getPrevious().is&& +i.getPrevious().is("br"));j=b.document.createElement("span");j.setHtml("");j.insertBefore(i);k&&b.document.createText("").insertBefore(i)}b.setStartBefore(i);i.remove();if(a){if(k){m.moveStart("character",-1);m.select();b.document.$.selection.clear()}else m.select();b.moveToPosition(j,CKEDITOR.POSITION_BEFORE_START);j.remove()}else{b.setEndBefore(q);q.remove();m.select()}}else{q=this.getNative();if(!q)return;if(CKEDITOR.env.opera){b=this.document.$.createRange();b.selectNodeContents(this.root.$); +q.addRange(b)}this.removeAllRanges();for(e=0;e=0){b.collapse(1);m.setEnd(b.endContainer.$,b.endOffset)}else throw z;}q.addRange(m)}}this.reset();this.root.fire("selectionchange")}},createBookmarks:function(a){return this.getRanges().createBookmarks(a)},createBookmarks2:function(a){return this.getRanges().createBookmarks2(a)},selectBookmarks:function(a){for(var b=[],c=0;c< +a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){var a=this.getNative();try{a&&a[n?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}})(); +CKEDITOR.editor.prototype.attachStyleStateChange=function(a,c){var b=this._.styleStateChangeCallbacks;if(!b){b=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(a){for(var c=0;c]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+| )/g," ");f=f.replace(/]*>/gi,"\n");if(CKEDITOR.env.ie){var g=a.getDocument().createElement("div");g.append(d);d.$.outerHTML="
    "+f+"
    ";d.copyAttributes(g.getFirst());d=g.getFirst().remove()}else d.setHtml(f);b=d}else f?b=n(c?[a.getHtml()]:i(a),b):a.moveChildren(b);b.replace(a);if(e){var c=b,j;if((j=c.getPrevious(v))&&j.is&&j.is("pre")){e=m(j.getHtml(),/\n$/,"")+ +"\n\n"+m(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="
    "+e+"
    ":c.setHtml(e);j.remove()}}else c&&h(b)}function i(a){a.getName();var b=[];m(a.getOuterHtml(),/(\S\s*)\n(?:\s|(]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"
    "+c+"
    "}).replace(/([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function m(a,b,c){var e="",d="",a=a.replace(/(^]+data-cke-bookmark.*?\/span>)|(]+data-cke-bookmark.*?\/span>$)/gi,function(a,
    +b,c){b&&(e=b);c&&(d=c);return""});return e+a.replace(b,c)+d}function n(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var e=0;e"),d=d.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat(" ",
    +a.length-1)+" "});if(c){var f=b.clone();f.setHtml(d);c.append(f)}else b.setHtml(d)}return c||b}function r(a){var b=this._.definition,c=b.attributes,b=b.styles,d=t(this)[a.getName()],e=CKEDITOR.tools.isEmpty(c)&&CKEDITOR.tools.isEmpty(b),f;for(f in c)if(!((f=="class"||this._.definition.fullMatch)&&a.getAttribute(f)!=F(f,c[f]))){e=a.hasAttribute(f);a.removeAttribute(f)}for(var i in b)if(!(this._.definition.fullMatch&&a.getStyle(i)!=F(i,b[i],true))){e=e||!!a.getStyle(i);a.removeStyle(i)}g(a,d,B[a.getName()]);
    +e&&(this._.definition.alwaysRemoveElement?h(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?h(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function p(a){for(var b=t(this),c=a.getElementsByTag(this.element),d=c.count();--d>=0;)r.call(this,c.getItem(d));for(var e in b)if(e!=this.element){c=a.getElementsByTag(e);for(d=c.count()-1;d>=0;d--){var f=c.getItem(d);g(f,b[e])}}}function g(a,b,c){if(b=b&&b.attributes)for(var d=0;d",a||b.name,"");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;
    +if(b)return b;var b=a.styles,c=a.attributes&&a.attributes.style||"",d="";c.length&&(c=c.replace(z,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(z,";");f=="inherit"?d=d+g:c=c+g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d}})();CKEDITOR.styleCommand=function(a,c){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,c,true)};
    +CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(a,c,b){CKEDITOR.stylesSet.addExternal(a,c,"");CKEDITOR.stylesSet.load(a,b)};
    +CKEDITOR.editor.prototype.getStylesSet=function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions);else{var c=this,b=c.config.stylesCombo_stylesSet||c.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){c._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"),f=b[0];CKEDITOR.stylesSet.addExternal(f,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(f,function(b){c._.stylesDefinitions=b[f];a(c._.stylesDefinitions)})}}};
    +CKEDITOR.dom.comment=function(a,c){typeof a=="string"&&(a=(c?c.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}});
    +(function(){var a={},c;for(c in CKEDITOR.dtd.$blockLimit)c in CKEDITOR.dtd.$list||(a[c]=1);var b={};for(c in CKEDITOR.dtd.$block)c in CKEDITOR.dtd.$blockLimit||c in CKEDITOR.dtd.$empty||(b[c]=1);CKEDITOR.dom.elementPath=function(c,e){var d=null,j=null,l=[],e=e||c.getDocument().getBody(),i=c;do if(i.type==CKEDITOR.NODE_ELEMENT){l.push(i);if(!this.lastElement){this.lastElement=i;if(i.is(CKEDITOR.dtd.$object))continue}var m=i.getName();if(!j){!d&&b[m]&&(d=i);if(a[m]){var n;if(n=!d){if(m=m=="div"){a:{m=
    +i.getChildren();n=0;for(var r=m.count();n-1}:typeof a=="function"?f=a:typeof a=="object"&&(f=
    +function(b){return b.getName()in a});var e=this.elements,d=e.length;c&&d--;if(b){e=Array.prototype.slice.call(e,0);e.reverse()}for(c=0;c=f){d=e.createText("");d.insertAfter(this)}else{a=e.createText("");a.insertAfter(d);a.remove()}return d},substring:function(a,
    +c){return typeof c!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,c)}});
    +(function(){function a(a,c,e){var d=a.serializable,j=c[e?"endContainer":"startContainer"],l=e?"endOffset":"startOffset",i=d?c.document.getById(a.startNode):a.startNode,a=d?c.document.getById(a.endNode):a.endNode;if(j.equals(i.getPrevious())){c.startOffset=c.startOffset-j.getLength()-a.getPrevious().getLength();j=a.getNext()}else if(j.equals(a.getPrevious())){c.startOffset=c.startOffset-j.getLength();j=a.getNext()}j.equals(i.getParent())&&c[l]++;j.equals(a.getParent())&&c[l]++;c[e?"endContainer":"startContainer"]=
    +j;return c}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,c)};var c={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),e=[],d;return{getNextRange:function(j){d=d==void 0?0:d+1;var l=a[d];if(l&&a.length>1){if(!d)for(var i=a.length-1;i>=0;i--)e.unshift(a[i].createBookmark(true));if(j)for(var m=0;a[d+m+1];){for(var n=l.document,j=0,i=n.getById(e[m].endNode),n=n.getById(e[m+
    +1].startNode);;){i=i.getNextSourceNode(false);if(n.equals(i))j=1;else if(c(i)||i.type==CKEDITOR.NODE_ELEMENT&&i.isBlockBoundary())continue;break}if(!j)break;m++}for(l.moveToBookmark(e.shift());m--;){i=a[++d];i.moveToBookmark(e.shift());l.setEnd(i.endContainer,i.endOffset)}}return l}}},createBookmarks:function(b){for(var c=[],e,d=0;db?-1:1}),e=0,f;e
    ',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{CKEDITOR.env.hc=a.getComputedStyle("border-top-color")==a.getComputedStyle("border-right-color")}catch(c){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc";CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}"); +CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(var b=0;bc;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c, +a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "), +panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")}; +return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g, +"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;darguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null,{role:"presentation"},function(){var f=[],d=a.required?" cke_required":"";"horizontal"!= +a.labelLayout?f.push('",'"):(d={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:' +
    +

    + This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing + area will be displayed in a <div> element. +

    +

    + For details of how to create this setup check the source code of this sample page + for JavaScript code responsible for the creation and destruction of a CKEditor instance. +

    +
    +

    Click the buttons to create and remove a CKEditor instance.

    +

    + + +

    + +
    +
    + + + + diff --git a/protected/extensions/ckeditor/assets/samples/api.html b/protected/extensions/ckeditor/assets/samples/api.html new file mode 100644 index 0000000..9d51ef7 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/api.html @@ -0,0 +1,207 @@ + + + + + + API Usage — CKEditor Sample + + + + + + +

    + CKEditor Samples » Using CKEditor JavaScript API +

    +
    +

    + This sample shows how to use the + CKEditor JavaScript API + to interact with the editor at runtime. +

    +

    + For details on how to create this setup check the source code of this sample page. +

    +
    + + +
    + +
    +
    + + + + +

    +

    + + +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/appendto.html b/protected/extensions/ckeditor/assets/samples/appendto.html new file mode 100644 index 0000000..4e97bad --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/appendto.html @@ -0,0 +1,57 @@ + + + + + CKEDITOR.appendTo — CKEditor Sample + + + + + +

    + CKEditor Samples » Append To Page Element Using JavaScript Code +

    +
    +
    +

    + CKEDITOR.appendTo is basically to place editors + inside existing DOM elements. Unlike CKEDITOR.replace, + a target container to be replaced is no longer necessary. A new editor + instance is inserted directly wherever it is desired. +

    +
    CKEDITOR.appendTo( 'container_id',
    +	{ /* Configuration options to be used. */ }
    +	'Editor content to be used.'
    +);
    +
    + +
    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/assets/inlineall/logo.png b/protected/extensions/ckeditor/assets/samples/assets/inlineall/logo.png new file mode 100644 index 0000000..334e7ac Binary files /dev/null and b/protected/extensions/ckeditor/assets/samples/assets/inlineall/logo.png differ diff --git a/protected/extensions/ckeditor/assets/samples/assets/outputxhtml/outputxhtml.css b/protected/extensions/ckeditor/assets/samples/assets/outputxhtml/outputxhtml.css new file mode 100644 index 0000000..eab9374 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/assets/outputxhtml/outputxhtml.css @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + * + * Styles used by the XHTML 1.1 sample page (xhtml.html). + */ + +/** + * Basic definitions for the editing area. + */ +body +{ + font-family: Arial, Verdana, sans-serif; + font-size: 80%; + color: #000000; + background-color: #ffffff; + padding: 5px; + margin: 0px; +} + +/** + * Core styles. + */ + +.Bold +{ + font-weight: bold; +} + +.Italic +{ + font-style: italic; +} + +.Underline +{ + text-decoration: underline; +} + +.StrikeThrough +{ + text-decoration: line-through; +} + +.Subscript +{ + vertical-align: sub; + font-size: smaller; +} + +.Superscript +{ + vertical-align: super; + font-size: smaller; +} + +/** + * Font faces. + */ + +.FontComic +{ + font-family: 'Comic Sans MS'; +} + +.FontCourier +{ + font-family: 'Courier New'; +} + +.FontTimes +{ + font-family: 'Times New Roman'; +} + +/** + * Font sizes. + */ + +.FontSmaller +{ + font-size: smaller; +} + +.FontLarger +{ + font-size: larger; +} + +.FontSmall +{ + font-size: 8pt; +} + +.FontBig +{ + font-size: 14pt; +} + +.FontDouble +{ + font-size: 200%; +} + +/** + * Font colors. + */ +.FontColor1 +{ + color: #ff9900; +} + +.FontColor2 +{ + color: #0066cc; +} + +.FontColor3 +{ + color: #ff0000; +} + +.FontColor1BG +{ + background-color: #ff9900; +} + +.FontColor2BG +{ + background-color: #0066cc; +} + +.FontColor3BG +{ + background-color: #ff0000; +} + +/** + * Indentation. + */ + +.Indent1 +{ + margin-left: 40px; +} + +.Indent2 +{ + margin-left: 80px; +} + +.Indent3 +{ + margin-left: 120px; +} + +/** + * Alignment. + */ + +.JustifyLeft +{ + text-align: left; +} + +.JustifyRight +{ + text-align: right; +} + +.JustifyCenter +{ + text-align: center; +} + +.JustifyFull +{ + text-align: justify; +} + +/** + * Other. + */ + +code +{ + font-family: courier, monospace; + background-color: #eeeeee; + padding-left: 1px; + padding-right: 1px; + border: #c0c0c0 1px solid; +} + +kbd +{ + padding: 0px 1px 0px 1px; + border-width: 1px 2px 2px 1px; + border-style: solid; +} + +blockquote +{ + color: #808080; +} diff --git a/protected/extensions/ckeditor/assets/samples/assets/posteddata.php b/protected/extensions/ckeditor/assets/samples/assets/posteddata.php new file mode 100644 index 0000000..bb45656 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/assets/posteddata.php @@ -0,0 +1,59 @@ + + + + + + Sample — CKEditor + + + +

    + CKEditor — Posted Data +

    + + + + + + + + + $value ) + { + if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) ) + continue; + + if ( get_magic_quotes_gpc() ) + $value = htmlspecialchars( stripslashes((string)$value) ); + else + $value = htmlspecialchars( (string)$value ); +?> + + + + + +
    Field NameValue
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/assets/sample.css b/protected/extensions/ckeditor/assets/samples/assets/sample.css new file mode 100644 index 0000000..a47e4dd --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/assets/sample.css @@ -0,0 +1,3 @@ +/** + * Required by tests (dom/document.html). + */ diff --git a/protected/extensions/ckeditor/assets/samples/assets/sample.jpg b/protected/extensions/ckeditor/assets/samples/assets/sample.jpg new file mode 100644 index 0000000..a4a77fa Binary files /dev/null and b/protected/extensions/ckeditor/assets/samples/assets/sample.jpg differ diff --git a/protected/extensions/ckeditor/assets/samples/assets/uilanguages/languages.js b/protected/extensions/ckeditor/assets/samples/assets/uilanguages/languages.js new file mode 100644 index 0000000..6b3342b --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/assets/uilanguages/languages.js @@ -0,0 +1,7 @@ +/* + Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +var CKEDITOR_LANGS=function(){var c={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",is:"Icelandic", +it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese",zh:"Chinese Traditional","zh-cn":"Chinese Simplified"}, +b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name + + + + Data Filtering — CKEditor Sample + + + + + + +

    + CKEditor Samples » Data Filtering and Features Activation +

    +
    +

    + This sample page demonstrates the idea of Advanced Content Filter + (ACF), a sophisticated + tool that takes control over what kind of data is accepted by the editor and what + kind of output is produced. +

    +

    When and what is being filtered?

    +

    + ACF controls + every single source of data that comes to the editor. + It process both HTML that is inserted manually (i.e. pasted by the user) + and programmatically like: +

    +
    +editor.setData( '<p>Hello world!</p>' );
    +
    +

    + ACF discards invalid, + useless HTML tags and attributes so the editor remains "clean" during + runtime. ACF behaviour + can be configured and adjusted for a particular case to prevent the + output HTML (i.e. in CMS systems) from being polluted. + + This kind of filtering is a first, client-side line of defense + against "tag soups", + the tool that precisely restricts which tags, attributes and styles + are allowed (desired). When properly configured, ACF + is an easy and fast way to produce a high-quality, intentionally filtered HTML. +

    + +

    How to configure or disable ACF?

    +

    + Advanced Content Filter is enabled by default, working in "automatic mode", yet + it provides a set of easy rules that allow adjusting filtering rules + and disabling the entire feature when necessary. The config property + responsible for this feature is config.allowedContent. +

    +

    + By "automatic mode" is meant that loaded plugins decide which kind + of content is enabled and which is not. For example, if the link + plugin is loaded it implies that <a> tag is + automatically allowed. Each plugin is given a set + of predefined ACF rules + that control the editor until + config.allowedContent + is defined manually. +

    +

    + Let's assume our intention is to restrict the editor to accept (produce) paragraphs + only: no attributes, no styles, no other tags. + With ACF + this is very simple. Basically set + config.allowedContent to 'p': +

    +
    +var editor = CKEDITOR.replace( textarea_id, {
    +	allowedContent: 'p'
    +} );
    +
    +

    + Now try to play with allowed content: +

    +
    +// Trying to insert disallowed tag and attribute.
    +editor.setData( '<p style="color: red">Hello <em>world</em>!</p>' );
    +alert( editor.getData() );
    +
    +// Filtered data is returned.
    +"<p>Hello world!</p>"
    +
    +

    + What happened? Since config.allowedContent: 'p' is set the editor assumes + that only plain <p> are accepted. Nothing more. This is why + style attribute and <em> tag are gone. The same + filtering would happen if we pasted disallowed HTML into this editor. +

    +

    + This is just a small sample of what ACF + can do. To know more, please refer to the sample section below and + the official Advanced Content Filter guide. +

    +

    + You may, of course, want CKEditor to avoid filtering of any kind. + To get rid of ACF, + basically set + config.allowedContent to true like this: +

    +
    +CKEDITOR.replace( textarea_id, {
    +	allowedContent: true
    +} );
    +
    + +

    Beyond data flow: Features activation

    +

    + ACF is far more than + I/O control: the entire + UI of the editor is adjusted to what + filters restrict. For example: if <a> tag is + disallowed + by ACF, + then accordingly link command, toolbar button and link dialog + are also disabled. Editor is smart: it knows which features must be + removed from the interface to match filtering rules. +

    +

    + CKEditor can be far more specific. If <a> tag is + allowed by filtering rules to be used but it is restricted + to have only one attribute (href) + config.allowedContent = 'a[!href]', then + "Target" tab of the link dialog is automatically disabled as target + attribute isn't included in ACF rules + for <a>. This behaviour applies to dialog fields, context + menus and toolbar buttons. +

    + +

    Sample configurations

    +

    + There are several editor instances below that present different + ACF setups. All of them, + except the last inline instance, share the same HTML content to visualize + how different filtering rules affect the same input data. +

    +
    + +
    + +
    +

    + This editor is using default configuration ("automatic mode"). It means that + + config.allowedContent is defined by loaded plugins. + Each plugin extends filtering rules to make it's own associated content + available for the user. +

    +
    + + + +
    + +
    + +
    + +
    +

    + This editor is using a custom configuration for + ACF: +

    +
    +CKEDITOR.replace( 'editor2', {
    +	allowedContent:
    +		'h1 h2 h3 p blockquote strong em;' +
    +		'a[!href];' +
    +		'img(left,right)[!src,alt,width,height];' +
    +		'table tr th td caption;' +
    +		'span{!font-family};' +'
    +		'span{!color};' +
    +		'span(!marker);' +
    +		'del ins'
    +} );
    +
    +

    + The following rules may require additional explanation: +

    +
      +
    • + h1 h2 h3 p blockquote strong em - These tags + are accepted by the editor. Any tag attributes will be discarded. +
    • +
    • + a[!href] - href attribute is obligatory + for <a> tag. Tags without this attribute + are disarded. No other attribute will be accepted. +
    • +
    • + img(left,right)[!src,alt,width,height] - src + attribute is obligatory for <img> tag. + alt, width, height + and class attributes are accepted but + class must be either class="left" + or class="right" +
    • +
    • + table tr th td caption - These tags + are accepted by the editor. Any tag attributes will be discarded. +
    • +
    • + span{!font-family}, span{!color}, + span(!marker) - <span> tags + will be accepted if either font-family or + color style is set or class="marker" + is present. +
    • +
    • + del ins - These tags + are accepted by the editor. Any tag attributes will be discarded. +
    • +
    +

    + Please note that UI of the + editor is different. It's a response to what happened to the filters. + Since text-align isn't allowed, the align toolbar is gone. + The same thing happened to subscript/superscript, strike, underline + (<u>, <sub>, <sup> + are disallowed by + config.allowedContent) and many other buttons. +

    +
    + + +
    + +
    + +
    + +
    +

    + This editor is using a custom configuration for + ACF. + Note that filters can be configured as an object literal + as an alternative to a string-based definition. +

    +
    +CKEDITOR.replace( 'editor3', {
    +	allowedContent: {
    +		'b i ul ol big small': true,
    +		'h1 h2 h3 p blockquote li': {
    +			styles: 'text-align'
    +		},
    +		a: { attributes: '!href,target' },
    +		img: {
    +			attributes: '!src,alt',
    +			styles: 'width,height',
    +			classes: 'left,right'
    +		}
    +	}
    +} );
    +
    +
    + + +
    + +
    + +
    + +
    +

    + This editor is using a custom set of plugins and buttons. +

    +
    +CKEDITOR.replace( 'editor4', {
    +	removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',
    +	removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',
    +	format_tags: 'p;h1;h2;h3;pre;address'
    +} );
    +
    +

    + As you can see, removing plugins and buttons implies filtering. + Several tags are not allowed in the editor because there's no + plugin/button that is responsible for creating and editing this + kind of content (for example: the image is missing because + of removeButtons: 'Image'). The conclusion is that + ACF works "backwards" + as well: modifying UI + elements is changing allowed content rules. +

    +
    + + +
    + +
    + +
    + +
    +

    + This editor is built on editable <h1> element. + ACF takes care of + what can be included in <h1>. Note that there + are no block styles in Styles combo. Also why lists, indentation, + blockquote, div, form and other buttons are missing. +

    +

    + ACF makes sure that + no disallowed tags will come to <h1> so the final + markup is valid. If the user tried to paste some invalid HTML + into this editor (let's say a list), it would be automatically + converted into plain text. +

    +
    +

    + Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. +

    +
    + + + + diff --git a/protected/extensions/ckeditor/assets/samples/divreplace.html b/protected/extensions/ckeditor/assets/samples/divreplace.html new file mode 100644 index 0000000..067e474 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/divreplace.html @@ -0,0 +1,141 @@ + + + + + Replace DIV — CKEditor Sample + + + + + + + +

    + CKEditor Samples » Replace DIV with CKEditor on the Fly +

    +
    +

    + This sample shows how to automatically replace <div> elements + with a CKEditor instance on the fly, following user's doubleclick. The content + that was previously placed inside the <div> element will now + be moved into CKEditor editing area. +

    +

    + For details on how to create this setup check the source code of this sample page. +

    +
    +

    + Double-click any of the following <div> elements to transform them into + editor instances. +

    +
    +

    + Part 1 +

    +

    + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

    +
    +
    +

    + Part 2 +

    +

    + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

    +

    + Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus + sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum + vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate. +

    +
    +
    +

    + Part 3 +

    +

    + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi + semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna + rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla + nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce + eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus. +

    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/index.html b/protected/extensions/ckeditor/assets/samples/index.html new file mode 100644 index 0000000..cdf0511 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/index.html @@ -0,0 +1,122 @@ + + + + + CKEditor Samples + + + + +

    + CKEditor Samples +

    +
    +
    +

    + Basic Samples +

    +
    +
    Replace textarea elements by class name
    +
    Automatic replacement of all textarea elements of a given class with a CKEditor instance.
    + +
    Replace textarea elements by code
    +
    Replacement of textarea elements with CKEditor instances by using a JavaScript call.
    +
    + +

    + Basic Customization +

    +
    +
    User Interface color
    +
    Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.
    + +
    User Interface languages
    +
    Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.
    +
    + + +

    Plugins

    +
    +
    Magicline pluginNew!
    +
    Using the Magicline plugin to access difficult focus spaces.
    + +
    Full page support
    +
    CKEditor inserted with a JavaScript call and used to edit the whole page from <html> to </html>.
    +
    +
    +
    +

    + Inline Editing New! +

    +
    +
    Massive inline editor creation New!
    +
    Turn all elements with contentEditable = true attribute into inline editors.
    + +
    Convert element into an inline editor by code New!
    +
    Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.
    + + +
    + +

    + Advanced Samples +

    +
    +
    Data filtering and features activation New!
    +
    Data filtering and automatic features activation basing on configuration.
    + +
    Replace DIV elements on the fly
    +
    Transforming a div element into an instance of CKEditor with a mouse click.
    + +
    Append editor instances
    +
    Appending editor instances to existing DOM elements.
    + +
    Create and destroy editor instances for Ajax applications
    +
    Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.
    + +
    Basic usage of the API
    +
    Using the CKEditor JavaScript API to interact with the editor at runtime.
    + +
    XHTML-compliant style
    +
    Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.
    + +
    Read-only mode
    +
    Using the readOnly API to block introducing changes to the editor contents.
    + +
    "Tab" key-based navigation New!
    +
    Navigating among editor instances with tab key.
    + + + +
    Using the JavaScript API to customize dialog windows
    +
    Using the dialog windows API to customize dialog windows without changing the original editor code.
    + +
    Using the "Enter" key in CKEditor
    +
    Configuring the behavior of Enter and Shift+Enter keys.
    + +
    Output for Flash
    +
    Configuring CKEditor to produce HTML code that can be used with Adobe Flash.
    + +
    Output HTML
    +
    Configuring CKEditor to produce legacy HTML 4 code.
    + +
    Toolbar ConfigurationsNew!
    +
    Configuring CKEditor to display full or custom toolbar layout.
    + +
    +
    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/inlineall.html b/protected/extensions/ckeditor/assets/samples/inlineall.html new file mode 100644 index 0000000..013602e --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/inlineall.html @@ -0,0 +1,311 @@ + + + + + Massive inline editing — CKEditor Sample + + + + + + + +
    +

    CKEditor Samples » Massive inline editing

    +
    +

    This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with contentEditable attribute set to value true:

    +
    <div contenteditable="true" > ... </div>
    +

    Click inside of any element below to start editing.

    +
    +
    +
    + +
    +
    +
    +

    + Fusce vitae porttitor +

    +

    + + Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor. + +

    +

    + Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum nisl nulla sem in metus. Maecenas wisi. Donec nec erat volutpat. +

    +
    +

    + Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium. + Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum +

    +
    +
    +

    + Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu. +

    +
    +

    Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.

    +

    Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.

    +
    +
    +
    +
    +

    + Integer condimentum sit amet +

    +

    + Aenean nonummy a, mattis varius. Cras aliquet. + Praesent magna non mattis ac, rhoncus nunc, rhoncus eget, cursus pulvinar mollis.

    +

    Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.

    +

    Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.

    +
    +
    +

    + Praesent wisi accumsan sit amet nibh +

    +

    Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.

    +

    Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce gravida, erat vitae augue. Fusce urna fringilla gravida.

    +

    In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.

    +
    +
    +
    +
    +

    + CKEditor logo +

    +

    Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.

    +

    + Nullam laoreet vel consectetuer tellus suscipit +

    +
      +
    • Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.
    • +
    • Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.
    • +
    • Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.
    • +
    +

    Quisque justo neque, mattis sed, fermentum ultrices posuere cubilia Curae, Vestibulum elit metus, quis placerat ut, lectus.

    +

    Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.

    +

    Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.

    +
    +
    +
    +
    + Tags of this article: +

    + inline, editing, floating, CKEditor +

    +
    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/inlinebycode.html b/protected/extensions/ckeditor/assets/samples/inlinebycode.html new file mode 100644 index 0000000..313972e --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/inlinebycode.html @@ -0,0 +1,122 @@ + + + + + Inline Editing by Code — CKEditor Sample + + + + + + +

    + CKEditor Samples » Inline Editing by Code +

    +
    +

    + This sample shows how to create an inline editor instance of CKEditor. It is created + with a JavaScript call using the following code: +

    +
    +// This property tells CKEditor to not activate every element with contenteditable=true element.
    +CKEDITOR.disableAutoInline = true;
    +
    +var editor = CKEDITOR.inline( document.getElementById( 'editable' ) );
    +
    +

    + Note that editable in the code above is the id + attribute of the <div> element to be converted into an inline instance. +

    +
    +
    +

    Saturn V carrying Apollo 11 Apollo 11

    + +

    Apollo 11 was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.

    + +

    Armstrong spent about three and a half two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5 kg) of lunar material for return to Earth. A third member of the mission, Michael Collins, piloted the command spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.

    + +

    Broadcasting and quotes

    + +

    Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:

    + +
    +

    One small step for [a] man, one giant leap for mankind.

    +
    + +

    Apollo 11 effectively ended the Space Race and fulfilled a national goal proposed in 1961 by the late U.S. President John F. Kennedy in a speech before the United States Congress:

    + +
    +

    [...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.

    +
    + +

    Technical details

    + + + + + + + + + + + + + + + + + + + + + + + +
    Mission crew
    PositionAstronaut
    CommanderNeil A. Armstrong
    Command Module PilotMichael Collins
    Lunar Module PilotEdwin "Buzz" E. Aldrin, Jr.
    + +

    Launched by a Saturn V rocket from Kennedy Space Center in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of NASA's Apollo program. The Apollo spacecraft had three parts:

    + +
      +
    1. Command Module with a cabin for the three astronauts which was the only part which landed back on Earth
    2. +
    3. Service Module which supported the Command Module with propulsion, electrical power, oxygen and water
    4. +
    5. Lunar Module for landing on the Moon.
    6. +
    + +

    After being sent to the Moon by the Saturn V's upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the Sea of Tranquility. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the Pacific Ocean on July 24.

    + +
    +

    Source: Wikipedia.org

    +
    + + + + diff --git a/protected/extensions/ckeditor/assets/samples/plugins/dialog/assets/my_dialog.js b/protected/extensions/ckeditor/assets/samples/plugins/dialog/assets/my_dialog.js new file mode 100644 index 0000000..e93c2ca --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/plugins/dialog/assets/my_dialog.js @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +CKEDITOR.dialog.add( 'myDialog', function( editor ) { + return { + title: 'My Dialog', + minWidth: 400, + minHeight: 200, + contents: [ + { + id: 'tab1', + label: 'First Tab', + title: 'First Tab', + elements: [ + { + id: 'input1', + type: 'text', + label: 'Text Field' + }, + { + id: 'select1', + type: 'select', + label: 'Select Field', + items: [ + [ 'option1', 'value1' ], + [ 'option2', 'value2' ] + ] + } + ] + }, + { + id: 'tab2', + label: 'Second Tab', + title: 'Second Tab', + elements: [ + { + id: 'button1', + type: 'button', + label: 'Button Field' + } + ] + } + ] + }; +}); + diff --git a/protected/extensions/ckeditor/assets/samples/plugins/dialog/dialog.html b/protected/extensions/ckeditor/assets/samples/plugins/dialog/dialog.html new file mode 100644 index 0000000..a73b6eb --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/plugins/dialog/dialog.html @@ -0,0 +1,187 @@ + + + + + Using API to Customize Dialog Windows — CKEditor Sample + + + + + + + + + + +

    + CKEditor Samples » Using CKEditor Dialog API +

    +
    +

    + This sample shows how to use the + CKEditor Dialog API + to customize CKEditor dialog windows without changing the original editor code. + The following customizations are being done in the example below: +

    +

    + For details on how to create this setup check the source code of this sample page. +

    +
    +

    A custom dialog is added to the editors using the pluginsLoaded event, from an external dialog definition file:

    +
      +
    1. Creating a custom dialog window – "My Dialog" dialog window opened with the "My Dialog" toolbar button.
    2. +
    3. Creating a custom button – Add button to open the dialog with "My Dialog" toolbar button.
    4. +
    + + +

    The below editor modify the dialog definition of the above added dialog using the dialogDefinition event:

    +
      +
    1. Adding dialog tab – Add new tab "My Tab" to dialog window.
    2. +
    3. Removing a dialog window tab – Remove "Second Tab" page from the dialog window.
    4. +
    5. Adding dialog window fields – Add "My Custom Field" to the dialog window.
    6. +
    7. Removing dialog window field – Remove "Select Field" selection field from the dialog window.
    8. +
    9. Setting default values for dialog window fields – Set default value of "Text Field" text field.
    10. +
    11. Setup initial focus for dialog window – Put initial focus on "My Custom Field" text field.
    12. +
    + + + + + diff --git a/protected/extensions/ckeditor/assets/samples/plugins/enterkey/enterkey.html b/protected/extensions/ckeditor/assets/samples/plugins/enterkey/enterkey.html new file mode 100644 index 0000000..fa1191e --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/plugins/enterkey/enterkey.html @@ -0,0 +1,103 @@ + + + + + ENTER Key Configuration — CKEditor Sample + + + + + + + + + +

    + CKEditor Samples » ENTER Key Configuration +

    +
    +

    + This sample shows how to configure the Enter and Shift+Enter keys + to perform actions specified in the + enterMode + and shiftEnterMode + parameters, respectively. + You can choose from the following options: +

    +
      +
    • ENTER_P – new <p> paragraphs are created;
    • +
    • ENTER_BR – lines are broken with <br> elements;
    • +
    • ENTER_DIV – new <div> blocks are created.
    • +
    +

    + The sample code below shows how to configure CKEditor to create a <div> block when Enter key is pressed. +

    +
    +CKEDITOR.replace( 'textarea_id', {
    +	enterMode: CKEDITOR.ENTER_DIV
    +});
    +

    + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

    +
    +
    + When Enter is pressed:
    + +
    +
    + When Shift+Enter is pressed:
    + +
    +
    +
    +

    +
    + +

    +

    + +

    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla b/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla new file mode 100644 index 0000000..27e68cc Binary files /dev/null and b/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla differ diff --git a/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf b/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf new file mode 100644 index 0000000..dbe17b6 Binary files /dev/null and b/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf differ diff --git a/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js b/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js new file mode 100644 index 0000000..95fdf0a --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js @@ -0,0 +1,18 @@ +var swfobject=function(){function u(){if(!s){try{var a=d.getElementsByTagName("body")[0].appendChild(d.createElement("span"));a.parentNode.removeChild(a)}catch(b){return}s=!0;for(var a=x.length,c=0;cf){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;D()})()}else D()}function D(){var a=p.length;if(0e.wk))t(c,!0),f&&(g.success=!0,g.ref=E(c),f(g));else if(p[b].expressInstall&&F()){g={};g.data=p[b].expressInstall;g.width=d.getAttribute("width")||"0";g.height=d.getAttribute("height")||"0";d.getAttribute("class")&&(g.styleclass=d.getAttribute("class"));d.getAttribute("align")&&(g.align=d.getAttribute("align"));for(var h={},d=d.getElementsByTagName("param"),j=d.length,k=0;ke.wk)}function G(a,b,c,f){A=!0;H=f||null;N={success:!1,id:c};var g=n(c);if(g){"OBJECT"==g.nodeName?(w=I(g),B=null):(w=g,B=c);a.id= +O;if(typeof a.width==i||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width="310";if(typeof a.height==i||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height="137";d.title=d.title.slice(0,47)+" - Flash Player Installation";f=e.ie&&e.win?"ActiveX":"PlugIn";f="MMredirectURL="+m.location.toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+d.title;b.flashvars=typeof b.flashvars!=i?b.flashvars+("&"+f):f;e.ie&&(e.win&&4!=g.readyState)&&(f=d.createElement("div"),c+="SWFObjectNew",f.setAttribute("id", +c),g.parentNode.insertBefore(f,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());J(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(I(a),b);a.style.display="none";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(I(a),a)}function I(a){var b=d.createElement("div");if(e.win&& +e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(r)[0])if(a=a.childNodes)for(var c=a.length,f=0;fe.wk)return f;if(g)if(typeof a.id==i&&(a.id=c),e.ie&&e.win){var o="",h;for(h in a)a[h]!=Object.prototype[h]&&("data"==h.toLowerCase()?b.movie=a[h]:"styleclass"==h.toLowerCase()?o+=' class="'+a[h]+'"':"classid"!=h.toLowerCase()&&(o+=" "+ +h+'="'+a[h]+'"'));h="";for(var j in b)b[j]!=Object.prototype[j]&&(h+='');g.outerHTML='"+h+"";C[C.length]=a.id;f=n(a.id)}else{j=d.createElement(r);j.setAttribute("type",y);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(o in b)b[o]!=Object.prototype[o]&&"movie"!=o.toLowerCase()&& +(a=j,h=o,k=b[o],c=d.createElement("param"),c.setAttribute("name",h),c.setAttribute("value",k),a.appendChild(c));g.parentNode.replaceChild(j,g);f=j}return f}function P(a){var b=n(a);b&&"OBJECT"==b.nodeName&&(e.ie&&e.win?(b.style.display="none",function(){if(4==b.readyState){var c=n(a);if(c){for(var f in c)"function"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function n(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b} +function U(a,b,c){a.attachEvent(b,c);v[v.length]=[a,b,c]}function z(a){var b=e.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName("head")[0];if(g){c=c&&"string"==typeof c?c:"screen";f&&(K=l=null);if(!l||K!=c)f=d.createElement("style"),f.setAttribute("type","text/css"),f.setAttribute("media",c),l=g.appendChild(f), +e.ie&&(e.win&&typeof d.styleSheets!=i&&0\.;]/.exec(a)&&typeof encodeURIComponent!=i?encodeURIComponent(a):a}var i="undefined",r="object",y="application/x-shockwave-flash", +O="SWFObjectExprInst",m=window,d=document,q=navigator,T=!1,x=[function(){T?V():D()}],p=[],C=[],v=[],w,B,H,N,s=!1,A=!1,l,K,R=!0,e=function(){var a=typeof d.getElementById!=i&&typeof d.getElementsByTagName!=i&&typeof d.createElement!=i,b=q.userAgent.toLowerCase(),c=q.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!+"\v1",e=[0,0,0],h=null;if(typeof q.plugins!=i&&typeof q.plugins["Shockwave Flash"]== +r){if((h=q.plugins["Shockwave Flash"].description)&&!(typeof q.mimeTypes!=i&&q.mimeTypes[y]&&!q.mimeTypes[y].enabledPlugin))T=!0,g=!1,h=h.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(h.replace(/^(.*)\..*$/,"$1"),10),e[1]=parseInt(h.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof m.ActiveXObject!=i)try{var j=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(j&&(h=j.GetVariable("$version")))g=!0,h=h.split(" ")[1].split(","), +e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)]}catch(k){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((typeof d.readyState!=i&&"complete"==d.readyState||typeof d.readyState==i&&(d.getElementsByTagName("body")[0]||d.body))&&u(),s||(typeof d.addEventListener!=i&&d.addEventListener("DOMContentLoaded",u,!1),e.ie&&e.win&&(d.attachEvent("onreadystatechange",function(){"complete"==d.readyState&&(d.detachEvent("onreadystatechange",arguments.callee),u())}),m==top&&function(){if(!s){try{d.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee, +0);return}u()}}()),e.wk&&function(){s||(/loaded|complete/.test(d.readyState)?u():setTimeout(arguments.callee,0))}(),M(u)))})();(function(){e.ie&&e.win&&window.attachEvent("onunload",function(){for(var a=v.length,b=0;be.wk)&&a&&b&&c&&d&&g?(t(b,!1),L(function(){c+="";d+="";var e={};if(k&&typeof k===r)for(var l in k)e[l]=k[l];e.data=a;e.width=c;e.height=d;l={};if(j&&typeof j===r)for(var p in j)l[p]=j[p];if(h&&typeof h===r)for(var q in h)l.flashvars=typeof l.flashvars!=i?l.flashvars+("&"+q+"="+h[q]):q+"="+h[q];if(z(g))p=J(e,l,b),e.id== +b&&t(b,!0),n.success=!0,n.ref=p;else{if(o&&F()){e.data=o;G(e,l,b,m);return}t(b,!0)}m&&m(n)})):m&&m(n)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:z,createSWF:function(a,b,c){if(e.w3)return J(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:L,addLoadEvent:M,getQueryParamValue:function(a){var b= +d.location.search||d.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(null==a)return S(b);for(var b=b.split("&"),c=0;c + + + + Output for Flash — CKEditor Sample + + + + + + + + + + + + +

    + CKEditor Samples » Producing Flash Compliant HTML Output +

    +
    +

    + This sample shows how to configure CKEditor to output + HTML code that can be used with + + Adobe Flash. + The code will contain a subset of standard HTML elements like <b>, + <i>, and <p> as well as HTML attributes. +

    +

    + To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard + JavaScript call, and define CKEditor features to use HTML elements and attributes. +

    +

    + For details on how to create this setup check the source code of this sample page. +

    +
    +

    + To see how it works, create some content in the editing area of CKEditor on the left + and send it to the Flash object on the right side of the page by using the + Send to Flash button. +

    + + + + + +
    + + +

    + +

    +
    +
    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/outputhtml.html b/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/outputhtml.html new file mode 100644 index 0000000..a72d04e --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/plugins/htmlwriter/outputhtml.html @@ -0,0 +1,221 @@ + + + + + HTML Compliant Output — CKEditor Sample + + + + + + + + + + +

    + CKEditor Samples » Producing HTML Compliant Output +

    +
    +

    + This sample shows how to configure CKEditor to output valid + HTML 4.01 code. + Traditional HTML elements like <b>, + <i>, and <font> are used in place of + <strong>, <em>, and CSS styles. +

    +

    + To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard + JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes. +

    +

    + A snippet of the configuration code can be seen below; check the source of this page for + full definition: +

    +
    +CKEDITOR.replace( 'textarea_id', {
    +	coreStyles_bold: { element: 'b' },
    +	coreStyles_italic: { element: 'i' },
    +
    +	fontSize_style: {
    +		element: 'font',
    +		attributes: { 'size': '#(size)' }
    +	}
    +
    +	...
    +});
    +
    +
    +

    + + + +

    +

    + +

    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/plugins/magicline/magicline.html b/protected/extensions/ckeditor/assets/samples/plugins/magicline/magicline.html new file mode 100644 index 0000000..2815fee --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/plugins/magicline/magicline.html @@ -0,0 +1,207 @@ + + + + + Using Magicline plugin — CKEditor Sample + + + + + + + + + +

    + CKEditor Samples » Using Magicline plugin +

    +
    +

    + This sample shows the advantages of Magicline plugin + which is to enhance the editing process. Thanks to this plugin, + a number of difficult focus spaces which are inaccessible due to + browser issues can now be focused. +

    +

    + Magicline plugin shows a red line with a handler + which, when clicked, inserts a paragraph and allows typing. To see this, + focus an editor and move your mouse above the focus space you want + to access. The plugin is enabled by default so no additional + configuration is necessary. +

    +
    +
    + +
    +

    + This editor uses a default Magicline setup. +

    +
    + + +
    +
    +
    + +
    +

    + This editor is using a blue line. +

    +
    +CKEDITOR.replace( 'editor2', {
    +	magicline_color: 'blue'
    +});
    +
    + + +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/plugins/toolbar/toolbar.html b/protected/extensions/ckeditor/assets/samples/plugins/toolbar/toolbar.html new file mode 100644 index 0000000..0ba1665 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/plugins/toolbar/toolbar.html @@ -0,0 +1,232 @@ + + + + + Toolbar Configuration — CKEditor Sample + + + + + + + + + +

    + CKEditor Samples » Toolbar Configuration +

    +
    +

    + This sample page demonstrates editor with loaded full toolbar (all registered buttons) and, if + current editor's configuration modifies default settings, also editor with modified toolbar. +

    + +

    Since CKEditor 4 there are two ways to configure toolbar buttons.

    + +

    By config.toolbar

    + +

    + You can explicitly define which buttons are displayed in which groups and in which order. + This is the more precise setting, but less flexible. If newly added plugin adds its + own button you'll have to add it manually to your config.toolbar setting as well. +

    + +

    To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:

    + +
    +CKEDITOR.replace( 'textarea_id', {
    +	toolbar: [
    +		{ name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] },	// Defines toolbar group with name (used to create voice label) and items in 3 subgroups.
    +		[ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ],			// Defines toolbar group without name.
    +		'/',																					// Line break - next group will be placed in new line.
    +		{ name: 'basicstyles', items: [ 'Bold', 'Italic' ] }
    +	]
    +});
    + +

    By config.toolbarGroups

    + +

    + You can define which groups of buttons (like e.g. basicstyles, clipboard + and forms) are displayed and in which order. Registered buttons are associated + with toolbar groups by toolbar property in their definition. + This setting's advantage is that you don't have to modify toolbar configuration + when adding/removing plugins which register their own buttons. +

    + +

    To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:

    + +
    +CKEDITOR.replace( 'textarea_id', {
    +	toolbarGroups: [
    +		{ name: 'document',	   groups: [ 'mode', 'document' ] },			// Displays document group with its two subgroups.
    + 		{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },			// Group's name will be used to create voice label.
    + 		'/',																// Line break - next group will be placed in new line.
    + 		{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
    + 		{ name: 'links' }
    +	]
    +
    +	// NOTE: Remember to leave 'toolbar' property with the default value (null).
    +});
    +
    + + + +
    +

    Full toolbar configuration

    +

    Below you can see editor with full toolbar, generated automatically by the editor.

    +

    + Note: To create editor instance with full toolbar you don't have to set anything. + Just leave toolbar and toolbarGroups with the default, null values. +

    + +
    
    +	
    + + + + + + diff --git a/protected/extensions/ckeditor/assets/samples/plugins/wysiwygarea/fullpage.html b/protected/extensions/ckeditor/assets/samples/plugins/wysiwygarea/fullpage.html new file mode 100644 index 0000000..c14c37a --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/plugins/wysiwygarea/fullpage.html @@ -0,0 +1,77 @@ + + + + + Full Page Editing — CKEditor Sample + + + + + + + + + + +

    + CKEditor Samples » Full Page Editing +

    +
    +

    + This sample shows how to configure CKEditor to edit entire HTML pages, from the + <html> tag to the </html> tag. +

    +

    + The CKEditor instance below is inserted with a JavaScript call using the following code: +

    +
    +CKEDITOR.replace( 'textarea_id', {
    +	fullPage: true,
    +	allowedContent: true
    +});
    +
    +

    + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

    +

    + The allowedContent in the code above is set to true to disable content filtering. + Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations. +

    +
    +
    + + + +

    + +

    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/readonly.html b/protected/extensions/ckeditor/assets/samples/readonly.html new file mode 100644 index 0000000..377bcc7 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/readonly.html @@ -0,0 +1,73 @@ + + + + + Using the CKEditor Read-Only API — CKEditor Sample + + + + + + +

    + CKEditor Samples » Using the CKEditor Read-Only API +

    +
    +

    + This sample shows how to use the + setReadOnly + API to put editor into the read-only state that makes it impossible for users to change the editor contents. +

    +

    + For details on how to create this setup check the source code of this sample page. +

    +
    +
    +

    + +

    +

    + + +

    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/replacebyclass.html b/protected/extensions/ckeditor/assets/samples/replacebyclass.html new file mode 100644 index 0000000..6978034 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/replacebyclass.html @@ -0,0 +1,57 @@ + + + + + Replace Textareas by Class Name — CKEditor Sample + + + + + +

    + CKEditor Samples » Replace Textarea Elements by Class Name +

    +
    +

    + This sample shows how to automatically replace all <textarea> elements + of a given class with a CKEditor instance. +

    +

    + To replace a <textarea> element, simply assign it the ckeditor + class, as in the code below: +

    +
    +<textarea class="ckeditor" name="editor1"></textarea>
    +
    +

    + Note that other <textarea> attributes (like id or name) need to be adjusted to your document. +

    +
    +
    +

    + + +

    +

    + +

    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/replacebycode.html b/protected/extensions/ckeditor/assets/samples/replacebycode.html new file mode 100644 index 0000000..0fd0636 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/replacebycode.html @@ -0,0 +1,56 @@ + + + + + Replace Textarea by Code — CKEditor Sample + + + + + +

    + CKEditor Samples » Replace Textarea Elements Using JavaScript Code +

    +
    +
    +

    + This editor is using an <iframe> element-based editing area, provided by the Wysiwygarea plugin. +

    +
    +CKEDITOR.replace( 'textarea_id' )
    +
    +
    + + +

    + +

    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/sample.css b/protected/extensions/ckeditor/assets/samples/sample.css new file mode 100644 index 0000000..8cb9b76 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/sample.css @@ -0,0 +1,339 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ + +html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre +{ + line-height: 1.5em; +} + +body +{ + padding: 10px 30px; +} + +input, textarea, select, option, optgroup, button, td, th +{ + font-size: 100%; +} + +pre, code, kbd, samp, tt +{ + font-family: monospace,monospace; + font-size: 1em; +} + +body { + width: 960px; + margin: 0 auto; +} + +code +{ + background: #f3f3f3; + border: 1px solid #ddd; + padding: 1px 4px; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} + +abbr +{ + border-bottom: 1px dotted #555; + cursor: pointer; +} + +.new +{ + background: #FF7E00; + border: 1px solid #DA8028; + color: #fff; + font-size: 10px; + font-weight: bold; + padding: 1px 4px; + text-shadow: 0 1px 0 #C97626; + text-transform: uppercase; + margin: 0 0 0 3px; + + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; + + -moz-box-shadow: 0 2px 3px 0 #FFA54E inset; + -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset; + box-shadow: 0 2px 3px 0 #FFA54E inset; +} + +h1.samples +{ + color: #0782C1; + font-size: 200%; + font-weight: normal; + margin: 0; + padding: 0; +} + +h1.samples a +{ + color: #0782C1; + text-decoration: none; + border-bottom: 1px dotted #0782C1; +} + +.samples a:hover +{ + border-bottom: 1px dotted #0782C1; +} + +h2.samples +{ + color: #000000; + font-size: 130%; + margin: 15px 0 0 0; + padding: 0; +} + +p, blockquote, address, form, pre, dl, h1.samples, h2.samples +{ + margin-bottom: 15px; +} + +ul.samples +{ + margin-bottom: 15px; +} + +.clear +{ + clear: both; +} + +fieldset +{ + margin: 0; + padding: 10px; +} + +body, input, textarea +{ + color: #333333; + font-family: Arial, Helvetica, sans-serif; +} + +body +{ + font-size: 75%; +} + +a.samples +{ + color: #189DE1; + text-decoration: none; +} + +form +{ + margin: 0; + padding: 0; +} + +pre.samples +{ + background-color: #F7F7F7; + border: 1px solid #D7D7D7; + overflow: auto; + padding: 0.25em; + white-space: pre-wrap; /* CSS 2.1 */ + word-wrap: break-word; /* IE7 */ + -moz-tab-size: 4; + -o-tab-size: 4; + -webkit-tab-size: 4; + tab-size: 4; +} + +#footer +{ + clear: both; + padding-top: 10px; +} + +#footer hr +{ + margin: 10px 0 15px 0; + height: 1px; + border: solid 1px gray; + border-bottom: none; +} + +#footer p +{ + margin: 0 10px 10px 10px; + float: left; +} + +#footer #copy +{ + float: right; +} + +#outputSample +{ + width: 100%; + table-layout: fixed; +} + +#outputSample thead th +{ + color: #dddddd; + background-color: #999999; + padding: 4px; + white-space: nowrap; +} + +#outputSample tbody th +{ + vertical-align: top; + text-align: left; +} + +#outputSample pre +{ + margin: 0; + padding: 0; +} + +.description +{ + border: 1px dotted #B7B7B7; + margin-bottom: 10px; + padding: 10px 10px 0; + overflow: hidden; +} + +label +{ + display: block; + margin-bottom: 6px; +} + +/** + * CKEditor editables are automatically set with the "cke_editable" class + * plus cke_editable_(inline|themed) depending on the editor type. + */ + +/* Style a bit the inline editables. */ +.cke_editable.cke_editable_inline +{ + cursor: pointer; +} + +/* Once an editable element gets focused, the "cke_focus" class is + added to it, so we can style it differently. */ +.cke_editable.cke_editable_inline.cke_focus +{ + box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000; + outline: none; + background: #eee; + cursor: text; +} + +/* Avoid pre-formatted overflows inline editable. */ +.cke_editable_inline pre +{ + white-space: pre-wrap; + word-wrap: break-word; +} + +/** + * Samples index styles. + */ + +.twoColumns, +.twoColumnsLeft, +.twoColumnsRight +{ + overflow: hidden; +} + +.twoColumnsLeft, +.twoColumnsRight +{ + width: 45%; +} + +.twoColumnsLeft +{ + float: left; +} + +.twoColumnsRight +{ + float: right; +} + +dl.samples +{ + padding: 0 0 0 40px; +} +dl.samples > dt +{ + display: list-item; + list-style-type: disc; + list-style-position: outside; + margin: 0 0 3px; +} +dl.samples > dd +{ + margin: 0 0 3px; +} +.warning +{ + color: #ff0000; + background-color: #FFCCBA; + border: 2px dotted #ff0000; + padding: 15px 10px; + margin: 10px 0; +} + +/* Used on inline samples */ + +blockquote +{ + font-style: italic; + font-family: Georgia, Times, "Times New Roman", serif; + padding: 2px 0; + border-style: solid; + border-color: #ccc; + border-width: 0; +} + +.cke_contents_ltr blockquote +{ + padding-left: 20px; + padding-right: 8px; + border-left-width: 5px; +} + +.cke_contents_rtl blockquote +{ + padding-left: 8px; + padding-right: 20px; + border-right-width: 5px; +} + +img.right { + border: 1px solid #ccc; + float: right; + margin-left: 15px; + padding: 5px; +} + +img.left { + border: 1px solid #ccc; + float: left; + margin-right: 15px; + padding: 5px; +} diff --git a/protected/extensions/ckeditor/assets/samples/sample.js b/protected/extensions/ckeditor/assets/samples/sample.js new file mode 100644 index 0000000..79c7679 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/sample.js @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +// Tool scripts for the sample pages. +// This file can be ignored and is not required to make use of CKEditor. + +(function() { + // Check for sample compliance. + CKEDITOR.on( 'instanceReady', function( ev ) { + var editor = ev.editor, + meta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ), + requires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [], + missing = []; + + if ( requires.length ) { + for ( var i = 0; i < requires.length; i++ ) { + if ( !editor.plugins[ requires[ i ] ] ) + missing.push( '' + requires[ i ] + '' ); + } + + if ( missing.length ) { + var warn = CKEDITOR.dom.element.createFromHtml( + '
    ' + + 'To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.' + + '
    ' + ); + warn.insertBefore( editor.container ); + } + } + }); +})(); diff --git a/protected/extensions/ckeditor/assets/samples/sample_posteddata.php b/protected/extensions/ckeditor/assets/samples/sample_posteddata.php new file mode 100644 index 0000000..7d2ff30 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/sample_posteddata.php @@ -0,0 +1,16 @@ +
    +
    +-------------------------------------------------------------------------------------------
    +  CKEditor - Posted Data
    +
    +  We are sorry, but your Web server does not support the PHP language used in this script.
    +
    +  Please note that CKEditor can be used with any other server-side language than just PHP.
    +  To save the content created with CKEditor you need to read the POST data on the server
    +  side and write it to a file or the database.
    +
    +  Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
    +  For licensing, see LICENSE.html or http://ckeditor.com/license
    +-------------------------------------------------------------------------------------------
    +
    +
    */ include "assets/posteddata.php"; ?> diff --git a/protected/extensions/ckeditor/assets/samples/tabindex.html b/protected/extensions/ckeditor/assets/samples/tabindex.html new file mode 100644 index 0000000..7f51881 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/tabindex.html @@ -0,0 +1,75 @@ + + + + + TAB Key-Based Navigation — CKEditor Sample + + + + + + + +

    + CKEditor Samples » TAB Key-Based Navigation +

    +
    +

    + This sample shows how tab key navigation among editor instances is + affected by the tabIndex attribute from + the original page element. Use TAB key to move between the editors. +

    +
    +

    + +

    +
    +

    + +

    +

    + +

    + + + diff --git a/protected/extensions/ckeditor/assets/samples/uicolor.html b/protected/extensions/ckeditor/assets/samples/uicolor.html new file mode 100644 index 0000000..04e197c --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/uicolor.html @@ -0,0 +1,69 @@ + + + + + UI Color Picker — CKEditor Sample + + + + + +

    + CKEditor Samples » UI Color +

    +
    +

    + This sample shows how to automatically replace <textarea> elements + with a CKEditor instance with an option to change the color of its user interface.
    + Note:The UI skin color feature depends on the CKEditor skin + compatibility. The Moono and Kama skins are examples of skins that work with it. +

    +
    +
    +

    + This editor instance has a UI color value defined in configuration to change the skin color, + To specify the color of the user interface, set the uiColor property: +

    +
    +CKEDITOR.replace( 'textarea_id', {
    +	uiColor: '#14B8C4'
    +});
    +

    + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

    +

    + + +

    +

    + +

    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/uilanguages.html b/protected/extensions/ckeditor/assets/samples/uilanguages.html new file mode 100644 index 0000000..b6ba2a0 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/uilanguages.html @@ -0,0 +1,119 @@ + + + + + User Interface Globalization — CKEditor Sample + + + + + + +

    + CKEditor Samples » User Interface Languages +

    +
    +

    + This sample shows how to automatically replace <textarea> elements + with a CKEditor instance with an option to change the language of its user interface. +

    +

    + It pulls the language list from CKEditor _languages.js file that contains the list of supported languages and creates + a drop-down list that lets the user change the UI language. +

    +

    + By default, CKEditor automatically localizes the editor to the language of the user. + The UI language can be controlled with two configuration options: + language and + + defaultLanguage. The defaultLanguage setting specifies the + default CKEditor language to be used when a localization suitable for user's settings is not available. +

    +

    + To specify the user interface language that will be used no matter what language is + specified in user's browser or operating system, set the language property: +

    +
    +CKEDITOR.replace( 'textarea_id', {
    +	// Load the German interface.
    +	language: 'de'
    +});
    +

    + Note that textarea_id in the code above is the id attribute of + the <textarea> element to be replaced. +

    +
    +
    +

    + Available languages ( languages!):
    + +
    + + (You may see strange characters if your system does not support the selected language) + +

    +

    + + +

    +
    + + + diff --git a/protected/extensions/ckeditor/assets/samples/xhtmlstyle.html b/protected/extensions/ckeditor/assets/samples/xhtmlstyle.html new file mode 100644 index 0000000..140c5a7 --- /dev/null +++ b/protected/extensions/ckeditor/assets/samples/xhtmlstyle.html @@ -0,0 +1,231 @@ + + + + + XHTML Compliant Output — CKEditor Sample + + + + + + + +

    + CKEditor Samples » Producing XHTML Compliant Output +

    +
    +

    + This sample shows how to configure CKEditor to output valid + XHTML 1.1 code. + Deprecated elements (<font>, <u>) or attributes + (size, face) will be replaced with XHTML compliant code. +

    +

    + To add a CKEditor instance outputting valid XHTML code, load the editor using a standard + JavaScript call and define CKEditor features to use the XHTML compliant elements and styles. +

    +

    + A snippet of the configuration code can be seen below; check the source of this page for + full definition: +

    +
    +CKEDITOR.replace( 'textarea_id', {
    +	contentsCss: 'assets/outputxhtml.css',
    +
    +	coreStyles_bold: {
    +		element: 'span',
    +		attributes: { 'class': 'Bold' }
    +	},
    +	coreStyles_italic: {
    +		element: 'span',
    +		attributes: { 'class': 'Italic' }
    +	},
    +
    +	...
    +});
    +
    +
    +

    + + + +

    +

    + +

    +
    + + + diff --git a/protected/extensions/ckeditor/assets/skins/moono/dialog.css b/protected/extensions/ckeditor/assets/skins/moono/dialog.css new file mode 100644 index 0000000..8e295fa --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/dialog.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/dialog_ie.css b/protected/extensions/ckeditor/assets/skins/moono/dialog_ie.css new file mode 100644 index 0000000..18987e9 --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/dialog_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/dialog_ie7.css b/protected/extensions/ckeditor/assets/skins/moono/dialog_ie7.css new file mode 100644 index 0000000..05c17e2 --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/dialog_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/dialog_ie8.css b/protected/extensions/ckeditor/assets/skins/moono/dialog_ie8.css new file mode 100644 index 0000000..cc1abfc --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/dialog_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/dialog_iequirks.css b/protected/extensions/ckeditor/assets/skins/moono/dialog_iequirks.css new file mode 100644 index 0000000..25ebae6 --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/dialog_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/dialog_opera.css b/protected/extensions/ckeditor/assets/skins/moono/dialog_opera.css new file mode 100644 index 0000000..7c94f92 --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/dialog_opera.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_footer{display:block;height:38px}.cke_ltr .cke_dialog_footer>*{float:right}.cke_rtl .cke_dialog_footer>*{float:left} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/editor.css b/protected/extensions/ckeditor/assets/skins/moono/editor.css new file mode 100644 index 0000000..257f37d --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/editor.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/editor_gecko.css b/protected/extensions/ckeditor/assets/skins/moono/editor_gecko.css new file mode 100644 index 0000000..32c9ddc --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/editor_gecko.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/editor_ie.css b/protected/extensions/ckeditor/assets/skins/moono/editor_ie.css new file mode 100644 index 0000000..bfa2874 --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/editor_ie.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/editor_ie7.css b/protected/extensions/ckeditor/assets/skins/moono/editor_ie7.css new file mode 100644 index 0000000..f739ddc --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/editor_ie7.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/editor_ie8.css b/protected/extensions/ckeditor/assets/skins/moono/editor_ie8.css new file mode 100644 index 0000000..fe3a687 --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/editor_ie8.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/editor_iequirks.css b/protected/extensions/ckeditor/assets/skins/moono/editor_iequirks.css new file mode 100644 index 0000000..c0a799d --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/editor_iequirks.css @@ -0,0 +1,5 @@ +/* +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.html or http://ckeditor.com/license +*/ +.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__scayt_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__spellchecker_icon{background: url(icons.png) no-repeat 0 -1376px !important;} \ No newline at end of file diff --git a/protected/extensions/ckeditor/assets/skins/moono/icons.png b/protected/extensions/ckeditor/assets/skins/moono/icons.png new file mode 100644 index 0000000..eae75d2 Binary files /dev/null and b/protected/extensions/ckeditor/assets/skins/moono/icons.png differ diff --git a/protected/extensions/ckeditor/assets/skins/moono/images/arrow.png b/protected/extensions/ckeditor/assets/skins/moono/images/arrow.png new file mode 100644 index 0000000..0d1eb39 Binary files /dev/null and b/protected/extensions/ckeditor/assets/skins/moono/images/arrow.png differ diff --git a/protected/extensions/ckeditor/assets/skins/moono/images/close.png b/protected/extensions/ckeditor/assets/skins/moono/images/close.png new file mode 100644 index 0000000..a795fd5 Binary files /dev/null and b/protected/extensions/ckeditor/assets/skins/moono/images/close.png differ diff --git a/protected/extensions/ckeditor/assets/skins/moono/images/mini.png b/protected/extensions/ckeditor/assets/skins/moono/images/mini.png new file mode 100644 index 0000000..3e65bd5 Binary files /dev/null and b/protected/extensions/ckeditor/assets/skins/moono/images/mini.png differ diff --git a/protected/extensions/ckeditor/assets/skins/moono/readme.md b/protected/extensions/ckeditor/assets/skins/moono/readme.md new file mode 100644 index 0000000..f24ec4f --- /dev/null +++ b/protected/extensions/ckeditor/assets/skins/moono/readme.md @@ -0,0 +1,51 @@ +"Moono" Skin +==================== + +This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor +[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by +the CKEditor team. "Moono" is maintained by the core developers. + +For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK) +documentation. + +Features +------------------- +"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency. +It comes with the following features: + +- Chameleon feature with brightness, +- high-contrast compatibility, +- graphics source provided in SVG. + +Directory Structure +------------------- + +CSS parts: +- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance, +- **mainui.css**: the file contains styles of entire editor outline structures, +- **toolbar.css**: the file contains styles of the editor toolbar space (top), +- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar, +- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded +until the first panel open up, +- **elementspath.css**: the file contains styles of the editor elements path bar (bottom), +- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down, +it's not loaded until the first menu open up, +- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open, +- **reset.css**: the file defines the basis of style resets among all editor UI spaces, +- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference, +- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks. + +Other parts: +- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature, +- **icons/**: contains all skin defined icons, +- **images/**: contains a fill general used images, +- **dev/**: contains SVG source of the skin icons. + +License +------- + +Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + +Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html). + +See LICENSE.md for more information. diff --git a/protected/extensions/ckeditor/assets/styles.js b/protected/extensions/ckeditor/assets/styles.js new file mode 100644 index 0000000..5eb7f1c --- /dev/null +++ b/protected/extensions/ckeditor/assets/styles.js @@ -0,0 +1,111 @@ +/** + * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. + * For licensing, see LICENSE.html or http://ckeditor.com/license + */ + +// This file contains style definitions that can be used by CKEditor plugins. +// +// The most common use for it is the "stylescombo" plugin, which shows a combo +// in the editor toolbar, containing all styles. Other plugins instead, like +// the div plugin, use a subset of the styles on their feature. +// +// If you don't have plugins that depend on this file, you can simply ignore it. +// Otherwise it is strongly recommended to customize this file to match your +// website requirements and design properly. + +CKEDITOR.stylesSet.add( 'default', [ + /* Block Styles */ + + // These styles are already available in the "Format" combo ("format" plugin), + // so they are not needed here by default. You may enable them to avoid + // placing the "Format" combo in the toolbar, maintaining the same features. + /* + { name: 'Paragraph', element: 'p' }, + { name: 'Heading 1', element: 'h1' }, + { name: 'Heading 2', element: 'h2' }, + { name: 'Heading 3', element: 'h3' }, + { name: 'Heading 4', element: 'h4' }, + { name: 'Heading 5', element: 'h5' }, + { name: 'Heading 6', element: 'h6' }, + { name: 'Preformatted Text',element: 'pre' }, + { name: 'Address', element: 'address' }, + */ + + { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } }, + { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } }, + { + name: 'Special Container', + element: 'div', + styles: { + padding: '5px 10px', + background: '#eee', + border: '1px solid #ccc' + } + }, + + /* Inline Styles */ + + // These are core styles available as toolbar buttons. You may opt enabling + // some of them in the Styles combo, removing them from the toolbar. + // (This requires the "stylescombo" plugin) + /* + { name: 'Strong', element: 'strong', overrides: 'b' }, + { name: 'Emphasis', element: 'em' , overrides: 'i' }, + { name: 'Underline', element: 'u' }, + { name: 'Strikethrough', element: 'strike' }, + { name: 'Subscript', element: 'sub' }, + { name: 'Superscript', element: 'sup' }, + */ + + { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } }, + + { name: 'Big', element: 'big' }, + { name: 'Small', element: 'small' }, + { name: 'Typewriter', element: 'tt' }, + + { name: 'Computer Code', element: 'code' }, + { name: 'Keyboard Phrase', element: 'kbd' }, + { name: 'Sample Text', element: 'samp' }, + { name: 'Variable', element: 'var' }, + + { name: 'Deleted Text', element: 'del' }, + { name: 'Inserted Text', element: 'ins' }, + + { name: 'Cited Work', element: 'cite' }, + { name: 'Inline Quotation', element: 'q' }, + + { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } }, + { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } }, + + /* Object Styles */ + + { + name: 'Styled image (left)', + element: 'img', + attributes: { 'class': 'left' } + }, + + { + name: 'Styled image (right)', + element: 'img', + attributes: { 'class': 'right' } + }, + + { + name: 'Compact table', + element: 'table', + attributes: { + cellpadding: '5', + cellspacing: '0', + border: '1', + bordercolor: '#ccc' + }, + styles: { + 'border-collapse': 'collapse' + } + }, + + { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } }, + { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } } +]); + diff --git a/protected/extensions/ckeditor/kcfinder/.htaccess b/protected/extensions/ckeditor/kcfinder/.htaccess new file mode 100644 index 0000000..f7661d0 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/.htaccess @@ -0,0 +1 @@ +allow from all diff --git a/protected/extensions/ckeditor/kcfinder/browse.php b/protected/extensions/ckeditor/kcfinder/browse.php new file mode 100644 index 0000000..2e77210 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/browse.php @@ -0,0 +1,19 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +require "core/autoload.php"; +$browser = new browser(); +$browser->action(); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/config.php b/protected/extensions/ckeditor/kcfinder/config.php new file mode 100644 index 0000000..c8b8a7f --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/config.php @@ -0,0 +1,104 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +// IMPORTANT!!! Do not remove uncommented settings in this file even if +// you are using session configuration. +// See http://kcfinder.sunhater.com/install for setting descriptions + +$_CONFIG = array( + + 'disabled' => true, + 'denyZipDownload' => false, + 'denyUpdateCheck' => false, + 'denyExtensionRename' => false, + + 'theme' => "oxygen", + + 'uploadURL' => "upload", + 'uploadDir' => "", + + 'dirPerms' => 0755, + 'filePerms' => 0644, + + 'access' => array( + + 'files' => array( + 'upload' => true, + 'delete' => true, + 'copy' => true, + 'move' => true, + 'rename' => true + ), + + 'dirs' => array( + 'create' => true, + 'delete' => true, + 'rename' => true + ) + ), + + 'deniedExts' => "exe com msi bat php phps phtml php3 php4 cgi pl", + + 'types' => array( + + // CKEditor & FCKEditor types + 'files' => "", + 'flash' => "swf", + 'images' => "*img", + + // TinyMCE types + 'file' => "", + 'media' => "swf flv avi mpg mpeg qt mov wmv asf rm", + 'image' => "*img", + ), + + 'filenameChangeChars' => array(/* + ' ' => "_", + ':' => "." + */), + + 'dirnameChangeChars' => array(/* + ' ' => "_", + ':' => "." + */), + + 'mime_magic' => "", + + 'maxImageWidth' => 0, + 'maxImageHeight' => 0, + + 'thumbWidth' => 100, + 'thumbHeight' => 100, + + 'thumbsDir' => ".thumbs", + + 'jpegQuality' => 90, + + 'cookieDomain' => "", + 'cookiePath' => "", + 'cookiePrefix' => 'KCFINDER_', + + // THE FOLLOWING SETTINGS CANNOT BE OVERRIDED WITH SESSION CONFIGURATION + '_check4htaccess' => true, + //'_tinyMCEPath' => "/tiny_mce", + + '_sessionVar' => &$_SESSION['KCFINDER'], + //'_sessionLifetime' => 30, + //'_sessionDir' => "/full/directory/path", + + //'_sessionDomain' => ".mysite.com", + //'_sessionPath' => "/my/path", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/core/.htaccess b/protected/extensions/ckeditor/kcfinder/core/.htaccess new file mode 100644 index 0000000..d61b264 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/core/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + diff --git a/protected/extensions/ckeditor/kcfinder/core/autoload.php b/protected/extensions/ckeditor/kcfinder/core/autoload.php new file mode 100644 index 0000000..4e446b0 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/core/autoload.php @@ -0,0 +1,201 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + * + * This file is the place you can put any code (at the end of the file), + * which will be executed before any other. Suitable for: + * 1. Set PHP ini settings using ini_set() + * 2. Custom session save handler with session_set_save_handler() + * 3. Any custom integration code. If you use any global variables + * here, they can be accessed in config.php via $GLOBALS array. + * It's recommended to use constants instead. + */ + + +// PHP VERSION CHECK +if (substr(PHP_VERSION, 0, strpos(PHP_VERSION, '.')) < 5) + die("You are using PHP " . PHP_VERSION . " when KCFinder require at least version 5! Some systems has an option to change the active PHP version. Please refer to your hosting provider or upgrade your PHP distribution."); + + +// GD EXTENSION CHECK +if (!function_exists("imagecopyresampled")) + die("The GD PHP extension is not available! It's required to run KCFinder."); + + +// SAFE MODE CHECK +if (ini_get("safe_mode")) + die("The \"safe_mode\" PHP ini setting is turned on! You cannot run KCFinder in safe mode."); + + +// CMS INTEGRATION +if (isset($_GET['cms'])) { + switch ($_GET['cms']) { + case "drupal": require "integration/drupal.php"; + } +} + + +// MAGIC AUTOLOAD CLASSES FUNCTION +function __autoload($class) { + if ($class == "uploader") + require "core/uploader.php"; + elseif ($class == "browser") + require "core/browser.php"; + elseif (file_exists("core/types/$class.php")) + require "core/types/$class.php"; + elseif (file_exists("lib/class_$class.php")) + require "lib/class_$class.php"; + elseif (file_exists("lib/helper_$class.php")) + require "lib/helper_$class.php"; +} + + +// json_encode() IMPLEMENTATION IF JSON EXTENSION IS MISSING +if (!function_exists("json_encode")) { + + function kcfinder_json_string_encode($string) { + return '"' . + str_replace('/', "\\/", + str_replace("\t", "\\t", + str_replace("\r", "\\r", + str_replace("\n", "\\n", + str_replace('"', "\\\"", + str_replace("\\", "\\\\", + $string)))))) . '"'; + } + + function json_encode($data) { + + if (is_array($data)) { + $ret = array(); + + // OBJECT + if (array_keys($data) !== range(0, count($data) - 1)) { + foreach ($data as $key => $val) + $ret[] = kcfinder_json_string_encode($key) . ':' . json_encode($val); + return "{" . implode(",", $ret) . "}"; + + // ARRAY + } else { + foreach ($data as $val) + $ret[] = json_encode($val); + return "[" . implode(",", $ret) . "]"; + } + + // BOOLEAN OR NULL + } elseif (is_bool($data) || ($data === null)) + return ($data === null) + ? "null" + : ($data ? "true" : "false"); + + // FLOAT + elseif (is_float($data)) + return rtrim(rtrim(number_format($data, 14, ".", ""), "0"), "."); + + // INTEGER + elseif (is_int($data)) + return $data; + + // STRING + return kcfinder_json_string_encode($data); + } +} + + +// CUSTOM SESSION SAVE HANDLER CLASS EXAMPLE +// +// Uncomment & edit it if the application you want to integrate with, have +// its own session save handler. It's not even needed to save instances of +// this class in variables. Just add a row: +// new SessionSaveHandler(); +// and your handler will rule the sessions ;-) + +/* +class SessionSaveHandler { + protected $savePath; + protected $sessionName; + + public function __construct() { + session_set_save_handler( + array($this, "open"), + array($this, "close"), + array($this, "read"), + array($this, "write"), + array($this, "destroy"), + array($this, "gc") + ); + } + + // Open function, this works like a constructor in classes and is + // executed when the session is being opened. The open function expects + // two parameters, where the first is the save path and the second is the + // session name. + public function open($savePath, $sessionName) { + $this->savePath = $savePath; + $this->sessionName = $sessionName; + return true; + } + + // Close function, this works like a destructor in classes and is + // executed when the session operation is done. + public function close() { + return true; + } + + // Read function must return string value always to make save handler + // work as expected. Return empty string if there is no data to read. + // Return values from other handlers are converted to boolean expression. + // TRUE for success, FALSE for failure. + public function read($id) { + $file = $this->savePath . "/sess_$id"; + return (string) @file_get_contents($file); + } + + // Write function that is called when session data is to be saved. This + // function expects two parameters: an identifier and the data associated + // with it. + public function write($id, $data) { + $file = $this->savePath . "/sess_$id"; + if (false !== ($fp = @fopen($file, "w"))) { + $return = fwrite($fp, $data); + fclose($fp); + return $return; + } else + return false; + } + + // The destroy handler, this is executed when a session is destroyed with + // session_destroy() and takes the session id as its only parameter. + public function destroy($id) { + $file = $this->savePath . "/sess_$id"; + return @unlink($file); + } + + // The garbage collector, this is executed when the session garbage + // collector is executed and takes the max session lifetime as its only + // parameter. + public function gc($maxlifetime) { + foreach (glob($this->savePath . "/sess_*") as $file) + if (filemtime($file) + $maxlifetime < time()) + @unlink($file); + return true; + } +} + +new SessionSaveHandler(); + +*/ + + +// PUT YOUR ADDITIONAL CODE HERE + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/core/browser.php b/protected/extensions/ckeditor/kcfinder/core/browser.php new file mode 100644 index 0000000..6b76d0c --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/core/browser.php @@ -0,0 +1,873 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class browser extends uploader { + protected $action; + protected $thumbsDir; + protected $thumbsTypeDir; + + public function __construct() { + parent::__construct(); + + if (isset($this->post['dir'])) { + $dir = $this->checkInputDir($this->post['dir'], true, false); + if ($dir === false) unset($this->post['dir']); + $this->post['dir'] = $dir; + } + + if (isset($this->get['dir'])) { + $dir = $this->checkInputDir($this->get['dir'], true, false); + if ($dir === false) unset($this->get['dir']); + $this->get['dir'] = $dir; + } + + $thumbsDir = $this->config['uploadDir'] . "/" . $this->config['thumbsDir']; + if (( + !is_dir($thumbsDir) && + !@mkdir($thumbsDir, $this->config['dirPerms']) + ) || + + !is_readable($thumbsDir) || + !dir::isWritable($thumbsDir) || + ( + !is_dir("$thumbsDir/{$this->type}") && + !@mkdir("$thumbsDir/{$this->type}", $this->config['dirPerms']) + ) + ) + $this->errorMsg("Cannot access or create thumbnails folder."); + + $this->thumbsDir = $thumbsDir; + $this->thumbsTypeDir = "$thumbsDir/{$this->type}"; + + // Remove temporary zip downloads if exists + $files = dir::content($this->config['uploadDir'], array( + 'types' => "file", + 'pattern' => '/^.*\.zip$/i' + )); + + if (is_array($files) && count($files)) { + $time = time(); + foreach ($files as $file) + if (is_file($file) && ($time - filemtime($file) > 3600)) + unlink($file); + } + + if (isset($this->get['theme']) && + ($this->get['theme'] == basename($this->get['theme'])) && + is_dir("themes/{$this->get['theme']}") + ) + $this->config['theme'] = $this->get['theme']; + } + + public function action() { + $act = isset($this->get['act']) ? $this->get['act'] : "browser"; + if (!method_exists($this, "act_$act")) + $act = "browser"; + $this->action = $act; + $method = "act_$act"; + + if ($this->config['disabled']) { + $message = $this->label("You don't have permissions to browse server."); + if (in_array($act, array("browser", "upload")) || + (substr($act, 0, 8) == "download") + ) + $this->backMsg($message); + else { + header("Content-Type: text/plain; charset={$this->charset}"); + die(json_encode(array('error' => $message))); + } + } + + if (!isset($this->session['dir'])) + $this->session['dir'] = $this->type; + else { + $type = $this->getTypeFromPath($this->session['dir']); + $dir = $this->config['uploadDir'] . "/" . $this->session['dir']; + if (($type != $this->type) || !is_dir($dir) || !is_readable($dir)) + $this->session['dir'] = $this->type; + } + $this->session['dir'] = path::normalize($this->session['dir']); + + if ($act == "browser") { + header("X-UA-Compatible: chrome=1"); + header("Content-Type: text/html; charset={$this->charset}"); + } elseif ( + (substr($act, 0, 8) != "download") && + !in_array($act, array("thumb", "upload")) + ) + header("Content-Type: text/plain; charset={$this->charset}"); + + $return = $this->$method(); + echo ($return === true) + ? '{}' + : $return; + } + + protected function act_browser() { + if (isset($this->get['dir']) && + is_dir("{$this->typeDir}/{$this->get['dir']}") && + is_readable("{$this->typeDir}/{$this->get['dir']}") + ) + $this->session['dir'] = path::normalize("{$this->type}/{$this->get['dir']}"); + + return $this->output(); + } + + protected function act_init() { + $tree = $this->getDirInfo($this->typeDir); + $tree['dirs'] = $this->getTree($this->session['dir']); + if (!is_array($tree['dirs']) || !count($tree['dirs'])) + unset($tree['dirs']); + $files = $this->getFiles($this->session['dir']); + $dirWritable = dir::isWritable("{$this->config['uploadDir']}/{$this->session['dir']}"); + $data = array( + 'tree' => &$tree, + 'files' => &$files, + 'dirWritable' => $dirWritable + ); + return json_encode($data); + } + + protected function act_thumb() { + $this->getDir($this->get['dir'], true); + if (!isset($this->get['file']) || !isset($this->get['dir'])) + $this->sendDefaultThumb(); + $file = $this->get['file']; + if (basename($file) != $file) + $this->sendDefaultThumb(); + $file = "{$this->thumbsDir}/{$this->type}/{$this->get['dir']}/$file"; + if (!is_file($file) || !is_readable($file)) { + $file = "{$this->config['uploadDir']}/{$this->type}/{$this->get['dir']}/" . basename($file); + if (!is_file($file) || !is_readable($file)) + $this->sendDefaultThumb($file); + $image = new gd($file); + if ($image->init_error) + $this->sendDefaultThumb($file); + $browsable = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG); + if (in_array($image->type, $browsable) && + ($image->get_width() <= $this->config['thumbWidth']) && + ($image->get_height() <= $this->config['thumbHeight']) + ) { + $type = + ($image->type == IMAGETYPE_GIF) ? "gif" : ( + ($image->type == IMAGETYPE_PNG) ? "png" : "jpeg"); + $type = "image/$type"; + httpCache::file($file, $type); + } else + $this->sendDefaultThumb($file); + } + httpCache::file($file, "image/jpeg"); + } + + protected function act_expand() { + return json_encode(array('dirs' => $this->getDirs($this->postDir()))); + } + + protected function act_chDir() { + $this->postDir(); // Just for existing check + $this->session['dir'] = $this->type . "/" . $this->post['dir']; + $dirWritable = dir::isWritable("{$this->config['uploadDir']}/{$this->session['dir']}"); + return json_encode(array( + 'files' => $this->getFiles($this->session['dir']), + 'dirWritable' => $dirWritable + )); + } + + protected function act_newDir() { + if (!$this->config['access']['dirs']['create'] || + !isset($this->post['dir']) || + !isset($this->post['newDir']) + ) + $this->errorMsg("Unknown error."); + + $dir = $this->postDir(); + $newDir = $this->normalizeDirname(trim($this->post['newDir'])); + if (!strlen($newDir)) + $this->errorMsg("Please enter new folder name."); + if (preg_match('/[\/\\\\]/s', $newDir)) + $this->errorMsg("Unallowable characters in folder name."); + if (substr($newDir, 0, 1) == ".") + $this->errorMsg("Folder name shouldn't begins with '.'"); + if (file_exists("$dir/$newDir")) + $this->errorMsg("A file or folder with that name already exists."); + if (!@mkdir("$dir/$newDir", $this->config['dirPerms'])) + $this->errorMsg("Cannot create {dir} folder.", array('dir' => $newDir)); + return true; + } + + protected function act_renameDir() { + if (!$this->config['access']['dirs']['rename'] || + !isset($this->post['dir']) || + !isset($this->post['newName']) + ) + $this->errorMsg("Unknown error."); + + $dir = $this->postDir(); + $newName = $this->normalizeDirname(trim($this->post['newName'])); + if (!strlen($newName)) + $this->errorMsg("Please enter new folder name."); + if (preg_match('/[\/\\\\]/s', $newName)) + $this->errorMsg("Unallowable characters in folder name."); + if (substr($newName, 0, 1) == ".") + $this->errorMsg("Folder name shouldn't begins with '.'"); + if (!@rename($dir, dirname($dir) . "/$newName")) + $this->errorMsg("Cannot rename the folder."); + $thumbDir = "$this->thumbsTypeDir/{$this->post['dir']}"; + if (is_dir($thumbDir)) + @rename($thumbDir, dirname($thumbDir) . "/$newName"); + return json_encode(array('name' => $newName)); + } + + protected function act_deleteDir() { + if (!$this->config['access']['dirs']['delete'] || + !isset($this->post['dir']) || + !strlen(trim($this->post['dir'])) + ) + $this->errorMsg("Unknown error."); + + $dir = $this->postDir(); + + if (!dir::isWritable($dir)) + $this->errorMsg("Cannot delete the folder."); + $result = !dir::prune($dir, false); + if (is_array($result) && count($result)) + $this->errorMsg("Failed to delete {count} files/folders.", + array('count' => count($result))); + $thumbDir = "$this->thumbsTypeDir/{$this->post['dir']}"; + if (is_dir($thumbDir)) dir::prune($thumbDir); + return true; + } + + protected function act_upload() { + if (!$this->config['access']['files']['upload'] || + !isset($this->post['dir']) + ) + $this->errorMsg("Unknown error."); + + $dir = $this->postDir(); + + if (!dir::isWritable($dir)) + $this->errorMsg("Cannot access or write to upload folder."); + + if (is_array($this->file['name'])) { + $return = array(); + foreach ($this->file['name'] as $i => $name) { + $return[] = $this->moveUploadFile(array( + 'name' => $name, + 'tmp_name' => $this->file['tmp_name'][$i], + 'error' => $this->file['error'][$i] + ), $dir); + } + return implode("\n", $return); + } else + return $this->moveUploadFile($this->file, $dir); + } + + protected function act_download() { + $dir = $this->postDir(); + if (!isset($this->post['dir']) || + !isset($this->post['file']) || + (false === ($file = "$dir/{$this->post['file']}")) || + !file_exists($file) || !is_readable($file) + ) + $this->errorMsg("Unknown error."); + + header("Pragma: public"); + header("Expires: 0"); + header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); + header("Cache-Control: private", false); + header("Content-Type: application/octet-stream"); + header('Content-Disposition: attachment; filename="' . str_replace('"', "_", $this->post['file']) . '"'); + header("Content-Transfer-Encoding:­ binary"); + header("Content-Length: " . filesize($file)); + readfile($file); + die; + } + + protected function act_rename() { + $dir = $this->postDir(); + if (!$this->config['access']['files']['rename'] || + !isset($this->post['dir']) || + !isset($this->post['file']) || + !isset($this->post['newName']) || + (false === ($file = "$dir/{$this->post['file']}")) || + !file_exists($file) || !is_readable($file) || !file::isWritable($file) + ) + $this->errorMsg("Unknown error."); + + if (isset($this->config['denyExtensionRename']) && + $this->config['denyExtensionRename'] && + (file::getExtension($this->post['file'], true) !== + file::getExtension($this->post['newName'], true) + ) + ) + $this->errorMsg("You cannot rename the extension of files!"); + + $newName = $this->normalizeFilename(trim($this->post['newName'])); + if (!strlen($newName)) + $this->errorMsg("Please enter new file name."); + if (preg_match('/[\/\\\\]/s', $newName)) + $this->errorMsg("Unallowable characters in file name."); + if (substr($newName, 0, 1) == ".") + $this->errorMsg("File name shouldn't begins with '.'"); + $newName = "$dir/$newName"; + if (file_exists($newName)) + $this->errorMsg("A file or folder with that name already exists."); + $ext = file::getExtension($newName); + if (!$this->validateExtension($ext, $this->type)) + $this->errorMsg("Denied file extension."); + if (!@rename($file, $newName)) + $this->errorMsg("Unknown error."); + + $thumbDir = "{$this->thumbsTypeDir}/{$this->post['dir']}"; + $thumbFile = "$thumbDir/{$this->post['file']}"; + + if (file_exists($thumbFile)) + @rename($thumbFile, "$thumbDir/" . basename($newName)); + return true; + } + + protected function act_delete() { + $dir = $this->postDir(); + if (!$this->config['access']['files']['delete'] || + !isset($this->post['dir']) || + !isset($this->post['file']) || + (false === ($file = "$dir/{$this->post['file']}")) || + !file_exists($file) || !is_readable($file) || !file::isWritable($file) || + !@unlink($file) + ) + $this->errorMsg("Unknown error."); + + $thumb = "{$this->thumbsTypeDir}/{$this->post['dir']}/{$this->post['file']}"; + if (file_exists($thumb)) @unlink($thumb); + return true; + } + + protected function act_cp_cbd() { + $dir = $this->postDir(); + if (!$this->config['access']['files']['copy'] || + !isset($this->post['dir']) || + !is_dir($dir) || !is_readable($dir) || !dir::isWritable($dir) || + !isset($this->post['files']) || !is_array($this->post['files']) || + !count($this->post['files']) + ) + $this->errorMsg("Unknown error."); + + $error = array(); + foreach($this->post['files'] as $file) { + $file = path::normalize($file); + if (substr($file, 0, 1) == ".") continue; + $type = explode("/", $file); + $type = $type[0]; + if ($type != $this->type) continue; + $path = "{$this->config['uploadDir']}/$file"; + $base = basename($file); + $replace = array('file' => $base); + $ext = file::getExtension($base); + if (!file_exists($path)) + $error[] = $this->label("The file '{file}' does not exist.", $replace); + elseif (substr($base, 0, 1) == ".") + $error[] = "$base: " . $this->label("File name shouldn't begins with '.'"); + elseif (!$this->validateExtension($ext, $type)) + $error[] = "$base: " . $this->label("Denied file extension."); + elseif (file_exists("$dir/$base")) + $error[] = "$base: " . $this->label("A file or folder with that name already exists."); + elseif (!is_readable($path) || !is_file($path)) + $error[] = $this->label("Cannot read '{file}'.", $replace); + elseif (!@copy($path, "$dir/$base")) + $error[] = $this->label("Cannot copy '{file}'.", $replace); + else { + if (function_exists("chmod")) + @chmod("$dir/$base", $this->config['filePerms']); + $fromThumb = "{$this->thumbsDir}/$file"; + if (is_file($fromThumb) && is_readable($fromThumb)) { + $toThumb = "{$this->thumbsTypeDir}/{$this->post['dir']}"; + if (!is_dir($toThumb)) + @mkdir($toThumb, $this->config['dirPerms'], true); + $toThumb .= "/$base"; + @copy($fromThumb, $toThumb); + } + } + } + if (count($error)) + return json_encode(array('error' => $error)); + return true; + } + + protected function act_mv_cbd() { + $dir = $this->postDir(); + if (!$this->config['access']['files']['move'] || + !isset($this->post['dir']) || + !is_dir($dir) || !is_readable($dir) || !dir::isWritable($dir) || + !isset($this->post['files']) || !is_array($this->post['files']) || + !count($this->post['files']) + ) + $this->errorMsg("Unknown error."); + + $error = array(); + foreach($this->post['files'] as $file) { + $file = path::normalize($file); + if (substr($file, 0, 1) == ".") continue; + $type = explode("/", $file); + $type = $type[0]; + if ($type != $this->type) continue; + $path = "{$this->config['uploadDir']}/$file"; + $base = basename($file); + $replace = array('file' => $base); + $ext = file::getExtension($base); + if (!file_exists($path)) + $error[] = $this->label("The file '{file}' does not exist.", $replace); + elseif (substr($base, 0, 1) == ".") + $error[] = "$base: " . $this->label("File name shouldn't begins with '.'"); + elseif (!$this->validateExtension($ext, $type)) + $error[] = "$base: " . $this->label("Denied file extension."); + elseif (file_exists("$dir/$base")) + $error[] = "$base: " . $this->label("A file or folder with that name already exists."); + elseif (!is_readable($path) || !is_file($path)) + $error[] = $this->label("Cannot read '{file}'.", $replace); + elseif (!file::isWritable($path) || !@rename($path, "$dir/$base")) + $error[] = $this->label("Cannot move '{file}'.", $replace); + else { + if (function_exists("chmod")) + @chmod("$dir/$base", $this->config['filePerms']); + $fromThumb = "{$this->thumbsDir}/$file"; + if (is_file($fromThumb) && is_readable($fromThumb)) { + $toThumb = "{$this->thumbsTypeDir}/{$this->post['dir']}"; + if (!is_dir($toThumb)) + @mkdir($toThumb, $this->config['dirPerms'], true); + $toThumb .= "/$base"; + @rename($fromThumb, $toThumb); + } + } + } + if (count($error)) + return json_encode(array('error' => $error)); + return true; + } + + protected function act_rm_cbd() { + if (!$this->config['access']['files']['delete'] || + !isset($this->post['files']) || + !is_array($this->post['files']) || + !count($this->post['files']) + ) + $this->errorMsg("Unknown error."); + + $error = array(); + foreach($this->post['files'] as $file) { + $file = path::normalize($file); + if (substr($file, 0, 1) == ".") continue; + $type = explode("/", $file); + $type = $type[0]; + if ($type != $this->type) continue; + $path = "{$this->config['uploadDir']}/$file"; + $base = basename($file); + $replace = array('file' => $base); + if (!is_file($path)) + $error[] = $this->label("The file '{file}' does not exist.", $replace); + elseif (!@unlink($path)) + $error[] = $this->label("Cannot delete '{file}'.", $replace); + else { + $thumb = "{$this->thumbsDir}/$file"; + if (is_file($thumb)) @unlink($thumb); + } + } + if (count($error)) + return json_encode(array('error' => $error)); + return true; + } + + protected function act_downloadDir() { + $dir = $this->postDir(); + if (!isset($this->post['dir']) || $this->config['denyZipDownload']) + $this->errorMsg("Unknown error."); + $filename = basename($dir) . ".zip"; + do { + $file = md5(time() . session_id()); + $file = "{$this->config['uploadDir']}/$file.zip"; + } while (file_exists($file)); + new zipFolder($file, $dir); + header("Content-Type: application/x-zip"); + header('Content-Disposition: attachment; filename="' . str_replace('"', "_", $filename) . '"'); + header("Content-Length: " . filesize($file)); + readfile($file); + unlink($file); + die; + } + + protected function act_downloadSelected() { + $dir = $this->postDir(); + if (!isset($this->post['dir']) || + !isset($this->post['files']) || + !is_array($this->post['files']) || + $this->config['denyZipDownload'] + ) + $this->errorMsg("Unknown error."); + + $zipFiles = array(); + foreach ($this->post['files'] as $file) { + $file = path::normalize($file); + if ((substr($file, 0, 1) == ".") || (strpos($file, '/') !== false)) + continue; + $file = "$dir/$file"; + if (!is_file($file) || !is_readable($file)) + continue; + $zipFiles[] = $file; + } + + do { + $file = md5(time() . session_id()); + $file = "{$this->config['uploadDir']}/$file.zip"; + } while (file_exists($file)); + + $zip = new ZipArchive(); + $res = $zip->open($file, ZipArchive::CREATE); + if ($res === TRUE) { + foreach ($zipFiles as $cfile) + $zip->addFile($cfile, basename($cfile)); + $zip->close(); + } + header("Content-Type: application/x-zip"); + header('Content-Disposition: attachment; filename="selected_files_' . basename($file) . '"'); + header("Content-Length: " . filesize($file)); + readfile($file); + unlink($file); + die; + } + + protected function act_downloadClipboard() { + if (!isset($this->post['files']) || + !is_array($this->post['files']) || + $this->config['denyZipDownload'] + ) + $this->errorMsg("Unknown error."); + + $zipFiles = array(); + foreach ($this->post['files'] as $file) { + $file = path::normalize($file); + if ((substr($file, 0, 1) == ".")) + continue; + $type = explode("/", $file); + $type = $type[0]; + if ($type != $this->type) + continue; + $file = $this->config['uploadDir'] . "/$file"; + if (!is_file($file) || !is_readable($file)) + continue; + $zipFiles[] = $file; + } + + do { + $file = md5(time() . session_id()); + $file = "{$this->config['uploadDir']}/$file.zip"; + } while (file_exists($file)); + + $zip = new ZipArchive(); + $res = $zip->open($file, ZipArchive::CREATE); + if ($res === TRUE) { + foreach ($zipFiles as $cfile) + $zip->addFile($cfile, basename($cfile)); + $zip->close(); + } + header("Content-Type: application/x-zip"); + header('Content-Disposition: attachment; filename="clipboard_' . basename($file) . '"'); + header("Content-Length: " . filesize($file)); + readfile($file); + unlink($file); + die; + } + + protected function act_check4Update() { + if ($this->config['denyUpdateCheck']) + return json_encode(array('version' => false)); + + // Caching HTTP request for 6 hours + if (isset($this->session['checkVersion']) && + isset($this->session['checkVersionTime']) && + ((time() - $this->session['checkVersionTime']) < 21600) + ) + return json_encode(array('version' => $this->session['checkVersion'])); + + $protocol = "http"; + $host = "kcfinder.sunhater.com"; + $port = 80; + $path = "/checkVersion.php"; + + $url = "$protocol://$host:$port$path"; + $pattern = '/^\d+\.\d+$/'; + $responsePattern = '/^[A-Z]+\/\d+\.\d+\s+\d+\s+OK\s*([a-zA-Z0-9\-]+\:\s*[^\n]*\n)*\s*(.*)\s*$/'; + + // file_get_contents() + if (ini_get("allow_url_fopen") && + (false !== ($ver = file_get_contents($url))) && + preg_match($pattern, $ver) + + // HTTP extension + ) {} elseif ( + function_exists("http_get") && + (false !== ($ver = @http_get($url))) && + ( + ( + preg_match($responsePattern, $ver, $match) && + false !== ($ver = $match[2]) + ) || true + ) && + preg_match($pattern, $ver) + + // Curl extension + ) {} elseif ( + function_exists("curl_init") && + (false !== ( $curl = @curl_init($url) )) && + ( @ob_start() || (@curl_close($curl) && false)) && + ( @curl_exec($curl) || (@curl_close($curl) && false)) && + ((false !== ( $ver = @ob_get_clean() )) || (@curl_close($curl) && false)) && + ( @curl_close($curl) || true ) && + preg_match($pattern, $ver) + + // Socket extension + ) {} elseif (function_exists('socket_create')) { + $cmd = + "GET $path " . strtoupper($protocol) . "/1.1\r\n" . + "Host: $host\r\n" . + "Connection: Close\r\n\r\n"; + + if ((false !== ( $socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP) )) && + (false !== @socket_connect($socket, $host, $port) ) && + (false !== @socket_write($socket, $cmd, strlen($cmd)) ) && + (false !== ( $ver = @socket_read($socket, 2048) )) && + preg_match($responsePattern, $ver, $match) + ) + $ver = $match[2]; + + if (isset($socket) && is_resource($socket)) + @socket_close($socket); + } + + if (isset($ver) && preg_match($pattern, $ver)) { + $this->session['checkVersion'] = $ver; + $this->session['checkVersionTime'] = time(); + return json_encode(array('version' => $ver)); + } else + return json_encode(array('version' => false)); + } + + protected function moveUploadFile($file, $dir) { + $message = $this->checkUploadedFile($file); + + if ($message !== true) { + if (isset($file['tmp_name'])) + @unlink($file['tmp_name']); + return "{$file['name']}: $message"; + } + + $filename = $this->normalizeFilename($file['name']); + $target = "$dir/" . file::getInexistantFilename($filename, $dir); + + if (!@move_uploaded_file($file['tmp_name'], $target) && + !@rename($file['tmp_name'], $target) && + !@copy($file['tmp_name'], $target) + ) { + @unlink($file['tmp_name']); + return "{$file['name']}: " . $this->label("Cannot move uploaded file to target folder."); + } elseif (function_exists('chmod')) + chmod($target, $this->config['filePerms']); + + $this->makeThumb($target); + return "/" . basename($target); + } + + protected function sendDefaultThumb($file=null) { + if ($file !== null) { + $ext = file::getExtension($file); + $thumb = "themes/{$this->config['theme']}/img/files/big/$ext.png"; + } + if (!isset($thumb) || !file_exists($thumb)) + $thumb = "themes/{$this->config['theme']}/img/files/big/..png"; + header("Content-Type: image/png"); + readfile($thumb); + die; + } + + protected function getFiles($dir) { + $thumbDir = "{$this->config['uploadDir']}/{$this->config['thumbsDir']}/$dir"; + $dir = "{$this->config['uploadDir']}/$dir"; + $return = array(); + $files = dir::content($dir, array('types' => "file")); + if ($files === false) + return $return; + + foreach ($files as $file) { + $size = @getimagesize($file); + if (is_array($size) && count($size)) { + $thumb_file = "$thumbDir/" . basename($file); + if (!is_file($thumb_file)) + $this->makeThumb($file, false); + $smallThumb = + ($size[0] <= $this->config['thumbWidth']) && + ($size[1] <= $this->config['thumbHeight']) && + in_array($size[2], array(IMAGETYPE_GIF, IMAGETYPE_PNG, IMAGETYPE_JPEG)); + } else + $smallThumb = false; + + $stat = stat($file); + if ($stat === false) continue; + $name = basename($file); + $ext = file::getExtension($file); + $bigIcon = file_exists("themes/{$this->config['theme']}/img/files/big/$ext.png"); + $smallIcon = file_exists("themes/{$this->config['theme']}/img/files/small/$ext.png"); + $thumb = file_exists("$thumbDir/$name"); + $return[] = array( + 'name' => stripcslashes($name), + 'size' => $stat['size'], + 'mtime' => $stat['mtime'], + 'date' => @strftime($this->dateTimeSmall, $stat['mtime']), + 'readable' => is_readable($file), + 'writable' => file::isWritable($file), + 'bigIcon' => $bigIcon, + 'smallIcon' => $smallIcon, + 'thumb' => $thumb, + 'smallThumb' => $smallThumb + ); + } + return $return; + } + + protected function getTree($dir, $index=0) { + $path = explode("/", $dir); + + $pdir = ""; + for ($i = 0; ($i <= $index && $i < count($path)); $i++) + $pdir .= "/{$path[$i]}"; + if (strlen($pdir)) + $pdir = substr($pdir, 1); + + $fdir = "{$this->config['uploadDir']}/$pdir"; + + $dirs = $this->getDirs($fdir); + + if (is_array($dirs) && count($dirs) && ($index <= count($path) - 1)) { + + foreach ($dirs as $i => $cdir) { + if ($cdir['hasDirs'] && + ( + ($index == count($path) - 1) || + ($cdir['name'] == $path[$index + 1]) + ) + ) { + $dirs[$i]['dirs'] = $this->getTree($dir, $index + 1); + if (!is_array($dirs[$i]['dirs']) || !count($dirs[$i]['dirs'])) { + unset($dirs[$i]['dirs']); + continue; + } + } + } + } else + return false; + + return $dirs; + } + + protected function postDir($existent=true) { + $dir = $this->typeDir; + if (isset($this->post['dir'])) + $dir .= "/" . $this->post['dir']; + if ($existent && (!is_dir($dir) || !is_readable($dir))) + $this->errorMsg("Inexistant or inaccessible folder."); + return $dir; + } + + protected function getDir($existent=true) { + $dir = $this->typeDir; + if (isset($this->get['dir'])) + $dir .= "/" . $this->get['dir']; + if ($existent && (!is_dir($dir) || !is_readable($dir))) + $this->errorMsg("Inexistant or inaccessible folder."); + return $dir; + } + + protected function getDirs($dir) { + $dirs = dir::content($dir, array('types' => "dir")); + $return = array(); + if (is_array($dirs)) { + $writable = dir::isWritable($dir); + foreach ($dirs as $cdir) { + $info = $this->getDirInfo($cdir); + if ($info === false) continue; + $info['removable'] = $writable && $info['writable']; + $return[] = $info; + } + } + return $return; + } + + protected function getDirInfo($dir, $removable=false) { + if ((substr(basename($dir), 0, 1) == ".") || !is_dir($dir) || !is_readable($dir)) + return false; + $dirs = dir::content($dir, array('types' => "dir")); + if (is_array($dirs)) { + foreach ($dirs as $key => $cdir) + if (substr(basename($cdir), 0, 1) == ".") + unset($dirs[$key]); + $hasDirs = count($dirs) ? true : false; + } else + $hasDirs = false; + + $writable = dir::isWritable($dir); + $info = array( + 'name' => stripslashes(basename($dir)), + 'readable' => is_readable($dir), + 'writable' => $writable, + 'removable' => $removable && $writable && dir::isWritable(dirname($dir)), + 'hasDirs' => $hasDirs + ); + + if ($dir == "{$this->config['uploadDir']}/{$this->session['dir']}") + $info['current'] = true; + + return $info; + } + + protected function output($data=null, $template=null) { + if (!is_array($data)) $data = array(); + if ($template === null) + $template = $this->action; + + if (file_exists("tpl/tpl_$template.php")) { + ob_start(); + $eval = "unset(\$data);unset(\$template);unset(\$eval);"; + $_ = $data; + foreach (array_keys($data) as $key) + if (preg_match('/^[a-z\d_]+$/i', $key)) + $eval .= "\$$key=\$_['$key'];"; + $eval .= "unset(\$_);require \"tpl/tpl_$template.php\";"; + eval($eval); + return ob_get_clean(); + } + + return ""; + } + + protected function errorMsg($message, array $data=null) { + if (in_array($this->action, array("thumb", "upload", "download", "downloadDir"))) + die($this->label($message, $data)); + if (($this->action === null) || ($this->action == "browser")) + $this->backMsg($message, $data); + else { + $message = $this->label($message, $data); + die(json_encode(array('error' => $message))); + } + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/core/types/type_img.php b/protected/extensions/ckeditor/kcfinder/core/types/type_img.php new file mode 100644 index 0000000..c019e35 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/core/types/type_img.php @@ -0,0 +1,25 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class type_img { + + public function checkFile($file, array $config) { + $gd = new gd($file); + if ($gd->init_error) + return "Unknown image format/encoding."; + return true; + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/core/types/type_mime.php b/protected/extensions/ckeditor/kcfinder/core/types/type_mime.php new file mode 100644 index 0000000..9c7895a --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/core/types/type_mime.php @@ -0,0 +1,47 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class type_mime { + + public function checkFile($file, array $config) { + if (!class_exists("finfo")) + return "Fileinfo PECL extension is missing."; + + if (!isset($config['params'])) + return "Undefined MIME types."; + + $finfo = strlen($config['mime_magic']) + ? new finfo(FILEINFO_MIME, $config['mime_magic']) + : new finfo(FILEINFO_MIME); + if (!$finfo) + return "Opening fileinfo database failed."; + + $type = $finfo->file($file); + $type = substr($type, 0, strrpos($type, ";")); + + $mimes = $config['params']; + if (substr($mimes, 0, 1) == "!") { + $mimes = trim(substr($mimes, 1)); + return in_array($type , explode(" ", $mimes)) + ? "You can't upload such files." + : true; + } + + return !in_array($type , explode(" ", $mimes)) + ? "You can't upload such files." + : true; + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/core/uploader.php b/protected/extensions/ckeditor/kcfinder/core/uploader.php new file mode 100644 index 0000000..bf3ad2a --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/core/uploader.php @@ -0,0 +1,650 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class uploader { + +/** Release version */ + const VERSION = "2.51"; + +/** Config session-overrided settings + * @var array */ + protected $config = array(); + +/** Opener applocation properties + * $opener['name'] Got from $_GET['opener']; + * $opener['CKEditor']['funcNum'] CKEditor function number (got from $_GET) + * $opener['TinyMCE'] Boolean + * @var array */ + protected $opener = array(); + +/** Got from $_GET['type'] or first one $config['types'] array key, if inexistant + * @var string */ + protected $type; + +/** Helper property. Local filesystem path to the Type Directory + * Equivalent: $config['uploadDir'] . "/" . $type + * @var string */ + protected $typeDir; + +/** Helper property. Web URL to the Type Directory + * Equivalent: $config['uploadURL'] . "/" . $type + * @var string */ + protected $typeURL; + +/** Linked to $config['types'] + * @var array */ + protected $types = array(); + +/** Settings which can override default settings if exists as keys in $config['types'][$type] array + * @var array */ + protected $typeSettings = array('disabled', 'theme', 'dirPerms', 'filePerms', 'denyZipDownload', 'maxImageWidth', 'maxImageHeight', 'thumbWidth', 'thumbHeight', 'jpegQuality', 'access', 'filenameChangeChars', 'dirnameChangeChars', 'denyExtensionRename', 'deniedExts'); + +/** Got from language file + * @var string */ + protected $charset; + +/** The language got from $_GET['lng'] or $_GET['lang'] or... Please see next property + * @var string */ + protected $lang = 'en'; + +/** Possible language $_GET keys + * @var array */ + protected $langInputNames = array('lang', 'langCode', 'lng', 'language', 'lang_code'); + +/** Uploaded file(s) info. Linked to first $_FILES element + * @var array */ + protected $file; + +/** Next three properties are got from the current language file + * @var string */ + protected $dateTimeFull; // Currently not used + protected $dateTimeMid; // Currently not used + protected $dateTimeSmall; + +/** Contain Specified language labels + * @var array */ + protected $labels = array(); + +/** Contain unprocessed $_GET array. Please use this instead of $_GET + * @var array */ + protected $get; + +/** Contain unprocessed $_POST array. Please use this instead of $_POST + * @var array */ + protected $post; + +/** Contain unprocessed $_COOKIE array. Please use this instead of $_COOKIE + * @var array */ + protected $cookie; + +/** Session array. Please use this property instead of $_SESSION + * @var array */ + protected $session; + +/** CMS integration attribute (got from $_GET['cms']) + * @var string */ + protected $cms = ""; + +/** Magic method which allows read-only access to protected or private class properties + * @param string $property + * @return mixed */ + public function __get($property) { + return property_exists($this, $property) ? $this->$property : null; + } + + public function __construct() { + + // DISABLE MAGIC QUOTES + if (function_exists('set_magic_quotes_runtime')) + @set_magic_quotes_runtime(false); + + // INPUT INIT + $input = new input(); + $this->get = &$input->get; + $this->post = &$input->post; + $this->cookie = &$input->cookie; + + // SET CMS INTEGRATION ATTRIBUTE + if (isset($this->get['cms']) && + in_array($this->get['cms'], array("drupal")) + ) + $this->cms = $this->get['cms']; + + // LINKING UPLOADED FILE + if (count($_FILES)) + $this->file = &$_FILES[key($_FILES)]; + + // LOAD DEFAULT CONFIGURATION + require "config.php"; + + // SETTING UP SESSION + if (isset($_CONFIG['_sessionLifetime'])) + ini_set('session.gc_maxlifetime', $_CONFIG['_sessionLifetime'] * 60); + if (isset($_CONFIG['_sessionDir'])) + ini_set('session.save_path', $_CONFIG['_sessionDir']); + if (isset($_CONFIG['_sessionDomain'])) + ini_set('session.cookie_domain', $_CONFIG['_sessionDomain']); + switch ($this->cms) { + case "drupal": break; + default: session_start(); break; + } + + // RELOAD DEFAULT CONFIGURATION + require "config.php"; + $this->config = $_CONFIG; + + // LOAD SESSION CONFIGURATION IF EXISTS + if (isset($_CONFIG['_sessionVar']) && + is_array($_CONFIG['_sessionVar']) + ) { + foreach ($_CONFIG['_sessionVar'] as $key => $val) + if ((substr($key, 0, 1) != "_") && isset($_CONFIG[$key])) + $this->config[$key] = $val; + if (!isset($this->config['_sessionVar']['self'])) + $this->config['_sessionVar']['self'] = array(); + $this->session = &$this->config['_sessionVar']['self']; + } else + $this->session = &$_SESSION; + + // GET TYPE DIRECTORY + $this->types = &$this->config['types']; + $firstType = array_keys($this->types); + $firstType = $firstType[0]; + $this->type = ( + isset($this->get['type']) && + isset($this->types[$this->get['type']]) + ) + ? $this->get['type'] : $firstType; + + // LOAD TYPE DIRECTORY SPECIFIC CONFIGURATION IF EXISTS + if (is_array($this->types[$this->type])) { + foreach ($this->types[$this->type] as $key => $val) + if (in_array($key, $this->typeSettings)) + $this->config[$key] = $val; + $this->types[$this->type] = isset($this->types[$this->type]['type']) + ? $this->types[$this->type]['type'] : ""; + } + + // COOKIES INIT + $ip = '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'; + $ip = '/^' . implode('\.', array($ip, $ip, $ip, $ip)) . '$/'; + if (preg_match($ip, $_SERVER['HTTP_HOST']) || + preg_match('/^[^\.]+$/', $_SERVER['HTTP_HOST']) + ) + $this->config['cookieDomain'] = ""; + elseif (!strlen($this->config['cookieDomain'])) + $this->config['cookieDomain'] = $_SERVER['HTTP_HOST']; + if (!strlen($this->config['cookiePath'])) + $this->config['cookiePath'] = "/"; + + // UPLOAD FOLDER INIT + + // FULL URL + if (preg_match('/^([a-z]+)\:\/\/([^\/^\:]+)(\:(\d+))?\/(.+)\/?$/', + $this->config['uploadURL'], $patt) + ) { + list($unused, $protocol, $domain, $unused, $port, $path) = $patt; + $path = path::normalize($path); + $this->config['uploadURL'] = "$protocol://$domain" . (strlen($port) ? ":$port" : "") . "/$path"; + $this->config['uploadDir'] = strlen($this->config['uploadDir']) + ? path::normalize($this->config['uploadDir']) + : path::url2fullPath("/$path"); + $this->typeDir = "{$this->config['uploadDir']}/{$this->type}"; + $this->typeURL = "{$this->config['uploadURL']}/{$this->type}"; + + // SITE ROOT + } elseif ($this->config['uploadURL'] == "/") { + $this->config['uploadDir'] = strlen($this->config['uploadDir']) + ? path::normalize($this->config['uploadDir']) + : path::normalize($_SERVER['DOCUMENT_ROOT']); + $this->typeDir = "{$this->config['uploadDir']}/{$this->type}"; + $this->typeURL = "/{$this->type}"; + + // ABSOLUTE & RELATIVE + } else { + $this->config['uploadURL'] = (substr($this->config['uploadURL'], 0, 1) === "/") + ? path::normalize($this->config['uploadURL']) + : path::rel2abs_url($this->config['uploadURL']); + $this->config['uploadDir'] = strlen($this->config['uploadDir']) + ? path::normalize($this->config['uploadDir']) + : path::url2fullPath($this->config['uploadURL']); + $this->typeDir = "{$this->config['uploadDir']}/{$this->type}"; + $this->typeURL = "{$this->config['uploadURL']}/{$this->type}"; + } + if (!is_dir($this->config['uploadDir'])) + @mkdir($this->config['uploadDir'], $this->config['dirPerms']); + + // HOST APPLICATIONS INIT + if (isset($this->get['CKEditorFuncNum'])) + $this->opener['CKEditor']['funcNum'] = $this->get['CKEditorFuncNum']; + if (isset($this->get['opener']) && + (strtolower($this->get['opener']) == "tinymce") && + isset($this->config['_tinyMCEPath']) && + strlen($this->config['_tinyMCEPath']) + ) + $this->opener['TinyMCE'] = true; + + // LOCALIZATION + foreach ($this->langInputNames as $key) + if (isset($this->get[$key]) && + preg_match('/^[a-z][a-z\._\-]*$/i', $this->get[$key]) && + file_exists("lang/" . strtolower($this->get[$key]) . ".php") + ) { + $this->lang = $this->get[$key]; + break; + } + $this->localize($this->lang); + + // CHECK & MAKE DEFAULT .htaccess + if (isset($this->config['_check4htaccess']) && + $this->config['_check4htaccess'] + ) { + $htaccess = "{$this->config['uploadDir']}/.htaccess"; + if (!file_exists($htaccess)) { + if (!@file_put_contents($htaccess, $this->get_htaccess())) + $this->backMsg("Cannot write to upload folder. {$this->config['uploadDir']}"); + } else { + if (false === ($data = @file_get_contents($htaccess))) + $this->backMsg("Cannot read .htaccess"); + if (($data != $this->get_htaccess()) && !@file_put_contents($htaccess, $data)) + $this->backMsg("Incorrect .htaccess file. Cannot rewrite it!"); + } + } + + // CHECK & CREATE UPLOAD FOLDER + if (!is_dir($this->typeDir)) { + if (!mkdir($this->typeDir, $this->config['dirPerms'])) + $this->backMsg("Cannot create {dir} folder.", array('dir' => $this->type)); + } elseif (!is_readable($this->typeDir)) + $this->backMsg("Cannot read upload folder."); + } + + public function upload() { + $config = &$this->config; + $file = &$this->file; + $url = $message = ""; + + if ($config['disabled'] || !$config['access']['files']['upload']) { + if (isset($file['tmp_name'])) @unlink($file['tmp_name']); + $message = $this->label("You don't have permissions to upload files."); + + } elseif (true === ($message = $this->checkUploadedFile())) { + $message = ""; + + $dir = "{$this->typeDir}/"; + if (isset($this->get['dir']) && + (false !== ($gdir = $this->checkInputDir($this->get['dir']))) + ) { + $udir = path::normalize("$dir$gdir"); + if (substr($udir, 0, strlen($dir)) !== $dir) + $message = $this->label("Unknown error."); + else { + $l = strlen($dir); + $dir = "$udir/"; + $udir = substr($udir, $l); + } + } + + if (!strlen($message)) { + if (!is_dir(path::normalize($dir))) + @mkdir(path::normalize($dir), $this->config['dirPerms'], true); + + $filename = $this->normalizeFilename($file['name']); + $target = file::getInexistantFilename($dir . $filename); + + if (!@move_uploaded_file($file['tmp_name'], $target) && + !@rename($file['tmp_name'], $target) && + !@copy($file['tmp_name'], $target) + ) + $message = $this->label("Cannot move uploaded file to target folder."); + else { + if (function_exists('chmod')) + @chmod($target, $this->config['filePerms']); + $this->makeThumb($target); + $url = $this->typeURL; + if (isset($udir)) $url .= "/$udir"; + $url .= "/" . basename($target); + if (preg_match('/^([a-z]+)\:\/\/([^\/^\:]+)(\:(\d+))?\/(.+)$/', $url, $patt)) { + list($unused, $protocol, $domain, $unused, $port, $path) = $patt; + $base = "$protocol://$domain" . (strlen($port) ? ":$port" : "") . "/"; + $url = $base . path::urlPathEncode($path); + } else + $url = path::urlPathEncode($url); + } + } + } + + if (strlen($message) && + isset($this->file['tmp_name']) && + file_exists($this->file['tmp_name']) + ) + @unlink($this->file['tmp_name']); + + if (strlen($message) && method_exists($this, 'errorMsg')) + $this->errorMsg($message); + $this->callBack($url, $message); + } + + protected function normalizeFilename($filename) { + if (isset($this->config['filenameChangeChars']) && + is_array($this->config['filenameChangeChars']) + ) + $filename = strtr($filename, $this->config['filenameChangeChars']); + return $filename; + } + + protected function normalizeDirname($dirname) { + if (isset($this->config['dirnameChangeChars']) && + is_array($this->config['dirnameChangeChars']) + ) + $dirname = strtr($dirname, $this->config['dirnameChangeChars']); + return $dirname; + } + + protected function checkUploadedFile(array $aFile=null) { + $config = &$this->config; + $file = ($aFile === null) ? $this->file : $aFile; + + if (!is_array($file) || !isset($file['name'])) + return $this->label("Unknown error"); + + if (is_array($file['name'])) { + foreach ($file['name'] as $i => $name) { + $return = $this->checkUploadedFile(array( + 'name' => $name, + 'tmp_name' => $file['tmp_name'][$i], + 'error' => $file['error'][$i] + )); + if ($return !== true) + return "$name: $return"; + } + return true; + } + + $extension = file::getExtension($file['name']); + $typePatt = strtolower(text::clearWhitespaces($this->types[$this->type])); + + // CHECK FOR UPLOAD ERRORS + if ($file['error']) + return + ($file['error'] == UPLOAD_ERR_INI_SIZE) ? + $this->label("The uploaded file exceeds {size} bytes.", + array('size' => ini_get('upload_max_filesize'))) : ( + ($file['error'] == UPLOAD_ERR_FORM_SIZE) ? + $this->label("The uploaded file exceeds {size} bytes.", + array('size' => $this->get['MAX_FILE_SIZE'])) : ( + ($file['error'] == UPLOAD_ERR_PARTIAL) ? + $this->label("The uploaded file was only partially uploaded.") : ( + ($file['error'] == UPLOAD_ERR_NO_FILE) ? + $this->label("No file was uploaded.") : ( + ($file['error'] == UPLOAD_ERR_NO_TMP_DIR) ? + $this->label("Missing a temporary folder.") : ( + ($file['error'] == UPLOAD_ERR_CANT_WRITE) ? + $this->label("Failed to write file.") : + $this->label("Unknown error.") + ))))); + + // HIDDEN FILENAMES CHECK + elseif (substr($file['name'], 0, 1) == ".") + return $this->label("File name shouldn't begins with '.'"); + + // EXTENSION CHECK + elseif (!$this->validateExtension($extension, $this->type)) + return $this->label("Denied file extension."); + + // SPECIAL DIRECTORY TYPES CHECK (e.g. *img) + elseif (preg_match('/^\*([^ ]+)(.*)?$/s', $typePatt, $patt)) { + list($typePatt, $type, $params) = $patt; + if (class_exists("type_$type")) { + $class = "type_$type"; + $type = new $class(); + $cfg = $config; + $cfg['filename'] = $file['name']; + if (strlen($params)) + $cfg['params'] = trim($params); + $response = $type->checkFile($file['tmp_name'], $cfg); + if ($response !== true) + return $this->label($response); + } else + return $this->label("Non-existing directory type."); + } + + // IMAGE RESIZE + $gd = new gd($file['tmp_name']); + if (!$gd->init_error && !$this->imageResize($gd, $file['tmp_name'])) + return $this->label("The image is too big and/or cannot be resized."); + + return true; + } + + protected function checkInputDir($dir, $inclType=true, $existing=true) { + $dir = path::normalize($dir); + if (substr($dir, 0, 1) == "/") + $dir = substr($dir, 1); + + if ((substr($dir, 0, 1) == ".") || (substr(basename($dir), 0, 1) == ".")) + return false; + + if ($inclType) { + $first = explode("/", $dir); + $first = $first[0]; + if ($first != $this->type) + return false; + $return = $this->removeTypeFromPath($dir); + } else { + $return = $dir; + $dir = "{$this->type}/$dir"; + } + + if (!$existing) + return $return; + + $path = "{$this->config['uploadDir']}/$dir"; + return (is_dir($path) && is_readable($path)) ? $return : false; + } + + protected function validateExtension($ext, $type) { + $ext = trim(strtolower($ext)); + if (!isset($this->types[$type])) + return false; + + $exts = strtolower(text::clearWhitespaces($this->config['deniedExts'])); + if (strlen($exts)) { + $exts = explode(" ", $exts); + if (in_array($ext, $exts)) + return false; + } + + $exts = trim($this->types[$type]); + if (!strlen($exts) || substr($exts, 0, 1) == "*") + return true; + + if (substr($exts, 0, 1) == "!") { + $exts = explode(" ", trim(strtolower(substr($exts, 1)))); + return !in_array($ext, $exts); + } + + $exts = explode(" ", trim(strtolower($exts))); + return in_array($ext, $exts); + } + + protected function getTypeFromPath($path) { + return preg_match('/^([^\/]*)\/.*$/', $path, $patt) + ? $patt[1] : $path; + } + + protected function removeTypeFromPath($path) { + return preg_match('/^[^\/]*\/(.*)$/', $path, $patt) + ? $patt[1] : ""; + } + + protected function imageResize($image, $file=null) { + if (!($image instanceof gd)) { + $gd = new gd($image); + if ($gd->init_error) return false; + $file = $image; + } elseif ($file === null) + return false; + else + $gd = $image; + + if ((!$this->config['maxImageWidth'] && !$this->config['maxImageHeight']) || + ( + ($gd->get_width() <= $this->config['maxImageWidth']) && + ($gd->get_height() <= $this->config['maxImageHeight']) + ) + ) + return true; + + if ((!$this->config['maxImageWidth'] || !$this->config['maxImageHeight'])) { + if ($this->config['maxImageWidth']) { + if ($this->config['maxImageWidth'] >= $gd->get_width()) + return true; + $width = $this->config['maxImageWidth']; + $height = $gd->get_prop_height($width); + } else { + if ($this->config['maxImageHeight'] >= $gd->get_height()) + return true; + $height = $this->config['maxImageHeight']; + $width = $gd->get_prop_width($height); + } + if (!$gd->resize($width, $height)) + return false; + + } elseif (!$gd->resize_fit( + $this->config['maxImageWidth'], $this->config['maxImageHeight'] + )) + return false; + + return $gd->imagejpeg($file, $this->config['jpegQuality']); + } + + protected function makeThumb($file, $overwrite=true) { + $gd = new gd($file); + + // Drop files which are not GD handled images + if ($gd->init_error) + return true; + + $thumb = substr($file, strlen($this->config['uploadDir'])); + $thumb = $this->config['uploadDir'] . "/" . $this->config['thumbsDir'] . "/" . $thumb; + $thumb = path::normalize($thumb); + $thumbDir = dirname($thumb); + if (!is_dir($thumbDir) && !@mkdir($thumbDir, $this->config['dirPerms'], true)) + return false; + + if (!$overwrite && is_file($thumb)) + return true; + + // Images with smaller resolutions than thumbnails + if (($gd->get_width() <= $this->config['thumbWidth']) && + ($gd->get_height() <= $this->config['thumbHeight']) + ) { + $browsable = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG); + // Drop only browsable types + if (in_array($gd->type, $browsable)) + return true; + + // Resize image + } elseif (!$gd->resize_fit($this->config['thumbWidth'], $this->config['thumbHeight'])) + return false; + + // Save thumbnail + return $gd->imagejpeg($thumb, $this->config['jpegQuality']); + } + + protected function localize($langCode) { + require "lang/{$langCode}.php"; + setlocale(LC_ALL, $lang['_locale']); + $this->charset = $lang['_charset']; + $this->dateTimeFull = $lang['_dateTimeFull']; + $this->dateTimeMid = $lang['_dateTimeMid']; + $this->dateTimeSmall = $lang['_dateTimeSmall']; + unset($lang['_locale']); + unset($lang['_charset']); + unset($lang['_dateTimeFull']); + unset($lang['_dateTimeMid']); + unset($lang['_dateTimeSmall']); + $this->labels = $lang; + } + + protected function label($string, array $data=null) { + $return = isset($this->labels[$string]) ? $this->labels[$string] : $string; + if (is_array($data)) + foreach ($data as $key => $val) + $return = str_replace("{{$key}}", $val, $return); + return $return; + } + + protected function backMsg($message, array $data=null) { + $message = $this->label($message, $data); + if (isset($this->file['tmp_name']) && file_exists($this->file['tmp_name'])) + @unlink($this->file['tmp_name']); + $this->callBack("", $message); + die; + } + + protected function callBack($url, $message="") { + $message = text::jsValue($message); + $CKfuncNum = isset($this->opener['CKEditor']['funcNum']) + ? $this->opener['CKEditor']['funcNum'] : 0; + if (!$CKfuncNum) $CKfuncNum = 0; + header("Content-Type: text/html; charset={$this->charset}"); + +?> + + + + + php_value engine off + + + php_value engine off + +"; + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/css.php b/protected/extensions/ckeditor/kcfinder/css.php new file mode 100644 index 0000000..d0dc0d9 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/css.php @@ -0,0 +1,257 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +require "core/autoload.php"; +$mtime = @filemtime(__FILE__); +if ($mtime) httpCache::checkMTime($mtime); +$browser = new browser(); +$config = $browser->config; +ob_start(); + +?> +html, body { + overflow: hidden; +} + +body, form, th, td { + margin: 0; + padding: 0; +} + +a { + cursor:pointer; +} + +* { + font-family: Tahoma, Verdana, Arial, sans-serif; + font-size: 11px; +} + +table { + border-collapse: collapse; +} + +#all { + vvisibility: hidden; +} + +#left { + float: left; + display: block; + width: 25%; +} + +#right { + float: left; + display: block; + width: 75%; +} + +#settings { + display: none; + padding: 0; + float: left; + width: 100%; +} + +#settings > div { + float: left; +} + +#folders { + padding: 5px; + overflow: auto; +} + +#toolbar { + padding: 5px; +} + +#files { + padding: 5px; + overflow: auto; +} + +#status { + padding: 5px; + float: left; + overflow: hidden; +} + +#fileinfo { + float: left; +} + +#clipboard div { + width: 16px; + height: 16px; +} + +.folders { + margin-left: 16px; +} + +div.file { + overflow-x: hidden; + width: px; + float: left; + text-align: center; + cursor: default; + white-space: nowrap; +} + +div.file .thumb { + width: px; + height: px; + background: no-repeat center center; +} + +#files table { + width: 100%; +} + +tr.file { + cursor: default; +} + +tr.file > td { + white-space: nowrap; +} + +tr.file > td.name { + background-repeat: no-repeat; + background-position: left center; + padding-left: 20px; + width: 100%; +} + +tr.file > td.time, +tr.file > td.size { + text-align: right; +} + +#toolbar { + cursor: default; + white-space: nowrap; +} + +#toolbar a { + padding-left: 20px; + text-decoration: none; + background: no-repeat left center; +} + +#toolbar a:hover, a[href="#upload"].uploadHover { + color: #000; +} + +#upload { + position: absolute; + overflow: hidden; + opacity: 0; + filter: alpha(opacity:0); +} + +#upload input { + cursor: pointer; +} + +#uploadResponse { + display: none; +} + +span.brace { + padding-left: 11px; + cursor: default; +} + +span.brace.opened, span.brace.closed { + cursor: pointer; +} + +#shadow { + position: absolute; + top: 0; + left: 0; + display: none; + background: #000; + z-index: 100; + opacity: 0.7; + filter: alpha(opacity:50); +} + +#dialog, #clipboard, #alert { + position: absolute; + display: none; + z-index: 101; + cursor: default; +} + +#dialog .box, #alert { + max-width: 350px; +} + +#alert { + z-index: 102; +} + +#alert div.message { + overflow-y: auto; + overflow-x: hidden; +} + +#clipboard { + z-index: 99; +} + +#loading { + display: none; + float: right; +} + +.menu { + background: #888; + white-space: nowrap; +} + +.menu a { + display: block; +} + +.menu .list { + max-height: 0; + overflow-y: auto; + overflow-x: hidden; + white-space: nowrap; +} + +.file .access, .file .hasThumb { + display: none; +} + +#dialog img { + cursor: pointer; +} + +#resizer { + position: absolute; + z-index: 98; + top: 0; + background: #000; + opacity: 0; + filter: alpha(opacity:0); +} + +Order allow,deny +Deny from all + diff --git a/protected/extensions/ckeditor/kcfinder/doc/Changelog b/protected/extensions/ckeditor/kcfinder/doc/Changelog new file mode 100644 index 0000000..4191861 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/doc/Changelog @@ -0,0 +1,141 @@ + +VERSION 2.51 - 2010-08-25 +------------------------- +* Drag and drop uploading plugin - big fixes +* Cookies problem when using single words or IPs as hostname resolved +* Vietnamese localization + + +VERSION 2.5 - 2010-08-23 +------------------------ +* Drupal module support +* Drag and drop uploading plugin +* Two more language labels +* Localhost cookies bugfix +* Renaming current folder bugfix +* Small bugfixes + + +VERSION 2.41 - 2010-07-24 +------------------------- +* Directory types engine improvement +* New 'denyExtensionRename' config setting added + + +VERSION 2.4 - 2010-07-20 +------------------------ +* Online checking if new version is released in About box. To use this + feature you should to have Curl, HTTP or Socket extension, or + allow_url_fopen ini setting should be "on" +* New 'denyUpdateCheck' config setting added +* New 'dark' theme added (made by Dark Preacher) +* Additional 'theme' GET parameter to choose a theme from URL +* Thumbnails loading improvement +* Some changes in Oxygen CSS theme +* Replace alert() and confirm() JavaScript functions with good-looking boxes +* Safari 3 right-click fix +* Small bugfixes + + +VERSION 2.32 - 2010-07-11 +------------------------- +* 'filenameChangeChars' and 'dirnameChangeChars' config settings added +* Content-Type header fix for css.php, js_localize.php and + js/browser/joiner.php +* CKEditorFuncNum with index 0 bugfix +* Session save handler example in core/autoload.php + + +VERSION 2.31 - 2010-07-01 +------------------------- +* Proportional uploaded image resize bugfix +* Slideshow bugfixes +* Other small bugfixes + + +VERSION 2.3 - 2010-06-25 +------------------------ +* Replace XML Ajax responses with JSON +* Replace old 'readonly' config option with advanced 'access' option + PLEASE UPDATE YOUR OLD CONFIG FILE!!! +* Slideshow images in current folder using arrow keys +* Multipe files upload similar to Facebook upload (not works in IE!) +* Option to set protocol, domain and port in 'uploadURL' setting +* Bugfixes + + +VERSION 2.21 - 2010-11-19 +------------------------- +* Bugfixes only + + +VERSION 2.2 - 2010-07-27 +------------------------ +* Many bugfixes +* Read-only config option + + +VERSION 2.1 - 2010-07-04 +------------------------ +* Endless JavaScript loop on KCFinder disable bugfix +* New config setting whether to generate .htaccess file in upload folder +* Upload to specified folder from CKEditor & FCKeditor direct upload dialog +* Select multiple files bugfixes + + +VERSION 2.0 - 2010-07-01 +------------------------ +* Brand new core +* Option to resize files/folders panels with mouse drag +* Select multiple files with Ctrl key +* Return list of files to custom integrating application +* Animated folder tree +* Directory Type specific configuration settings +* Download multiple files or a folder as ZIP file + + +VERSION 1.7 - 2010-06-17 +------------------------ +* Maximize toolbar button +* Clipboard for copying and moving multiple files +* Show warning if the browser is not capable to display KCFinder +* Google Chrome Frame support for old versions of Internet Explorer + + +VERSION 1.6 - 2010-06-02 +------------------------ +* Support of Windows Apache server +* Support of Fileinfo PHP extension to detect mime types (*mime directory type) +* Option to deny globaly some dangerous extensions like exe, php, pl, cgi etc +* Check for denied file extension on file rename +* Disallow to upload hidden files (with names begins with .) +* Missing last character of filenames without extension bugfix +* Some small bugfixes + + +VERSION 1.5 - 2010-05-30 +------------------------ +* Filenames with spaces download bugfix +* FCKEditor direct upload bugfix +* Thumbnail generation bugfixes + + +VERSION 1.4 - 2010-05-24 +------------------------ +* Client-side caching bugfix +* Custom integrations - window.KCFinder.callBack() +* Security fixes + + +VERSION 1.3 - 2010-05-06 +------------------------ +* Another session bugfix. Now session configuratin works! +* Show filename by default bugfix +* Loading box on top right corner + + +VERSION 1.2 - 2010-05-03 +------------------------ +* Thumbnail generation bugfix +* Session bugfix +* other small bugfixes diff --git a/protected/extensions/ckeditor/kcfinder/doc/LICENSE.GPL b/protected/extensions/ckeditor/kcfinder/doc/LICENSE.GPL new file mode 100644 index 0000000..c968251 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/doc/LICENSE.GPL @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/protected/extensions/ckeditor/kcfinder/doc/LICENSE.LGPL b/protected/extensions/ckeditor/kcfinder/doc/LICENSE.LGPL new file mode 100644 index 0000000..9a3408f --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/doc/LICENSE.LGPL @@ -0,0 +1,167 @@ +GNU Lesser General Public License +Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + + [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. + +This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. + +We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. + +Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. + +Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. + +When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. + +We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. + +For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. + +The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". + +A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. + + (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) + + These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. + + In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. + +Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the Library into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. + +5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. + +However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. + +When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. + +If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: + + a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. + + e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. + +7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. + + b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. + +11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +END OF TERMS AND CONDITIONS +How to Apply These Terms to Your New Libraries +If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). + +To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + + Copyright (C) + + This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + signature of Ty Coon, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/protected/extensions/ckeditor/kcfinder/doc/README b/protected/extensions/ckeditor/kcfinder/doc/README new file mode 100644 index 0000000..36b7829 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/doc/README @@ -0,0 +1,78 @@ +[===========================< KCFinder 2.51 >================================] +[ ] +[ Copyright 2010, 2011 KCFinder Project ] +[ http://kcfinder.sunhater.com ] +[ Pavel Tzonkov ] +[ ] +[============================================================================] + + +I. DESCRIPTION + + KCFinder free open-source alternative to the CKFinder Web file manager. It + can be integrated into FCKeditor, CKEditor, and TinyMCE WYSIWYG web + editors or your custom web applications to upload and manage images, flash + movies, and other files that can be embedded in an editor's generated HTML + content. Only PHP server-side scripting is supported. + + +II. FEATURES + + 1. Ajax engine with JSON responses. + + 2. Easy to integrate and configure in web applications. + + 3. Clipboard for copy and move multiple files + + 4. Select multiple files with Ctrl key + + 5. Download multiple files or a folder as ZIP file + + 6. Resize bigger uploaded images. Configurable maximum image resolution. + + 7. Configurable thumbnail resolution. + + 8. Visual themes. + + 9. Multilanguage system. + + 10. Slideshow. + + 11. Multiple files upload (ala Facebook) + + 12. Drag and drop uploading + + +III. REQUIREMENTS + + 1. Web server (only Apache 2 is well tested) + + 2. PHP 5.x.x. with GD extension. Safe mode should be disabled. To work + with client-side HTTP cache, the PHP must be installed as Apache + module. + + 3. PHP ZIP extension for multiple files download. If it's not available, + KCFinder will work but without this feature. + + 4. PHP Fileinfo extension if you want to check file's MIME type before + moving to upload directory. PHP versions lesser than 5.3 needs to + install Fileinfo PECL extension: http://pecl.php.net/package/Fileinfo + + 5. Modern browser (not IE6!). + + +IV. INSTALLATION + + See http://kcfinder.sunhater.com/install + + +V. USED 3RD PARTY SOFTWARE + + 1. jQuery JavaScript library v1.4.2 - http://www.jquery.com + + 2. jQuery Right-Click Plugin v1.01 - http://abeautifulsite.net/notebook/68 + + 3. jquery.event.drag Plugin v2.0.0 - http://threedubmedia.com/code/event/drag + + 4. In realization of "oxygen" theme were used icons and color schemes of + default KDE4 theme - http://www.kde.org diff --git a/protected/extensions/ckeditor/kcfinder/integration/.htaccess b/protected/extensions/ckeditor/kcfinder/integration/.htaccess new file mode 100644 index 0000000..d61b264 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/integration/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + diff --git a/protected/extensions/ckeditor/kcfinder/integration/drupal.php b/protected/extensions/ckeditor/kcfinder/integration/drupal.php new file mode 100644 index 0000000..25230c3 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/integration/drupal.php @@ -0,0 +1,115 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +// gets a valid drupal_path +function get_drupal_path() { + if (!empty($_SERVER['SCRIPT_FILENAME'])) { + $drupal_path = dirname(dirname(dirname(dirname($_SERVER['SCRIPT_FILENAME'])))); + if (!file_exists($drupal_path . '/includes/bootstrap.inc')) { + $drupal_path = dirname(dirname(dirname($_SERVER['SCRIPT_FILENAME']))); + $depth = 2; + do { + $drupal_path = dirname($drupal_path); + $depth++; + } while (!($bootstrap_file_found = file_exists($drupal_path . '/includes/bootstrap.inc')) && $depth < 10); + } + } + + if (!isset($bootstrap_file_found) || !$bootstrap_file_found) { + $drupal_path = '../../../../..'; + if (!file_exists($drupal_path . '/includes/bootstrap.inc')) { + $drupal_path = '../..'; + do { + $drupal_path .= '/..'; + $depth = substr_count($drupal_path, '..'); + } while (!($bootstrap_file_found = file_exists($drupal_path . '/includes/bootstrap.inc')) && $depth < 10); + } + } + return $drupal_path; +} + +function CheckAuthentication($drupal_path) { + + static $authenticated; + + if (!isset($authenticated)) { + + if (!isset($bootstrap_file_found) || $bootstrap_file_found) { + $current_cwd = getcwd(); + if (!defined('DRUPAL_ROOT')){ + define('DRUPAL_ROOT', $drupal_path); + } + + // Simulate being in the drupal root folder so we can share the session + chdir(DRUPAL_ROOT); + + global $base_url; + $base_root = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https' : 'http'; + $base_url = $base_root .= '://'. preg_replace('/[^a-z0-9-:._]/i', '', $_SERVER['HTTP_HOST']); + + if ($dir = trim(dirname($_SERVER['SCRIPT_NAME']), '\,/')) { + $base_path = "/$dir"; + $base_url .= $base_path; + } + + // correct base_url so it points to Drupal root + $pos = strpos($base_url, '/sites/'); + $base_url = substr($base_url, 0, $pos); // drupal root absolute url + + // If we aren't in a Drupal installation, or if Drupal path hasn't been properly found, die + if(!file_exists(DRUPAL_ROOT . '/includes/bootstrap.inc')) { + die("The CMS integration service for -drupal- requires KCFinder to be properly placed inside your Drupal installation."); + } + + + // bootstrap + require_once(DRUPAL_ROOT . '/includes/bootstrap.inc'); + drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); + + // if user has access permission... + if (user_access('access kcfinder')) { + if (!isset($_SESSION['KCFINDER'])) { + $_SESSION['KCFINDER'] = array(); + $_SESSION['KCFINDER']['disabled'] = false; + } + + // User has permission, so make sure KCFinder is not disabled! + if(!isset($_SESSION['KCFINDER']['disabled'])) { + $_SESSION['KCFINDER']['disabled'] = false; + } + + global $user; + $_SESSION['KCFINDER']['uploadURL'] = strtr(variable_get('kcfinder_upload_url', 'sites/default/files/kcfinder'), array('%u' => $user->uid, '%n' => $user->name)); + $_SESSION['KCFINDER']['uploadDir'] = strtr(variable_get('kcfinder_upload_dir', ''), array('%u' => $user->uid, '%n' => $user->name)); + $_SESSION['KCFINDER']['theme'] = variable_get('kcfinder_theme', 'oxygen'); + + //echo '
    uploadURL: ' . $_SESSION['KCFINDER']['uploadURL']
    ; + //echo '
    uploadDir: ' . $_SESSION['KCFINDER']['uploadDir']
    ; + + chdir($current_cwd); + + return true; + } + + chdir($current_cwd); + return false; + } + } +} + +CheckAuthentication(get_drupal_path()); + +spl_autoload_register('__autoload'); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/js/browser/0bject.js b/protected/extensions/ckeditor/kcfinder/js/browser/0bject.js new file mode 100644 index 0000000..de6b46c --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/browser/0bject.js @@ -0,0 +1,24 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */?> + +var browser = { + opener: {}, + support: {}, + files: [], + clipboard: [], + labels: [], + shows: [], + orders: [], + cms: "" +}; diff --git a/protected/extensions/ckeditor/kcfinder/js/browser/clipboard.js b/protected/extensions/ckeditor/kcfinder/js/browser/clipboard.js new file mode 100644 index 0000000..0fabdd8 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/browser/clipboard.js @@ -0,0 +1,299 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */?> + +browser.initClipboard = function() { + if (!this.clipboard || !this.clipboard.length) return; + var size = 0; + $.each(this.clipboard, function(i, val) { + size += parseInt(val.size); + }); + size = this.humanSize(size); + $('#clipboard').html('
    '); + var resize = function() { + $('#clipboard').css({ + left: $(window).width() - $('#clipboard').outerWidth() + 'px', + top: $(window).height() - $('#clipboard').outerHeight() + 'px' + }); + }; + resize(); + $('#clipboard').css('display', 'block'); + $(window).unbind(); + $(window).resize(function() { + browser.resize(); + resize(); + }); +}; + +browser.openClipboard = function() { + if (!this.clipboard || !this.clipboard.length) return; + if ($('.menu a[href="kcact:cpcbd"]').html()) { + $('#clipboard').removeClass('selected'); + this.hideDialog(); + return; + } + var html = ''; + + setTimeout(function() { + $('#clipboard').addClass('selected'); + $('#dialog').html(html); + $('.menu a[href="kcact:download"]').click(function() { + browser.hideDialog(); + browser.downloadClipboard(); + return false; + }); + $('.menu a[href="kcact:cpcbd"]').click(function() { + if (!browser.dirWritable) return false; + browser.hideDialog(); + browser.copyClipboard(browser.dir); + return false; + }); + $('.menu a[href="kcact:mvcbd"]').click(function() { + if (!browser.dirWritable) return false; + browser.hideDialog(); + browser.moveClipboard(browser.dir); + return false; + }); + $('.menu a[href="kcact:rmcbd"]').click(function() { + browser.hideDialog(); + browser.confirm( + browser.label("Are you sure you want to delete all files in the Clipboard?"), + function(callBack) { + if (callBack) callBack(); + browser.deleteClipboard(); + } + ); + return false; + }); + $('.menu a[href="kcact:clrcbd"]').click(function() { + browser.hideDialog(); + browser.clearClipboard(); + return false; + }); + + var left = $(window).width() - $('#dialog').outerWidth(); + var top = $(window).height() - $('#dialog').outerHeight() - $('#clipboard').outerHeight(); + var lheight = top + _.outerTopSpace('#dialog'); + $('.menu .list').css('max-height', lheight + 'px'); + var top = $(window).height() - $('#dialog').outerHeight() - $('#clipboard').outerHeight(); + $('#dialog').css({ + left: (left - 4) + 'px', + top: top + 'px' + }); + $('#dialog').fadeIn(); + }, 1); +}; + +browser.removeFromClipboard = function(i) { + if (!this.clipboard || !this.clipboard[i]) return false; + if (this.clipboard.length == 1) { + this.clearClipboard(); + this.hideDialog(); + return; + } + + if (i < this.clipboard.length - 1) { + var last = this.clipboard.slice(i + 1); + this.clipboard = this.clipboard.slice(0, i); + this.clipboard = this.clipboard.concat(last); + } else + this.clipboard.pop(); + + this.initClipboard(); + this.hideDialog(); + this.openClipboard(); + return true; +}; + +browser.copyClipboard = function(dir) { + if (!this.clipboard || !this.clipboard.length) return; + var files = []; + var failed = 0; + for (i = 0; i < this.clipboard.length; i++) + if (this.clipboard[i].readable) + files[i] = this.clipboard[i].dir + '/' + this.clipboard[i].name; + else + failed++; + if (this.clipboard.length == failed) { + browser.alert(this.label("The files in the Clipboard are not readable.")); + return; + } + var go = function(callBack) { + if (dir == browser.dir) + browser.fadeFiles(); + $.ajax({ + type: 'POST', + dataType: 'json', + url: browser.baseGetData('cp_cbd'), + data: {dir: dir, files: files}, + async: false, + success: function(data) { + if (callBack) callBack(); + browser.check4errors(data); + browser.clearClipboard(); + if (dir == browser.dir) + browser.refresh(); + }, + error: function() { + if (callBack) callBack(); + $('#files > div').css({ + opacity: '', + filter: '' + }); + browser.alert(browser.label("Unknown error.")); + } + }); + }; + + if (failed) + browser.confirm( + browser.label("{count} files in the Clipboard are not readable. Do you want to copy the rest?", {count:failed}), + go + ) + else + go(); + +}; + +browser.moveClipboard = function(dir) { + if (!this.clipboard || !this.clipboard.length) return; + var files = []; + var failed = 0; + for (i = 0; i < this.clipboard.length; i++) + if (this.clipboard[i].readable && this.clipboard[i].writable) + files[i] = this.clipboard[i].dir + "/" + this.clipboard[i].name; + else + failed++; + if (this.clipboard.length == failed) { + browser.alert(this.label("The files in the Clipboard are not movable.")) + return; + } + + var go = function(callBack) { + browser.fadeFiles(); + $.ajax({ + type: 'POST', + dataType: 'json', + url: browser.baseGetData('mv_cbd'), + data: {dir: dir, files: files}, + async: false, + success: function(data) { + if (callBack) callBack(); + browser.check4errors(data); + browser.clearClipboard(); + browser.refresh(); + }, + error: function() { + if (callBack) callBack(); + $('#files > div').css({ + opacity: '', + filter: '' + }); + browser.alert(browser.label("Unknown error.")); + } + }); + }; + + if (failed) + browser.confirm( + browser.label("{count} files in the Clipboard are not movable. Do you want to move the rest?", {count: failed}), + go + ); + else + go(); +}; + +browser.deleteClipboard = function() { + if (!this.clipboard || !this.clipboard.length) return; + var files = []; + var failed = 0; + for (i = 0; i < this.clipboard.length; i++) + if (this.clipboard[i].readable && this.clipboard[i].writable) + files[i] = this.clipboard[i].dir + '/' + this.clipboard[i].name; + else + failed++; + if (this.clipboard.length == failed) { + browser.alert(this.label("The files in the Clipboard are not removable.")) + return; + } + var go = function(callBack) { + browser.fadeFiles(); + $.ajax({ + type: 'POST', + dataType: 'json', + url: browser.baseGetData('rm_cbd'), + data: {files:files}, + async: false, + success: function(data) { + if (callBack) callBack(); + browser.check4errors(data); + browser.clearClipboard(); + browser.refresh(); + }, + error: function() { + if (callBack) callBack(); + $('#files > div').css({ + opacity: '', + filter:'' + }); + browser.alert(browser.label("Unknown error.")); + } + }); + }; + if (failed) + browser.confirm( + browser.label("{count} files in the Clipboard are not removable. Do you want to delete the rest?", {count: failed}), + go + ); + else + go(); +}; + +browser.downloadClipboard = function() { + if (!this.clipboard || !this.clipboard.length) return; + var files = []; + for (i = 0; i < this.clipboard.length; i++) + if (this.clipboard[i].readable) + files[i] = this.clipboard[i].dir + '/' + this.clipboard[i].name; + if (files.length) + this.post(this.baseGetData('downloadClipboard'), {files:files}); +}; + +browser.clearClipboard = function() { + $('#clipboard').html(''); + this.clipboard = []; +}; diff --git a/protected/extensions/ckeditor/kcfinder/js/browser/dropUpload.js b/protected/extensions/ckeditor/kcfinder/js/browser/dropUpload.js new file mode 100644 index 0000000..284f9dc --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/browser/dropUpload.js @@ -0,0 +1,230 @@ + + +browser.initDropUpload = function() { + if ((typeof(XMLHttpRequest) == 'undefined') || + (typeof(document.addEventListener) == 'undefined') || + (typeof(File) == 'undefined') || + (typeof(FileReader) == 'undefined') + ) + return; + + if (!XMLHttpRequest.prototype.sendAsBinary) { + XMLHttpRequest.prototype.sendAsBinary = function(datastr) { + var ords = Array.prototype.map.call(datastr, function(x) { + return x.charCodeAt(0) & 0xff; + }); + var ui8a = new Uint8Array(ords); + this.send(ui8a.buffer); + } + } + + var uploadQueue = [], + uploadInProgress = false, + filesCount = 0, + errors = [], + files = $('#files'), + folders = $('div.folder > a'), + boundary = '------multipartdropuploadboundary' + (new Date).getTime(), + currentFile, + + filesDragOver = function(e) { + if (e.preventDefault) e.preventDefault(); + $('#files').addClass('drag'); + return false; + }, + + filesDragEnter = function(e) { + if (e.preventDefault) e.preventDefault(); + return false; + }, + + filesDragLeave = function(e) { + if (e.preventDefault) e.preventDefault(); + $('#files').removeClass('drag'); + return false; + }, + + filesDrop = function(e) { + if (e.preventDefault) e.preventDefault(); + if (e.stopPropagation) e.stopPropagation(); + $('#files').removeClass('drag'); + if (!$('#folders span.current').first().parent().data('writable')) { + browser.alert("Cannot write to upload folder."); + return false; + } + filesCount += e.dataTransfer.files.length + for (var i = 0; i < e.dataTransfer.files.length; i++) { + var file = e.dataTransfer.files[i]; + file.thisTargetDir = browser.dir; + uploadQueue.push(file); + } + processUploadQueue(); + return false; + }, + + folderDrag = function(e) { + if (e.preventDefault) e.preventDefault(); + return false; + }, + + folderDrop = function(e, dir) { + if (e.preventDefault) e.preventDefault(); + if (e.stopPropagation) e.stopPropagation(); + if (!$(dir).data('writable')) { + browser.alert("Cannot write to upload folder."); + return false; + } + filesCount += e.dataTransfer.files.length + for (var i = 0; i < e.dataTransfer.files.length; i++) { + var file = e.dataTransfer.files[i]; + file.thisTargetDir = $(dir).data('path'); + uploadQueue.push(file); + } + processUploadQueue(); + return false; + }; + + files.get(0).removeEventListener('dragover', filesDragOver, false); + files.get(0).removeEventListener('dragenter', filesDragEnter, false); + files.get(0).removeEventListener('dragleave', filesDragLeave, false); + files.get(0).removeEventListener('drop', filesDrop, false); + + files.get(0).addEventListener('dragover', filesDragOver, false); + files.get(0).addEventListener('dragenter', filesDragEnter, false); + files.get(0).addEventListener('dragleave', filesDragLeave, false); + files.get(0).addEventListener('drop', filesDrop, false); + + folders.each(function() { + var folder = this, + + dragOver = function(e) { + $(folder).children('span.folder').addClass('context'); + return folderDrag(e); + }, + + dragLeave = function(e) { + $(folder).children('span.folder').removeClass('context'); + return folderDrag(e); + }, + + drop = function(e) { + $(folder).children('span.folder').removeClass('context'); + return folderDrop(e, folder); + }; + + this.removeEventListener('dragover', dragOver, false); + this.removeEventListener('dragenter', folderDrag, false); + this.removeEventListener('dragleave', dragLeave, false); + this.removeEventListener('drop', drop, false); + + this.addEventListener('dragover', dragOver, false); + this.addEventListener('dragenter', folderDrag, false); + this.addEventListener('dragleave', dragLeave, false); + this.addEventListener('drop', drop, false); + }); + + function updateProgress(evt) { + var progress = evt.lengthComputable + ? Math.round((evt.loaded * 100) / evt.total) + '%' + : Math.round(evt.loaded / 1024) + " KB"; + $('#loading').html(browser.label("Uploading file {number} of {count}... {progress}", { + number: filesCount - uploadQueue.length, + count: filesCount, + progress: progress + })); + } + + function processUploadQueue() { + if (uploadInProgress) + return false; + + if (uploadQueue && uploadQueue.length) { + var file = uploadQueue.shift(); + currentFile = file; + $('#loading').html(browser.label("Uploading file {number} of {count}... {progress}", { + number: filesCount - uploadQueue.length, + count: filesCount, + progress: "" + })); + $('#loading').css('display', 'inline'); + + var reader = new FileReader(); + reader.thisFileName = file.name; + reader.thisFileType = file.type; + reader.thisFileSize = file.size; + reader.thisTargetDir = file.thisTargetDir; + + reader.onload = function(evt) { + uploadInProgress = true; + + var postbody = '--' + boundary + '\r\nContent-Disposition: form-data; name="upload[]"'; + if (evt.target.thisFileName) + postbody += '; filename="' + _.utf8encode(evt.target.thisFileName) + '"'; + postbody += '\r\n'; + if (evt.target.thisFileSize) + postbody += 'Content-Length: ' + evt.target.thisFileSize + '\r\n'; + postbody += 'Content-Type: ' + evt.target.thisFileType + '\r\n\r\n' + evt.target.result + '\r\n--' + boundary + '\r\nContent-Disposition: form-data; name="dir"\r\n\r\n' + _.utf8encode(evt.target.thisTargetDir) + '\r\n--' + boundary + '\r\n--' + boundary + '--\r\n'; + + var xhr = new XMLHttpRequest(); + xhr.thisFileName = evt.target.thisFileName; + + if (xhr.upload) { + xhr.upload.thisFileName = evt.target.thisFileName; + xhr.upload.addEventListener("progress", updateProgress, false); + } + xhr.open('POST', browser.baseGetData('upload'), true); + xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary); + xhr.setRequestHeader('Content-Length', postbody.length); + + xhr.onload = function(e) { + $('#loading').css('display', 'none'); + if (browser.dir == reader.thisTargetDir) + browser.fadeFiles(); + uploadInProgress = false; + processUploadQueue(); + if (xhr.responseText.substr(0, 1) != '/') + errors[errors.length] = xhr.responseText; + } + + xhr.sendAsBinary(postbody); + }; + + reader.onerror = function(evt) { + $('#loading').css('display', 'none'); + uploadInProgress = false; + processUploadQueue(); + errors[errors.length] = browser.label("Failed to upload {filename}!", { + filename: evt.target.thisFileName + }); + }; + + reader.readAsBinaryString(file); + + } else { + filesCount = 0; + var loop = setInterval(function() { + if (uploadInProgress) return; + clearInterval(loop); + if (currentFile.thisTargetDir == browser.dir) + browser.refresh(); + boundary = '------multipartdropuploadboundary' + (new Date).getTime(); + if (errors.length) { + browser.alert(errors.join('\n')); + errors = []; + } + }, 333); + } + } +}; diff --git a/protected/extensions/ckeditor/kcfinder/js/browser/files.js b/protected/extensions/ckeditor/kcfinder/js/browser/files.js new file mode 100644 index 0000000..a751540 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/browser/files.js @@ -0,0 +1,610 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */?> + +browser.initFiles = function() { + $(document).unbind('keydown'); + $(document).keydown(function(e) { + return !browser.selectAll(e); + }); + $('#files').unbind(); + $('#files').scroll(function() { + browser.hideDialog(); + }); + $('.file').unbind(); + $('.file').click(function(e) { + _.unselect(); + browser.selectFile($(this), e); + }); + $('.file').rightClick(function(e) { + _.unselect(); + browser.menuFile($(this), e); + }); + $('.file').dblclick(function() { + _.unselect(); + browser.returnFile($(this)); + }); + $('.file').mouseup(function() { + _.unselect(); + }); + $('.file').mouseout(function() { + _.unselect(); + }); + $.each(this.shows, function(i, val) { + var display = (_.kuki.get('show' + val) == 'off') + ? 'none' : 'block'; + $('#files .file div.' + val).css('display', display); + }); + this.statusDir(); +}; + +browser.showFiles = function(callBack, selected) { + this.fadeFiles(); + setTimeout(function() { + var html = ''; + $.each(browser.files, function(i, file) { + var stamp = []; + $.each(file, function(key, val) { + stamp[stamp.length] = key + "|" + val; + }); + stamp = _.md5(stamp.join('|')); + if (_.kuki.get('view') == 'list') { + if (!i) html += ''; + var icon = _.getFileExtension(file.name); + if (file.thumb) + icon = '.image'; + else if (!icon.length || !file.smallIcon) + icon = '.'; + icon = 'themes/' + browser.theme + '/img/files/small/' + icon + '.png'; + html += '' + + '' + + '' + + '' + + ''; + if (i == browser.files.length - 1) html += '
    ' + _.htmlData(file.name) + '' + file.date + '' + browser.humanSize(file.size) + '
    '; + } else { + if (file.thumb) + var icon = browser.baseGetData('thumb') + '&file=' + encodeURIComponent(file.name) + '&dir=' + encodeURIComponent(browser.dir) + '&stamp=' + stamp; + else if (file.smallThumb) { + var icon = browser.uploadURL + '/' + browser.dir + '/' + file.name; + icon = _.escapeDirs(icon).replace(/\'/g, "%27"); + } else { + var icon = file.bigIcon ? _.getFileExtension(file.name) : '.'; + if (!icon.length) icon = '.'; + icon = 'themes/' + browser.theme + '/img/files/big/' + icon + '.png'; + } + html += '
    ' + + '
    ' + + '
    ' + _.htmlData(file.name) + '
    ' + + '
    ' + file.date + '
    ' + + '
    ' + browser.humanSize(file.size) + '
    ' + + '
    '; + } + }); + $('#files').html('
    ' + html + '
    '); + $.each(browser.files, function(i, file) { + var item = $('#files .file').get(i); + $(item).data(file); + if (_.inArray(file.name, selected) || + ((typeof selected != 'undefined') && !selected.push && (file.name == selected)) + ) + $(item).addClass('selected'); + }); + $('#files > div').css({opacity:'', filter:''}); + if (callBack) callBack(); + browser.initFiles(); + }, 200); +}; + +browser.selectFile = function(file, e) { + if (e.ctrlKey || e.metaKey) { + if (file.hasClass('selected')) + file.removeClass('selected'); + else + file.addClass('selected'); + var files = $('.file.selected').get(); + var size = 0; + if (!files.length) + this.statusDir(); + else { + $.each(files, function(i, cfile) { + size += parseInt($(cfile).data('size')); + }); + size = this.humanSize(size); + if (files.length > 1) + $('#fileinfo').html(files.length + ' ' + this.label("selected files") + ' (' + size + ')'); + else { + var data = $(files[0]).data(); + $('#fileinfo').html(data.name + ' (' + this.humanSize(data.size) + ', ' + data.date + ')'); + } + } + } else { + var data = file.data(); + $('.file').removeClass('selected'); + file.addClass('selected'); + $('#fileinfo').html(data.name + ' (' + this.humanSize(data.size) + ', ' + data.date + ')'); + } +}; + +browser.selectAll = function(e) { + if ((!e.ctrlKey && !e.metaKey) || ((e.keyCode != 65) && (e.keyCode != 97))) + return false; + var files = $('.file').get(); + if (files.length) { + var size = 0; + $.each(files, function(i, file) { + if (!$(file).hasClass('selected')) + $(file).addClass('selected'); + size += parseInt($(file).data('size')); + }); + size = this.humanSize(size); + $('#fileinfo').html(files.length + ' ' + this.label("selected files") + ' (' + size + ')'); + } + return true; +}; + +browser.returnFile = function(file) { + + var fileURL = file.substr + ? file : browser.uploadURL + '/' + browser.dir + '/' + file.data('name'); + fileURL = _.escapeDirs(fileURL); + + if (this.opener.CKEditor) { + this.opener.CKEditor.object.tools.callFunction(this.opener.CKEditor.funcNum, fileURL, ''); + window.close(); + + } else if (this.opener.FCKeditor) { + window.opener.SetUrl(fileURL) ; + window.close() ; + + } else if (this.opener.TinyMCE) { + var win = tinyMCEPopup.getWindowArg('window'); + win.document.getElementById(tinyMCEPopup.getWindowArg('input')).value = fileURL; + if (win.getImageData) win.getImageData(); + if (typeof(win.ImageDialog) != "undefined") { + if (win.ImageDialog.getImageData) + win.ImageDialog.getImageData(); + if (win.ImageDialog.showPreviewImage) + win.ImageDialog.showPreviewImage(fileURL); + } + tinyMCEPopup.close(); + + } else if (this.opener.callBack) { + + if (window.opener && window.opener.KCFinder) { + this.opener.callBack(fileURL); + window.close(); + } + + if (window.parent && window.parent.KCFinder) { + var button = $('#toolbar a[href="kcact:maximize"]'); + if (button.hasClass('selected')) + this.maximize(button); + this.opener.callBack(fileURL); + } + + } else if (this.opener.callBackMultiple) { + if (window.opener && window.opener.KCFinder) { + this.opener.callBackMultiple([fileURL]); + window.close(); + } + + if (window.parent && window.parent.KCFinder) { + var button = $('#toolbar a[href="kcact:maximize"]'); + if (button.hasClass('selected')) + this.maximize(button); + this.opener.callBackMultiple([fileURL]); + } + + } +}; + +browser.returnFiles = function(files) { + if (this.opener.callBackMultiple && files.length) { + var rfiles = []; + $.each(files, function(i, file) { + rfiles[i] = browser.uploadURL + '/' + browser.dir + '/' + $(file).data('name'); + rfiles[i] = _.escapeDirs(rfiles[i]); + }); + this.opener.callBackMultiple(rfiles); + if (window.opener) window.close() + } +}; + +browser.returnThumbnails = function(files) { + if (this.opener.callBackMultiple) { + var rfiles = []; + var j = 0; + $.each(files, function(i, file) { + if ($(file).data('thumb')) { + rfiles[j] = browser.thumbsURL + '/' + browser.dir + '/' + $(file).data('name'); + rfiles[j] = _.escapeDirs(rfiles[j++]); + } + }); + this.opener.callBackMultiple(rfiles); + if (window.opener) window.close() + } +}; + +browser.menuFile = function(file, e) { + var data = file.data(); + var path = this.dir + '/' + data.name; + var files = $('.file.selected').get(); + var html = ''; + + if (file.hasClass('selected') && files.length && (files.length > 1)) { + var thumb = false; + var notWritable = 0; + var cdata; + $.each(files, function(i, cfile) { + cdata = $(cfile).data(); + if (cdata.thumb) thumb = true; + if (!data.writable) notWritable++; + }); + if (this.opener.callBackMultiple) { + html += '' + this.label("Select") + ''; + if (thumb) html += + '' + this.label("Select Thumbnails") + ''; + } + if (data.thumb || data.smallThumb || this.support.zip) { + html += (html.length ? '
    ' : ''); + if (data.thumb || data.smallThumb) + html +='' + this.label("View") + ''; + if (this.support.zip) html += (html.length ? '
    ' : '') + + '' + this.label("Download") + ''; + } + + if (this.access.files.copy || this.access.files.move) + html += (html.length ? '
    ' : '') + + '' + this.label("Add to Clipboard") + ''; + if (this.access.files['delete']) + html += (html.length ? '
    ' : '') + + '' + this.label("Delete") + ''; + + if (html.length) { + html = ''; + $('#dialog').html(html); + this.showMenu(e); + } else + return; + + $('.menu a[href="kcact:pick"]').click(function() { + browser.returnFiles(files); + browser.hideDialog(); + return false; + }); + + $('.menu a[href="kcact:pick_thumb"]').click(function() { + browser.returnThumbnails(files); + browser.hideDialog(); + return false; + }); + + $('.menu a[href="kcact:download"]').click(function() { + browser.hideDialog(); + var pfiles = []; + $.each(files, function(i, cfile) { + pfiles[i] = $(cfile).data('name'); + }); + browser.post(browser.baseGetData('downloadSelected'), {dir:browser.dir, files:pfiles}); + return false; + }); + + $('.menu a[href="kcact:clpbrdadd"]').click(function() { + browser.hideDialog(); + var msg = ''; + $.each(files, function(i, cfile) { + var cdata = $(cfile).data(); + var failed = false; + for (i = 0; i < browser.clipboard.length; i++) + if ((browser.clipboard[i].name == cdata.name) && + (browser.clipboard[i].dir == browser.dir) + ) { + failed = true + msg += cdata.name + ": " + browser.label("This file is already added to the Clipboard.") + "\n"; + break; + } + + if (!failed) { + cdata.dir = browser.dir; + browser.clipboard[browser.clipboard.length] = cdata; + } + }); + browser.initClipboard(); + if (msg.length) browser.alert(msg.substr(0, msg.length - 1)); + return false; + }); + + $('.menu a[href="kcact:rm"]').click(function() { + if ($(this).hasClass('denied')) return false; + browser.hideDialog(); + var failed = 0; + var dfiles = []; + $.each(files, function(i, cfile) { + var cdata = $(cfile).data(); + if (!cdata.writable) + failed++; + else + dfiles[dfiles.length] = browser.dir + "/" + cdata.name; + }); + if (failed == files.length) { + browser.alert(browser.label("The selected files are not removable.")); + return false; + } + + var go = function(callBack) { + browser.fadeFiles(); + $.ajax({ + type: 'POST', + dataType: 'json', + url: browser.baseGetData('rm_cbd'), + data: {files:dfiles}, + async: false, + success: function(data) { + if (callBack) callBack(); + browser.check4errors(data); + browser.refresh(); + }, + error: function() { + if (callBack) callBack(); + $('#files > div').css({ + opacity: '', + filter: '' + }); + browser.alert(browser.label("Unknown error.")); + } + }); + }; + + if (failed) + browser.confirm( + browser.label("{count} selected files are not removable. Do you want to delete the rest?", {count:failed}), + go + ) + + else + browser.confirm( + browser.label("Are you sure you want to delete all selected files?"), + go + ); + + return false; + }); + + } else { + html += ''; + + $('#dialog').html(html); + this.showMenu(e); + + $('.menu a[href="kcact:pick"]').click(function() { + browser.returnFile(file); + browser.hideDialog(); + return false; + }); + + $('.menu a[href="kcact:pick_thumb"]').click(function() { + var path = browser.thumbsURL + '/' + browser.dir + '/' + data.name; + browser.returnFile(path); + browser.hideDialog(); + return false; + }); + + $('.menu a[href="kcact:download"]').click(function() { + var html = '
    ' + + '' + + '' + + '
    '; + $('#dialog').html(html); + $('#downloadForm input').get(0).value = browser.dir; + $('#downloadForm input').get(1).value = data.name; + $('#downloadForm').submit(); + return false; + }); + + $('.menu a[href="kcact:clpbrdadd"]').click(function() { + for (i = 0; i < browser.clipboard.length; i++) + if ((browser.clipboard[i].name == data.name) && + (browser.clipboard[i].dir == browser.dir) + ) { + browser.hideDialog(); + browser.alert(browser.label("This file is already added to the Clipboard.")); + return false; + } + var cdata = data; + cdata.dir = browser.dir; + browser.clipboard[browser.clipboard.length] = cdata; + browser.initClipboard(); + browser.hideDialog(); + return false; + }); + + $('.menu a[href="kcact:mv"]').click(function(e) { + if (!data.writable) return false; + browser.fileNameDialog( + e, {dir: browser.dir, file: data.name}, + 'newName', data.name, browser.baseGetData('rename'), { + title: "New file name:", + errEmpty: "Please enter new file name.", + errSlash: "Unallowable characters in file name.", + errDot: "File name shouldn't begins with '.'" + }, + function() { + browser.refresh(); + } + ); + return false; + }); + + $('.menu a[href="kcact:rm"]').click(function() { + if (!data.writable) return false; + browser.hideDialog(); + browser.confirm(browser.label("Are you sure you want to delete this file?"), + function(callBack) { + $.ajax({ + type: 'POST', + dataType: 'json', + url: browser.baseGetData('delete'), + data: {dir:browser.dir, file:data.name}, + async: false, + success: function(data) { + if (callBack) callBack(); + browser.clearClipboard(); + if (browser.check4errors(data)) + return; + browser.refresh(); + }, + error: function() { + if (callBack) callBack(); + browser.alert(browser.label("Unknown error.")); + } + }); + } + ); + return false; + }); + } + + $('.menu a[href="kcact:view"]').click(function() { + browser.hideDialog(); + var ts = new Date().getTime(); + var showImage = function(data) { + url = _.escapeDirs(browser.uploadURL + '/' + browser.dir + '/' + data.name) + '?ts=' + ts, + $('#loading').html(browser.label("Loading image...")); + $('#loading').css('display', 'inline'); + var img = new Image(); + img.src = url; + img.onerror = function() { + browser.lock = false; + $('#loading').css('display', 'none'); + browser.alert(browser.label("Unknown error.")); + $(document).unbind('keydown'); + $(document).keydown(function(e) { + return !browser.selectAll(e); + }); + browser.refresh(); + }; + var onImgLoad = function() { + browser.lock = false; + $('#files .file').each(function() { + if ($(this).data('name') == data.name) + browser.ssImage = this; + }); + $('#loading').css('display', 'none'); + $('#dialog').html('
    '); + $('#dialog img').attr({ + src: url, + title: data.name + }).fadeIn('fast', function() { + var o_w = $('#dialog').outerWidth(); + var o_h = $('#dialog').outerHeight(); + var f_w = $(window).width() - 30; + var f_h = $(window).height() - 30; + if ((o_w > f_w) || (o_h > f_h)) { + if ((f_w / f_h) > (o_w / o_h)) + f_w = parseInt((o_w * f_h) / o_h); + else if ((f_w / f_h) < (o_w / o_h)) + f_h = parseInt((o_h * f_w) / o_w); + $('#dialog img').attr({ + width: f_w, + height: f_h + }); + } + $('#dialog').unbind('click'); + $('#dialog').click(function(e) { + browser.hideDialog(); + $(document).unbind('keydown'); + $(document).keydown(function(e) { + return !browser.selectAll(e); + }); + if (browser.ssImage) { + browser.selectFile($(browser.ssImage), e); + } + }); + browser.showDialog(); + var images = []; + $.each(browser.files, function(i, file) { + if (file.thumb || file.smallThumb) + images[images.length] = file; + }); + if (images.length) + $.each(images, function(i, image) { + if (image.name == data.name) { + $(document).unbind('keydown'); + $(document).keydown(function(e) { + if (images.length > 1) { + if (!browser.lock && (e.keyCode == 37)) { + var nimg = i + ? images[i - 1] + : images[images.length - 1]; + browser.lock = true; + showImage(nimg); + } + if (!browser.lock && (e.keyCode == 39)) { + var nimg = (i >= images.length - 1) + ? images[0] + : images[i + 1]; + browser.lock = true; + showImage(nimg); + } + } + if (e.keyCode == 27) { + browser.hideDialog(); + $(document).unbind('keydown'); + $(document).keydown(function(e) { + return !browser.selectAll(e); + }); + } + }); + } + }); + }); + }; + if (img.complete) + onImgLoad(); + else + img.onload = onImgLoad; + }; + showImage(data); + return false; + }); +}; diff --git a/protected/extensions/ckeditor/kcfinder/js/browser/folders.js b/protected/extensions/ckeditor/kcfinder/js/browser/folders.js new file mode 100644 index 0000000..655f887 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/browser/folders.js @@ -0,0 +1,369 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */?> + +browser.initFolders = function() { + $('#folders').scroll(function() { + browser.hideDialog(); + }); + $('div.folder > a').unbind(); + $('div.folder > a').bind('click', function() { + browser.hideDialog(); + return false; + }); + $('div.folder > a > span.brace').unbind(); + $('div.folder > a > span.brace').click(function() { + if ($(this).hasClass('opened') || $(this).hasClass('closed')) + browser.expandDir($(this).parent()); + }); + $('div.folder > a > span.folder').unbind(); + $('div.folder > a > span.folder').click(function() { + browser.changeDir($(this).parent()); + }); + $('div.folder > a > span.folder').rightClick(function(e) { + _.unselect(); + browser.menuDir($(this).parent(), e); + }); + + if ($.browser.msie && $.browser.version && + (parseInt($.browser.version.substr(0, 1)) < 8) + ) { + var fls = $('div.folder').get(); + var body = $('body').get(0); + var div; + $.each(fls, function(i, folder) { + div = document.createElement('div'); + div.style.display = 'inline'; + div.style.margin = div.style.border = div.style.padding = '0'; + div.innerHTML='
    ' + $(folder).html() + "
    "; + body.appendChild(div); + $(folder).css('width', $(div).innerWidth() + 'px'); + body.removeChild(div); + }); + } +}; + +browser.setTreeData = function(data, path) { + if (!path) + path = ''; + else if (path.length && (path.substr(path.length - 1, 1) != '/')) + path += '/'; + path += data.name; + var selector = '#folders a[href="kcdir:/' + _.escapeDirs(path) + '"]'; + $(selector).data({ + name: data.name, + path: path, + readable: data.readable, + writable: data.writable, + removable: data.removable, + hasDirs: data.hasDirs + }); + $(selector + ' span.folder').addClass(data.current ? 'current' : 'regular'); + if (data.dirs && data.dirs.length) { + $(selector + ' span.brace').addClass('opened'); + $.each(data.dirs, function(i, cdir) { + browser.setTreeData(cdir, path + '/'); + }); + } else if (data.hasDirs) + $(selector + ' span.brace').addClass('closed'); +}; + +browser.buildTree = function(root, path) { + if (!path) path = ""; + path += root.name; + var html = '
     ' + _.htmlData(root.name) + ''; + if (root.dirs) { + html += '
    '; + for (var i = 0; i < root.dirs.length; i++) { + cdir = root.dirs[i]; + html += browser.buildTree(cdir, path + '/'); + } + html += '
    '; + } + html += '
    '; + return html; +}; + +browser.expandDir = function(dir) { + var path = dir.data('path'); + if (dir.children('.brace').hasClass('opened')) { + dir.parent().children('.folders').hide(500, function() { + if (path == browser.dir.substr(0, path.length)) + browser.changeDir(dir); + }); + dir.children('.brace').removeClass('opened'); + dir.children('.brace').addClass('closed'); + } else { + if (dir.parent().children('.folders').get(0)) { + dir.parent().children('.folders').show(500); + dir.children('.brace').removeClass('closed'); + dir.children('.brace').addClass('opened'); + } else if (!$('#loadingDirs').get(0)) { + dir.parent().append('
    ' + this.label("Loading folders...") + '
    '); + $('#loadingDirs').css('display', 'none'); + $('#loadingDirs').show(200, function() { + $.ajax({ + type: 'POST', + dataType: 'json', + url: browser.baseGetData('expand'), + data: {dir:path}, + async: false, + success: function(data) { + $('#loadingDirs').hide(200, function() { + $('#loadingDirs').detach(); + }); + if (browser.check4errors(data)) + return; + + var html = ''; + $.each(data.dirs, function(i, cdir) { + html += ''; + }); + if (html.length) { + dir.parent().append('
    ' + html + '
    '); + var folders = $(dir.parent().children('.folders').first()); + folders.css('display', 'none'); + $(folders).show(500); + $.each(data.dirs, function(i, cdir) { + browser.setTreeData(cdir, path); + }); + } + if (data.dirs.length) { + dir.children('.brace').removeClass('closed'); + dir.children('.brace').addClass('opened'); + } else { + dir.children('.brace').removeClass('opened'); + dir.children('.brace').removeClass('closed'); + } + browser.initFolders(); + browser.initDropUpload(); + }, + error: function() { + $('#loadingDirs').detach(); + browser.alert(browser.label("Unknown error.")); + } + }); + }); + } + } +}; + +browser.changeDir = function(dir) { + if (dir.children('span.folder').hasClass('regular')) { + $('div.folder > a > span.folder').removeClass('current'); + $('div.folder > a > span.folder').removeClass('regular'); + $('div.folder > a > span.folder').addClass('regular'); + dir.children('span.folder').removeClass('regular'); + dir.children('span.folder').addClass('current'); + $('#files').html(browser.label("Loading files...")); + $.ajax({ + type: 'POST', + dataType: 'json', + url: browser.baseGetData('chDir'), + data: {dir:dir.data('path')}, + async: false, + success: function(data) { + if (browser.check4errors(data)) + return; + browser.files = data.files; + browser.orderFiles(); + browser.dir = dir.data('path'); + browser.dirWritable = data.dirWritable; + var title = "KCFinder: /" + browser.dir; + document.title = title; + if (browser.opener.TinyMCE) + tinyMCEPopup.editor.windowManager.setTitle(window, title); + browser.statusDir(); + }, + error: function() { + $('#files').html(browser.label("Unknown error.")); + } + }); + } +}; + +browser.statusDir = function() { + for (var i = 0, size = 0; i < this.files.length; i++) + size += parseInt(this.files[i].size); + size = this.humanSize(size); + $('#fileinfo').html(this.files.length + ' ' + this.label("files") + ' (' + size + ')'); +}; + +browser.menuDir = function(dir, e) { + var data = dir.data(); + var html = ''; + + $('#dialog').html(html); + this.showMenu(e); + $('div.folder > a > span.folder').removeClass('context'); + if (dir.children('span.folder').hasClass('regular')) + dir.children('span.folder').addClass('context'); + + if (this.clipboard && this.clipboard.length && data.writable) { + + $('.menu a[href="kcact:cpcbd"]').click(function() { + browser.hideDialog(); + browser.copyClipboard(data.path); + return false; + }); + + $('.menu a[href="kcact:mvcbd"]').click(function() { + browser.hideDialog(); + browser.moveClipboard(data.path); + return false; + }); + } + + $('.menu a[href="kcact:refresh"]').click(function() { + browser.hideDialog(); + browser.refreshDir(dir); + return false; + }); + + $('.menu a[href="kcact:download"]').click(function() { + browser.hideDialog(); + browser.post(browser.baseGetData('downloadDir'), {dir:data.path}); + return false; + }); + + $('.menu a[href="kcact:mkdir"]').click(function(e) { + if (!data.writable) return false; + browser.hideDialog(); + browser.fileNameDialog( + e, {dir: data.path}, + 'newDir', '', browser.baseGetData('newDir'), { + title: "New folder name:", + errEmpty: "Please enter new folder name.", + errSlash: "Unallowable characters in folder name.", + errDot: "Folder name shouldn't begins with '.'" + }, function() { + browser.refreshDir(dir); + browser.initDropUpload(); + if (!data.hasDirs) { + dir.data('hasDirs', true); + dir.children('span.brace').addClass('closed'); + } + } + ); + return false; + }); + + $('.menu a[href="kcact:mvdir"]').click(function(e) { + if (!data.removable) return false; + browser.hideDialog(); + browser.fileNameDialog( + e, {dir: data.path}, + 'newName', data.name, browser.baseGetData('renameDir'), { + title: "New folder name:", + errEmpty: "Please enter new folder name.", + errSlash: "Unallowable characters in folder name.", + errDot: "Folder name shouldn't begins with '.'" + }, function(dt) { + if (!dt.name) { + browser.alert(browser.label("Unknown error.")); + return; + } + var currentDir = (data.path == browser.dir); + dir.children('span.folder').html(_.htmlData(dt.name)); + dir.data('name', dt.name); + dir.data('path', _.dirname(data.path) + '/' + dt.name); + if (currentDir) + browser.dir = dir.data('path'); + browser.initDropUpload(); + }, + true + ); + return false; + }); + + $('.menu a[href="kcact:rmdir"]').click(function() { + if (!data.removable) return false; + browser.hideDialog(); + browser.confirm( + "Are you sure you want to delete this folder and all its content?", + function(callBack) { + $.ajax({ + type: 'POST', + dataType: 'json', + url: browser.baseGetData('deleteDir'), + data: {dir: data.path}, + async: false, + success: function(data) { + if (callBack) callBack(); + if (browser.check4errors(data)) + return; + dir.parent().hide(500, function() { + var folders = dir.parent().parent(); + var pDir = folders.parent().children('a').first(); + dir.parent().detach(); + if (!folders.children('div.folder').get(0)) { + pDir.children('span.brace').first().removeClass('opened'); + pDir.children('span.brace').first().removeClass('closed'); + pDir.parent().children('.folders').detach(); + pDir.data('hasDirs', false); + } + if (pDir.data('path') == browser.dir.substr(0, pDir.data('path').length)) + browser.changeDir(pDir); + browser.initDropUpload(); + }); + }, + error: function() { + if (callBack) callBack(); + browser.alert(browser.label("Unknown error.")); + } + }); + } + ); + return false; + }); +}; + +browser.refreshDir = function(dir) { + var path = dir.data('path'); + if (dir.children('.brace').hasClass('opened') || dir.children('.brace').hasClass('closed')) { + dir.children('.brace').removeClass('opened'); + dir.children('.brace').addClass('closed'); + } + dir.parent().children('.folders').first().detach(); + if (path == browser.dir.substr(0, path.length)) + browser.changeDir(dir); + browser.expandDir(dir); + return true; +}; diff --git a/protected/extensions/ckeditor/kcfinder/js/browser/init.js b/protected/extensions/ckeditor/kcfinder/js/browser/init.js new file mode 100644 index 0000000..f24d2ba --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/browser/init.js @@ -0,0 +1,187 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */?> + +browser.init = function() { + if (!this.checkAgent()) return; + + $('body').click(function() { + browser.hideDialog(); + }); + $('#shadow').click(function() { + return false; + }); + $('#dialog').unbind(); + $('#dialog').click(function() { + return false; + }); + $('#alert').unbind(); + $('#alert').click(function() { + return false; + }); + this.initOpeners(); + this.initSettings(); + this.initContent(); + this.initToolbar(); + this.initResizer(); + this.initDropUpload(); +}; + +browser.checkAgent = function() { + if (!$.browser.version || + ($.browser.msie && (parseInt($.browser.version) < 7) && !this.support.chromeFrame) || + ($.browser.opera && (parseInt($.browser.version) < 10)) || + ($.browser.mozilla && (parseFloat($.browser.version.replace(/^(\d+(\.\d+)?)([^\d].*)?$/, "$1")) < 1.8)) + ) { + var html = '
    Your browser is not capable to display KCFinder. Please update your browser or install another one: Mozilla Firefox, Apple Safari, Google Chrome, Opera.'; + if ($.browser.msie) + html += ' You may also install Google Chrome Frame ActiveX plugin to get Internet Explorer 6 working.'; + html += '
    '; + $('body').html(html); + return false; + } + return true; +}; + +browser.initOpeners = function() { + if (this.opener.TinyMCE && (typeof(tinyMCEPopup) == 'undefined')) + this.opener.TinyMCE = null; + + if (this.opener.TinyMCE) + this.opener.callBack = true; + + if ((!this.opener.name || (this.opener.name == 'fckeditor')) && + window.opener && window.opener.SetUrl + ) { + this.opener.FCKeditor = true; + this.opener.callBack = true; + } + + if (this.opener.CKEditor) { + if (window.parent && window.parent.CKEDITOR) + this.opener.CKEditor.object = window.parent.CKEDITOR; + else if (window.opener && window.opener.CKEDITOR) { + this.opener.CKEditor.object = window.opener.CKEDITOR; + this.opener.callBack = true; + } else + this.opener.CKEditor = null; + } + + if (!this.opener.CKEditor && !this.opener.FCKEditor && !this.TinyMCE) { + if ((window.opener && window.opener.KCFinder && window.opener.KCFinder.callBack) || + (window.parent && window.parent.KCFinder && window.parent.KCFinder.callBack) + ) + this.opener.callBack = window.opener + ? window.opener.KCFinder.callBack + : window.parent.KCFinder.callBack; + + if (( + window.opener && + window.opener.KCFinder && + window.opener.KCFinder.callBackMultiple + ) || ( + window.parent && + window.parent.KCFinder && + window.parent.KCFinder.callBackMultiple + ) + ) + this.opener.callBackMultiple = window.opener + ? window.opener.KCFinder.callBackMultiple + : window.parent.KCFinder.callBackMultiple; + } +}; + +browser.initContent = function() { + $('div#folders').html(this.label("Loading folders...")); + $('div#files').html(this.label("Loading files...")); + $.ajax({ + type: 'GET', + dataType: 'json', + url: browser.baseGetData('init'), + async: false, + success: function(data) { + if (browser.check4errors(data)) + return; + browser.dirWritable = data.dirWritable; + $('#folders').html(browser.buildTree(data.tree)); + browser.setTreeData(data.tree); + browser.initFolders(); + browser.files = data.files ? data.files : []; + browser.orderFiles(); + }, + error: function() { + $('div#folders').html(browser.label("Unknown error.")); + $('div#files').html(browser.label("Unknown error.")); + } + }); +}; + +browser.initResizer = function() { + var cursor = ($.browser.opera) ? 'move' : 'col-resize'; + $('#resizer').css('cursor', cursor); + $('#resizer').drag('start', function() { + $(this).css({opacity:'0.4', filter:'alpha(opacity:40)'}); + $('#all').css('cursor', cursor); + }); + $('#resizer').drag(function(e) { + var left = e.pageX - parseInt(_.nopx($(this).css('width')) / 2); + left = (left >= 0) ? left : 0; + left = (left + _.nopx($(this).css('width')) < $(window).width()) + ? left : $(window).width() - _.nopx($(this).css('width')); + $(this).css('left', left); + }); + var end = function() { + $(this).css({opacity:'0', filter:'alpha(opacity:0)'}); + $('#all').css('cursor', ''); + var left = _.nopx($(this).css('left')) + _.nopx($(this).css('width')); + var right = $(window).width() - left; + $('#left').css('width', left + 'px'); + $('#right').css('width', right + 'px'); + _('files').style.width = $('#right').innerWidth() - _.outerHSpace('#files') + 'px'; + _('resizer').style.left = $('#left').outerWidth() - _.outerRightSpace('#folders', 'm') + 'px'; + _('resizer').style.width = _.outerRightSpace('#folders', 'm') + _.outerLeftSpace('#files', 'm') + 'px'; + browser.fixFilesHeight(); + }; + $('#resizer').drag('end', end); + $('#resizer').mouseup(end); +}; + +browser.resize = function() { + _('left').style.width = '25%'; + _('right').style.width = '75%'; + _('toolbar').style.height = $('#toolbar a').outerHeight() + "px"; + _('shadow').style.width = $(window).width() + 'px'; + _('shadow').style.height = _('resizer').style.height = $(window).height() + 'px'; + _('left').style.height = _('right').style.height = + $(window).height() - $('#status').outerHeight() + 'px'; + _('folders').style.height = + $('#left').outerHeight() - _.outerVSpace('#folders') + 'px'; + browser.fixFilesHeight(); + var width = $('#left').outerWidth() + $('#right').outerWidth(); + _('status').style.width = width + 'px'; + while ($('#status').outerWidth() > width) + _('status').style.width = _.nopx(_('status').style.width) - 1 + 'px'; + while ($('#status').outerWidth() < width) + _('status').style.width = _.nopx(_('status').style.width) + 1 + 'px'; + if ($.browser.msie && ($.browser.version.substr(0, 1) < 8)) + _('right').style.width = $(window).width() - $('#left').outerWidth() + 'px'; + _('files').style.width = $('#right').innerWidth() - _.outerHSpace('#files') + 'px'; + _('resizer').style.left = $('#left').outerWidth() - _.outerRightSpace('#folders', 'm') + 'px'; + _('resizer').style.width = _.outerRightSpace('#folders', 'm') + _.outerLeftSpace('#files', 'm') + 'px'; +}; + +browser.fixFilesHeight = function() { + _('files').style.height = + $('#left').outerHeight() - $('#toolbar').outerHeight() - _.outerVSpace('#files') - + (($('#settings').css('display') != "none") ? $('#settings').outerHeight() : 0) + 'px'; +}; diff --git a/protected/extensions/ckeditor/kcfinder/js/browser/joiner.php b/protected/extensions/ckeditor/kcfinder/js/browser/joiner.php new file mode 100644 index 0000000..72a19a3 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/browser/joiner.php @@ -0,0 +1,35 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +chdir(".."); // For compatibality +chdir(".."); +require "lib/helper_httpCache.php"; +require "lib/helper_dir.php"; +$files = dir::content("js/browser", array( + 'types' => "file", + 'pattern' => '/^.*\.js$/' +)); + +foreach ($files as $file) { + $fmtime = filemtime($file); + if (!isset($mtime) || ($fmtime > $mtime)) + $mtime = $fmtime; +} + +httpCache::checkMTime($mtime); +header("Content-Type: text/javascript"); +foreach ($files as $file) + require $file; + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/js/browser/misc.js b/protected/extensions/ckeditor/kcfinder/js/browser/misc.js new file mode 100644 index 0000000..61655e5 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/browser/misc.js @@ -0,0 +1,383 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */?> + +browser.drag = function(ev, dd) { + var top = dd.offsetY, + left = dd.offsetX; + if (top < 0) top = 0; + if (left < 0) left = 0; + if (top + $(this).outerHeight() > $(window).height()) + top = $(window).height() - $(this).outerHeight(); + if (left + $(this).outerWidth() > $(window).width()) + left = $(window).width() - $(this).outerWidth(); + $(this).css({ + top: top, + left: left + }); +}; + +browser.showDialog = function(e) { + $('#dialog').css({left: 0, top: 0}); + this.shadow(); + if ($('#dialog div.box') && !$('#dialog div.title').get(0)) { + var html = $('#dialog div.box').html(); + var title = $('#dialog').data('title') ? $('#dialog').data('title') : ""; + html = '
    ' + title + '
    ' + html; + $('#dialog div.box').html(html); + $('#dialog div.title span.close').mousedown(function() { + $(this).addClass('clicked'); + }); + $('#dialog div.title span.close').mouseup(function() { + $(this).removeClass('clicked'); + }); + $('#dialog div.title span.close').click(function() { + browser.hideDialog(); + browser.hideAlert(); + }); + } + $('#dialog').drag(browser.drag, {handle: '#dialog div.title'}); + $('#dialog').css('display', 'block'); + + if (e) { + var left = e.pageX - parseInt($('#dialog').outerWidth() / 2); + var top = e.pageY - parseInt($('#dialog').outerHeight() / 2); + if (left < 0) left = 0; + if (top < 0) top = 0; + if (($('#dialog').outerWidth() + left) > $(window).width()) + left = $(window).width() - $('#dialog').outerWidth(); + if (($('#dialog').outerHeight() + top) > $(window).height()) + top = $(window).height() - $('#dialog').outerHeight(); + $('#dialog').css({ + left: left + 'px', + top: top + 'px' + }); + } else + $('#dialog').css({ + left: parseInt(($(window).width() - $('#dialog').outerWidth()) / 2) + 'px', + top: parseInt(($(window).height() - $('#dialog').outerHeight()) / 2) + 'px' + }); + $(document).unbind('keydown'); + $(document).keydown(function(e) { + if (e.keyCode == 27) + browser.hideDialog(); + }); +}; + +browser.hideDialog = function() { + this.unshadow(); + if ($('#clipboard').hasClass('selected')) + $('#clipboard').removeClass('selected'); + $('#dialog').css('display', 'none'); + $('div.folder > a > span.folder').removeClass('context'); + $('#dialog').html(''); + $('#dialog').data('title', null); + $('#dialog').unbind(); + $('#dialog').click(function() { + return false; + }); + $(document).unbind('keydown'); + $(document).keydown(function(e) { + return !browser.selectAll(e); + }); + browser.hideAlert(); +}; + +browser.showAlert = function(shadow) { + $('#alert').css({left: 0, top: 0}); + if (typeof shadow == 'undefined') + shadow = true; + if (shadow) + this.shadow(); + var left = parseInt(($(window).width() - $('#alert').outerWidth()) / 2), + top = parseInt(($(window).height() - $('#alert').outerHeight()) / 2); + var wheight = $(window).height(); + if (top < 0) + top = 0; + $('#alert').css({ + left: left + 'px', + top: top + 'px', + display: 'block' + }); + if ($('#alert').outerHeight() > wheight) { + $('#alert div.message').css({ + height: wheight - $('#alert div.title').outerHeight() - $('#alert div.ok').outerHeight() - 20 + 'px' + }); + } + $(document).unbind('keydown'); + $(document).keydown(function(e) { + if (e.keyCode == 27) { + browser.hideDialog(); + browser.hideAlert(); + $(document).unbind('keydown'); + $(document).keydown(function(e) { + return !browser.selectAll(e); + }); + } + }); +}; + +browser.hideAlert = function(shadow) { + if (typeof shadow == 'undefined') + shadow = true; + if (shadow) + this.unshadow(); + $('#alert').css('display', 'none'); + $('#alert').html(''); + $('#alert').data('title', null); +}; + +browser.alert = function(msg, shadow) { + msg = msg.replace(/\r?\n/g, "
    "); + var title = $('#alert').data('title') ? $('#alert').data('title') : browser.label("Attention"); + $('#alert').html('
    ' + title + '
    ' + msg + '
    '); + $('#alert div.ok button').click(function() { + browser.hideAlert(shadow); + }); + $('#alert div.title span.close').mousedown(function() { + $(this).addClass('clicked'); + }); + $('#alert div.title span.close').mouseup(function() { + $(this).removeClass('clicked'); + }); + $('#alert div.title span.close').click(function() { + browser.hideAlert(shadow); + }); + $('#alert').drag(browser.drag, {handle: "#alert div.title"}); + browser.showAlert(shadow); +}; + +browser.confirm = function(question, callBack) { + $('#dialog').data('title', browser.label("Question")); + $('#dialog').html('
    ' + browser.label(question) + '
    '); + browser.showDialog(); + $('#dialog div.buttons button').first().click(function() { + browser.hideDialog(); + }); + $('#dialog div.buttons button').last().click(function() { + if (callBack) + callBack(function() { + browser.hideDialog(); + }); + else + browser.hideDialog(); + }); + $('#dialog div.buttons button').get(1).focus(); +}; + +browser.shadow = function() { + $('#shadow').css('display', 'block'); +}; + +browser.unshadow = function() { + $('#shadow').css('display', 'none'); +}; + +browser.showMenu = function(e) { + var left = e.pageX; + var top = e.pageY; + if (($('#dialog').outerWidth() + left) > $(window).width()) + left = $(window).width() - $('#dialog').outerWidth(); + if (($('#dialog').outerHeight() + top) > $(window).height()) + top = $(window).height() - $('#dialog').outerHeight(); + $('#dialog').css({ + left: left + 'px', + top: top + 'px', + display: 'none' + }); + $('#dialog').fadeIn(); +}; + +browser.fileNameDialog = function(e, post, inputName, inputValue, url, labels, callBack, selectAll) { + var html = '
    ' + + '
    ' + + '
    ' + + '
    ' + + ' ' + + '' + + '
    '; + $('#dialog').html(html); + $('#dialog').data('title', this.label(labels.title)); + $('#dialog input[name="' + inputName + '"]').attr('value', inputValue); + $('#dialog').unbind(); + $('#dialog').click(function() { + return false; + }); + $('#dialog form').submit(function() { + var name = this.elements[0]; + name.value = $.trim(name.value); + if (name.value == '') { + browser.alert(browser.label(labels.errEmpty), false); + name.focus(); + return; + } else if (/[\/\\]/g.test(name.value)) { + browser.alert(browser.label(labels.errSlash), false); + name.focus(); + return; + } else if (name.value.substr(0, 1) == ".") { + browser.alert(browser.label(labels.errDot), false); + name.focus(); + return; + } + eval('post.' + inputName + ' = name.value;'); + $.ajax({ + type: 'POST', + dataType: 'json', + url: url, + data: post, + async: false, + success: function(data) { + if (browser.check4errors(data, false)) + return; + if (callBack) callBack(data); + browser.hideDialog(); + }, + error: function() { + browser.alert(browser.label("Unknown error."), false); + } + }); + return false; + }); + browser.showDialog(e); + $('#dialog').css('display', 'block'); + $('#dialog input[type="submit"]').click(function() { + return $('#dialog form').submit(); + }); + var field = $('#dialog input[type="text"]'); + var value = field.attr('value'); + if (!selectAll && /^(.+)\.[^\.]+$/ .test(value)) { + value = value.replace(/^(.+)\.[^\.]+$/, "$1"); + _.selection(field.get(0), 0, value.length); + } else { + field.get(0).focus(); + field.get(0).select(); + } +}; + +browser.orderFiles = function(callBack, selected) { + var order = _.kuki.get('order'); + var desc = (_.kuki.get('orderDesc') == 'on'); + + if (!browser.files || !browser.files.sort) + browser.files = []; + + browser.files = browser.files.sort(function(a, b) { + var a1, b1, arr; + if (!order) order = 'name'; + + if (order == 'date') { + a1 = a.mtime; + b1 = b.mtime; + } else if (order == 'type') { + a1 = _.getFileExtension(a.name); + b1 = _.getFileExtension(b.name); + } else if (order == 'size') { + a1 = a.size; + b1 = b.size; + } else + eval('a1 = a.' + order + '.toLowerCase(); b1 = b.' + order + '.toLowerCase();'); + + if ((order == 'size') || (order == 'date')) { + if (a1 < b1) return desc ? 1 : -1; + if (a1 > b1) return desc ? -1 : 1; + } + + if (a1 == b1) { + a1 = a.name.toLowerCase(); + b1 = b.name.toLowerCase(); + arr = [a1, b1]; + arr = arr.sort(); + return (arr[0] == a1) ? -1 : 1; + } + + arr = [a1, b1]; + arr = arr.sort(); + if (arr[0] == a1) return desc ? 1 : -1; + return desc ? -1 : 1; + }); + + browser.showFiles(callBack, selected); + browser.initFiles(); +}; + +browser.humanSize = function(size) { + if (size < 1024) { + size = size.toString() + ' B'; + } else if (size < 1048576) { + size /= 1024; + size = parseInt(size).toString() + ' KB'; + } else if (size < 1073741824) { + size /= 1048576; + size = parseInt(size).toString() + ' MB'; + } else if (size < 1099511627776) { + size /= 1073741824; + size = parseInt(size).toString() + ' GB'; + } else { + size /= 1099511627776; + size = parseInt(size).toString() + ' TB'; + } + return size; +}; + +browser.baseGetData = function(act) { + var data = 'browse.php?type=' + encodeURIComponent(this.type) + '&lng=' + this.lang; + if (act) + data += "&act=" + act; + if (this.cms) + data += "&cms=" + this.cms; + return data; +}; + +browser.label = function(index, data) { + var label = this.labels[index] ? this.labels[index] : index; + if (data) + $.each(data, function(key, val) { + label = label.replace('{' + key + '}', val); + }); + return label; +}; + +browser.check4errors = function(data, shadow) { + if (!data.error) + return false; + var msg; + if (data.error.join) + msg = data.error.join("\n"); + else + msg = data.error; + browser.alert(msg, shadow); + return true; +}; + +browser.post = function(url, data) { + var html = '
    '; + $.each(data, function(key, val) { + if ($.isArray(val)) + $.each(val, function(i, aval) { + html += ''; + }); + else + html += ''; + }); + html += '
    '; + $('#dialog').html(html); + $('#dialog').css('display', 'block'); + $('#postForm').get(0).submit(); +}; + +browser.fadeFiles = function() { + $('#files > div').css({ + opacity: '0.4', + filter: 'alpha(opacity:40)' + }); +}; diff --git a/protected/extensions/ckeditor/kcfinder/js/browser/settings.js b/protected/extensions/ckeditor/kcfinder/js/browser/settings.js new file mode 100644 index 0000000..d7b423a --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/browser/settings.js @@ -0,0 +1,102 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */?> + +browser.initSettings = function() { + + if (!this.shows.length) { + var showInputs = $('#show input[type="checkbox"]').toArray(); + $.each(showInputs, function (i, input) { + browser.shows[i] = input.name; + }); + } + + var shows = this.shows; + + if (!_.kuki.isSet('showname')) { + _.kuki.set('showname', 'on'); + $.each(shows, function (i, val) { + if (val != "name") _.kuki.set('show' + val, 'off'); + }); + } + + $('#show input[type="checkbox"]').click(function() { + var kuki = $(this).get(0).checked ? 'on' : 'off'; + _.kuki.set('show' + $(this).get(0).name, kuki) + if ($(this).get(0).checked) + $('#files .file div.' + $(this).get(0).name).css('display', 'block'); + else + $('#files .file div.' + $(this).get(0).name).css('display', 'none'); + }); + + $.each(shows, function(i, val) { + var checked = (_.kuki.get('show' + val) == 'on') ? 'checked' : ''; + $('#show input[name="' + val + '"]').get(0).checked = checked; + }); + + if (!this.orders.length) { + var orderInputs = $('#order input[type="radio"]').toArray(); + $.each(orderInputs, function (i, input) { + browser.orders[i] = input.value; + }); + } + + var orders = this.orders; + + if (!_.kuki.isSet('order')) + _.kuki.set('order', 'name'); + + if (!_.kuki.isSet('orderDesc')) + _.kuki.set('orderDesc', 'off'); + + $('#order input[value="' + _.kuki.get('order') + '"]').get(0).checked = true; + $('#order input[name="desc"]').get(0).checked = (_.kuki.get('orderDesc') == 'on'); + + $('#order input[type="radio"]').click(function() { + _.kuki.set('order', $(this).get(0).value); + browser.orderFiles(); + }); + + $('#order input[name="desc"]').click(function() { + _.kuki.set('orderDesc', $(this).get(0).checked ? 'on' : 'off'); + browser.orderFiles(); + }); + + if (!_.kuki.isSet('view')) + _.kuki.set('view', 'thumbs'); + + if (_.kuki.get('view') == 'list') { + $('#show input').each(function() { this.checked = true; }); + $('#show input').each(function() { this.disabled = true; }); + } + + $('#view input[value="' + _.kuki.get('view') + '"]').get(0).checked = true; + + $('#view input').click(function() { + var view = $(this).attr('value'); + if (_.kuki.get('view') != view) { + _.kuki.set('view', view); + if (view == 'list') { + $('#show input').each(function() { this.checked = true; }); + $('#show input').each(function() { this.disabled = true; }); + } else { + $.each(browser.shows, function(i, val) { + $('#show input[name="' + val + '"]').get(0).checked = + (_.kuki.get('show' + val) == "on"); + }); + $('#show input').each(function() { this.disabled = false; }); + } + } + browser.refresh(); + }); +}; diff --git a/protected/extensions/ckeditor/kcfinder/js/browser/toolbar.js b/protected/extensions/ckeditor/kcfinder/js/browser/toolbar.js new file mode 100644 index 0000000..e5c893a --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/browser/toolbar.js @@ -0,0 +1,329 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */?> + +browser.initToolbar = function() { + $('#toolbar a').click(function() { + browser.hideDialog(); + }); + + if (!_.kuki.isSet('displaySettings')) + _.kuki.set('displaySettings', 'off'); + + if (_.kuki.get('displaySettings') == 'on') { + $('#toolbar a[href="kcact:settings"]').addClass('selected'); + $('#settings').css('display', 'block'); + browser.resize(); + } + + $('#toolbar a[href="kcact:settings"]').click(function () { + if ($('#settings').css('display') == 'none') { + $(this).addClass('selected'); + _.kuki.set('displaySettings', 'on'); + $('#settings').css('display', 'block'); + browser.fixFilesHeight(); + } else { + $(this).removeClass('selected'); + _.kuki.set('displaySettings', 'off'); + $('#settings').css('display', 'none'); + browser.fixFilesHeight(); + } + return false; + }); + + $('#toolbar a[href="kcact:refresh"]').click(function() { + browser.refresh(); + return false; + }); + + if (window.opener || this.opener.TinyMCE || $('iframe', window.parent.document).get(0)) + $('#toolbar a[href="kcact:maximize"]').click(function() { + browser.maximize(this); + return false; + }); + else + $('#toolbar a[href="kcact:maximize"]').css('display', 'none'); + + $('#toolbar a[href="kcact:about"]').click(function() { + var html = '
    ' + + '
    KCFinder ' + browser.version + '
    '; + if (browser.support.check4Update) + html += '
    ' + browser.label("Checking for new version...") + '
    '; + html += + '
    ' + browser.label("Licenses:") + ' GPLv2 & LGPLv2
    ' + + '
    Copyright ©2010, 2011 Pavel Tzonkov
    ' + + '' + + '
    '; + $('#dialog').html(html); + $('#dialog').data('title', browser.label("About")); + browser.showDialog(); + var close = function() { + browser.hideDialog(); + browser.unshadow(); + } + $('#dialog button').click(close); + var span = $('#checkver > span'); + setTimeout(function() { + $.ajax({ + dataType: 'json', + url: browser.baseGetData('check4Update'), + async: true, + success: function(data) { + if (!$('#dialog').html().length) + return; + span.removeClass('loading'); + if (!data.version) { + span.html(browser.label("Unable to connect!")); + browser.showDialog(); + return; + } + if (browser.version < data.version) + span.html('' + browser.label("Download version {version} now!", {version: data.version}) + ''); + else + span.html(browser.label("KCFinder is up to date!")); + browser.showDialog(); + }, + error: function() { + if (!$('#dialog').html().length) + return; + span.removeClass('loading'); + span.html(browser.label("Unable to connect!")); + browser.showDialog(); + } + }); + }, 1000); + $('#dialog').unbind(); + + return false; + }); + + this.initUploadButton(); +}; + +browser.initUploadButton = function() { + var btn = $('#toolbar a[href="kcact:upload"]'); + if (!this.access.files.upload) { + btn.css('display', 'none'); + return; + } + var top = btn.get(0).offsetTop; + var width = btn.outerWidth(); + var height = btn.outerHeight(); + $('#toolbar').prepend('
    ' + + '
    ' + + '' + + '' + + '
    ' + + '
    '); + $('#upload input').css('margin-left', "-" + ($('#upload input').outerWidth() - width) + 'px'); + $('#upload').mouseover(function() { + $('#toolbar a[href="kcact:upload"]').addClass('hover'); + }); + $('#upload').mouseout(function() { + $('#toolbar a[href="kcact:upload"]').removeClass('hover'); + }); +}; + +browser.uploadFile = function(form) { + if (!this.dirWritable) { + browser.alert(this.label("Cannot write to upload folder.")); + $('#upload').detach(); + browser.initUploadButton(); + return; + } + form.elements[1].value = browser.dir; + $('').prependTo(document.body); + $('#loading').html(this.label("Uploading file...")); + $('#loading').css('display', 'inline'); + form.submit(); + $('#uploadResponse').load(function() { + var response = $(this).contents().find('body').html(); + $('#loading').css('display', 'none'); + response = response.split("\n"); + var selected = [], errors = []; + $.each(response, function(i, row) { + if (row.substr(0, 1) == '/') + selected[selected.length] = row.substr(1, row.length - 1) + else + errors[errors.length] = row; + }); + if (errors.length) + browser.alert(errors.join("\n")); + if (!selected.length) + selected = null + browser.refresh(selected); + $('#upload').detach(); + setTimeout(function() { + $('#uploadResponse').detach(); + }, 1); + browser.initUploadButton(); + }); +}; + +browser.maximize = function(button) { + if (window.opener) { + window.moveTo(0, 0); + width = screen.availWidth; + height = screen.availHeight; + if ($.browser.opera) + height -= 50; + window.resizeTo(width, height); + + } else if (browser.opener.TinyMCE) { + var win, ifr, id; + + $('iframe', window.parent.document).each(function() { + if (/^mce_\d+_ifr$/.test($(this).attr('id'))) { + id = parseInt($(this).attr('id').replace(/^mce_(\d+)_ifr$/, "$1")); + win = $('#mce_' + id, window.parent.document); + ifr = $('#mce_' + id + '_ifr', window.parent.document); + } + }); + + if ($(button).hasClass('selected')) { + $(button).removeClass('selected'); + win.css({ + left: browser.maximizeMCE.left + 'px', + top: browser.maximizeMCE.top + 'px', + width: browser.maximizeMCE.width + 'px', + height: browser.maximizeMCE.height + 'px' + }); + ifr.css({ + width: browser.maximizeMCE.width - browser.maximizeMCE.Hspace + 'px', + height: browser.maximizeMCE.height - browser.maximizeMCE.Vspace + 'px' + }); + + } else { + $(button).addClass('selected') + browser.maximizeMCE = { + width: _.nopx(win.css('width')), + height: _.nopx(win.css('height')), + left: win.position().left, + top: win.position().top, + Hspace: _.nopx(win.css('width')) - _.nopx(ifr.css('width')), + Vspace: _.nopx(win.css('height')) - _.nopx(ifr.css('height')) + }; + var width = $(window.parent).width(); + var height = $(window.parent).height(); + win.css({ + left: $(window.parent).scrollLeft() + 'px', + top: $(window.parent).scrollTop() + 'px', + width: width + 'px', + height: height + 'px' + }); + ifr.css({ + width: width - browser.maximizeMCE.Hspace + 'px', + height: height - browser.maximizeMCE.Vspace + 'px' + }); + } + + } else if ($('iframe', window.parent.document).get(0)) { + var ifrm = $('iframe[name="' + window.name + '"]', window.parent.document); + var parent = ifrm.parent(); + var width, height; + if ($(button).hasClass('selected')) { + $(button).removeClass('selected'); + if (browser.maximizeThread) { + clearInterval(browser.maximizeThread); + browser.maximizeThread = null; + } + if (browser.maximizeW) browser.maximizeW = null; + if (browser.maximizeH) browser.maximizeH = null; + $.each($('*', window.parent.document).get(), function(i, e) { + e.style.display = browser.maximizeDisplay[i]; + }); + ifrm.css({ + display: browser.maximizeCSS.display, + position: browser.maximizeCSS.position, + left: browser.maximizeCSS.left, + top: browser.maximizeCSS.top, + width: browser.maximizeCSS.width, + height: browser.maximizeCSS.height + }); + $(window.parent).scrollLeft(browser.maximizeLest); + $(window.parent).scrollTop(browser.maximizeTop); + + } else { + $(button).addClass('selected'); + browser.maximizeCSS = { + display: ifrm.css('display'), + position: ifrm.css('position'), + left: ifrm.css('left'), + top: ifrm.css('top'), + width: ifrm.outerWidth() + 'px', + height: ifrm.outerHeight() + 'px' + }; + browser.maximizeTop = $(window.parent).scrollTop(); + browser.maximizeLeft = $(window.parent).scrollLeft(); + browser.maximizeDisplay = []; + $.each($('*', window.parent.document).get(), function(i, e) { + browser.maximizeDisplay[i] = $(e).css('display'); + $(e).css('display', 'none'); + }); + + ifrm.css('display', 'block'); + ifrm.parents().css('display', 'block'); + var resize = function() { + width = $(window.parent).width(); + height = $(window.parent).height(); + if (!browser.maximizeW || (browser.maximizeW != width) || + !browser.maximizeH || (browser.maximizeH != height) + ) { + browser.maximizeW = width; + browser.maximizeH = height; + ifrm.css({ + width: width + 'px', + height: height + 'px' + }); + browser.resize(); + } + } + ifrm.css('position', 'absolute'); + if ((ifrm.offset().left == ifrm.position().left) && + (ifrm.offset().top == ifrm.position().top) + ) + ifrm.css({left: '0', top: '0'}); + else + ifrm.css({ + left: - ifrm.offset().left + 'px', + top: - ifrm.offset().top + 'px' + }); + + resize(); + browser.maximizeThread = setInterval(resize, 250); + } + } +}; + +browser.refresh = function(selected) { + this.fadeFiles(); + $.ajax({ + type: 'POST', + dataType: 'json', + url: browser.baseGetData('chDir'), + data: {dir:browser.dir}, + async: false, + success: function(data) { + if (browser.check4errors(data)) + return; + browser.dirWritable = data.dirWritable; + browser.files = data.files ? data.files : []; + browser.orderFiles(null, selected); + browser.statusDir(); + }, + error: function() { + $('#files > div').css({opacity:'', filter:''}); + $('#files').html(browser.label("Unknown error.")); + } + }); +}; diff --git a/protected/extensions/ckeditor/kcfinder/js/helper.js b/protected/extensions/ckeditor/kcfinder/js/helper.js new file mode 100644 index 0000000..2928300 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/helper.js @@ -0,0 +1,411 @@ +/** This file is part of KCFinder project + * + * @desc Helper object + * @package KCFinder + * @version 2.51 + * @author Pavel Tzonkov + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +var _ = function(id) { + return document.getElementById(id); +}; + +_.nopx = function(val) { + return parseInt(val.replace(/^(\d+)px$/, "$1")); +}; + +_.unselect = function() { + if (document.selection && document.selection.empty) + document.selection.empty() ; + else if (window.getSelection) { + var sel = window.getSelection(); + if (sel && sel.removeAllRanges) + sel.removeAllRanges(); + } +}; + +_.selection = function(field, start, end) { + if (field.createTextRange) { + var selRange = field.createTextRange(); + selRange.collapse(true); + selRange.moveStart('character', start); + selRange.moveEnd('character', end-start); + selRange.select(); + } else if (field.setSelectionRange) { + field.setSelectionRange(start, end); + } else if (field.selectionStart) { + field.selectionStart = start; + field.selectionEnd = end; + } + field.focus(); +}; + +_.htmlValue = function(value) { + return value + .replace(/\&/g, "&") + .replace(/\"/g, """) + .replace(/\'/g, "'"); +}; + +_.htmlData = function(value) { + return value + .replace(/\&/g, "&") + .replace(/\/g, ">") + .replace(/\ /g, " "); +} + +_.jsValue = function(value) { + return value + .replace(/\\/g, "\\\\") + .replace(/\r?\n/, "\\\n") + .replace(/\"/g, "\\\"") + .replace(/\'/g, "\\'"); +}; + +_.basename = function(path) { + var expr = /^.*\/([^\/]+)\/?$/g; + return expr.test(path) + ? path.replace(expr, "$1") + : path; +}; + +_.dirname = function(path) { + var expr = /^(.*)\/[^\/]+\/?$/g; + return expr.test(path) + ? path.replace(expr, "$1") + : ''; +}; + +_.inArray = function(needle, arr) { + if ((typeof arr == 'undefined') || !arr.length || !arr.push) + return false; + for (var i = 0; i < arr.length; i++) + if (arr[i] == needle) + return true; + return false; +}; + +_.getFileExtension = function(filename, toLower) { + if (typeof(toLower) == 'undefined') toLower = true; + if (/^.*\.[^\.]*$/.test(filename)) { + var ext = filename.replace(/^.*\.([^\.]*)$/, "$1"); + return toLower ? ext.toLowerCase(ext) : ext; + } else + return ""; +}; + +_.escapeDirs = function(path) { + var fullDirExpr = /^([a-z]+)\:\/\/([^\/^\:]+)(\:(\d+))?\/(.+)$/, + prefix = ""; + if (fullDirExpr.test(path)) { + var port = path.replace(fullDirExpr, "$4"); + prefix = path.replace(fullDirExpr, "$1://$2") + if (port.length) + prefix += ":" + port; + prefix += "/"; + path = path.replace(fullDirExpr, "$5"); + } + + var dirs = path.split('/'); + var escapePath = ''; + for (var i = 0; i < dirs.length; i++) + escapePath += encodeURIComponent(dirs[i]) + '/'; + + return prefix + escapePath.substr(0, escapePath.length - 1); +}; + +_.outerSpace = function(selector, type, mbp) { + if (!mbp) mbp = "mbp"; + var r = 0; + if (/m/i.test(mbp)) { + var m = _.nopx($(selector).css('margin-' + type)); + if (m) r += m; + } + if (/b/i.test(mbp)) { + var b = _.nopx($(selector).css('border-' + type + '-width')); + if (b) r += b; + } + if (/p/i.test(mbp)) { + var p = _.nopx($(selector).css('padding-' + type)); + if (p) r += p; + } + return r; +}; + +_.outerLeftSpace = function(selector, mbp) { + return _.outerSpace(selector, 'left', mbp); +}; + +_.outerTopSpace = function(selector, mbp) { + return _.outerSpace(selector, 'top', mbp); +}; + +_.outerRightSpace = function(selector, mbp) { + return _.outerSpace(selector, 'right', mbp); +}; + +_.outerBottomSpace = function(selector, mbp) { + return _.outerSpace(selector, 'bottom', mbp); +}; + +_.outerHSpace = function(selector, mbp) { + return (_.outerLeftSpace(selector, mbp) + _.outerRightSpace(selector, mbp)); +}; + +_.outerVSpace = function(selector, mbp) { + return (_.outerTopSpace(selector, mbp) + _.outerBottomSpace(selector, mbp)); +}; + +_.kuki = { + prefix: '', + duration: 356, + domain: '', + path: '', + secure: false, + + set: function(name, value, duration, domain, path, secure) { + name = this.prefix + name; + if (duration == null) duration = this.duration; + if (secure == null) secure = this.secure; + if ((domain == null) && this.domain) domain = this.domain; + if ((path == null) && this.path) path = this.path; + secure = secure ? true : false; + + var date = new Date(); + date.setTime(date.getTime() + (duration * 86400000)); + var expires = date.toGMTString(); + + var str = name + '=' + value + '; expires=' + expires; + if (domain != null) str += '; domain=' + domain; + if (path != null) str += '; path=' + path; + if (secure) str += '; secure'; + + return (document.cookie = str) ? true : false; + }, + + get: function(name) { + name = this.prefix + name; + var nameEQ = name + '='; + var kukis = document.cookie.split(';'); + var kuki; + + for (var i = 0; i < kukis.length; i++) { + kuki = kukis[i]; + while (kuki.charAt(0) == ' ') + kuki = kuki.substring(1, kuki.length); + + if (kuki.indexOf(nameEQ) == 0) + return kuki.substring(nameEQ.length, kuki.length); + } + + return null; + }, + + del: function(name) { + return this.set(name, '', -1); + }, + + isSet: function(name) { + return (this.get(name) != null); + } +}; + +_.md5 = function(string) { + + var RotateLeft = function(lValue, iShiftBits) { + return (lValue<>>(32-iShiftBits)); + }; + + var AddUnsigned = function(lX,lY) { + var lX4, lY4, lX8, lY8, lResult; + lX8 = (lX & 0x80000000); + lY8 = (lY & 0x80000000); + lX4 = (lX & 0x40000000); + lY4 = (lY & 0x40000000); + lResult = (lX & 0x3FFFFFFF) + (lY & 0x3FFFFFFF); + if (lX4 & lY4) + return (lResult ^ 0x80000000 ^ lX8 ^ lY8); + if (lX4 | lY4) + return (lResult & 0x40000000) + ? (lResult ^ 0xC0000000 ^ lX8 ^ lY8) + : (lResult ^ 0x40000000 ^ lX8 ^ lY8); + else + return (lResult ^ lX8 ^ lY8); + }; + + var F = function(x, y, z) { return (x & y) | ((~x) & z); }; + var G = function(x, y, z) { return (x & z) | (y & (~z)); }; + var H = function(x, y, z) { return (x ^ y ^ z); }; + var I = function(x, y, z) { return (y ^ (x | (~z))); }; + + var FF = function(a, b, c, d, x, s, ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + var GG = function(a, b, c, d, x, s, ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + var HH = function(a, b, c, d, x, s, ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + var II = function(a, b, c, d, x, s, ac) { + a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac)); + return AddUnsigned(RotateLeft(a, s), b); + }; + + var ConvertToWordArray = function(string) { + var lWordCount; + var lMessageLength = string.length; + var lNumberOfWords_temp1 = lMessageLength + 8; + var lNumberOfWords_temp2 = (lNumberOfWords_temp1 - (lNumberOfWords_temp1 % 64)) / 64; + var lNumberOfWords = (lNumberOfWords_temp2 + 1) * 16; + var lWordArray = [lNumberOfWords - 1]; + var lBytePosition = 0; + var lByteCount = 0; + while (lByteCount < lMessageLength) { + lWordCount = (lByteCount - (lByteCount % 4)) / 4; + lBytePosition = (lByteCount % 4) * 8; + lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount) << lBytePosition)); + lByteCount++; + } + lWordCount = (lByteCount - (lByteCount % 4)) / 4; + lBytePosition = (lByteCount % 4) * 8; + lWordArray[lWordCount] = lWordArray[lWordCount] | (0x80 << lBytePosition); + lWordArray[lNumberOfWords - 2] = lMessageLength << 3; + lWordArray[lNumberOfWords - 1] = lMessageLength >>> 29; + return lWordArray; + }; + + var WordToHex = function(lValue) { + var WordToHexValue = "", WordToHexValue_temp = "", lByte, lCount; + for (lCount = 0; lCount <= 3; lCount++) { + lByte = (lValue >>> (lCount * 8)) & 255; + WordToHexValue_temp = "0" + lByte.toString(16); + WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length - 2,2); + } + return WordToHexValue; + }; + + var x = []; + var k, AA, BB, CC, DD, a, b, c, d; + var S11 = 7, S12 = 12, S13 = 17, S14 = 22; + var S21 = 5, S22 = 9, S23 = 14, S24 = 20; + var S31 = 4, S32 = 11, S33 = 16, S34 = 23; + var S41 = 6, S42 = 10, S43 = 15, S44 = 21; + + string = _.utf8encode(string); + + x = ConvertToWordArray(string); + + a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476; + + for (k = 0; k < x.length; k += 16) { + AA = a; BB = b; CC = c; DD = d; + a = FF(a, b, c, d, x[k + 0], S11, 0xD76AA478); + d = FF(d, a, b, c, x[k + 1], S12, 0xE8C7B756); + c = FF(c, d, a, b, x[k + 2], S13, 0x242070DB); + b = FF(b, c, d, a, x[k + 3], S14, 0xC1BDCEEE); + a = FF(a, b, c, d, x[k + 4], S11, 0xF57C0FAF); + d = FF(d, a, b, c, x[k + 5], S12, 0x4787C62A); + c = FF(c, d, a, b, x[k + 6], S13, 0xA8304613); + b = FF(b, c, d, a, x[k + 7], S14, 0xFD469501); + a = FF(a, b, c, d, x[k + 8], S11, 0x698098D8); + d = FF(d, a, b, c, x[k + 9], S12, 0x8B44F7AF); + c = FF(c, d, a, b, x[k + 10], S13, 0xFFFF5BB1); + b = FF(b, c, d, a, x[k + 11], S14, 0x895CD7BE); + a = FF(a, b, c, d, x[k + 12], S11, 0x6B901122); + d = FF(d, a, b, c, x[k + 13], S12, 0xFD987193); + c = FF(c, d, a, b, x[k + 14], S13, 0xA679438E); + b = FF(b, c, d, a, x[k + 15], S14, 0x49B40821); + a = GG(a, b, c, d, x[k + 1], S21, 0xF61E2562); + d = GG(d, a, b, c, x[k + 6], S22, 0xC040B340); + c = GG(c, d, a, b, x[k + 11], S23, 0x265E5A51); + b = GG(b, c, d, a, x[k + 0], S24, 0xE9B6C7AA); + a = GG(a, b, c, d, x[k + 5], S21, 0xD62F105D); + d = GG(d, a, b, c, x[k + 10], S22, 0x2441453); + c = GG(c, d, a, b, x[k + 15], S23, 0xD8A1E681); + b = GG(b, c, d, a, x[k + 4], S24, 0xE7D3FBC8); + a = GG(a, b, c, d, x[k + 9], S21, 0x21E1CDE6); + d = GG(d, a, b, c, x[k + 14], S22, 0xC33707D6); + c = GG(c, d, a, b, x[k + 3], S23, 0xF4D50D87); + b = GG(b, c, d, a, x[k + 8], S24, 0x455A14ED); + a = GG(a, b, c, d, x[k + 13], S21, 0xA9E3E905); + d = GG(d, a, b, c, x[k + 2], S22, 0xFCEFA3F8); + c = GG(c, d, a, b, x[k + 7], S23, 0x676F02D9); + b = GG(b, c, d, a, x[k + 12], S24, 0x8D2A4C8A); + a = HH(a, b, c, d, x[k + 5], S31, 0xFFFA3942); + d = HH(d, a, b, c, x[k + 8], S32, 0x8771F681); + c = HH(c, d, a, b, x[k + 11], S33, 0x6D9D6122); + b = HH(b, c, d, a, x[k + 14], S34, 0xFDE5380C); + a = HH(a, b, c, d, x[k + 1], S31, 0xA4BEEA44); + d = HH(d, a, b, c, x[k + 4], S32, 0x4BDECFA9); + c = HH(c, d, a, b, x[k + 7], S33, 0xF6BB4B60); + b = HH(b, c, d, a, x[k + 10], S34, 0xBEBFBC70); + a = HH(a, b, c, d, x[k + 13], S31, 0x289B7EC6); + d = HH(d, a, b, c, x[k + 0], S32, 0xEAA127FA); + c = HH(c, d, a, b, x[k + 3], S33, 0xD4EF3085); + b = HH(b, c, d, a, x[k + 6], S34, 0x4881D05); + a = HH(a, b, c, d, x[k + 9], S31, 0xD9D4D039); + d = HH(d, a, b, c, x[k + 12], S32, 0xE6DB99E5); + c = HH(c, d, a, b, x[k + 15], S33, 0x1FA27CF8); + b = HH(b, c, d, a, x[k + 2], S34, 0xC4AC5665); + a = II(a, b, c, d, x[k + 0], S41, 0xF4292244); + d = II(d, a, b, c, x[k + 7], S42, 0x432AFF97); + c = II(c, d, a, b, x[k + 14], S43, 0xAB9423A7); + b = II(b, c, d, a, x[k + 5], S44, 0xFC93A039); + a = II(a, b, c, d, x[k + 12], S41, 0x655B59C3); + d = II(d, a, b, c, x[k + 3], S42, 0x8F0CCC92); + c = II(c, d, a, b, x[k + 10], S43, 0xFFEFF47D); + b = II(b, c, d, a, x[k + 1], S44, 0x85845DD1); + a = II(a, b, c, d, x[k + 8], S41, 0x6FA87E4F); + d = II(d, a, b, c, x[k + 15], S42, 0xFE2CE6E0); + c = II(c, d, a, b, x[k + 6], S43, 0xA3014314); + b = II(b, c, d, a, x[k + 13], S44, 0x4E0811A1); + a = II(a, b, c, d, x[k + 4], S41, 0xF7537E82); + d = II(d, a, b, c, x[k + 11], S42, 0xBD3AF235); + c = II(c, d, a, b, x[k + 2], S43, 0x2AD7D2BB); + b = II(b, c, d, a, x[k + 9], S44, 0xEB86D391); + a = AddUnsigned(a, AA); + b = AddUnsigned(b, BB); + c = AddUnsigned(c, CC); + d = AddUnsigned(d, DD); + } + + var temp = WordToHex(a) + WordToHex(b) + WordToHex(c) + WordToHex(d); + + return temp.toLowerCase(); +}; + +_.utf8encode = function(string) { + string = string.replace(/\r\n/g,"\n"); + var utftext = ""; + + for (var n = 0; n < string.length; n++) { + + var c = string.charCodeAt(n); + + if (c < 128) { + utftext += String.fromCharCode(c); + } else if((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + + return utftext; +}; diff --git a/protected/extensions/ckeditor/kcfinder/js/jquery.drag.js b/protected/extensions/ckeditor/kcfinder/js/jquery.drag.js new file mode 100644 index 0000000..337995f --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/jquery.drag.js @@ -0,0 +1,6 @@ +/*! + * jquery.event.drag - v 2.0.0 + * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com + * Open Source MIT License - http://threedubmedia.com/code/license + */ +(function(f){f.fn.drag=function(b,a,d){var e=typeof b=="string"?b:"",k=f.isFunction(b)?b:f.isFunction(a)?a:null;if(e.indexOf("drag")!==0)e="drag"+e;d=(b==k?a:d)||{};return k?this.bind(e,d,k):this.trigger(e)};var i=f.event,h=i.special,c=h.drag={defaults:{which:1,distance:0,not:":input",handle:null,relative:false,drop:true,click:false},datakey:"dragdata",livekey:"livedrag",add:function(b){var a=f.data(this,c.datakey),d=b.data||{};a.related+=1;if(!a.live&&b.selector){a.live=true;i.add(this,"draginit."+ c.livekey,c.delegate)}f.each(c.defaults,function(e){if(d[e]!==undefined)a[e]=d[e]})},remove:function(){f.data(this,c.datakey).related-=1},setup:function(){if(!f.data(this,c.datakey)){var b=f.extend({related:0},c.defaults);f.data(this,c.datakey,b);i.add(this,"mousedown",c.init,b);this.attachEvent&&this.attachEvent("ondragstart",c.dontstart)}},teardown:function(){if(!f.data(this,c.datakey).related){f.removeData(this,c.datakey);i.remove(this,"mousedown",c.init);i.remove(this,"draginit",c.delegate);c.textselect(true); this.detachEvent&&this.detachEvent("ondragstart",c.dontstart)}},init:function(b){var a=b.data,d;if(!(a.which>0&&b.which!=a.which))if(!f(b.target).is(a.not))if(!(a.handle&&!f(b.target).closest(a.handle,b.currentTarget).length)){a.propagates=1;a.interactions=[c.interaction(this,a)];a.target=b.target;a.pageX=b.pageX;a.pageY=b.pageY;a.dragging=null;d=c.hijack(b,"draginit",a);if(a.propagates){if((d=c.flatten(d))&&d.length){a.interactions=[];f.each(d,function(){a.interactions.push(c.interaction(this,a))})}a.propagates= a.interactions.length;a.drop!==false&&h.drop&&h.drop.handler(b,a);c.textselect(false);i.add(document,"mousemove mouseup",c.handler,a);return false}}},interaction:function(b,a){return{drag:b,callback:new c.callback,droppable:[],offset:f(b)[a.relative?"position":"offset"]()||{top:0,left:0}}},handler:function(b){var a=b.data;switch(b.type){case !a.dragging&&"mousemove":if(Math.pow(b.pageX-a.pageX,2)+Math.pow(b.pageY-a.pageY,2)").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
    a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
    ",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
    t
    ",n=a.getElementsByTagName("td"),r=n[0].offsetHeight===0,n[0].style.display="",n[1].style.display="none",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement("div"),i.style.width="0",i.style.marginRight="0",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML="",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p="on"+q,r=p in a,r||(a.setAttribute(p,"return;"),r=typeof a[p]=="function"),j[q+"Bubbles"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!="boolean"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,"form")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\./g,B=/ /g,C=/[^\w\s.|`]/g,D=function(a){return a.replace(C,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),D).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem +)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=J(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",J(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in I)f.event.add(this,c+".specialChange",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\d+="(?:\d+|null)"/g,Z=/^\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,_=/<([\w:]+)/,ba=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,""):null;if(typeof a=="string"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||["",""])[1].toLowerCase()]){a=a.replace($,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument|| +b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,"<$1>");var l=(_.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bo.test(g)?g.replace(bo,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\[\]$/,bG=/\r?\n/g,bH=/#.*$/,bI=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\/\//,bN=/\?/,bO=/)<[^<]*)*<\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\s+/,bR=/([?&])_=[^&]*/,bS=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement("a"),bW.href="",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bO,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,"\r\n")}}):{name:b.name,value:c.replace(bG,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=cb(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bH,"").replace(bM,bX[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]==="http:"?80:443))==(bX[3]||(bX[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,"$1_="+x);d.url=y+(y===d.url?(bN.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bE,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
    ";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/js/jquery.rightClick.js b/protected/extensions/ckeditor/kcfinder/js/jquery.rightClick.js new file mode 100644 index 0000000..5dbe7f8 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js/jquery.rightClick.js @@ -0,0 +1,16 @@ +/*! + * jQuery Right-Click Plugin + * + * Version 1.01 + * + * Cory S.N. LaViska + * A Beautiful Site (http://abeautifulsite.net/) + * 20 December 2008 + * + * Visit http://abeautifulsite.net/notebook/68 for more information + * + * License: + * This plugin is dual-licensed under the GNU General Public License and the MIT License + * and is copyright 2008 A Beautiful Site, LLC. + */ +if(jQuery){(function(){$.extend($.fn,{rightClick:function(a){$(this).each(function(){$(this).mousedown(function(c){var b=c;if($.browser.safari&&navigator.userAgent.indexOf("Mac")!=-1&&parseInt($.browser.version,10)<=525){if(b.button==2){a.call($(this),b);return false}else{return true}}else{$(this).mouseup(function(){$(this).unbind("mouseup");if(b.button==2){a.call($(this),b);return false}else{return true}})}});$(this)[0].oncontextmenu=function(){return false}});return $(this)},rightMouseDown:function(a){$(this).each(function(){$(this).mousedown(function(b){if(b.button==2){a.call($(this),b);return false}else{return true}});$(this)[0].oncontextmenu=function(){return false}});return $(this)},rightMouseUp:function(a){$(this).each(function(){$(this).mouseup(function(b){if(b.button==2){a.call($(this),b);return false}else{return true}});$(this)[0].oncontextmenu=function(){return false}});return $(this)},noContext:function(){$(this).each(function(){$(this)[0].oncontextmenu=function(){return false}});return $(this)}})})(jQuery)}; \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/js_localize.php b/protected/extensions/ckeditor/kcfinder/js_localize.php new file mode 100644 index 0000000..92ca7a8 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/js_localize.php @@ -0,0 +1,40 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +require "core/autoload.php"; +if (function_exists('set_magic_quotes_runtime')) + @set_magic_quotes_runtime(false); +$input = new input(); +if (!isset($input->get['lng']) || ($input->get['lng'] == 'en')) { + header("Content-Type: text/javascript"); + die; +} +$file = "lang/" . $input->get['lng'] . ".php"; +$files = dir::content("lang", array( + 'types' => "file", + 'pattern' => '/^.*\.php$/' +)); +if (!in_array($file, $files)) { + header("Content-Type: text/javascript"); + die; +} +$mtime = @filemtime($file); +if ($mtime) httpCache::checkMTime($mtime); +require $file; +header("Content-Type: text/javascript; charset={$lang['_charset']}"); +foreach ($lang as $english => $native) + if (substr($english, 0, 1) != "_") + echo "browser.labels['" . text::jsValue($english) . "']=\"" . text::jsValue($native) . "\";"; + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lang/.htaccess b/protected/extensions/ckeditor/kcfinder/lang/.htaccess new file mode 100644 index 0000000..d61b264 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + diff --git a/protected/extensions/ckeditor/kcfinder/lang/bg.php b/protected/extensions/ckeditor/kcfinder/lang/bg.php new file mode 100644 index 0000000..030f9df --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/bg.php @@ -0,0 +1,262 @@ + + */ + +$lang = array( + + '_locale' => "bg_BG.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Нямате права за качване.", + + "You don't have permissions to browse server." => + "Нямате права за разглеждане на сървъра.", + + "Cannot move uploaded file to target folder." => + "Файлът не може да се премести в целевата папка.", + + "Unknown error." => + "Непозната грешка.", + + "The uploaded file exceeds {size} bytes." => + "Каченият файл надхвърля {size} байта.", + + "The uploaded file was only partially uploaded." => + "Каченият файл беше качен само частично.", + + "No file was uploaded." => + "Файлът не беше качен", + + "Missing a temporary folder." => + "Липсва временна папка.", + + "Failed to write file." => + "Грешка при записване на файла.", + + "Denied file extension." => + "Забранено файлово разширение.", + + "Unknown image format/encoding." => + "Файлът не може да бъде разпознат като изображение.", + + "The image is too big and/or cannot be resized." => + "Изображението е много голямо и/или не може да бъде преоразмерено.", + + "Cannot create {dir} folder." => + "Невъзможност да се създаде папка {dir}.", + + "Cannot rename the folder." => + "Папката не може да се преимеува.", + + "Cannot write to upload folder." => + "Не е възможно записването на файлове в папката за качване.", + + "Cannot read .htaccess" => + "Не е възможно прочитането на .htaccess", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Невалиден .htaccess файл. Не може да се презапише автоматично!", + + "Cannot read upload folder." => + "Не е възможно прочитането на папката за качване.", + + "Cannot access or create thumbnails folder." => + "Невъзможен достъп или невъзможно създаване на папката за thumbnails.", + + "Cannot access or write to upload folder." => + "Папката не може да се достъпи или не може да се записва в нея.", + + "Please enter new folder name." => + "Моля въведете име на папката.", + + "Unallowable characters in folder name." => + "Непозволени знаци в името на папката.", + + "Folder name shouldn't begins with '.'" => + "Името на папката не трябва да започва с '.'", + + "Please enter new file name." => + "Моля въведете ново име на файла", + + "Unallowable characters in file name." => + "Непозволени знаци в името на файла.", + + "File name shouldn't begins with '.'" => + "Името на файла не трябва да започва с '.'", + + "Are you sure you want to delete this file?" => + "Наистина ли искате да изтриете този файл?", + + "Are you sure you want to delete this folder and all its content?" => + "Наистина ли искате да изтриете тази папка и цялото й съдържание?", + + "Non-existing directory type." => + "Несъществуващ специален тип на папка.", + + "Undefined MIME types." => + "Не са дефинирани MIME типове.", + + "Fileinfo PECL extension is missing." => + "Липсва Fileinfo PECL разширение.", + + "Opening fileinfo database failed." => + "Грешка при отваряне на fileinfo дефиниции.", + + "You can't upload such files." => + "Не можете да качвате такива файлове.", + + "The file '{file}' does not exist." => + "Фаълът '{file}' не съществува.", + + "Cannot read '{file}'." => + "Файлът '{file}' не може да бъде прочетен.", + + "Cannot copy '{file}'." => + "Файлът '{file}' не може да бъде копиран.", + + "Cannot move '{file}'." => + "Файлът '{file}' не може да бъде преместен.", + + "Cannot delete '{file}'." => + "Файлът '{file}' не може да бъде изтрит.", + + "Cannot delete the folder." => + "Папката не може да бъде изтрита.", + + "Click to remove from the Clipboard" => + "Цъкнете за да премахнете файла от клипборда", + + "This file is already added to the Clipboard." => + "Този файл вече е добавен към клипборда.", + + "The files in the Clipboard are not readable." => + "Файловете в клипборда не могат да се прочетат.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} файла в клипборда не могат да се прочетат. Искате ли да копирате останалите?", + + "The files in the Clipboard are not movable." => + "Файловете в клипборда не могат да бъдат преместени.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} файла в клипборда не могат да бъдат преместени. Искате ли да преместите останалите?", + + "The files in the Clipboard are not removable." => + "Файловете в клипборда не могат да бъдат изтрити.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} файла в клипборда не могат да бъдат изтрити. Искате ли да изтриете останалите?", + + "The selected files are not removable." => + "Избраните файлове не могат да бъдат изтрити.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} от избраните файлове не могат да бъдат изтрити. Искате ли да изтриете останалите?", + + "Are you sure you want to delete all selected files?" => + "Наистина ли искате да изтриете всички избрани файлове?", + + "Failed to delete {count} files/folders." => + "{count} файла/папки не могат да бъдат изтрити.", + + "A file or folder with that name already exists." => + "Вече има файл или папка с такова име.", + + "Copy files here" => + "Копирай файловете тук", + + "Move files here" => + "Премести файловете тук", + + "Delete files" => + "Изтрий файловете", + + "Clear the Clipboard" => + "Изчисти клипборда", + + "Are you sure you want to delete all files in the Clipboard?" => + "Наистина ли искате да изтриете всички файлове от клипборда?", + + "Copy {count} files" => + "Копирай {count} файла", + + "Move {count} files" => + "Премести {count} файла", + + "Add to Clipboard" => + "Добави към клипборда", + + "Inexistant or inaccessible folder." => + "Несъществуваща или недостъпна папка.", + + "New folder name:" => "Име на папката:", + "New file name:" => "Ново име на файла:", + + "Upload" => "Качи", + "Refresh" => "Актуализирай", + "Settings" => "Настройки", + "Maximize" => "Разпъни", + "About" => "Информация", + "files" => "файла", + "selected files" => "избрани файла", + "View:" => "Изглед:", + "Show:" => "Покажи:", + "Order by:" => "Подреди по:", + "Thumbnails" => "Картинки", + "List" => "Списък", + "Name" => "Име", + "Type" => "Тип", + "Size" => "Размер", + "Date" => "Дата", + "Descending" => "Обратен ред", + "Uploading file..." => "Файлът се качва...", + "Loading image..." => "Изображението се зарежда...", + "Loading folders..." => "Зареждане на папките...", + "Loading files..." => "Зареждане на папката...", + "New Subfolder..." => "Нова подпапка...", + "Rename..." => "Преименуване...", + "Delete" => "Изтрий", + "OK" => "OK", + "Cancel" => "Отказ", + "Select" => "Избери", + "Select Thumbnail" => "Избери малък вариант", + "Select Thumbnails" => "Избери малки варианти", + "View" => "Преглед", + "Download" => "Свали", + "Download files" => "Свали файловете", + "Clipboard" => "Клипборд", + + // SINCE 2.4 + + "Checking for new version..." => "Проверка за нова версия...", + "Unable to connect!" => "Не може да се свърже!", + "Download version {version} now!" => "Свалете версия {version} сега!", + "KCFinder is up to date!" => "KCFinder е актуален!", + "Licenses:" => "Лицензи:", + "Attention" => "Внимание", + "Question" => "Въпрос", + "Yes" => "Да", + "No" => "Не", + + // SINCE 2.41 + + "You cannot rename the extension of files!" => + "Не можете да преименувате разширенията на файловете!", + + // SINCE 2.5 + + "Uploading file {number} of {count}... {progress}" => + "Качване на файл {number} от {count}... {progress}", + + "Failed to upload {filename}!" => "Несполучливо качване на {filename}!", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/ca.php b/protected/extensions/ckeditor/kcfinder/lang/ca.php new file mode 100644 index 0000000..97ffdcc --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/ca.php @@ -0,0 +1,242 @@ + "ca_ES.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "No té permissos per pujar arxius.", + + "You don't have permissions to browse server." => + "No té permissos per visualitzar arxius.", + + "Cannot move uploaded file to target folder." => + "No es pot moure el fitxer pujat al directori destí", + + "Unknown error." => + "Error desconegut.", + + "The uploaded file exceeds {size} bytes." => + "La mida del fitxer excedeix la mida màxima de pujada ( {size} bytes ).", + + "The uploaded file was only partially uploaded." => + "El fitxer només ha estat carregat parcialment.", + + "No file was uploaded." => + "Cap arxiu carregat", + + "Missing a temporary folder." => + "Directori Temporal perdut.", + + "Failed to write file." => + "Error en escriure el fitxer.", + + "Denied file extension." => + "Extensió de fitxer no permesa.", + + "Unknown image format/encoding." => + "Format d'imatge desconegut.", + + "The image is too big and/or cannot be resized." => + "La imatge és massa gran i/o no es pot redimensionar.", + + "Cannot create {dir} folder." => + "No s'ha pogut crear el directori {dir}", + + "Cannot write to upload folder." => + "No es pot escriure al directori de càrrega de fitxers.", + + "Cannot read .htaccess" => + "No s'ha pogut llegir .htaccess.", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Fitxer .htaccess incorrecte. No s'el pot reescriure!", + + "Cannot read upload folder." => + "No s'ha pogut llegir la carpeta de càrrega de fitxers.", + + "Cannot access or create thumbnails folder." => + "No s'ha pogut llegir o crear la carpeta de miniatures.", + + "Cannot access or write to upload folder." => + "No s'ha pogut llegir o escriure la carpeta de càrrega de fitxers.", + + "Please enter new folder name." => + "Si us plau, entri el nom del nou directori.", + + "Unallowable characters in folder name." => + "Caràcters no permesos en el nom d'una carpeta.", + + "Folder name shouldn't begins with '.'" => + "El nom d'un directori no hauria de començar amb punt '.'", + + "Please enter new file name." => + "Si us plau, introdueixi un nou nom pel fitxer ", + + "Unallowable characters in file name." => + "Caràcters no permesos en un nom de fitxer.", + + "File name shouldn't begins with '.'" => + "El nom de fitxer no hauria de començar amb punt '.'", + + "Are you sure you want to delete this file?" => + "Està segur que vol suprimir aquest fitxer?", + + "Are you sure you want to delete this folder and all its content?" => + "Està segur que vol suprimir aquest directori i el seu contingut?", + + "Inexistant or inaccessible folder." => + "Carpeta inexistent o inaccessible.", + + "Undefined MIME types." => + "Tipus MIME no definit.", + + "Fileinfo PECL extension is missing." => + "Fitxer PECL amb estructura incorrecta.", + + "Opening fileinfo database failed." => + "Error obrint el fitxer d'informació de la base de dades.", + + "You can't upload such files." => + "No pot carregar tants fitxers.", + + "The file '{file}' does not exist." => + "El fitxer '{file}' no existeix.", + + "Cannot read '{file}'." => + "No s'ha pogut llegir '{file}'.", + + "Cannot copy '{file}'." => + "No s'ha pogut copiar '{file}'.", + + "Cannot move '{file}'." => + "No s'ha pogut moure '{file}'.", + + "Cannot delete '{file}'." => + "No s'ha pogut esborrar '{file}'.", + + "Click to remove from the Clipboard" => + "Faci click per esborrar del portapapers", + + "This file is already added to the Clipboard." => + "Aquest arxiu ja havia estat afegit al portapapers.", + + "Copy files here" => + "Copiar fitxers aquí", + + "Move files here" => + "Moure fitxers aquí", + + "Delete files" => + "Esborrar fitxers", + + "Clear the Clipboard" => + "Buidar el portapapers", + + "Are you sure you want to delete all files in the Clipboard?" => + "Està convençut que vol esborrar tots els fitxers del portapapers?", + + "Copy {count} files" => + "Copiar {count} fitxers", + + "Move {count} files" => + "Moure {count} fitxers ", + + "Add to Clipboard" => + "Afegir al portapapers", + + "New folder name:" => "Nou nom del directori:", + "New file name:" => "Nou nom del fitxer:", + + "Upload" => "Carregar", + "Refresh" => "Refrescar", + "Settings" => "Preferències", + "Maximize" => "Maximitzar", + "About" => "En quant a...", + "files" => "Fitxers", + "View:" => "Veure:", + "Show:" => "Mostrar:", + "Order by:" => "Ordenar per:", + "Thumbnails" => "Miniatures", + "List" => "Llista", + "Name" => "Nom", + "Size" => "Mida", + "Date" => "Data", + "Descending" => "Descendent", + "Uploading file..." => "Carregant fitxer...", + "Loading image..." => "Carregant imatge...", + "Loading folders..." => "Carregant directoris...", + "Loading files..." => "Carregant fitxers...", + "New Subfolder..." => "Nou subdirectori...", + "Rename..." => "Canviar el nom...", + "Delete" => "Eliminar", + "OK" => "OK", + "Cancel" => "Cancel.lar", + "Select" => "Seleccionar", + "Select Thumbnail" => "Seleccionar miniatura", + "View" => "Veure", + "Download" => "Descarregar", + "Clipboard" => "Portapapers", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "No es pot canviar el nom del directori.", + + "Non-existing directory type." => + "Tipus de directori inexistent.", + + "Cannot delete the folder." => + "No es pot esborrar el directori.", + + "The files in the Clipboard are not readable." => + "Els fitxers del portapapers són illegibles.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} fitxers no es poden llegir. Vol copiar la resta?", + + "The files in the Clipboard are not movable." => + "Els fitxers del portapapers no es poden moure.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} fitxers del portapapers no es poden moure. Vol moure la resta?", + + "The files in the Clipboard are not removable." => + "Els fitxers del portapapers no es poden eliminar.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} fitxers del portapapers no poden ser eliminats. Vol eliminar la resta?", + + "The selected files are not removable." => + "Els fitxers seleccionats no poden ser esborrats.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} fitxers dels seleccionats no poden ser esborrats. Vol esborrar la resta?", + + "Are you sure you want to delete all selected files?" => + "Està segur que vol eliminar els fitxers seleccionats?", + + "Failed to delete {count} files/folders." => + "Error en esborrar {count} fitxers/directoris.", + + "A file or folder with that name already exists." => + "Ja existeix un directori o un fitxer amb aquest nom.", + + "selected files" => "Fitxers seleccionats", + "Type" => "Tipus", + "Select Thumbnails" => "Seleccionar miniatures", + "Download files" => "Descarregar fitxers", +); + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lang/cs.php b/protected/extensions/ckeditor/kcfinder/lang/cs.php new file mode 100644 index 0000000..d6507e1 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/cs.php @@ -0,0 +1,253 @@ + + */ + +$lang = array( + + '_locale' => "cs_CZ.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Nemáte práva pro nahrávání souborů.", + + "You don't have permissions to browse server." => + "Nemáte práva pro prohlížení serveru.", + + "Cannot move uploaded file to target folder." => + "Nelze přesunout soubor do určeného adresáře.", + + "Unknown error." => + "Neznámá chyba.", + + "The uploaded file exceeds {size} bytes." => + "Nahraný soubor přesahuje {size} bytů.", + + "The uploaded file was only partially uploaded." => + "Nahraný soubor byl nahrán pouze částečně.", + + "No file was uploaded." => + "Žádný soubor nebyl nahrán na server.", + + "Missing a temporary folder." => + "Chybí dočasný adresář.", + + "Failed to write file." => + "Soubor se nepodařilo se uložit.", + + "Denied file extension." => + "Nepodporovaný typ souboru.", + + "Unknown image format/encoding." => + "Neznámý formát obrázku/encoding.", + + "The image is too big and/or cannot be resized." => + "Obrázek je příliš velký/nebo nemohl být zmenšen.", + + "Cannot create {dir} folder." => + "Adresář {dir} nelze vytvořit.", + + "Cannot write to upload folder." => + "Nelze ukládat do adresáře pro nahrávání.", + + "Cannot read .htaccess" => + "Není možno číst soubor .htaccess", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Chybný soubor .htaccess. Soubor nelze přepsat!", + + "Cannot read upload folder." => + "Nelze číst z adresáře pro nahrávání souborů.", + + "Cannot access or create thumbnails folder." => + "Adresář pro náhledy nelze vytvořit nebo není přístupný.", + + "Cannot access or write to upload folder." => + "Nelze přistoupit, nebo zapisovat do adresáře pro nahrávání souborů.", + + "Please enter new folder name." => + "Vložte prosím nové jméno adresáře.", + + "Unallowable characters in folder name." => + "Nepovolené znaky v názvu adresáře.", + + "Folder name shouldn't begins with '.'" => + "Jméno adresáře nesmí začínat znakem '.'", + + "Please enter new file name." => + "Vložte prosím nové jméno souboru.", + + "Unallowable characters in file name." => + "Nepovolené znaky v názvu souboru.", + + "File name shouldn't begins with '.'" => + "Název soubor nesmí začínat znakem '.'", + + "Are you sure you want to delete this file?" => + "Jste si jistý že chcete smazat tento soubor?", + + "Are you sure you want to delete this folder and all its content?" => + "Jste si jistý že chcete smazat tento adresář a celý jeho obsah?", + + "Inexistant or inaccessible folder." => + "Neexistující nebo nepřístupný adresář.", + + "Undefined MIME types." => + "Nedefinovaný MIME typ souboru.", + + "Fileinfo PECL extension is missing." => + "Rozříření PECL pro zjištění informací o souboru chybí.", + + "Opening fileinfo database failed." => + "Načtení informací o souboru selhalo.", + + "You can't upload such files." => + "Tyto soubory nemůžete nahrát na server.", + + "The file '{file}' does not exist." => + "Tento soubor '{file}' neexistuje.", + + "Cannot read '{file}'." => + "Nelze načíst '{file}'.", + + "Cannot copy '{file}'." => + "Nelze kopírovat '{file}'.", + + "Cannot move '{file}'." => + "Nelze přesunout '{file}'.", + + "Cannot delete '{file}'." => + "Nelze smazat '{file}'.", + + "Click to remove from the Clipboard" => + "Klikněte pro odstranění ze schránky", + + "This file is already added to the Clipboard." => + "Tento soubor je již ve schránce vložen.", + + "Copy files here" => + "Kopírovat soubory na toto místo", + + "Move files here" => + "Přesunout soubory na toto místo", + + "Delete files" => + "Smazat soubory", + + "Clear the Clipboard" => + "Vyčistit schránku", + + "Are you sure you want to delete all files in the Clipboard?" => + "Jste si jistý že chcete vymazat všechny soubory ze schránky?", + + "Copy {count} files" => + "Kopírovat {count} souborů", + + "Move {count} files" => + "Přesunout {count} souborů", + + "Add to Clipboard" => + "Vložit do schránky", + + "New folder name:" => "Nový název adresáře:", + "New file name:" => "Nový název souboru:", + + "Upload" => "Nahrát", + "Refresh" => "Obnovit", + "Settings" => "Nastavení", + "Maximize" => "Maxializovat", + "About" => "O aplikaci", + "files" => "soubory", + "View:" => "Zobrazit:", + "Show:" => "Ukázat:", + "Order by:" => "Řadit podle:", + "Thumbnails" => "Náhledy", + "List" => "Seznam", + "Name" => "Jméno", + "Size" => "Velikost", + "Date" => "Datum", + "Descending" => "Sestupně", + "Uploading file..." => "Nahrávání souboru...", + "Loading image..." => "Načítání obrázku...", + "Loading folders..." => "Načítání adresářů...", + "Loading files..." => "Načítání souborů...", + "New Subfolder..." => "Nový adresář...", + "Rename..." => "Přejmenovat...", + "Delete" => "Smazat", + "OK" => "OK", + "Cancel" => "Zrušit", + "Select" => "Vybrat", + "Select Thumbnail" => "Vybrat náhled", + "View" => "Zobrazit", + "Download" => "Stažení", + 'Clipboard' => "Schránka", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Adresář nelze přejmenovat.", + + "Non-existing directory type." => + "Neexistující typ adresáře.", + + "Cannot delete the folder." => + "Adresář nelze smazat.", + + "The files in the Clipboard are not readable." => + "Soubory ve schránce nelze načíst.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} souborů ve schránce nelze načíst. Chcete zkopírovat zbylé soubory?", + + "The files in the Clipboard are not movable." => + "Soubory ve schránce nelze přesunout.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} souborů ve schránce nelze přesunout. Chcete přesunout zbylé soubory?", + + "The files in the Clipboard are not removable." => + "Soubory ve schránce nelze smazat.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} souborů ve schránce nelze smazat. Chcete smazat zbylé soubory?", + + "The selected files are not removable." => + "Označené soubory nelze smazat.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} označených souborů nelze smazat. Chcete smazat zbylé soubory?", + + "Are you sure you want to delete all selected files?" => + "Jste si jistý že chcete smazat vybrané soubory?", + + "Failed to delete {count} files/folders." => + "Nebylo smazáno {count} souborů/adresářů.", + + "A file or folder with that name already exists." => + "Soubor nebo adresář s takovým jménem již existuje.", + + "selected files" => "vybrané soubory", + "Type" => "Typ", + "Select Thumbnails" => "Vybrat náhled", + "Download files" => "Stáhnout soubory", + + // SINCE 2.4 + + "Checking for new version..." => "Zkontrolovat novou verzi...", + "Unable to connect!" => "Nelze připojit!", + "Download version {version} now!" => "Stáhnout verzi {version} nyní!", + "KCFinder is up to date!" => "KCFinder je aktuální!", + "Licenses:" => "Licence:", + "Attention" => "Upozornění", + "Question" => "Otázka", + "Yes" => "Ano", + "No" => "Ne", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/da.php b/protected/extensions/ckeditor/kcfinder/lang/da.php new file mode 100644 index 0000000..c9ad9e5 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/da.php @@ -0,0 +1,242 @@ + **/ + +$lang = array( + + '_locale' => "da_DK.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d/%m/%Y %H:%M", + + "You don't have permissions to upload files." => + "Du har ikke tilladelser til at uploade filer.", + + "You don't have permissions to browse server." => + "Du har ikke tilladelser til at se filer.", + + "Cannot move uploaded file to target folder." => + "Kan ikke flytte fil til destinations mappe.", + + "Unknown error." => + "Ukendt fejl.", + + "The uploaded file exceeds {size} bytes." => + "Den uploadede fil overskrider {size} bytes.", + + "The uploaded file was only partially uploaded." => + "Den uploadede fil blev kun delvist uploadet.", + + "No file was uploaded." => + "Ingen fil blev uploadet.", + + "Missing a temporary folder." => + "Mangler en midlertidig mappe.", + + "Failed to write file." => + "Kunne ikke skrive fil.", + + "Denied file extension." => + "N�gtet filtypenavn.", + + "Unknown image format/encoding." => + "Ukendt billedformat / kodning.", + + "The image is too big and/or cannot be resized." => + "Billedet er for stort og / eller kan ikke �ndres.", + + "Cannot create {dir} folder." => + "Kan ikke lave mappen {dir}.", + + "Cannot write to upload folder." => + "Kan ikke skrive til upload mappen.", + + "Cannot read .htaccess" => + "Ikke kan l�se .htaccess", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Forkert .htaccess fil. Kan ikke omskrive den!", + + "Cannot read upload folder." => + "Kan ikke l�se upload mappen.", + + "Cannot access or create thumbnails folder." => + "Kan ikke f� adgang til eller oprette miniature mappe.", + + "Cannot access or write to upload folder." => + "Kan ikke f� adgang til eller skrive til upload mappe.", + + "Please enter new folder name." => + "Indtast venligst nyt mappe navn.", + + "Unallowable characters in folder name." => + "Ugyldige tegn i mappens navn.", + + "Folder name shouldn't begins with '.'" => + "Mappenavn b�r ikke begynder med '.'", + + "Please enter new file name." => + "Indtast venligst nyt fil navn.", + + "Unallowable characters in file name." => + "Ugyldige tegn i filens navn", + + "File name shouldn't begins with '.'" => + "Fil navnet b�r ikke begynder med '.'", + + "Are you sure you want to delete this file?" => + "Er du sikker p� du vil slette denne fil?", + + "Are you sure you want to delete this folder and all its content?" => + "Er du sikker p� du vil slette denne mappe og al dens indhold?", + + "Inexistant or inaccessible folder." => + "utilg�ngelige mappe.", + + "Undefined MIME types." => + "Udefineret MIME Type.", + + "Fileinfo PECL extension is missing." => + "Fil info PECL udvidelse mangler", + + "Opening fileinfo database failed." => + "�bning af fil info-database mislykkedes.", + + "You can't upload such files." => + "Du kan ikke uploade s�danne filer.", + + "The file '{file}' does not exist." => + "Filen '{file}' eksisterer ikke.", + + "Cannot read '{file}'." => + "Kan ikke l�se '{file}'.", + + "Cannot copy '{file}'." => + "Kan ikke kopi'ere '{file}'.", + + "Cannot move '{file}'." => + "Kan ikke flytte '{file}'.", + + "Cannot delete '{file}'." => + "Kan ikke slette '{file}'.", + + "Click to remove from the Clipboard" => + "Klik for at fjerne fra Udklipsholder.", + + "This file is already added to the Clipboard." => + "Denne fil er allerede f�jet til Udklipsholder.", + + "Copy files here" => + "Kopiere filer her.", + + "Move files here" => + "Flyt filer her.", + + "Delete files" => + "Slet filer.", + + "Clear the Clipboard" => + "Zwischenablage leeren", + + "Are you sure you want to delete all files in the Clipboard?" => + "T�m udklipsholder?", + + "Copy {count} files" => + "Kopier {count} filer", + + "Move {count} files" => + "Flyt {count} filer", + + "Add to Clipboard" => + "Tilf�j til udklipsholder", + + "New folder name:" => + "Nyt mappe navn:", + + "New file name:" => + "Nyt fil navn:", + + "Upload" => "Upload", + "Refresh" => "Genopfriske", + "Settings" => "Indstillinger", + "Maximize" => "Maksimere", + "About" => "Om", + "files" => "filer", + "View:" => "Vis:", + "Show:" => "Vis:", + "Order by:" => "Sorter efter:", + "Thumbnails" => "Miniaturer", + "List" => "Liste", + "Name" => "Navn", + "Size" => "St�rrelse", + "Date" => "Dato", + "Descending" => "Faldende", + "Uploading file..." => "Uploader fil...", + "Loading image..." => "Indl�ser billede...", + "Loading folders..." => "Indl�ser mappe...", + "Loading files..." => "Indl�ser filer...", + "New Subfolder..." => "Ny undermappe...", + "Rename..." => "Omd�b...", + "Delete" => "Slet", + "OK" => "Ok", + "Cancel" => "Fortryd", + "Select" => "V�lg", + "Select Thumbnail" => "V�lg miniature", + "View" => "Vis", + "Download" => "Download", + 'Clipboard' => "Udklipsholder", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Kan ikke omd�be mappen.", + + "Non-existing directory type." => + "Ikke-eksisterende bibliotek type.", + + "Cannot delete the folder." => + "Kan ikke slette mappen.", + + "The files in the Clipboard are not readable." => + "Filerne i udklipsholder ikke kan l�ses.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} filer i udklipsholder ikke kan l�ses. �nsker du at kopiere de �vrige?", + + "The files in the Clipboard are not movable." => + "Filerne i udklipsholder kan ikke flyttes.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} filer i udklipsholder er ikke bev�gelige. �nsker du at flytte resten?", + + "The files in the Clipboard are not removable." => + "Filerne i udklipsholder er ikke flytbare.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} filer i udklipsholder er ikke flytbare. �nsker du at slette resten?", + + "The selected files are not removable." => + "De valgte filer er ikke flytbare.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} valgte filer som ikke kan fjernes. �nsker du at slette resten?", + + "Are you sure you want to delete all selected files?" => + "Er du sikker p� du vil slette alle markerede filer?", + + "Failed to delete {count} files/folders." => + "Kunne ikke slette {count} filer / mapper.", + + "A file or folder with that name already exists." => + "En fil eller mappe med det navn findes allerede.", + + "selected files" => "Valgte filer", + "Type" => "Type", + "Select Thumbnails" => "V�lg Miniaturer", + "Download files" => "Download filer", +); + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lang/de.php b/protected/extensions/ckeditor/kcfinder/lang/de.php new file mode 100644 index 0000000..6e3d401 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/de.php @@ -0,0 +1,241 @@ + + */ + +$lang = array( + + '_locale' => "de_DE.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %I:%M %p", + '_dateTimeMid' => "%a %e %b %Y %I:%M %p", + '_dateTimeSmall' => "%d/%m/%Y %I:%M %p", + + "You don't have permissions to upload files." => + "Du hast keine Berechtigung Dateien hoch zu laden.", + + "You don't have permissions to browse server." => + "Fehlende Berechtigung.", + + "Cannot move uploaded file to target folder." => + "Kann hochgeladene Datei nicht in den Zielordner verschieben.", + + "Unknown error." => + "Unbekannter Fehler.", + + "The uploaded file exceeds {size} bytes." => + "Die hochgeladene Datei überschreitet die erlaubte Dateigröße von {size} bytes.", + + "The uploaded file was only partially uploaded." => + "Die Datei wurde nur teilweise hochgeladen.", + + "No file was uploaded." => + "Keine Datei hochgeladen.", + + "Missing a temporary folder." => + "Temporärer Ordner fehlt.", + + "Failed to write file." => + "Fehler beim schreiben der Datei.", + + "Denied file extension." => + "Die Dateiendung ist nicht erlaubt.", + + "Unknown image format/encoding." => + "Unbekanntes Bildformat/encoding.", + + "The image is too big and/or cannot be resized." => + "Das Bild ist zu groß und/oder kann nicht verkleinert werden.", + + "Cannot create {dir} folder." => + "Ordner {dir} kann nicht angelegt werden.", + + "Cannot write to upload folder." => + "Kann nicht in den upload Ordner schreiben.", + + "Cannot read .htaccess" => + "Kann .htaccess Datei nicht lesen", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Falsche .htaccess Datei. Die Datei kann nicht geschrieben werden", + + "Cannot read upload folder." => + "Upload Ordner kann nicht gelesen werden.", + + "Cannot access or create thumbnails folder." => + "Kann thumbnails Ordner nicht erstellen oder darauf zugreifen.", + + "Cannot access or write to upload folder." => + "Kann nicht auf den upload Ordner zugreifen oder darin schreiben.", + + "Please enter new folder name." => + "Bitte einen neuen Ordnernamen angeben.", + + "Unallowable characters in folder name." => + "Der Ordnername enthält unerlaubte Zeichen.", + + "Folder name shouldn't begins with '.'" => + "Ordnernamen sollten nicht mit '.' beginnen.", + + "Please enter new file name." => + "Bitte gib einen neuen Dateinamen an.", + + "Unallowable characters in file name." => + "Der Dateiname enthält unerlaubte Zeichen", + + "File name shouldn't begins with '.'" => + "Dateinamen sollten nicht mit '.' beginnen.", + + "Are you sure you want to delete this file?" => + "Willst Du die Datei wirklich löschen?", + + "Are you sure you want to delete this folder and all its content?" => + "Willst Du wirklich diesen Ordner und seinen gesamten Inhalt löschen?", + + "Inexistant or inaccessible folder." => + "Ordnertyp existiert nicht.", + + "Undefined MIME types." => + "Unbekannte MIME Typen.", + + "Fileinfo PECL extension is missing." => + "PECL extension für Dateiinformationen fehlt", + + "Opening fileinfo database failed." => + "Öffnen der Dateiinfo Datenbank fehlgeschlagen.", + + "You can't upload such files." => + "Du kannst solche Dateien nicht hochladen.", + + "The file '{file}' does not exist." => + "Die Datei '{file}' existiert nicht.", + + "Cannot read '{file}'." => + "Kann Datei '{file}' nicht lesen.", + + "Cannot copy '{file}'." => + "Kann Datei '{file}' nicht kopieren.", + + "Cannot move '{file}'." => + "Kann Datei '{file}' nicht verschieben.", + + "Cannot delete '{file}'." => + "Kann Datei '{file}' nicht löschen.", + + "Click to remove from the Clipboard" => + "Zum entfernen aus der Zwischenablage, hier klicken.", + + "This file is already added to the Clipboard." => + "Diese Datei wurde bereits der Zwischenablage hinzugefügt.", + + "Copy files here" => + "Kopiere Dateien hier hin.", + + "Move files here" => + "Verschiebe Dateien hier hin.", + + "Delete files" => + "Lösche Dateien.", + + "Clear the Clipboard" => + "Zwischenablage leeren", + + "Are you sure you want to delete all files in the Clipboard?" => + "Willst Du wirklich alle Dateien in der Zwischenablage löschen?", + + "Copy {count} files" => + "Kopiere {count} Dateien", + + "Move {count} files" => + "Verschiebe {count} Dateien", + + "Add to Clipboard" => + "Der Zwischenablage hinzufügen", + + "New folder name:" => "Neuer Ordnername:", + "New file name:" => "Neuer Dateiname:", + + "Upload" => "Hochladen", + "Refresh" => "Aktualisieren", + "Settings" => "Einstellungen", + "Maximize" => "Maximieren", + "About" => "Über", + "files" => "Dateien", + "View:" => "Ansicht:", + "Show:" => "Zeige:", + "Order by:" => "Ordnen nach:", + "Thumbnails" => "Miniaturansicht", + "List" => "Liste", + "Name" => "Name", + "Size" => "Größe", + "Date" => "Datum", + "Descending" => "Absteigend", + "Uploading file..." => "Lade Datei hoch...", + "Loading image..." => "Lade Bild...", + "Loading folders..." => "Lade Ordner...", + "Loading files..." => "Lade Dateien...", + "New Subfolder..." => "Neuer Unterordner...", + "Rename..." => "Umbenennen...", + "Delete" => "Löschen", + "OK" => "OK", + "Cancel" => "Abbruch", + "Select" => "Auswählen", + "Select Thumbnail" => "Wähle Miniaturansicht", + "View" => "Ansicht", + "Download" => "Download", + 'Clipboard' => "Zwischenablage", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Der Ordner kann nicht umbenannt werden.", + + "Non-existing directory type." => + "Der Ordner Typ existiert nicht.", + + "Cannot delete the folder." => + "Der Ordner kann nicht gelöscht werden.", + + "The files in the Clipboard are not readable." => + "Die Dateien in der Zwischenablage können nicht gelesen werden.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} Dateien in der Zwischenablage sind nicht lesbar. Möchtest Du die Übrigen trotzdem kopieren?", + + "The files in the Clipboard are not movable." => + "Die Dateien in der Zwischenablage können nicht verschoben werden.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} Dateien in der Zwischenablage sind nicht verschiebbar. Möchtest Du die Übrigen trotzdem verschieben?", + + "The files in the Clipboard are not removable." => + "Die Dateien in der Zwischenablage können nicht gelöscht werden.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} Dateien in der Zwischenablage können nicht gelöscht werden. Möchtest Du die Übrigen trotzdem löschen?", + + "The selected files are not removable." => + "Die ausgewählten Dateien können nicht gelöscht werden.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} der ausgewählten Dateien können nicht gelöscht werden. Möchtest Du die Übrigen trotzdem löschen?", + + "Are you sure you want to delete all selected files?" => + "Möchtest Du wirklich alle ausgewählten Dateien löschen?", + + "Failed to delete {count} files/folders." => + "Konnte {count} Dateien/Ordner nicht löschen.", + + "A file or folder with that name already exists." => + "Eine Datei oder ein Ordner mit dem Namen existiert bereits.", + + "selected files" => "ausgewählte Dateien", + "Type" => "Typ", + "Select Thumbnails" => "Wähle Miniaturansicht", + "Download files" => "Dateien herunterladen", +); + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lang/el.php b/protected/extensions/ckeditor/kcfinder/lang/el.php new file mode 100644 index 0000000..c8eb9ab --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/el.php @@ -0,0 +1,253 @@ + "el_GR.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Δεν έχετε δικαίωμα να ανεβάσετε αρχεία.", + + "You don't have permissions to browse server." => + "Δεν έχετε δικαίωμα να δείτε τα αρχεία στο διακομιστή.", + + "Cannot move uploaded file to target folder." => + "Το αρχείο δε μπορεί να μεταφερθεί στο φάκελο προορισμού.", + + "Unknown error." => + "'Αγνωστο σφάλμα.", + + "The uploaded file exceeds {size} bytes." => + "Το αρχείο υπερβαίνει το μέγεθος των {size} bytes.", + + "The uploaded file was only partially uploaded." => + "Ένα μόνο μέρος του αρχείου ανέβηκε.", + + "No file was uploaded." => + "Κανένα αρχείο δεν ανέβηκε.", + + "Missing a temporary folder." => + "Λείπει ο φάκελος των προσωρινών αρχείων.", + + "Failed to write file." => + "Σφάλμα στη τροποποίηση του αρχείου.", + + "Denied file extension." => + "Δεν επιτρέπονται αυτού του είδους αρχεία.", + + "Unknown image format/encoding." => + "Αγνωστη κωδικοποίηση εικόνας.", + + "The image is too big and/or cannot be resized." => + "Η εικόνα είναι πάρα πολύ μεγάλη και/η δεν μπορεί να αλλάξει μέγεθος.", + + "Cannot create {dir} folder." => + "Αδύνατον να δημιουργηθεί ο φάκελος {dir}.", + + "Cannot write to upload folder." => + "Αδύνατη η εγγραφή στο φάκελο προορισμού.", + + "Cannot read .htaccess" => + "Αδύνατη η ανάγνωση του .htaccess", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Εσφαλμένο αρχείο .htaccess.Αδύνατη η τροποποίησή του!", + + "Cannot read upload folder." => + "Μη αναγνώσιμος φάκελος προορισμού.", + + "Cannot access or create thumbnails folder." => + "Αδύνατη η πρόσβαση και ανάγνωση του φακέλου με τις μικρογραφίες εικόνων.", + + "Cannot access or write to upload folder." => + "Αδύνατη η πρόσβαση και τροποποίηση του φακέλου προορισμού.", + + "Please enter new folder name." => + "Παρακαλούμε εισάγετε ένα νέο όνομα φακέλου. ", + + "Unallowable characters in folder name." => + "Μη επιτρεπτοί χαρακτήρες στο όνομα φακέλου.", + + "Folder name shouldn't begins with '.'" => + "Το όνομα του φακέλου δε πρέπει να αρχίζει με '.'", + + "Please enter new file name." => + "Παρακαλούμε εισάγετε ένα νέο όνομα αρχείου.", + + "Unallowable characters in file name." => + "Μη επιτρεπτοί χαρακτήρες στο όνομα αρχείου.", + + "File name shouldn't begins with '.'" => + "Το όνομα του αρχείου δε πρέπει να αρχίζει με '.'", + + "Are you sure you want to delete this file?" => + "Σίγουρα θέλετε να διαγράψετε αυτό το αρχείο?", + + "Are you sure you want to delete this folder and all its content?" => + "Σίγουρα θέλετε να διαγράψετε αυτό το φάκελο μαζί με όλα τα περιεχόμενα?", + + "Non-existing directory type." => + "Ανύπαρκτος τύπος φακέλου.", + + "Undefined MIME types." => + "Απροσδιόριστοι τύποι MIME.", + + "Fileinfo PECL extension is missing." => + "Η πληροφορία αρχείου επέκταση PECL δεν υπάρχει.", + + "Opening fileinfo database failed." => + "Η πρόσβαση στις πληροφορίες του αρχείου απέτυχε.", + + "You can't upload such files." => + "Δε μπορείτε να ανεβάσετε τέτοια αρχεία.", + + "The file '{file}' does not exist." => + "Το αρχείο '{file}' δεν υπάρχει.", + + "Cannot read '{file}'." => + "Αρχείο '{file}' μη αναγνώσιμο.", + + "Cannot copy '{file}'." => + "Αδύνατη η αντιγραφή του '{file}'.", + + "Cannot move '{file}'." => + "Αδύνατη η μετακίνηση του '{file}'.", + + "Cannot delete '{file}'." => + "Αδύνατη η διαγραφή του '{file}'.", + + "Click to remove from the Clipboard" => + "Πατήστε για διαγραφή από το Clipboard.", + + "This file is already added to the Clipboard." => + "Αυτό το αρχείο βρίσκεται ήδη στο Clipboard.", + + "Copy files here" => + "Αντιγράψτε αρχεία εδώ.", + + "Move files here" => + "Μετακινήστε αρχεία εδώ.", + + "Delete files" => + "Διαγραφή αρχείων", + + "Clear the Clipboard" => + "Καθαρισμός Clipboard", + + "Are you sure you want to delete all files in the Clipboard?" => + "Σίγουρα θέλετε να διαγράψετε όλα τα αρχεία στο Clipboard?", + + "Copy {count} files" => + "Αντιγραφή {count} αρχείων.", + + "Move {count} files" => + "Μετακίνηση {count} αρχείων.", + + "Add to Clipboard" => + "Προσθήκη στο Clipboard", + + "New folder name:" => "Νέο όνομα φακέλου:", + "New file name:" => "Νέο όνομα αρχείου:", + + "Upload" => "Ανέβασμα", + "Refresh" => "Ανανέωση", + "Settings" => "Ρυθμίσεις", + "Maximize" => "Μεγιστοποίηση", + "About" => "Σχετικά", + "files" => "αρχεία", + "View:" => "Προβολή:", + "Show:" => "Εμφάνιση:", + "Order by:" => "Ταξινόμηση κατά:", + "Thumbnails" => "Μικρογραφίες", + "List" => "Λίστα", + "Name" => "Όνομα", + "Size" => "Μέγεθος", + "Date" => "Ημερομηνία", + "Descending" => "Φθίνουσα", + "Uploading file..." => "Το αρχείο ανεβαίνει...", + "Loading image..." => "Η εικόνα φορτώνει...", + "Loading folders..." => "Οι φάκελοι φορτώνουν...", + "Loading files..." => "Τα αρχεία φορτώνουν...", + "New Subfolder..." => "Νέος υποφάκελος...", + "Rename..." => "Μετονομασία...", + "Delete" => "Διαγραφή", + "OK" => "OK", + "Cancel" => "Ακύρωση", + "Select" => "Επιλογή", + "Select Thumbnail" => "Επιλογή Μικρογραφίας", + "View" => "Προβολή", + "Download" => "Κατέβασμα", + 'Clipboard' => "Clipboard", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Αδύνατη η μετονομασία του φακέλου.", + + "Cannot delete the folder." => + "Αδύνατη η διαγραφή του φακέλου.", + + "The files in the Clipboard are not readable." => + "Τα αρχεία στο Clipboard είναι μη αναγνώσιμα.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} αρχεία στο Clipboard είναι μη αναγώσιμα.Θέλετε να αντιγράψετε τα υπόλοιπα?", + + "The files in the Clipboard are not movable." => + "Τα αρχεία στο Clipboard είναι αδύνατο να μετακινηθούν.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} αρχεία στο Clipboard δεν είναι δυνατό να μετακινηθούν.Θέλετε να μετακινήσετε τα υπόλοιπα?", + + "The files in the Clipboard are not removable." => + "Τα αρχεία στο Clipboard είναι αδύνατο να αφαιρεθούν.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} αρχεία στο Clipboard δεν είναι δυνατό να αφαιρεθούν.Θέλετε να αφαιρέσετε τα υπόλοιπα?", + + "The selected files are not removable." => + "Τα επιλεγμένα αρχεία δε μπορούν να αφαιρεθούν.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} επιλεγμένα αρχεία δεν είναι δυνατό να αφαιρεθούν.Θέλετε να διαγράψετε τα υπόλοιπα?", + + "Are you sure you want to delete all selected files?" => + "Σίγουρα θέλετε να διαγράψετε όλα τα επιλεγμένα αρχεία?", + + "Failed to delete {count} files/folders." => + "Η διαγραφή {count} αρχείων/φακέλων απέτυχε.", + + "A file or folder with that name already exists." => + "Ένα αρχείο ή φάκελος με αυτό το όνομα υπάρχει ήδη.", + + "Inexistant or inaccessible folder." => + "Ανύπαρκτος η μη προσβάσιμος φάκελος.", + + "selected files" => "επιλεγμένα αρχεία", + "Type" => "Τύπος", + "Select Thumbnails" => "Επιλέξτε Μικρογραφίες", + "Download files" => "Κατέβασμα Αρχείων", + + // SINCE 2.4 + + "Checking for new version..." => "Ελεγχος για νέα έκδοση...", + "Unable to connect!" => "Αδύνατη η σύνδεση!", + "Download version {version} now!" => "Κατεβάστε την έκδοση {version} τώρα!", + "KCFinder is up to date!" => "Το KCFinder είναι ενημερωμένο με τη πιο πρόσφατη έκδοση!", + "Licenses:" => "Άδειες:", + "Attention" => "Προσοχή", + "Question" => "Ερώτηση", + "Yes" => "Ναι", + "No" => "Όχι", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/en.php b/protected/extensions/ckeditor/kcfinder/lang/en.php new file mode 100644 index 0000000..83e196f --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/en.php @@ -0,0 +1,25 @@ + + * @copyright 2010 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +$lang = array( + '_locale' => "en_US.UTF-8", + '_charset' => "utf-8", + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %B %e, %Y %I:%M %p", + '_dateTimeMid' => "%a %b %e %Y %I:%M %p", + '_dateTimeSmall' => "%m/%d/%Y %I:%M %p", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/es.php b/protected/extensions/ckeditor/kcfinder/lang/es.php new file mode 100644 index 0000000..a86f22e --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/es.php @@ -0,0 +1,127 @@ + "es_ES.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "No tiene permiso para subir archivos.", + "You don't have permissions to browse server." => "No tiene permiso para visualizar archivos.", + "Cannot move uploaded file to target folder." => "No puede mover archivos al directorio de destino.", + "Unknown error." => "Error desconocido.", + "The uploaded file exceeds {size} bytes." => "El archivo excede el tamaño permitido ({size} bytes).", + "The uploaded file was only partially uploaded." => "El archivo solo fué parcialmente cargado.", + "No file was uploaded." => "El archivo no fué cargado.", + "Missing a temporary folder." => "No se puede encontrar el directorio temporal.", + "Failed to write file." => "No se pudo crear el archivo.", + "Denied file extension." => "Extensión de archivo denegada.", + "Unknown image format/encoding." => "Formato / codificación de imagen desconocido.", + "The image is too big and/or cannot be resized." => "La imagen es muy grande o no se puede redimensionar.", + "Cannot create {dir} folder." => "No se puede crear la carpeta {dir}.", + "Cannot rename the folder." => "No se puede renombrar la carpeta.", + "Cannot write to upload folder." => "No se puede escribir en directorio de carga de archivos.", + "Cannot read .htaccess" => "No se puede leer el archivo .htaccess.", + "Incorrect .htaccess file. Cannot rewrite it!" => "Archivo .htaccess incorrecto. ¡No puede sobreescribirlo!", + "Cannot read upload folder." => "No se puede leer la carpeta de carga de archivos.", + "Cannot access or create thumbnails folder." => "No se puede leer o crear carpeta de miniaturas.", + "Cannot access or write to upload folder." => "No se puede leer o escribir en la carpeta de carga de archivos.", + "Please enter new folder name." => "Por favor introduzca el nombre de la nueva carpeta.", + "Unallowable characters in folder name." => "Caracteres inválidos en el nombre de carpeta.", + "Folder name shouldn't begins with '.'" => "El nombre de carpeta no puede comenzar con punto '.'", + "Please enter new file name." => "Por favor introduzca el nuevo nombre del archivo.", + "Unallowable characters in file name." => "Carácteres inválidos en el nombre de archivo.", + "File name shouldn't begins with '.'" => "El nombre de archivo no puede comenzar con punto '.'", + "Are you sure you want to delete this file?" => "Esta seguro de que desea borrar este archivo?", + "Are you sure you want to delete this folder and all its content?" => "Esta seguro de que desea borrar esta carpeta y todo su contenido?", + "Non-existing directory type." => "El tipo de directorio no existe.", + "Undefined MIME types." => "Tipo MIME no definido.", + "Fileinfo PECL extension is missing." => "Archivo PECL con estructura errónea.", + "Opening fileinfo database failed." => "Error abriendo el archivo de información de la base de datos.", + "You can't upload such files." => "No puede cargar tantos archivos.", + "The file '{file}' does not exist." => "El archivo '{file}' no existe.", + "Cannot read '{file}'." => "No se puede leer '{file}'.", + "Cannot copy '{file}'." => "No se puede copiar '{file}'.", + "Cannot move '{file}'." => "No se puede mover '{file}'.", + "Cannot delete '{file}'." => "No se puede borrar '{file}'.", + "Cannot delete the folder." => "No se puede borrrar la carpeta.", + "Click to remove from the Clipboard" => "Haga Click para borrar del portapapeles", + "This file is already added to the Clipboard." => "Este archivo ya fué agregado al portapapeles.", + "The files in the Clipboard are not readable." => "Los archivos en el portapaleles no son legibles.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} archivos en el portapapeles no son legibles. Desea copiar el resto?", + "The files in the Clipboard are not movable." => "Los archivos en el portapapeles no se pueden mover.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} archivos en el portapapeles no se pueden mover. Desea mover el resto?", + "The files in the Clipboard are not removable." => "Los archivos en el portapapeles no se pueden remover.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} archivos en el portapapeles no se pueden remover. Desea borrar el resto?", + "The selected files are not removable." => "Los archivos seleccionados no son removibles.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} archivos seleccionados no son removibles. Desea borrar el resto?", + "Are you sure you want to delete all selected files?" => "Esta seguro de que desea borrar todos los archivos seleccionados?", + "Failed to delete {count} files/folders." => "Falló al borrar {count} archivos/carpetas.", + "A file or folder with that name already exists." => "Existe una carpeta o archivo con el mismo nombre.", + "Copy files here" => "Copiar archivos aquí", + "Move files here" => "Mover archivos aquí", + "Delete files" => "Borrar archivos", + "Clear the Clipboard" => "Limpiar el portapapeles", + "Are you sure you want to delete all files in the Clipboard?" => "Esta seguro de que desea borrar todos los archivos del portapapeles?", + "Copy {count} files" => "Copiar {count} archivos", + "Move {count} files" => "Mover {count} archivos ", + "Add to Clipboard" => "Agregar al portapapeles", + "Inexistant or inaccessible folder." => "Carpeta inexistente o inaccesible.", + "New folder name:" => "Nuevo nombre de carpeta:", + "New file name:" => "Nuevo nombre de archivo:", + "Upload" => "Cargar", + "Refresh" => "Refrescar", + "Settings" => "Preferencias", + "Maximize" => "Maximizar", + "About" => "Acerca de", + "files" => "Archivos", + "selected files" => "Archivos seleccionados", + "View:" => "Ver:", + "Show:" => "Mostrar:", + "Order by:" => "Ordenar por:", + "Thumbnails" => "Miniaturas", + "List" => "Lista", + "Name" => "Nombre", + "Type" => "Tipo", + "Size" => "Tamaño", + "Date" => "Fecha", + "Descending" => "Decendente", + "Uploading file..." => "Cargando archivo...", + "Loading image..." => "Cargando imagen...", + "Loading folders..." => "Cargando carpetas...", + "Loading files..." => "Cargando archivos...", + "New Subfolder..." => "Nuevo subdirectorio...", + "Rename..." => "Renombrar...", + "Delete" => "Eliminar", + "OK" => "OK", + "Cancel" => "Cancelar", + "Select" => "Seleccionar", + "Select Thumbnail" => "Seleccionar miniatura", + "Select Thumbnails" => "Seleccionar miniaturas", + "View" => "Ver", + "Download" => "Descargar", + "Download files" => "Descargar archivos", + "Clipboard" => "Portapapeles", + "Checking for new version..." => "Verificando nuevas versiones...", + "Unable to connect!" => "¡No se pudo realizar la conexión!", + "Download version {version} now!" => "¡Descarga la versión {version} ahora!", + "KCFinder is up to date!" => "¡KCFinder está actualizado!", + "Licenses:" => "Licencias:", + "Attention" => "Atención", + "Question" => "Pregunta", + "Yes" => "Si", + "No" => "No", + "You cannot rename the extension of files!" => "¡Usted no puede renombrar la extensión de los archivos!", + "Uploading file {number} of {count}... {progress}" => "Cargando archivo {number} de {count}... {progress}", + "Failed to upload {filename}!" => "¡No se pudo cargar el archivo {filename}!", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/fa.php b/protected/extensions/ckeditor/kcfinder/lang/fa.php new file mode 100644 index 0000000..771d0ee --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/fa.php @@ -0,0 +1,264 @@ + + * @copyright 2010 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +$lang = array( + '_locale' => "fa_IR.UTF-8", + '_charset' => "utf-8", + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %B %e, %Y %H:%M", + '_dateTimeMid' => "%a %b %e %Y %H:%M", + '_dateTimeSmall' => "%Y/%m/%d %H:%M", + + "You don't have permissions to upload files." => + ".شما فاقد مجوز برای ارسال فایل ها هستید", + + "You don't have permissions to browse server." => + ".شما فاقد مجوز برای جستجو در سرور هستید", + + "Cannot move uploaded file to target folder." => + ".برنامه نمی تواند فایل بارگذاری شده را انتقال دهد به پوشه مورد نظر", + + "Unknown error." => + ".خطای نامشخص", + + "The uploaded file exceeds {size} bytes." => + ".بایت است {size} حجم فایل بارگذاری شده بیشتر از", + + "The uploaded file was only partially uploaded." => + ".فایل ناقص بارگذاری شد", + + "No file was uploaded." => + ".فایل ارسال نشد", + + "Missing a temporary folder." => + ".پوشه تمپ پیدا نشد", + + "Failed to write file." => + ".خطا در نوشتن فایل", + + "Denied file extension." => + ".پسوند فایل غیر مجاز است", + + "Unknown image format/encoding." => + ".عکس معتبر نیست format/encoding", + + "The image is too big and/or cannot be resized." => + ".عکس انتخابی یا بزرگ است یا تغییر اندازه داده نمی شود", + + "Cannot create {dir} folder." => + ".{dir}مشکل در ساخت پوشه", + + "Cannot write to upload folder." => + ".مشکل در نوشتن اطلاعات در پوشه بارگذاری", + + "Cannot read .htaccess" => + ".htaccess خطا در خواندن فایل", + + "Incorrect .htaccess file. Cannot rewrite it!" => + ".غیرقابل بازنویسی است .htaccess فایل", + + "Cannot read upload folder." => + ".مشکل در خواندن پوشه بارگذاری", + + "Cannot access or create thumbnails folder." => + ".مشکل در دسترسی یا ساخت پوشه تام", + + "Cannot access or write to upload folder." => + ".مشکل در دسترسی برای نوشتن اطلاعات در پوشه بارگذاری", + + "Please enter new folder name." => + ".لطفا نام پوشه جدید را وارد کنید", + + "Unallowable characters in folder name." => + ".نام پوشه دارای حروف غیر مجاز است", + + "Folder name shouldn't begins with '.'" => + ".نام پوشه نباید با '.' شروع شود", + + "Please enter new file name." => + ".لطفا نام فایل جدید را وارد کنید", + + "Unallowable characters in file name." => + ".نام فایل دارای حروف غیر مجاز است", + + "File name shouldn't begins with '.'" => + ".نام فایل نباید با '.' شروع شود", + + "Are you sure you want to delete this file?" => + "آیا از حذف این فایل اطمینان دارید؟", + + "Are you sure you want to delete this folder and all its content?" => + "آیا از حذف این پوشه و تمام محتویات داخل آن اطمینان دارید؟", + + "Inexistant or inaccessible folder." => + "Tipo di cartella non esistente.", + + "Undefined MIME types." => + ".تعریف نشده اند MIME پسوند های ", + + "Fileinfo PECL extension is missing." => + "Manca estensione PECL del file.", + + "Opening fileinfo database failed." => + ".خطا در بازکردن بانک اطلاعاتی مشخصات فایل", + + "You can't upload such files." => + ".شما امکان بارگذاری این فایل ها را ندارید", + + "The file '{file}' does not exist." => + ".موجود نیست '{file}' فایل", + + "Cannot read '{file}'." => + ".'{file}' مشکل در خواندن", + + "Cannot copy '{file}'." => + ".'{file}' نمی توانید کپی کنید", + + "Cannot move '{file}'." => + ".'{file}' نمی توانید انتقال دهید", + + "Cannot delete '{file}'." => + ".'{file}'نمی توانید حذف کنید", + + "Click to remove from the Clipboard" => + ".برای حذف از کلیپ برد کلیک کنید", + + "This file is already added to the Clipboard." => + ".این فایل قبلا در حافظه کلیپ برد افزوده شده است", + + "Copy files here" => + "کپی فایل ها به اینجا", + + "Move files here" => + "انتقال فایل ها به اینجا", + + "Delete files" => + "حذف فایل ها", + + "Clear the Clipboard" => + "پاک کردن حافظه کلیپ برد", + + "Are you sure you want to delete all files in the Clipboard?" => + "آیا از حذف فایل های موجود در کلیپ برد اطمینان دارید؟", + + "Copy {count} files" => + "...تعداد {count} فایل آماده کپی به", + + "Move {count} files" => + "...تعداد {count} فایل آماده انتقال به", + + "Add to Clipboard" => + "افزودن در کلیپ برد", + + "New folder name:" => "نام پوشه جدید:", + "New file name:" => "نام فایل جدید:", + + "Upload" => "ارسال فايل", + "Refresh" => "بارگذاری مجدد", + "Settings" => "تنظيمات", + "Maximize" => "تمام صفحه", + "About" => "درباره", + "files" => "فايل ها", + "View:" => ": نمایش", + "Show:" => ": نمايش", + "Order by:" => ": مرتب کردن بر مبناي", + "Thumbnails" => "نمايش کوچک عکسها", + "List" => "ليست", + "Name" => "نام", + "Size" => "حجم", + "Date" => "تاريخ", + "Type" => "پسوند", + "Descending" => "نزولي", + "Uploading file..." => "... درحال ارسال فایل", + "Loading image..." => "... درحال بارگذاری عکس", + "Loading folders..." => "... درحال بارگذاری پوشه ها", + "Loading files..." => "... درحال بارگذاری فایل ها", + "New Subfolder..." => "...ساخت زیرپوشه جدید", + "Rename..." => "... تغییر نام", + "Delete" => "حذف", + "OK" => "ادامه", + "Cancel" => "انصراف", + "Select" => "انتخاب", + "Select Thumbnail" => "انتخاب عکس با اندازه کوچک", + "View" => "نمایش", + "Download" => "دریافت فایل", + "Clipboard" => "حافضه کلیپ برد", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + ".نام وارد شده تکراری است. پوشه ای با این نام وجود دارد. لطفا نام جدیدی انتخاب کنید", + + "Non-existing directory type." => + ".نوع فهرست وجود ندارد", + + "Cannot delete the folder." => + ".نمی توانید این پوشه را حذف کنید", + + "The files in the Clipboard are not readable." => + ".فایل های موجود در کلیپ برد قابل خواندن نیستند", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "تعداد {count} فایل موجود در کلیپ برد قابل خواندن نیستند. آیا مایلید بقیه فایل ها کپی شوند؟", + + "The files in the Clipboard are not movable." => + ".فایل های موجود در کلیپ برد غیر قابل انتقال هستند. لطفا دسترسی فایل ها را چک کنید", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "تعداد {count} فایل از فایل های موجود در کلیپ برد غیر قابل انتقال هستند. آیا مایلید بقیه فایل ها منتقل شوند؟", + + "The files in the Clipboard are not removable." => + ".فایل های موجود در کلیپ برد قابل پاک شدن نیستند. دسترسی فایل ها را چک کنید", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "تعداد {count} فایل از فایل های موجود در کلیپ برد غیر قابل حذف هستند. آیا مایلید بقیه فایل ها حذف شوند؟", + + "The selected files are not removable." => + ".فایل های انتخاب شده قابل برداشتن نیست", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "تعداد {count} فایل از فایل های انتخابی غیر قابل حذف هستند.آیا مایلید بقیه فایل ها حذف شوند؟", + + "Are you sure you want to delete all selected files?" => + "آیا از حذف تمام فایل های انتخابی اطمینان دارید؟", + + "Failed to delete {count} files/folders." => + ".فایل/پوشه {count} خطا در پاک کردن", + + "A file or folder with that name already exists." => + ".یک پوشه یا فایل با این نام وجود دارد.لطفا نام دیگری انتخاب کنید", + + "selected files" => "فایل های انتخاب شده", + "Select Thumbnails" => "انتخاب عکس های کوچک", + "Download files" => "دریافت فایل ها", + + // SINCE 2.4 + + "Checking for new version..." => "...وجود نسخه جدید را بررسی کن", + "Unable to connect!" => "!مشکل در برقراری ارتباط", + "Download version {version} now!" => "!را دانلود کن {version} همسین حالا نسخه ", + "KCFinder is up to date!" => "!بروز است KCFinder", + "Licenses:" => "مجوز", + "Attention" => "توجه", + "Question" => "پرسش", + "Yes" => "بله", + "No" => "خیر", + + // SINCE 2.41 + + "You cannot rename the extension of files!" => "!شما نمی توانید پسوند فایلها را تغییر دهید", +); + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lang/fr.php b/protected/extensions/ckeditor/kcfinder/lang/fr.php new file mode 100644 index 0000000..4b49522 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/fr.php @@ -0,0 +1,253 @@ + "fr_FR.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Vous n'avez pas les droits nécessaires pour envoyer des fichiers.", + + "You don't have permissions to browse server." => + "Vous n'avez pas les droits nécessaires pour parcourir le serveur.", + + "Cannot move uploaded file to target folder." => + "Impossible de déplacer le fichier téléchargé vers le répertoire de destination.", + + "Unknown error." => + "Erreur inconnue.", + + "The uploaded file exceeds {size} bytes." => + "Le fichier envoyé dépasse la taille maximale de {size} octects.", + + "The uploaded file was only partially uploaded." => + "Le fichier envoyé ne l'a été que partiellement.", + + "No file was uploaded." => + "Aucun fichier n'a été envoyé", + + "Missing a temporary folder." => + "Il manque un répertoire temporaire.", + + "Failed to write file." => + "Impossible de créer le fichier.", + + "Denied file extension." => + "Type d'extension de fichier interdit.", + + "Unknown image format/encoding." => + "Format/encodage d'image inconnu.", + + "The image is too big and/or cannot be resized." => + "Image trop grande et/ou impossible de la redimensionner.", + + "Cannot create {dir} folder." => + "Impossible de créer le répertoire {dir}.", + + "Cannot write to upload folder." => + "Impossible d'écrire dans le répertoire de destination.", + + "Cannot read .htaccess" => + "Impossible de lire le fichier .htaccess", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Fichier .htaccess incorrect. Réécriture du fichier impossible!", + + "Cannot read upload folder." => + "Impossible de lire le répertoire d'envoi.", + + "Cannot access or create thumbnails folder." => + "Impossible d'accéder ou de créer le répertoire des miniatures.", + + "Cannot access or write to upload folder." => + "Impossible d'accèder ou d'écrire dans le répertoire d'envoi.", + + "Please enter new folder name." => + "Merci d'entrer le nouveau nom de dossier.", + + "Unallowable characters in folder name." => + "Caractères non autorisés dans le nom du dossier.", + + "Folder name shouldn't begins with '.'" => + "Le nom du dossier ne peut pas commencer par '.'", + + "Please enter new file name." => + "Merci d'entrer le nouveau nom de fichier", + + "Unallowable characters in file name." => + "Caractères non autorisés dans le nom du fichier.", + + "File name shouldn't begins with '.'" => + "Le nom du fichier ne peut pas commencer par '.'", + + "Are you sure you want to delete this file?" => + "Êtes vous sûr du vouloir supprimer ce fichier?", + + "Are you sure you want to delete this folder and all its content?" => + "Êtes vous sûr du vouloir supprimer ce répertoire et tous les fichiers qu'il contient?", + + "Non-existing directory type." => + "Type de répertoire inexistant.", + + "Undefined MIME types." => + "MIME types non déclarés.", + + "Fileinfo PECL extension is missing." => + "L'extension' Fileinfo PECL est manquante.", + + "Opening fileinfo database failed." => + "Ouverture de la base de données fileinfo echouée.", + + "You can't upload such files." => + "Vous ne pouvez pas envoyer de tels fichiers.", + + "The file '{file}' does not exist." => + "Le fichier '{file}' n'existe pas.", + + "Cannot read '{file}'." => + "Impossible de lire le fichier '{file}'.", + + "Cannot copy '{file}'." => + "Impossible de copier le fichier '{file}'.", + + "Cannot move '{file}'." => + "Impossible de déplacer le fichier '{file}'.", + + "Cannot delete '{file}'." => + "Impossible de supprimer le fichier '{file}'.", + + "Click to remove from the Clipboard" => + "Cliquez pour enlever du presse-papier", + + "This file is already added to the Clipboard." => + "Ce fihier a déja été ajouté au presse-papier.", + + "Copy files here" => + "Copier les fichier ici", + + "Move files here" => + "Déplacer le fichiers ici", + + "Delete files" => + "Supprimer les fichiers", + + "Clear the Clipboard" => + "Vider le presse-papier", + + "Are you sure you want to delete all files in the Clipboard?" => + "Êtes vous sûr de vouloir supprimer tous les fichiers du presse-papier?", + + "Copy {count} files" => + "Copie de {count} fichiers", + + "Move {count} files" => + "Déplacement de {count} fichiers", + + "Add to Clipboard" => + "Ajouter au presse-papier", + + "New folder name:" => "Nom du nouveau dossier:", + "New file name:" => "Nom du nouveau fichier:", + + "Upload" => "Envoyer", + "Refresh" => "Rafraîchir", + "Settings" => "Paramètres", + "Maximize" => "Agrandir", + "About" => "A propos", + "files" => "fichiers", + "View:" => "Voir:", + "Show:" => "Montrer:", + "Order by:" => "Trier par:", + "Thumbnails" => "Miniatures", + "List" => "Liste", + "Name" => "Nom", + "Size" => "Taille", + "Date" => "Date", + "Descending" => "Décroissant", + "Uploading file..." => "Envoi en cours...", + "Loading image..." => "Chargement de l'image'...", + "Loading folders..." => "Chargement des dossiers...", + "Loading files..." => "Chargement des fichiers...", + "New Subfolder..." => "Nouveau sous-dossier...", + "Rename..." => "Renommer...", + "Delete" => "Supprimer", + "OK" => "OK", + "Cancel" => "Annuler", + "Select" => "Sélectionner", + "Select Thumbnail" => "Sélectionner la miniature", + "View" => "Voir", + "Download" => "Télécharger", + 'Clipboard' => "Presse-papier", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Impossible de renommer le dossier.", + + "Cannot delete the folder." => + "Impossible de supprimer le dossier.", + + "The files in the Clipboard are not readable." => + "Les fichiers du presse-papier ne sont pas lisibles.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} fichiers dans le presse-papier ne sont pas lisibles. Voulez vous copier le reste?", + + "The files in the Clipboard are not movable." => + "Les fichiers du presse-papier ne peuvent pas être déplacés.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} fichiers du presse-papier ne peuvent pas être déplacées. Voulez vous déplacer le reste?", + + "The files in the Clipboard are not removable." => + "Les fichiers du presse-papier ne peuvent pas être enlevés.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} fichiers du presse-papier ne peuvent pas être enlevés. Vouslez vous supprimer le reste?", + + "The selected files are not removable." => + "Les fichiers sélectionnés ne peuvent pas être enlevés.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} fichier sélectionnés ne peuvent pas être enlevés. Voulez vous supprimer le reste?", + + "Are you sure you want to delete all selected files?" => + "Êtes vous sûr de vouloir supprimer tous les fichiers sélectionnés?", + + "Failed to delete {count} files/folders." => + "Supression de {count} fichiers/dossiers impossible.", + + "A file or folder with that name already exists." => + "Un fichier ou dossier ayant ce nom existe déja.", + + "Inexistant or inaccessible folder." => + "Dossier inexistant ou innacessible.", + + "selected files" => "fichiers sélectionnés", + "Type" => "Type", + "Select Thumbnails" => "Sélectionner les miniatures", + "Download files" => "Télécharger les fichiers", + + // SINCE 2.4 + + "Checking for new version..." => "Vérifier l'existance d'une nouvelle version...", + "Unable to connect!" => "Connexion impossible!", + "Download version {version} now!" => "Télécharger la version {version} maintenant!", + "KCFinder is up to date!" => "KCFinder est à jour!", + "Licenses:" => "Licences:", + "Attention" => "Alerte", + "Question" => "Question", + "Yes" => "Oui", + "No" => "Non", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/hu.php b/protected/extensions/ckeditor/kcfinder/lang/hu.php new file mode 100644 index 0000000..67187ed --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/hu.php @@ -0,0 +1,125 @@ + + */ + +$lang = array( + + '_locale' => "hu_HU.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d/%m/%Y %H:%M", + + "You don't have permissions to upload files." => "Nincs jogosultsága fájlokat feltölteni.", + "You don't have permissions to browse server." => "Nincs jogosultsága a kiszolgálón böngészni.", + "Cannot move uploaded file to target folder." => "Nem lehet áthelyezni a feltöltött fájlt a célkönyvtárba.", + "Unknown error." => "Ismeretlen hiba.", + "The uploaded file exceeds {size} bytes." => "A feltöltött fájl mérete meghaladja a {size} bájtot.", + "The uploaded file was only partially uploaded." => "A feltöltendő fájl csak részben sikerült feltölteni.", + "No file was uploaded." => "Nem történt fájlfeltöltés.", + "Missing a temporary folder." => "Hiányzik az ideiglenes könyvtár.", + "Failed to write file." => "Nem sikerült a fájl írása.", + "Denied file extension." => "Tiltott fájlkiterjesztés.", + "Unknown image format/encoding." => "Ismeretlen képformátum vagy kódolás.", + "The image is too big and/or cannot be resized." => "A kép mérete túl nagy és/vagy nem lehet átméretezni.", + "Cannot create {dir} folder." => "Nem lehet létrehozni a {dir} könyvtárat.", + "Cannot rename the folder." => "A könyvtárat nem lehet átnevezni.", + "Cannot write to upload folder." => "Nem lehet írni a feltöltési könyvtárba.", + "Cannot read .htaccess" => "Nem lehet olvasni a .htaccess fájlt", + "Incorrect .htaccess file. Cannot rewrite it!" => "Hibás .htaccess fájl. Nem lehet írni.", + "Cannot read upload folder." => "Nem lehet olvasni a feltöltési könyvtárat.", + "Cannot access or create thumbnails folder." => "Nem lehet elérni vagy létrehozni a bélyegképek könyvtárat.", + "Cannot access or write to upload folder." => "Nem lehet elérni vagy létrehozni a feltöltési könyvtárat.", + "Please enter new folder name." => "Kérem, adja meg az új könyvtár nevét.", + "Unallowable characters in folder name." => "Meg nem engedett karakter(ek) a könyvtár nevében.", + "Folder name shouldn't begins with '.'" => "Könyvtárnév nem kezdődhet '.'-tal", + "Please enter new file name." => "Kérem adja meg az új fájl nevét.", + "Unallowable characters in file name." => "Meg nem engedett karakter(ek) a fájl nevében.", + "File name shouldn't begins with '.'" => "Fájlnév nem kezdődhet '.'-tal", + "Are you sure you want to delete this file?" => "Biztos benne, hogy törölni kívánja ezt a fájlt?", + "Are you sure you want to delete this folder and all its content?" => "Biztos benne hogy törölni kívánja ezt a könyvtárat és minden tartalmát?", + "Non-existing directory type." => "Nem létező könyvtártípus.", + "Undefined MIME types." => "Meghatározatlan MIME típusok.", + "Fileinfo PECL extension is missing." => "Hiányzó PECL Fileinfo PHP kiegészítés.", + "Opening fileinfo database failed." => "Nem sikerült megnyitni a Fileinfo adatbázist.", + "You can't upload such files." => "Nem tölthet fel ilyen fájlokat.", + "The file '{file}' does not exist." => "A '{file}' fájl nem létezik.", + "Cannot read '{file}'." => "A '{file}' fájlt nem lehet olvasni.", + "Cannot copy '{file}'." => "A '{file}' fájlt nem lehet másolni.", + "Cannot move '{file}'." => "A '{file}' fájlt nem lehet áthelyezni.", + "Cannot delete '{file}'." => "A '{file}' fájlt nem lehet törölni.", + "Cannot delete the folder." => "Nem lehet törölni a könyvtárat.", + "Click to remove from the Clipboard" => "kattintson ide, hogy eltávolítsa a vágólapról", + "This file is already added to the Clipboard." => "Ezt a fájlt már hozzáadta a vágólaphoz.", + "The files in the Clipboard are not readable." => "A vágólapon lévő fájlok nem olvashatók.", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} fájl a vágólapon nem olvasható. Akarja másolni a többit?", + "The files in the Clipboard are not movable." => "A vágólapon lévő fájlokat nem lehet áthelyezni.", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} fájlt a vágólapon nem lehet áthelyezni. Akarja áthelyezni a többit?", + "The files in the Clipboard are not removable." => "A vágólapon lévő fájlokat nem lehet eltávolítani.", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} fájlt a vágólapon nem lehet eltávolítani. Akarja törölni a többit?", + "The selected files are not removable." => "A kiválasztott fájlokat nem lehet eltávolítani.", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} kiválasztott fájlt nem lehet eltávolítani. Akarja törölni a többit?", + "Are you sure you want to delete all selected files?" => "Biztosan törölni kíván minden kijelölt fájlt?", + "Failed to delete {count} files/folders." => "Nem sikerült törölni {count} fájlt.", + "A file or folder with that name already exists." => "Egy fájl vagy könyvtár már létezik ugyan ezzel a névvel.", + "Copy files here" => "Fájlok másolása ide", + "Move files here" => "Fájlok áthelyezése ide", + "Delete files" => "Fájlok törlése", + "Clear the Clipboard" => "Vágólap ürítése", + "Are you sure you want to delete all files in the Clipboard?" => "Biztosan törölni kívánja a vágólapon lévő összes fájlt?", + "Copy {count} files" => "{count} fájl másolása", + "Move {count} files" => "{count} fájl áthelyezése", + "Add to Clipboard" => "Hozzáadás vágólaphoz", + "Inexistant or inaccessible folder." => "Nem létező vagy elérhetetlen könyvtár.", + "New folder name:" => "Új könyvtár neve:", + "New file name:" => "Új fájl neve:", + "Upload" => "Feltöltés", + "Refresh" => "Frissítés", + "Settings" => "Beállítások", + "Maximize" => "Maximalizálás", + "About" => "Névjegy", + "files" => "fájlok", + "selected files" => "kiválasztott fájlok", + "View:" => "Nézet:", + "Show:" => "Mutat:", + "Order by:" => "Rendezés:", + "Thumbnails" => "Bélyegképek", + "List" => "Lista", + "Name" => "Név", + "Type" => "Típus", + "Size" => "Méret", + "Date" => "Datum", + "Descending" => "Csökkenő", + "Uploading file..." => "Fájl feltöltése...", + "Loading image..." => "Képek betöltése...", + "Loading folders..." => "Könyvtárak betöltése...", + "Loading files..." => "Fájlok betöltése...", + "New Subfolder..." => "Új alkönyvtár...", + "Rename..." => "Átnevezés...", + "Delete" => "Törlés", + "OK" => "OK", + "Cancel" => "Mégse", + "Select" => "Kiválaszt", + "Select Thumbnail" => "Bélyegkép kiválasztása", + "Select Thumbnails" => "Bélyegképek kiválasztása", + "View" => "Nézet", + "Download" => "Letöltés", + "Download files" => "Fájlok letöltése", + "Clipboard" => "Vágólap", + "Checking for new version..." => "Új verzió keresése ...", + "Unable to connect!" => "Nem lehet csatlakozni!", + "Download version {version} now!" => "Töltse le a {version} verziót most!", + "KCFinder is up to date!" => "Ez a KCFinder verzió a legfrissebb", + "Licenses:" => "Licenszek:", + "Attention" => "Figyelem", + "Question" => "Kérdés", + "Yes" => "Igen", + "No" => "Nem", + "You cannot rename the extension of files!" => "Nem változtathatja meg a fájlok kiterjezstését", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/it.php b/protected/extensions/ckeditor/kcfinder/lang/it.php new file mode 100644 index 0000000..c616215 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/it.php @@ -0,0 +1,254 @@ + "it_IT.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Non hai il permesso di caricare files.", + + "You don't have permissions to browse server." => + "Non hai il permesso di elencare i files.", + + "Cannot move uploaded file to target folder." => + "Non puoi spostare il file caricato nella cartella di destinazione", + + "Unknown error." => + "Errore sconosciuto.", + + "The uploaded file exceeds {size} bytes." => + "Il file caricato eccede {size} bytes.", + + "The uploaded file was only partially uploaded." => + "Il file è stato caricato parzialmente.", + + "No file was uploaded." => + "Nessun file è stato caricato", + + "Missing a temporary folder." => + "Cartella temporanea non trovata.", + + "Failed to write file." => + "Fallita la scrittura del file.", + + "Denied file extension." => + "Estensione del file non consentita.", + + "Unknown image format/encoding." => + "Sconosciuto format/encoding immagine.", + + "The image is too big and/or cannot be resized." => + "Immagine troppo grande e/o non può essere rimpicciolita", + + "Cannot create {dir} folder." => + "La cartella {dir} non può essere creata.", + + "Cannot write to upload folder." => + "Cartella di destinazione protetta in scrittura.", + + "Cannot read .htaccess" => + "Impossibile leggere il file .htaccess.", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Il file .htaccess è corrotto. Impossibile riscriverlo!", + + "Cannot read upload folder." => + "Impossibile leggere il contenuto della cartella di destinazione.", + + "Cannot access or create thumbnails folder." => + "Impossibile creare o accedere alla cartella delle miniature.", + + "Cannot access or write to upload folder." => + "Impossibile accedere o scrivere nella cartella di destinazione.", + + "Please enter new folder name." => + "Scrivi il nome della nuova cartella.", + + "Unallowable characters in folder name." => + "Caratteri non permessi nel nome della cartella.", + + "Folder name shouldn't begins with '.'" => + "Il nome della cartella non può iniziare con'.'", + + "Please enter new file name." => + "Inserisci il nuovo nome del file", + + "Unallowable characters in file name." => + "Caratteri non permessi nel nome del file.", + + "File name shouldn't begins with '.'" => + "Il nome del file non può iniziare con '.'", + + "Are you sure you want to delete this file?" => + "Sei sicuro che vuoi cancellare questo file?", + + "Are you sure you want to delete this folder and all its content?" => + "Sei sicuro di voler cancellare questa cartella e il suo contenuto?", + + "Inexistant or inaccessible folder." => + "Tipo di cartella non esistente.", + + "Undefined MIME types." => + "Tipo MIME non definito.", + + "Fileinfo PECL extension is missing." => + "Manca estensione PECL del file.", + + "Opening fileinfo database failed." => + "Apertura del database delle informazioni del file fallita.", + + "You can't upload such files." => + "Non è possibile caricare questi files.", + + "The file '{file}' does not exist." => + "Il file '{file}' non esiste.", + + "Cannot read '{file}'." => + "Impossibile leggere il file '{file}'.", + + "Cannot copy '{file}'." => + "Impossibile copiare il file '{file}'.", + + "Cannot move '{file}'." => + "Impossibile spostare il file '{file}'.", + + "Cannot delete '{file}'." => + "Impossibile cancellare il file '{file}'.", + + "Click to remove from the Clipboard" => + "Click per rimuoverlo dalla Clipboard", + + "This file is already added to the Clipboard." => + "Questo file è già aggiunto alla Clipboard.", + + "Copy files here" => + "Copia i files qui", + + "Move files here" => + "Sposta i files qui", + + "Delete files" => + "Cancella i files", + + "Clear the Clipboard" => + "Pulisci la Clipboard", + + "Are you sure you want to delete all files in the Clipboard?" => + "Sei sicuro che vuoi cancellare tutti i files dalla Clipboard?", + + "Copy {count} files" => + "Copio {count} files", + + "Move {count} files" => + "Sposto {count} files", + + "Add to Clipboard" => + "Aggiungi alla Clipboard", + + "New folder name:" => "Nuovo nome della cartella:", + "New file name:" => "Nuovo nome del file:", + + "Upload" => "Carica", + "Refresh" => "Aggiorna", + "Settings" => "Preferenze", + "Maximize" => "Massimizza", + "About" => "Chi siamo", + "files" => "files", + "View:" => "Vista:", + "Show:" => "Mostra:", + "Order by:" => "Ordina per:", + "Thumbnails" => "Miniature", + "List" => "Lista", + "Name" => "Nome", + "Size" => "Grandezza", + "Date" => "Data", + "Descending" => "Discendente", + "Uploading file..." => "Carico file...", + "Loading image..." => "Caricamento immagine...", + "Loading folders..." => "Caricamento cartella...", + "Loading files..." => "caricamento files...", + "New Subfolder..." => "Nuova sottocartella...", + "Rename..." => "Rinomina...", + "Delete" => "Elimina", + "OK" => "OK", + "Cancel" => "Cancella", + "Select" => "Seleziona", + "Select Thumbnail" => "Seleziona miniatura", + "View" => "Vista", + "Download" => "Scarica", + "Clipboard" => "Clipboard", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Non è possibile rinominare la cartella.", + + "Non-existing directory type." => + "Il tipo di cartella non esiste.", + + "Cannot delete the folder." => + "Non è possibile cancellare la cartella.", + + "The files in the Clipboard are not readable." => + "I files nella clipboard non sono leggibili.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} files nella clipboard non sono leggibili. Copiare il resto?", + + "The files in the Clipboard are not movable." => + "I files nella clipboard non sono spoastabili.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} files nella clipboard non sono spoastabili. Spostare il resto?", + + "The files in the Clipboard are not removable." => + "files nella clipboard non si possono rimuovere.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} files nella clipboard non si possono rimuovere. Cancellare il resto?", + + "The selected files are not removable." => + "Il file selezionato non è rimovibile.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} i files selezionati non sono rimovibili. Cancellare il resto?", + + "Are you sure you want to delete all selected files?" => + "Sei sicuro che vuoi cancellare tutti i files selezionati?", + + "Failed to delete {count} files/folders." => + "Cancellazione fallita {count} files/cartelle.", + + "A file or folder with that name already exists." => + "Un file o cartella con questo nome già esiste.", + + "selected files" => "files selezionati", + "Type" => "Tipo", + "Select Thumbnails" => "Seleziona miniature", + "Download files" => "Scarica files", + + // SINCE 2.34 + + "Checking for new version..." => "Controllo nuova versione...", + "Unable to connect!" => "Connessione impossibile", + "Download version {version} now!" => "Prelevo la versione {version} adesso!", + "KCFinder is up to date!" => "KCFinder è aggiornato!", + "Licenses:" => "Licenze: ", + "Attention" => "Attensione", + "Question" => "Domanda", + "Yes" => "Si", + "No" => "No", + +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/ja.php b/protected/extensions/ckeditor/kcfinder/lang/ja.php new file mode 100644 index 0000000..c2aa5cd --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/ja.php @@ -0,0 +1,252 @@ + "ja_JP.UTF-8", + '_charset' => "utf-8", + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%Y/%m/%d %H:%M", + '_dateTimeMid' => "%Y/%m/%d %H:%M", + '_dateTimeSmall' => "%Y/%m/%d %H:%M", + + "You don't have permissions to upload files." => + "アップロード権限がありません。", + + "You don't have permissions to browse server." => + "サーバーを閲覧する権限がありません", + + "Cannot move uploaded file to target folder." => + "ファイルを移動できません。", + + "Unknown error." => + "原因不明のエラーです。", + + "The uploaded file exceeds {size} bytes." => + "アップロードしたファイルは {size} バイトを越えました。", + + "The uploaded file was only partially uploaded." => + "アップロードしたファイルは、一部のみ処理されました。", + + "No file was uploaded." => + "ファイルはありません。", + + "Missing a temporary folder." => + "一時フォルダが見付かりません。", + + "Failed to write file." => + "ファイルの書き込みに失敗しました。", + + "Denied file extension." => + "このファイルは扱えません。", + + "Unknown image format/encoding." => + "この画像ファイルの種別を判定できません。", + + "The image is too big and/or cannot be resized." => + "画像ファイルのサイズが大き過ぎます。", + + "Cannot create {dir} folder." => + "「{dir}」フォルダを作成できません。", + + "Cannot write to upload folder." => + "アップロードフォルダに書き込みできません。", + + "Cannot read .htaccess" => + ".htaccessが読み込めません。", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "不正な .htaccess ファイルです。再編集できません!", + + "Cannot fetch content of {dir} folder." => + "{dir} フォルダのコンテンツを読み込めません。", + + "Cannot read upload folder." => + "アップロードフォルダを読み取れません。", + + "Cannot access or create thumbnails folder." => + "サムネイルフォルダにアクセス、又はサムネイルフォルダを作成できません。", + + "Cannot access or write to upload folder." => + "アップロードフォルダにアクセス、又は書き込みできません。", + + "Please enter new folder name." => + "新しいフォルダ名を入力して下さい。", + + "Unallowed characters in folder name." => + "フォルダ名には利用できない文字です。", + + "Folder name shouldn't begins with '.'" => + "フォルダ名は、'.'で開始しないで下さい。", + + "Please enter new file name." => + "新しいファイル名を入力して下さい。", + + "Unallowed characters in file name." => + "ファイル名には利用できない文字です。", + + "File name shouldn't begins with '.'" => + "ファイル名は、'.'で開始しないで下さい。", + + "Are you sure you want to delete this file?" => + "このファイルを本当に削除してもよろしいですか?", + + "Are you sure you want to delete this folder and all its content?" => + "このフォルダとフォルダ内の全てのコンテンツを本当に削除してもよろしいですか?", + + "Unexisting directory type." => + "存在しないディレクトリの種類です。", + + "Undefined MIME types." => + "定義されていないMIMEタイプです。", + + "Fileinfo PECL extension is missing." => + "Fileinfo PECL 拡張モジュールが見付かりません。", + + "Opening fileinfo database failed." => + "fileinfo データベースを開くのに失敗しました。", + + "You can't upload such files." => + "このようなファイルをアップロードできません。", + + "The file '{file}' does not exist." => + "ファイル「'{file}'」は存在しません。", + + "Cannot read '{file}'." => + "「'{file}'」を読み取れません。", + + "Cannot copy '{file}'." => + "「{file}」をコピーできません。", + + "Cannot move '{file}'." => + "「{file}」を移動できません。", + + "Cannot delete '{file}'." => + "「'{file}'」を削除できません。", + + "Click to remove from the Clipboard" => + "クリップボードから削除する", + + "This file is already added to the Clipboard." => + "このファイルは既にクリップボードに追加されています。", + + "Copy files here" => + "ここにコピー", + + "Move files here" => + "ここに移動", + + "Delete files" => + "これらを全て削除", + + "Clear the Clipboard" => // + "クリップボードを初期化", + + "Are you sure you want to delete all files in the Clipboard?" => + "クリップボードに記憶した全てのファイルを実際に削除します。", + + "Copy {count} files" => + "ファイル({count}個)をここに複写", + + "Move {count} files" => + "ファイル({count}個)をここに移動", + + "Add to Clipboard" => + "クリップボードに記憶", + "New folder name:" => "フォルダ名(半角英数):", + "New file name:" => "ファイル名(半角英数):", + "Folders" => "フォルダ", + + "Upload" => "アップロード", + "Refresh" => "再表示", + "Settings" => "表示設定", + "Maximize" => "最大化", + "About" => "About", + "files" => "ファイル", + "View:" => "表示スタイル:", + "Show:" => "表示項目:", + "Order by:" => "表示順:", + "Thumbnails" => "サムネイル", + "List" => "リスト", + "Name" => "ファイル名", + "Size" => "サイズ", + "Date" => "日付", + "Descending" => "順序を反転", + "Uploading file..." => "ファイルをアップロード中...", + "Loading image..." => "画像を読み込み中...", + "Loading folders..." => "フォルダを読み込み中...", + "Loading files..." => "読み込み中...", + "New Subfolder..." => "フォルダを作る", + "Rename..." => "名前の変更", + "Delete" => "削除", + "OK" => "OK", + "Cancel" => "キャンセル", + "Select" => "このファイルを選択", + "Select Thumbnail" => "サムネイルを選択", + "View" => "プレビュー", + "Download" => "ダウンロード", + 'Clipboard' => "クリップボード", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "ディレクトリを名前を変更できません", + + "Non-existing directory type." => + "存在しないディレクトリの種類です。", + + "Cannot delete the folder." => + "ディレクトリを削除できません", + + "The files in the Clipboard are not readable." => + "クリップボードからファイルを読み取れません", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "クリップボード内の {count} 個のファイルが読み取れません。残りをコピーしてもよろしいですか?", + + "The files in the Clipboard are not movable." => + "クリップボードからファイルを移動できません", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "クリップボード内の {count} 個のファイルが移動できません。残りを移動してもよろしいですか?", + + "The files in the Clipboard are not removable." => + "クリップボードを初期化できません", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "クリップボード内の {count} 個のファイルが削除出来ません。残りを削除してもよろしいですか?", + + "The selected files are not removable." => + "選択したファイルは削除できません。", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "選択された {count} 個のファイルは削除できません。残りを削除してもよろしいですか?", + + "Are you sure you want to delete all selected files?" => + "選択された全てのファイルを本当に削除してもよろしいですか?", + + "Failed to delete {count} files/folders." => + "{count} 個のファイル / フォルダの削除に失敗しました。", + + "A file or folder with that name already exists." => + "その名前のファイル、又はフォルダは既に存在します。", + + "Inexistant or inaccessible folder." => + "存在しない、又はアクセスできないフォルダです。", + + "selected files" => "選択したファイル", + "Type" => "タイプ", + "Select Thumbnails" => "サムネイルを選択", + "Download files" => "ファイルをダウンロードする", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/lt.php b/protected/extensions/ckeditor/kcfinder/lang/lt.php new file mode 100644 index 0000000..c103a2d --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/lt.php @@ -0,0 +1,241 @@ + + */ + +$lang = array( + + '_locale' => "lt_LT.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%F %T", + '_dateTimeMid' => "%F %T", + '_dateTimeSmall' => "%F %T", + + "You don't have permissions to upload files." => + "Jūs neturite teisių įkelti failus", + + "You don't have permissions to browse server." => + "Jūs neturite teisių naršyti po failus", + + "Cannot move uploaded file to target folder." => + "Nepavyko įkelti failo į reikiamą katalogą.", + + "Unknown error." => + "Nežinoma klaida.", + + "The uploaded file exceeds {size} bytes." => + "Įkeliamas failas viršija {size} baitų(-us).", + + "The uploaded file was only partially uploaded." => + "Failas buvo tik dalinai įkeltas.", + + "No file was uploaded." => + "Failas nebuvo įkeltas.", + + "Missing a temporary folder." => + "Nėra laikino katalogo.", + + "Failed to write file." => + "Nepavyko įrašyti failo.", + + "Denied file extension." => + "Draudžiama įkelti šio tipo failus.", + + "Unknown image format/encoding." => + "Nežinomas paveikslėlio formatas/kodavimas.", + + "The image is too big and/or cannot be resized." => + "Paveikslėlis yra per didelis ir/arba negali būti sumažintas.", + + "Cannot create {dir} folder." => + "Nepavyko sukurti {dir} katalogo.", + + "Cannot write to upload folder." => + "Nepavyko įrašyti į įkeliamų failų katalogą.", + + "Cannot read .htaccess" => + "Nepavyko nuskaityti .htaccess failo", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Blogas .htaccess failas. Nepavyko jo perrašyti", + + "Cannot read upload folder." => + "Nepavyko atidaryti įkeliamų failų katalogo.", + + "Cannot access or create thumbnails folder." => + "Nepavyko atidaryti ar sukurti sumažintų paveikslėlių katalogo.", + + "Cannot access or write to upload folder." => + "Nepavyko atidaryti ar įrašyti į įkeliamų failų katalogą.", + + "Please enter new folder name." => + "Įveskite katalogo pavadinimą.", + + "Unallowable characters in folder name." => + "Katalogo pavadinime yra neleistinų simbolių.", + + "Folder name shouldn't begins with '.'" => + "Katalogo pavadinimas negali prasidėti '.'", + + "Please enter new file name." => + "Įveskite failo pavadinimą.", + + "Unallowable characters in file name." => + "Failo pavadinime yra neleistinų simbolių", + + "File name shouldn't begins with '.'" => + "Failo pavadinimas negali prasidėti '.'", + + "Are you sure you want to delete this file?" => + "Ar tikrai ištrinti šį failą?", + + "Are you sure you want to delete this folder and all its content?" => + "Ar tikrai ištrinti šį katalogą su visu jo turiniu?", + + "Inexistant or inaccessible folder." => + "Katalogas neegzistuoja arba yra neprieinamas.", + + "Undefined MIME types." => + "Nenurodytas MIME tipas.", + + "Fileinfo PECL extension is missing." => + "Trūksa PECL plėtinio Fileinfo", + + "Opening fileinfo database failed." => + "Nepavyko atidaryti Fileinfo duomenų bazės.", + + "You can't upload such files." => + "Negalima įkelti tokių failų.", + + "The file '{file}' does not exist." => + "Failas '{file}' neegzistuoja.", + + "Cannot read '{file}'." => + "Nepavyko atidaryti '{file}' failo.", + + "Cannot copy '{file}'." => + "Nepavyko nukopijuoti '{file}' failo.", + + "Cannot move '{file}'." => + "Nepavyko perkelti '{file}' failo.", + + "Cannot delete '{file}'." => + "Nepavyko ištrinti '{file}' failo.", + + "Click to remove from the Clipboard" => + "Zum entfernen aus der Zwischenablage, hier klicken.", + + "This file is already added to the Clipboard." => + "Šis failas jau įkeltas į laikinąją atmintį.", + + "Copy files here" => + "Kopijuoti failus čia.", + + "Move files here" => + "Perkelti failus čia.", + + "Delete files" => + "Ištrinti failus.", + + "Clear the Clipboard" => + "Išvalyti laikinąją atmintį", + + "Are you sure you want to delete all files in the Clipboard?" => + "Ar tikrai ištrinti visus failus, esančius laikinojoje atmintyje?", + + "Copy {count} files" => + "Kopijuoti {count} failų(-us)", + + "Move {count} files" => + "Perkelti {count} failų(-us)", + + "Add to Clipboard" => + "Įkelti į laikinąją atmintį", + + "New folder name:" => "Naujo katalogo pavadinimas:", + "New file name:" => "Naujo failo pavadinimas:", + + "Upload" => "Įkelti", + "Refresh" => "Atnaujinti", + "Settings" => "Nustatymai", + "Maximize" => "Padidinti", + "About" => "Apie", + "files" => "Failai", + "View:" => "Peržiūra:", + "Show:" => "Rodyti:", + "Order by:" => "Rikiuoti:", + "Thumbnails" => "Sumažintos iliustracijos", + "List" => "Sąrašas", + "Name" => "Pavadinimas", + "Size" => "Dydis", + "Date" => "Data", + "Descending" => "Mažejančia tvarka", + "Uploading file..." => "Įkeliamas failas...", + "Loading image..." => "Kraunami paveikslėliai...", + "Loading folders..." => "Kraunami katalogai...", + "Loading files..." => "Kraunami failai...", + "New Subfolder..." => "Naujas katalogas...", + "Rename..." => "Pervadinti...", + "Delete" => "Ištrinti", + "OK" => "OK", + "Cancel" => "Atšaukti", + "Select" => "Pažymėti", + "Select Thumbnail" => "Pasirinkti sumažintą paveikslėlį", + "View" => "Peržiūra", + "Download" => "Atsisiųsti", + 'Clipboard' => "Laikinoji atmintis", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Nepavyko pervadinti katalogo.", + + "Non-existing directory type." => + "Neegzistuojantis katalogo tipas.", + + "Cannot delete the folder." => + "Nepavyko ištrinti katalogo.", + + "The files in the Clipboard are not readable." => + "Nepavyko nuskaityti failų iš laikinosios atminties.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "Nepavyko atidaryti {count} failų(-ai) iš laikinosios atminties. Ar kopijuoti likusius?", + + "The files in the Clipboard are not movable." => + "Nepavyko perkelti failų iš laikinosios atminties.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "Nepavyko perkelti {count} failų(-ai) iš laikinosios atminties. Ar perkelti likusius?", + + "The files in the Clipboard are not removable." => + "Nepavyko perkelti failų iš laikinosios atminties.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "Nepavyko ištrinti {count} failų(-ai) iš laikinosios atminties. Ar ištrinti likusius?", + + "The selected files are not removable." => + "Nepavyko perkelti pažymėtų failų.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "Nepavyko ištrinti {count} failų(-ai) iš laikinosios atminties. Ar ištrinti likusius?", + + "Are you sure you want to delete all selected files?" => + "Ar tikrai ištrinti visus pažymėtus failus?", + + "Failed to delete {count} files/folders." => + "Nepavyko ištrinti {count} failų/katalogų.", + + "A file or folder with that name already exists." => + "Failas arba katalogas tokiu pavadinimu jau egzistuoja.", + + "selected files" => "Pasirinkti failus", + "Type" => "Tipas", + "Select Thumbnails" => "Pasirinkti sumažintus paveikslėlius", + "Download files" => "Atsisiųsti failus", +); + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lang/nl.php b/protected/extensions/ckeditor/kcfinder/lang/nl.php new file mode 100644 index 0000000..0eb88d3 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/nl.php @@ -0,0 +1,241 @@ + + */ + +$lang = array( + + '_locale' => "nl_NL.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d/%m/%Y %H:%M", + + "You don't have permissions to upload files." => + "U heeft geen toestemming om bestanden te uploaden.", + + "You don't have permissions to browse server." => + "U heeft geen toegang tot de server.", + + "Cannot move uploaded file to target folder." => + "Het te uploaden bestand kon niet naar de doel folder verplaatst worden.", + + "Unknown error." => + "Onbekende foutmelding.", + + "The uploaded file exceeds {size} bytes." => + "De bestandsgrootte van het bestand gaat de limiet ({size}) voorbij.", + + "The uploaded file was only partially uploaded." => + "Het te uploaden bestand is slechts gedeeltelijk ge�pload.", + + "No file was uploaded." => + "Er is geen bestand ge�pload.", + + "Missing a temporary folder." => + "Een tijdelijke folder ontbreekt.", + + "Failed to write file." => + "Poging tot schrijven van bestand is mislukt.", + + "Denied file extension." => + "De extensie van dit bestand is niet toegestaan.", + + "Unknown image format/encoding." => + "Onbekende afbeeldingsformaats/-codering.", + + "The image is too big and/or cannot be resized." => + "De afbeelding is te groot en/of de grootte kan niet aangepast worden.", + + "Cannot create {dir} folder." => + "Kan de map {dir} niet aanmaken.", + + "Cannot write to upload folder." => + "Kan niet naar de upload folder schrijven.", + + "Cannot read .htaccess" => + "Kan .htaccess niet lezen.", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Incorrect .htaccess bestand. Bestand kan niet herschreven worden!", + + "Cannot read upload folder." => + "Upload folder kan niet uitgelezen worden.", + + "Cannot access or create thumbnails folder." => + "Het is niet mogelijk om een miniatuurweergaven folder aan te maken of te benaderen.", + + "Cannot access or write to upload folder." => + "Het is niet mogelijk om in de upload folder te schrijven of deze te benaderen.", + + "Please enter new folder name." => + "Vul a.u.b. een nieuwe foldernaam in.", + + "Unallowable characters in folder name." => + "Er zijn niet toegestane karakters gebruikt in de foldernaam.", + + "Folder name shouldn't begins with '.'" => + "Een foldernaam mag niet met '.' beginnen.", + + "Please enter new file name." => + "Vul a.u.b. een nieuwe bestandsnaam in.", + + "Unallowable characters in file name." => + "Er zijn niet toegestane karakters gebruikt in de bestandsnaam.", + + "File name shouldn't begins with '.'" => + "Een bestandsnaam mag niet met '.' beginnen.", + + "Are you sure you want to delete this file?" => + "Weet u zeker dat u dit bestand wilt verwijderen?", + + "Are you sure you want to delete this folder and all its content?" => + "Weet u zeker dat u deze folder en alle inhoud ervan wilt verwijderen?", + + "Inexistant or inaccessible folder." => + "Folder bestaat niet of kon niet benaderd worden.", + + "Undefined MIME types." => + "Onbekend MIME type.", + + "Fileinfo PECL extension is missing." => + "Bestandsinformatie PECL extensie ontbreekt.", + + "Opening fileinfo database failed." => + "Openen van bestandsinformatie database is mislukt.", + + "You can't upload such files." => + "Uploaden van dergelijke bestanden is niet mogelijk.", + + "The file '{file}' does not exist." => + "Het bestand '{file}' bestaat niet.", + + "Cannot read '{file}'." => + "Kan bestand '{file}' niet lezen.", + + "Cannot copy '{file}'." => + "Kan bestand '{file}' niet kopieren.", + + "Cannot move '{file}'." => + "Kan bestand '{file}' niet verplaatsen.", + + "Cannot delete '{file}'." => + "Kan bestand '{file}' niet verwijderen.", + + "Click to remove from the Clipboard" => + "Klik om te verwijderen van het klembord.", + + "This file is already added to the Clipboard." => + "Dit bestand was reeds toegevoegd aan het klembord.", + + "Copy files here" => + "Kopieer bestanden hierheen", + + "Move files here" => + "Verplaats bestanden hierheen", + + "Delete files" => + "Verwijder bestanden", + + "Clear the Clipboard" => + "Klemborg leegmaken", + + "Are you sure you want to delete all files in the Clipboard?" => + "Weet u zeker dat u alle bestanden op het klembord wilt verwijderen?", + + "Copy {count} files" => + "Kopieer {count} bestanden", + + "Move {count} files" => + "Verplaats {count} bestanden", + + "Add to Clipboard" => + "Voeg toe aan klembord", + + "New folder name:" => "Nieuwe foldernaam:", + "New file name:" => "Nieuwe bestandsnaam:", + + "Upload" => "Upload", + "Refresh" => "Verversen", + "Settings" => "Instellingen", + "Maximize" => "Maximaliseren", + "About" => "Over", + "files" => "bestanden", + "View:" => "Beeld:", + "Show:" => "Weergeven:", + "Order by:" => "Sorteren op:", + "Thumbnails" => "Miniatuurweergaven", + "List" => "Lijst", + "Name" => "Naam", + "Size" => "Grootte", + "Date" => "Datum", + "Descending" => "Aflopend", + "Uploading file..." => "Bestand uploaden...", + "Loading image..." => "Afbeelding wordt geladen...", + "Loading folders..." => "Folders worden geladen...", + "Loading files..." => "Bestanden worden geladen ...", + "New Subfolder..." => "Nieuwe subfolder...", + "Rename..." => "Hernoemen...", + "Delete" => "Verwijderen", + "OK" => "OK", + "Cancel" => "Annuleren", + "Select" => "Selecteer", + "Select Thumbnail" => "Selecteer miniatuurweergave", + "View" => "Beeld", + "Download" => "Download", + 'Clipboard' => "Klembord", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "De folder kan niet hernoemd worden.", + + "Non-existing directory type." => + "Het folder type bestaat niet.", + + "Cannot delete the folder." => + "De folder kan niet verwijderd worden.", + + "The files in the Clipboard are not readable." => + "De bestanden op het klembord kunnen niet gelezen worden.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} bestanden op het klembord zijn niet leesbaar. Wilt u de rest toch kopi�ren?", + + "The files in the Clipboard are not movable." => + "De bestanden op het klembord kunnen niet verplaatst worden.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} bestanden op het klembord kunnen niet verplaatst worden. Wilt u de rest toch verplaatsen?", + + "The files in the Clipboard are not removable." => + "De bestanden op het klembord kunnen niet verwijderd worden.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} bestanden op het klembord kunnen niet verwijderd worden. Wilt u de rest toch verwijderen?", + + "The selected files are not removable." => + "De geselecteerde bestanden kunnen niet verwijderd worden.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} geselecteerde bestanden kunnen niet verwijderd worden. Wilt u de rest toch verwijderen?", + + "Are you sure you want to delete all selected files?" => + "Weet u zeker dat u alle geselcteerde bestanden wilt verwijderen?", + + "Failed to delete {count} files/folders." => + "{count} bestanden/folders konden niet verwijderd worden.", + + "A file or folder with that name already exists." => + "Er bestaat reeds een bestand of folder met die naam.", + + "selected files" => "geselecteerde bestanden", + "Type" => "Type", + "Select Thumbnails" => "Kies miniatuurweergaven", + "Download files" => "Bestanden downloaden", +); + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lang/no.php b/protected/extensions/ckeditor/kcfinder/lang/no.php new file mode 100644 index 0000000..80aaf6a --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/no.php @@ -0,0 +1,242 @@ + "nb_NO.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Du har ikke tilgang til å laste opp filer", + + "You don't have permissions to browse server." => + "Du har ikke tilgang til å bla igjennom server", + + "Cannot move uploaded file to target folder." => + "Kan ikke flytte fil til denne mappen", + + "Unknown error." => + "Ukjent feil.", + + "The uploaded file exceeds {size} bytes." => + "Filen er for stor.", + + "The uploaded file was only partially uploaded." => + "Opplastning delvis fullført.", + + "No file was uploaded." => + "Ingen filer lastet opp", + + "Missing a temporary folder." => + "Mangler midlertidig mappe.", + + "Failed to write file." => + "Feil ved skriving til fil.", + + "Denied file extension." => + "Feil filformat", + + "Unknown image format/encoding." => + "Ukjent bildeformat.", + + "The image is too big and/or cannot be resized." => + "Bildet er for stort eller kan ikke skaleres ned.", + + "Cannot create {dir} folder." => + "Kan ikke opprette mappe.", + + "Cannot write to upload folder." => + "Ingen tilgang til å skrive til denne mappen.", + + "Cannot read .htaccess" => + "Kan ikke lese .htaccess.", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Feil! Kan ikke skrive til denne filen", + + "Cannot read upload folder." => + "Kan ikke lese denne mappen.", + + "Cannot access or create thumbnails folder." => + "Ikke tilgang til mappen for miniatyrbilder", + + "Cannot access or write to upload folder." => + "Ikke tilgang til opplastningsmappe.", + + "Please enter new folder name." => + "Skriv inn nytt navn til denne mappen.", + + "Unallowable characters in folder name." => + "Ulovlige tegn i mappenavn.", + + "Folder name shouldn't begins with '.'" => + "Mappenavnet kan ikke begynne med '.'", + + "Please enter new file name." => + "Skriv inn nytt filnavn ", + + "Unallowable characters in file name." => + "Ulovlige tegn i filnavn.", + + "File name shouldn't begins with '.'" => + "Filnavn kan ikke starte med '.'", + + "Are you sure you want to delete this file?" => + "Er du sikker på at du vil slette denne filen?", + + "Are you sure you want to delete this folder and all its content?" => + "Er du sikker på at du vil slette denne mappen og innholdet i den?", + + "Inexistant or inaccessible folder." => + "Kan ikke lese mappe.", + + "Undefined MIME types." => + "Undefined MIME types.", + + "Fileinfo PECL extension is missing." => + "Fileinfo PECL extension is missing.", + + "Opening fileinfo database failed." => + "Opening fileinfo database failed", + + "You can't upload such files." => + "Du kan ikke laste opp denne typen filer", + + "The file '{file}' does not exist." => + "Filen '{file}' finnes ikke.", + + "Cannot read '{file}'." => + "Kan ikke lese '{file}'.", + + "Cannot copy '{file}'." => + "Kan ikke kopiere '{file}'.", + + "Cannot move '{file}'." => + "Kan ikke flytte '{file}'.", + + "Cannot delete '{file}'." => + "Kan ikke slette '{file}'.", + + "Click to remove from the Clipboard" => + "Klikk for å fjerne fra utklippstavle", + + "This file is already added to the Clipboard." => + "Filen finnes allerede på utklippstavlen", + + "Copy files here" => + "Kopier filene til ;", + + "Move files here" => + "Flytt filene til ;", + + "Delete files" => + "Slett filer", + + "Clear the Clipboard" => + "Tøm utklippstavle", + + "Are you sure you want to delete all files in the Clipboard?" => + "Er du sikker på at du vil slette alle filene i utklippstavlen?", + + "Copy {count} files" => + "Kopier {count} filer", + + "Move {count} files" => + "Flytt {count} filer ", + + "Add to Clipboard" => + "Legg til i utklippstavle", + + "New folder name:" => "Nytt mappenavn:", + "New file name:" => "Nytt filnavn:", + + "Upload" => "Last opp", + "Refresh" => "Oppdater", + "Settings" => "Innstillinger", + "Maximize" => "Maksimer", + "About" => "Om/Hjelp", + "files" => "filer", + "View:" => "Vis:", + "Show:" => "Vis:", + "Order by:" => "Sorter etter:", + "Thumbnails" => "Miniatyrbilder", + "List" => "Liste", + "Name" => "Navn", + "Size" => "Størrelse", + "Date" => "Dato", + "Descending" => "Synkende", + "Uploading file..." => "Laster opp fil...", + "Loading image..." => "Laster bilde...", + "Loading folders..." => "Laster mapper...", + "Loading files..." => "Laster filer...", + "New Subfolder..." => "Ny undermappe...", + "Rename..." => "Endre navn...", + "Delete" => "Slett", + "OK" => "OK", + "Cancel" => "Avbryt", + "Select" => "Velg", + "Select Thumbnail" => "Velg miniatyrbilde", + "View" => "Vis", + "Download" => "Last ned", + "Clipboard" => "Utklippstavle", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Kan ikke endre navnet på mappen.", + + "Non-existing directory type." => + "Denne finnes ikke.", + + "Cannot delete the folder." => + "Kan ikke slette mappe.", + + "The files in the Clipboard are not readable." => + "Kan ikke lese filene i utklippstavlen.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} filer i utklippstavlen kan ikke leses, ønsker du kopiere resten av filene?", + + "The files in the Clipboard are not movable." => + "Filene i utklippstavlen kan ikke flyttes", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} filer i utklippstavlen kan ikke flyttes, ønsker du å flytte resten?", + + "The files in the Clipboard are not removable." => + "Filene i utklippstavlen kan ikke flyttes.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} filer i utklippstavlen kan ikke flyttes, ønsker du å flytte resten?", + + "The selected files are not removable." => + "Merkede filer kan ikke flyttes.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} filer kan ikke flyttes, ønsker du å flytte resten?", + + "Are you sure you want to delete all selected files?" => + "Er du sikker på at du ønsker å slette alle merkede filer?", + + "Failed to delete {count} files/folders." => + "Feil ved sletting av {count} filer/mapper.", + + "A file or folder with that name already exists." => + "En fil eller mappe finnes allerede med dette navnet", + + "selected files" => "merkede filer", + "Type" => "Type", + "Select Thumbnails" => "Velg miniatyrbilde", + "Download files" => "Last ned filer", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/pl.php b/protected/extensions/ckeditor/kcfinder/lang/pl.php new file mode 100644 index 0000000..cf79e85 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/pl.php @@ -0,0 +1,241 @@ + "pl_PL.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Nie masz zezwolenia na wysyłanie plików.", + + "You don't have permissions to browse server." => + "Nie masz zezwolenia na przeglądanie serwera.", + + "Cannot move uploaded file to target folder." => + "Nie można przenieść wysłanego pliku do folderu plików wysłanych.", + + "Unknown error." => + "Nieokreślony błąd.", + + "The uploaded file exceeds {size} bytes." => + "Wysyłany plik przekroczył rozmiar {size} bajtów", + + "The uploaded file was only partially uploaded." => + "Wysyłany plik nie został przesłany w całości.", + + "No file was uploaded." => + "Żaden plik nie został przesłany", + + "Missing a temporary folder." => + "Brak katalogu domyślnego.", + + "Failed to write file." => + "Błąd zapisu pliku.", + + "Denied file extension." => + "Niedozwolone rozszerzenie pliku.", + + "Unknown image format/encoding." => + "Nie znany format/kodowanie pliku.", + + "The image is too big and/or cannot be resized." => + "Obraz jest zbyt duży i/lub nie może zostać zmieniony jego rozmiar.", + + "Cannot create {dir} folder." => + "Nie można utworzyć katalogu {dir}.", + + "Cannot write to upload folder." => + "Nie można zapisywać do katalogu plików wysłanych.", + + "Cannot read .htaccess" => + "Nie można odczytać pliku .htaccess", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Nie prawidłowy plik .htaccess. Nie można go zapisać!", + + "Cannot read upload folder." => + "Nie można odczytać katalogu plików wysłanych.", + + "Cannot access or create thumbnails folder." => + "Nie ma dostępu lub nie można utworzyć katalogu miniatur.", + + "Cannot access or write to upload folder." => + "Nie ma dostępu lub nie można zapisywać do katalogu plików wysłanych.", + + "Please enter new folder name." => + "Proszę podać nową nazwę katalogu.", + + "Unallowable characters in folder name." => + "Niedozwolony znak w nazwie folderu.", + + "Folder name shouldn't begins with '.'" => + "Nazwa katalogu nie może zaczynać się od '.'", + + "Please enter new file name." => + "Proszę podać nową nazwę pliku", + + "Unallowable characters in file name." => + "Nie dozwolony znak w nazwie pliku.", + + "File name shouldn't begins with '.'" => + "Nazwa pliku nie powinna zaczynać się od '.'", + + "Are you sure you want to delete this file?" => + "Czy jesteś pewien, że chcesz skasować ten plik?", + + "Are you sure you want to delete this folder and all its content?" => + "Czy jesteś pewien, że chcesz skasować ten katalog i jego zawartość?", + + "Non-existing directory type." => + "Nie istniejący katalog.", + + "Undefined MIME types." => + "Niezidentyfikowany typ MIME.", + + "Fileinfo PECL extension is missing." => + "Brak rozszerzenia Fileinfo PECL.", + + "Opening fileinfo database failed." => + "Otwieranie bazy danych fileinfo nie udane.", + + "You can't upload such files." => + "Nie możesz wysyłać plików tego typu.", + + "The file '{file}' does not exist." => + "Plik {file} nie istnieje.", + + "Cannot read '{file}'." => + "Nie można odczytać pliku '{file}'.", + + "Cannot copy '{file}'." => + "Nie można skopiować pliku '{file}'.", + + "Cannot move '{file}'." => + "Nie można przenieść pliku '{file}'.", + + "Cannot delete '{file}'." => + "Nie można usunąć pliku '{file}'.", + + "Click to remove from the Clipboard" => + "Kliknij aby usunąć ze Schowka", + + "This file is already added to the Clipboard." => + "Ten plik już został dodany do Schowka.", + + "Copy files here" => + "Kopiuj pliki tutaj", + + "Move files here" => + "Przenieś pliki tutaj", + + "Delete files" => + "Usuń pliki", + + "Clear the Clipboard" => + "Wyczyść Schowek", + + "Are you sure you want to delete all files in the Clipboard?" => + "Czy jesteś pewien, że chcesz usunąć wszystkie pliki ze schowka?", + + "Copy {count} files" => + "Kopiowanie {count} plików", + + "Move {count} files" => + "Przenoszenie {count} plików", + + "Add to Clipboard" => + "Dodaj do Schowka", + + "New folder name:" => "Nazwa nowego katalogu:", + "New file name:" => "Nowa nazwa pliku:", + + "Upload" => "Wyślij", + "Refresh" => "Odśwież", + "Settings" => "Ustawienia", + "Maximize" => "Maksymalizuj", + "About" => "O...", + "files" => "pliki", + "View:" => "Widok:", + "Show:" => "Pokaż:", + "Order by:" => "Sortuj według:", + "Thumbnails" => "Miniatury", + "List" => "Lista", + "Name" => "Nazwa", + "Size" => "Rozmiar", + "Date" => "Data", + "Descending" => "Malejąco", + "Uploading file..." => "Wysyłanie pliku...", + "Loading image..." => "Ładowanie obrazu...", + "Loading folders..." => "Ładowanie katalogów...", + "Loading files..." => "Ładowanie plików...", + "New Subfolder..." => "Nowy pod-katalog...", + "Rename..." => "Zmień nazwę...", + "Delete" => "Usuń", + "OK" => "OK", + "Cancel" => "Anuluj", + "Select" => "Wybierz", + "Select Thumbnail" => "Wybierz miniaturę", + "View" => "Podgląd", + "Download" => "Pobierz", + 'Clipboard' => "Schowek", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Nie można zmienić nazwy katalogu.", + + "Cannot delete the folder." => + "Nie można usunąć katalogu.", + + "The files in the Clipboard are not readable." => + "Pliki w Schowku nie mogą zostać odczytane.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} plik(i/ów) ze Schowka nie może zostać odczytanych. Czy chcesz skopiować pozostałe?", + + "The files in the Clipboard are not movable." => + "Pliki w Schowku nie mogą zostać przeniesione.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} plik(i/ów) ze Schowka nie może zostać przeniesionych. Czy chcesz przenieść pozostałe?", + + "The files in the Clipboard are not removable." => + "Nie można usunąć plików ze Schowka.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} plik(i/ów) ze Schowka nie może zostać usunięty(ch). Czy usunąć pozostałe?", + + "The selected files are not removable." => + "Wybrane pliki nie mogą zostać usunięte.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} wybrany(ch) plików nie może zostać usunięte. Czy usunąć pozostałe?", + + "Are you sure you want to delete all selected files?" => + "Czy jesteś pewien że, chcesz usunąć wszystkie wybrane pliki?", + + "Failed to delete {count} files/folders." => + "Nie udało się usunąć {count} plik(i/ów) / folder(u/ów).", + + "A file or folder with that name already exists." => + "Plik lub katalog o tej nazwie już istnieje.", + + "Inexistant or inaccessible folder." => + "Nieistniejący lub niedostępny folder.", + + "selected files" => "wybrane pliki", + "Type" => "Typ", + "Select Thumbnails" => "Wybierz miniatury", + "Download files" => "Pobierz pliki", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/pt-br.php b/protected/extensions/ckeditor/kcfinder/lang/pt-br.php new file mode 100644 index 0000000..ded7c0f --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/pt-br.php @@ -0,0 +1,244 @@ + "pt_BR.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Você não tem permissões para fazer upload de arquivos.", + + "You don't have permissions to browse server." => + "Você não tem permissões para procurar no servidor.", + + "Cannot move uploaded file to target folder." => + "Não é possível mover o arquivo enviado para a pasta de destino.", + + "Unknown error." => + "Erro desconhecido.", + + "The uploaded file exceeds {size} bytes." => + "O arquivo enviado excede {size} bytes.", + + "The uploaded file was only partially uploaded." => + "O arquivo enviado foi apenas parcialmente carregado.", + + "No file was uploaded." => + "Nenhum arquivo foi transferido.", + + "Missing a temporary folder." => + "Faltando uma pasta temporária.", + + "Failed to write file." => + "Falha ao gravar arquivo.", + + "Denied file extension." => + "Extensão de arquivo não permitida.", + + "Unknown image format/encoding." => + "Formato de imagem desconhecido/codificação.", + + "The image is too big and/or cannot be resized." => + "A imagem é muito grande e/ou não pode ser redimensionada.", + + "Cannot create {dir} folder." => + "Não é possível criar pasta em '{dir}'.", + + "Cannot write to upload folder." => + "Não é possível salvar na pasta.", + + "Cannot read .htaccess" => + "Não é possível ler '.htaccess'.", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Arquivo '.htaccess' incorreto. Não é possível alterar.", + + "Cannot read upload folder." => + "Não é possível ler a pasta de upload.", + + "Cannot access or create thumbnails folder." => + "Não é possível acessar ou criar pasta de miniaturas.", + + "Cannot access or write to upload folder." => + "Não é possível acessar ou salvar para a pasta.", + + "Please enter new folder name." => + "Por favor, digite o nome da nova pasta.", + + "Unallowable characters in folder name." => + "Caracteres no nome da pasta não Autorizado.", + + "Folder name shouldn't begins with '.'" => + "Nome da pasta não deve começar com '.'.", + + "Please enter new file name." => + "Por favor, digite o novo nome de arquivo.", + + "Unallowable characters in file name." => + "Caracteres no nome do arquivo não Autorizado.", + + "File name shouldn't begins with '.'" => + "O nome da pasta não deve começar por '.'.", + + "Are you sure you want to delete this file?" => + "Tem a certeza de que deseja excluir este arquivo?", + + "Are you sure you want to delete this folder and all its content?" => + "Tem a certeza de que deseja excluir esta pasta e todo o seu conte�do?", + + "Inexistant or inaccessible folder." => + "Pasta inacessível ou inexistente.", + + "Undefined MIME types." => + "Tipos MIME indefinidos.", + + "Fileinfo PECL extension is missing." => + "Está faltando Informações do arquivo extensão PECL.", + + "Opening fileinfo database failed." => + "Abrir banco de dados de fileinfo falhou.", + + "You can't upload such files." => + "Você não pode enviar esses arquivos.", + + "The file '{file}' does not exist." => + "O arquivo '{file}' não existe.", + + "Cannot read '{file}'." => + "Não é possível ler '{file}'.", + + "Cannot copy '{file}'." => + "Não é possível copiar '{file}'.", + + "Cannot move '{file}'." => + "Não é possível mover '{file}'.", + + "Cannot delete '{file}'." => + "Não é possível deletar '{file}'.", + + "Click to remove from the Clipboard" => + "Clique para remover da área de transferência", + + "This file is already added to the Clipboard." => + "Este arquivo já foi adicionado à área de transferência.", + + "Copy files here" => + "Copiar arquivos aqui", + + "Move files here" => + "Mover arquivos aqui", + + "Delete files" => + "Deletar arquivos", + + "Clear the Clipboard" => + "Limpar a área de transferência", + + "Are you sure you want to delete all files in the Clipboard?" => + "Tem a certeza de que deseja excluir todos os arquivos da área de transferência?", + + "Copy {count} files" => + "Copiar {count} arquivos", + + "Move {count} files" => + "Mover {count} arquivos", + + "Add to Clipboard" => + "Adicionar à área de transferência", + + "New folder name:" => "Nome da nova pasta:", + "New file name:" => "Novo nome do arquivo:", + + "Upload" => "Enviar arquivo", + "Refresh" => "Atualizar", + "Settings" => "Configurações", + "Maximize" => "Maximizar", + "About" => "Sobre", + "files" => "Arquivos", + "View:" => "Exibir:", + "Show:" => "Mostrar:", + "Order by:" => "Ordenar por:", + "Thumbnails" => "Miniaturas", + "List" => "Lista", + "Name" => "Nome", + "Size" => "Tamanho", + "Date" => "Data", + "Descending" => "", + "Uploading file..." => "Carregando arquivo...", + "Loading image..." => "Carregando imagem...", + "Loading folders..." => "Carregando pastas...", + "Loading files..." => "Carregando arquivos...", + "New Subfolder..." => "Nova subpasta...", + "Rename..." => "Renomear...", + "Delete" => "Excluir", + "OK" => "OK", + "Cancel" => "Cancelar", + "Select" => "Selecionar", + "Select Thumbnail" => "Selecionar miniatura", + "View" => "Exibir", + "Download" => "Download", + "Clipboard" => "área de transferência", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Não é possível renomear a pasta.", + + "Non-existing directory type." => + "Tipo de diretório não existente.", + + "Cannot delete the folder." => + "Não é possível excluir a pasta.", + + "The files in the Clipboard are not readable." => + "Os arquivos da área de transferência não podem ser lidos.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} arquivos da área de transferência não podem ser lidos. Você deseja copiar o resto?", + + "The files in the Clipboard are not movable." => + "Os arquivos da área de transferência não podem ser removidos.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} arquivos da área de transferência não podem ser movidos. Você deseja mover o resto?", + + "The files in the Clipboard are not removable." => + "Os arquivos da área de transferência não podem ser removidos.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} arquivos da área de transferência não são removíveis. Você deseja excluir o restante?", + + "The selected files are not removable." => + "Os arquivos selecionados não são removíveis.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} arquivos selecionados não são removíveis. Você deseja excluir o restante?", + + "Are you sure you want to delete all selected files?" => + "Tem a certeza de que deseja excluir todos os arquivos selecionados?", + + "Failed to delete {count} files/folders." => + "Não conseguiu excluir {count} arquivos/pastas.", + + "A file or folder with that name already exists." => + "Já existe um arquivo ou pasta com esse nome.", + + "selected files" => "arquivos selecionados", + "Type" => "Tipo", + "Select Thumbnails" => "Selecionar miniaturas", + "Download files" => "Baixar arquivos", +); + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lang/pt.php b/protected/extensions/ckeditor/kcfinder/lang/pt.php new file mode 100644 index 0000000..f0c7f04 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/pt.php @@ -0,0 +1,243 @@ + "pt_PT.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Não tem permissão para enviar ficheiros.", + + "You don't have permissions to browse server." => + "Não tem permissão para navegar no servidor.", + + "Cannot move uploaded file to target folder." => + "Não pode mover ficheiros enviados para a pasta definida.", + + "Unknown error." => + "Erro indefinido.", + + "The uploaded file exceeds {size} bytes." => + "O ficheiro enviado tem mais que {size} bytes.", + + "The uploaded file was only partially uploaded." => + "O ficheiro foi apenas enviado parcialmente.", + + "No file was uploaded." => + "Nenhum ficheiro enviado.", + + "Missing a temporary folder." => + "Falta a pasta temporária.", + + "Failed to write file." => + "Não foi possvel guardar o ficheiro.", + + "Denied file extension." => + "Extensão do ficheiro inválida.", + + "Unknown image format/encoding." => + "Formato/codificação da imagem desconhecido.", + + "The image is too big and/or cannot be resized." => + "A imagem é muito grande e não pode ser redimensionada.", + + "Cannot create {dir} folder." => + "Não foi possvel criar a pasta '{dir}'.", + + "Cannot write to upload folder." => + "Não foi possvel guardar o ficheiro.", + + "Cannot read .htaccess" => + "Não foi possvel ler o ficheiro '.htaccess'.", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Ficheiro '.htaccess' incorrecto. Não foi possvel altera-lo.", + + "Cannot read upload folder." => + "Não foi possvel ler a pasta de upload.", + + "Cannot access or create thumbnails folder." => + "Não foi possvel aceder ou criar a pasta de miniaturas.", + + "Cannot access or write to upload folder." => + "Não foi possvel aceder ou criar a pasta de upload.", + + "Please enter new folder name." => + "Por favor insira o nome da pasta.", + + "Unallowable characters in folder name." => + "Caracteres não autorizados no nome da pasta.", + + "Folder name shouldn't begins with '.'" => + "O nome da pasta não deve comear por '.'.", + + "Please enter new file name." => + "Por favor defina o nome do ficheiro.", + + "Unallowable characters in file name." => + "Caracteres não autorizados no nome do ficheiro.", + + "File name shouldn't begins with '.'" => + "O nome do ficheiro não deve comear por '.'.", + + "Are you sure you want to delete this file?" => + "Tem a certeza que deseja apagar este ficheiro?", + + "Are you sure you want to delete this folder and all its content?" => + "Tem a certeza que deseja apagar esta pasta e todos os seus conteúdos?", + + "Inexistant or inaccessible folder." => + "Pasta inexistente ou inacessvel.", + + "Undefined MIME types." => + "Tipos MIME indefinidos.", + + "Fileinfo PECL extension is missing." => + "Falta a extensão PECL nas informações do ficheiro.", + + "Opening fileinfo database failed." => + "Erro a abrir a informação do ficheiro.", + + "You can't upload such files." => + "Não pode enviar esse tipo de ficheiros.", + + "The file '{file}' does not exist." => + "O ficheiro '{file}' não existe.", + + "Cannot read '{file}'." => + "Não pode ler '{file}'.", + + "Cannot copy '{file}'." => + "Não pode copiar '{file}'.", + + "Cannot move '{file}'." => + "Não pode mover '{file}'.", + + "Cannot delete '{file}'." => + "Não pode apagar '{file}'.", + + "Click to remove from the Clipboard" => + "Clique aqui para remover do Clipboard", + + "This file is already added to the Clipboard." => + "Este ficheiros já foi adicionado ao Clipboard.", + + "Copy files here" => + "Copiar ficheiros para aqui", + + "Move files here" => + "Mover ficheiros para aqui", + + "Delete files" => + "Apagar ficheiros", + + "Clear the Clipboard" => + "Limpar Clipboard", + + "Are you sure you want to delete all files in the Clipboard?" => + "Tem a certeza que deseja apagar todos os ficheiros que estão no Clipboard?", + + "Copy {count} files" => + "Copiar {count} ficheiros", + + "Move {count} files" => + "Mover {count} ficheiros", + + "Add to Clipboard" => + "Adicionar ao Clipboard", + + "New folder name:" => "Nome da pasta:", + "New file name:" => "Nome do ficheiro:", + + "Upload" => "Enviar", + "Refresh" => "Actualizar", + "Settings" => "Preferências", + "Maximize" => "Maximizar", + "About" => "Acerca de", + "files" => "Ficheiros", + "View:" => "Ver:", + "Show:" => "Mostrar:", + "Order by:" => "Ordenar por:", + "Thumbnails" => "Miniatura", + "List" => "Lista", + "Name" => "Nome", + "Size" => "Tamanho", + "Date" => "Data", + "Descending" => "", + "Uploading file..." => "Carregando ficheiro...", + "Loading image..." => "Carregando imagens...", + "Loading folders..." => "Carregando pastas...", + "Loading files..." => "Carregando ficheiros...", + "New Subfolder..." => "Nova pasta...", + "Rename..." => "Alterar nome...", + "Delete" => "Eliminar", + "OK" => "OK", + "Cancel" => "Cancelar", + "Select" => "Seleccionar", + "Select Thumbnail" => "Seleccionar miniatura", + "View" => "Ver", + "Download" => "Sacar", + "Clipboard" => "Clipboard", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Não pode alterar o nome da pasta.", + + "Non-existing directory type." => + "Tipo de pasta inexistente.", + + "Cannot delete the folder." => + "Não pode apagar a pasta.", + + "The files in the Clipboard are not readable." => + "Os ficheiros que estão no Clipboard não podem ser copiados.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} ficheiros do Clipboard não podem ser copiados. Pretende copiar os restantes?", + + "The files in the Clipboard are not movable." => + "Os ficheiros que estão no Clipboard não podem ser movidos.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} ficheiros do Clipboard não podem ser movidos. Pretende mover os restantes?", + + "The files in the Clipboard are not removable." => + "Os ficheiros que estão no Clipboard não podem ser removidos.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} ficheiros do Clipboard não podem ser removidos. Pretende apagar os restantes?", + + "The selected files are not removable." => + "Os ficheiros seleccionados não podem ser removidos.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "Não pode remover {count} ficheiros. Pretende apagar os restantes?", + + "Are you sure you want to delete all selected files?" => + "Tem a certeza que deseja apagar os ficheiros seleccionados?", + + "Failed to delete {count} files/folders." => + "Ocorreu um erro a apagar {count} ficheiros/pastas.", + + "A file or folder with that name already exists." => + "Já existe um ficheiro ou pasta com esse nome.", + + "selected files" => "Ficheiros seleccionados", + "Type" => "Tipo", + "Select Thumbnails" => "Seleccionar miniaturas", + "Download files" => "Sacar ficheiros", +); + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lang/ru.php b/protected/extensions/ckeditor/kcfinder/lang/ru.php new file mode 100644 index 0000000..4ab7a3b --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/ru.php @@ -0,0 +1,258 @@ + "ru_RU.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "У вас нет прав для загрузки файлов.", + + "You don't have permissions to browse server." => + "У вас нет прав для просмотра содержимого на сервере.", + + "Cannot move uploaded file to target folder." => + "Невозможно переместить загруженный файл в папку назначения.", + + "Unknown error." => + "Неизвестная ошибка.", + + "The uploaded file exceeds {size} bytes." => + "Загруженный файл превышает размер {size} байт.", + + "The uploaded file was only partially uploaded." => + "Загруженный файл был загружен только частично.", + + "No file was uploaded." => + "Файл не был загружен", + + "Missing a temporary folder." => + "Временная папка не существует.", + + "Failed to write file." => + "Невозможно записать файл.", + + "Denied file extension." => + "Файлы этого типа запрещены для загрузки.", + + "Unknown image format/encoding." => + "Неизвестный формат изображения.", + + "The image is too big and/or cannot be resized." => + "Изображение слишком большое и/или не может быть уменьшено.", + + "Cannot create {dir} folder." => + "Невозможно создать папку {dir}.", + + "Cannot write to upload folder." => + "Невозможно записать в папку загрузки.", + + "Cannot read .htaccess" => + "Невозможно прочитать файл .htaccess", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Неправильный файл .htaccess. Невозможно перезаписать!", + + "Cannot read upload folder." => + "Невозможно прочитать папку загрузки.", + + "Cannot access or create thumbnails folder." => + "Нет доступа или невозможно создать папку миниатюр.", + + "Cannot access or write to upload folder." => + "Нет доступа или невозможно записать в папку загрузки.", + + "Please enter new folder name." => + "Укажите имя новой папки.", + + "Unallowable characters in folder name." => + "Недопустимые символы в имени папки.", + + "Folder name shouldn't begins with '.'" => + "Имя папки не может начинаться с '.'", + + "Please enter new file name." => + "Укажите новое имя файла", + + "Unallowable characters in file name." => + "Недопустимые символны в имени файла.", + + "File name shouldn't begins with '.'" => + "Имя файла не может начинаться с '.'", + + "Are you sure you want to delete this file?" => + "Вы уверены, что хотите удалить этот файл?", + + "Are you sure you want to delete this folder and all its content?" => + "Вы уверены, что хотите удалить эту папку и всё её содержимое?", + + "Non-existing directory type." => + "Несуществующий тип папки.", + + "Undefined MIME types." => + "Неопределённые типы MIME.", + + "Fileinfo PECL extension is missing." => + "Расширение Fileinfo PECL отсутствует.", + + "Opening fileinfo database failed." => + "Невозможно открыть базу данных fileinfo.", + + "You can't upload such files." => + "Вы не можете загружать файлы этого типа.", + + "The file '{file}' does not exist." => + "Файл '{file}' не существует.", + + "Cannot read '{file}'." => + "Невозможно прочитать файл '{file}'.", + + "Cannot copy '{file}'." => + "Невозможно скопировать файл '{file}'.", + + "Cannot move '{file}'." => + "Невозможно переместить файл '{file}'.", + + "Cannot delete '{file}'." => + "Невозможно удалить файл '{file}'.", + + "Click to remove from the Clipboard" => + "Нажмите для удаления из буфера обмена", + + "This file is already added to the Clipboard." => + "Этот файл уже добавлен в буфер обмена.", + + "Copy files here" => + "Скопировать файлы сюда", + + "Move files here" => + "Переместить файлы сюда", + + "Delete files" => + "Удалить файлы", + + "Clear the Clipboard" => + "Очистить буфер обмена", + + "Are you sure you want to delete all files in the Clipboard?" => + "Вы уверены, что хотите удалить все файлы в буфере обмена?", + + "Copy {count} files" => + "Скопировать {count} файл(ов)", + + "Move {count} files" => + "Переместить {count} файл(ов)", + + "Add to Clipboard" => + "Добавить в буфер обмена", + + "New folder name:" => "Новое имя папки:", + "New file name:" => "Новое имя файла:", + + "Upload" => "Загрузить", + "Refresh" => "Обновить", + "Settings" => "Установки", + "Maximize" => "Развернуть", + "About" => "О скрипте", + "files" => "файлы", + "View:" => "Просмотр:", + "Show:" => "Показывать:", + "Order by:" => "Упорядочить по:", + "Thumbnails" => "Миниатюры", + "List" => "Список", + "Name" => "Имя", + "Size" => "Размер", + "Date" => "Дата", + "Descending" => "По убыванию", + "Uploading file..." => "Загрузка файла...", + "Loading image..." => "Загрузка изображения...", + "Loading folders..." => "Загрузка папок...", + "Loading files..." => "Загрузка файлов...", + "New Subfolder..." => "Создать папку...", + "Rename..." => "Переименовать...", + "Delete" => "Удалить", + "OK" => "OK", + "Cancel" => "Отмена", + "Select" => "Выбрать", + "Select Thumbnail" => "Выбрать миниатюру", + "View" => "Просмотр", + "Download" => "Скачать", + 'Clipboard' => "Буфер обмена", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Невозможно переименовать папку.", + + "Cannot delete the folder." => + "Невозможно удалить папку.", + + "The files in the Clipboard are not readable." => + "Невозможно прочитать файлы в буфере обмена.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "Невозможно прочитать {count} файл(ов) в буфере обмена. Вы хотите скопировать оставшиеся?", + + "The files in the Clipboard are not movable." => + "Невозможно переместить файлы в буфере обмена.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "Невозможно переместить {count} файл(ов) в буфере обмена. Вы хотите переместить оставшиеся?", + + "The files in the Clipboard are not removable." => + "Невозможно удалить файлы в буфере обмена.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "Невозможно удалить {count} файл(ов) в буфере обмена. Вы хотите удалить оставшиеся?", + + "The selected files are not removable." => + "Невозможно удалить выбранные файлы.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "Невозможно удалить выбранный(е) {count} файл(ы). Вы хотите удалить оставшиеся?", + + "Are you sure you want to delete all selected files?" => + "Вы уверены, что хотите удалить все выбранные файлы?", + + "Failed to delete {count} files/folders." => + "Невозможно удалить {count} файлов/папок.", + + "A file or folder with that name already exists." => + "Файл или папка с таким именем уже существуют.", + + "Inexistant or inaccessible folder." => + "Несуществующая или недоступная папка.", + + "selected files" => "выбранные файлы", + "Type" => "Тип", + "Select Thumbnails" => "Выбрать миниатюры", + "Download files" => "Скачать файлы", + + // SINCE 2.4 + + "Checking for new version..." => "Проверяем наличие обновлений...", + "Unable to connect!" => "Невозможно подключиться!", + "Download version {version} now!" => "Скачать версию {version} сейчас!", + "KCFinder is up to date!" => "Вы используете последнюю версию KCFinder'а!", + "Licenses:" => "Лицензии:", + "Attention" => "Внимание", + "Question" => "Вопрос", + "Yes" => "Да", + "No" => "Нет", + + // SINCE 2.41 + + "You cannot rename the extension of files!" => "Вы не можете изменять расширения файлов!", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/sk.php b/protected/extensions/ckeditor/kcfinder/lang/sk.php new file mode 100644 index 0000000..34c4a4f --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/sk.php @@ -0,0 +1,241 @@ + + */ + +$lang = array( + + '_locale' => "sk_SK.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => + "Nemáte právo nahrávať súbory.", + + "You don't have permissions to browse server." => + "Nemáte právo prehliadať súbory na servery.", + + "Cannot move uploaded file to target folder." => + "Nie je možné presunúť súbor do yvoleného adresára.", + + "Unknown error." => + "Neznáma chyba.", + + "The uploaded file exceeds {size} bytes." => + "Nahratý súbor presahuje {size} bytov.", + + "The uploaded file was only partially uploaded." => + "Nahratý súbor bol nahraný len čiastočne.", + + "No file was uploaded." => + "Žiadný súbor alebol nahraný na server.", + + "Missing a temporary folder." => + "Chyba dočasný adresár.", + + "Failed to write file." => + "Súbor se nepodarilo se uložiť.", + + "Denied file extension." => + "Nepodporovaný typ súboru.", + + "Unknown image format/encoding." => + "Neznamý formát obrázku/encoding.", + + "The image is too big and/or cannot be resized." => + "Obrázok je príliš veľký/alebo nemohol byť zmenšený.", + + "Cannot create {dir} folder." => + "Adresár {dir} nie je možné vytvoriť.", + + "Cannot write to upload folder." => + "Nie je možné ukladať do adresáru pre nahrávánie.", + + "Cannot read .htaccess" => + "Nie je možné čítať súbor .htaccess", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Chybný súbor .htaccess. Súbor nemožno prepísať!", + + "Cannot read upload folder." => + "Nie je možné čítať z adresáru pre nahrávánie súborov.", + + "Cannot access or create thumbnails folder." => + "Adresár pre náhľady nie je možné vytvoriť alebo nie je prístupný.", + + "Cannot access or write to upload folder." => + "Nie je možné pristupova alebo zapisovať do adresáru pre nahrávanie súborov.", + + "Please enter new folder name." => + "Zadajte prosím nové meno adresáru.", + + "Unallowable characters in folder name." => + "Nepovolené znaky v názve adresáru.", + + "Folder name shouldn't begins with '.'" => + "Meno adresára nesmie začínať znakom '.'", + + "Please enter new file name." => + "Vložte prosím nové meno súboru.", + + "Unallowable characters in file name." => + "Nepovolené znaky v názve súboru.", + + "File name shouldn't begins with '.'" => + "Názov súboru nesmie začínať znakom '.'", + + "Are you sure you want to delete this file?" => + "Ste si istý že chcete vymazať tento súbor?", + + "Are you sure you want to delete this folder and all its content?" => + "Ste si istý že chcete vymazať tento adresár a celý jeho obsah?", + + "Inexistant or inaccessible folder." => + "Neexistujúci alebo neprístupný adresár.", + + "Undefined MIME types." => + "Nedefinovaný MIME typ súboru.", + + "Fileinfo PECL extension is missing." => + "Rozšírenie PECL pre zistenie informácií o súbore chýba.", + + "Opening fileinfo database failed." => + "Načítanie informácií o súbore zlyhalo.", + + "You can't upload such files." => + "Tieto súbory nemôžete nahrať na server.", + + "The file '{file}' does not exist." => + "Tento súbor '{file}' neexistuje.", + + "Cannot read '{file}'." => + "Nie je možné načítať '{file}'.", + + "Cannot copy '{file}'." => + "Nie je možné kopírovať '{file}'.", + + "Cannot move '{file}'." => + "Nie je možné presunúť '{file}'.", + + "Cannot delete '{file}'." => + "Nie je možné vymazať '{file}'.", + + "Click to remove from the Clipboard" => + "Kliknite pre odstránenie zo schránky", + + "This file is already added to the Clipboard." => + "Tento súbor je už v schránke uložený.", + + "Copy files here" => + "Kopírovať súbory na toto miesto", + + "Move files here" => + "Presunúť súbory na toto miesto", + + "Delete files" => + "Zmazať súbory", + + "Clear the Clipboard" => + "Vyčistiť schránku", + + "Are you sure you want to delete all files in the Clipboard?" => + "Ste si istý že chcete vymazať všetky súbory zo schránky?", + + "Copy {count} files" => + "Kopírovať {count} súborov", + + "Move {count} files" => + "Presunúť {count} súborov", + + "Add to Clipboard" => + "Vložiť do schránky", + + "New folder name:" => "Nový názov adresára:", + "New file name:" => "Nový názov súboru:", + + "Upload" => "Nahrať", + "Refresh" => "Obnoviť", + "Settings" => "Nastavenia", + "Maximize" => "Maxializovať", + "About" => "O aplikácii", + "files" => "súbory", + "View:" => "Zobraziť:", + "Show:" => "Ukázať:", + "Order by:" => "Zoradiť podľa:", + "Thumbnails" => "Náhľady", + "List" => "Zoznam", + "Name" => "Meno", + "Size" => "Veľkosť", + "Date" => "Dátum", + "Descending" => "Zostupne", + "Uploading file..." => "Nahrávanie súborov...", + "Loading image..." => "Načítanie obrázkov...", + "Loading folders..." => "Načítanie adresárov...", + "Loading files..." => "Načítanie súborov...", + "New Subfolder..." => "Nový adresár...", + "Rename..." => "Premenovať...", + "Delete" => "Zmazať", + "OK" => "OK", + "Cancel" => "Zrušit", + "Select" => "Vybrať", + "Select Thumbnail" => "Vybrať náhľad", + "View" => "Zobraziť", + "Download" => "Stahnuť", + 'Clipboard' => "Schránka", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Adresár nie je možné premenovať.", + + "Non-existing directory type." => + "Neexistujúci typ adresára.", + + "Cannot delete the folder." => + "Adresár nie je možné vymazať.", + + "The files in the Clipboard are not readable." => + "Súbory v schránke nie je možné načítať.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "{count} súborov v schránke nie je možné načítať. Chcete skopírovať ostatné súbory?", + + "The files in the Clipboard are not movable." => + "Súbory v schránke nie je možné presunúť.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "{count} súborov v schránke nie je možné presunúť. Chcete presunúť ostatné súbory?", + + "The files in the Clipboard are not removable." => + "Súbory v schránke nie je možné vymazať.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} súborov v schránke nie je možné vymazať. Chcete vymazať ostatné súbory?", + + "The selected files are not removable." => + "Označené súbory nie je možné vymazať.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "{count} označených súborov nie je možné vymazať. Chcete vymazať ostatné súbory?", + + "Are you sure you want to delete all selected files?" => + "Ste si istý že chcete vymazať vybrané súbory?", + + "Failed to delete {count} files/folders." => + "Nebolo vymazaných {count} súborov/adresárov.", + + "A file or folder with that name already exists." => + "Soubor alebo adresár s takovým menom už existuje.", + + "selected files" => "vybrané súbory", + "Type" => "Typ", + "Select Thumbnails" => "Vybrať náhľad", + "Download files" => "Stiahnuť súbory", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/tr.php b/protected/extensions/ckeditor/kcfinder/lang/tr.php new file mode 100644 index 0000000..c9a6d4d --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/tr.php @@ -0,0 +1,257 @@ + +**/ + +$lang = array( + + '_locale' => "en_US.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e.%B.%Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d/%m/%Y %H:%M", + + "You don't have permissions to upload files." => + "Dosya yüklemek için yetkiniz yok.", + + "You don't have permissions to browse server." => + "Sunucuyu gezmek için yetkiniz yok.", + + "Cannot move uploaded file to target folder." => + "Yüklenilen dosyalar hedef klasöre taşınamıyor.", + + "Unknown error." => + "Bilinmeyen hata.", + + "The uploaded file exceeds {size} bytes." => + "Gönderilen dosya boyutu, maksimum dosya boyutu limitini ({size} byte) aşıyor.", + + "The uploaded file was only partially uploaded." => + "Dosyanın sadece bir kısmı yüklendi. Yüklemeyi tekrar deneyin.", + + "No file was uploaded." => + "Dosya yüklenmedi.", + + "Missing a temporary folder." => + "Geçici dosya klasörü bulunamıyor. Klasörü kontrol edin.", + + "Failed to write file." => + "Dosya yazılamıyor. Klasör yetkilerini kontrol edin.", + + "Denied file extension." => + "Yasaklanmış dosya türü.", + + "Unknown image format/encoding." => + "Bilinmeyen resim formatı.", + + "The image is too big and/or cannot be resized." => + "Resim çok büyük ve/veya yeniden boyutlandırılamıyor.", + + "Cannot create {dir} folder." => + "{dir} klasörü oluşturulamıyor.", + + "Cannot write to upload folder." => + "Dosya yükleme klasörüne yazılamıyor. Klasör yetkisini kontrol edin.", + + "Cannot read .htaccess" => + ".htaccess dosyası okunamıyor", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "Hatalı .htaccess dosyası. Dosyaya yeniden yazılamıyor.", + + "Cannot read upload folder." => + "Dosya yükleme klasörü okunamıyor. Klasör yetkilerini kontrol edin.", + + "Cannot access or create thumbnails folder." => + "Önizleme dosyaları klasörüne erişilemiyor yada oluşturulamıyor.", + + "Cannot access or write to upload folder." => + "Dosya yükleme klasörüne ulaşılamıyor yada oluşturulamıyor.", + + "Please enter new folder name." => + "Lütfen yeni klasör adını girin.", + + "Unallowable characters in folder name." => + "Klasör adında izin verilmeyen karakter kullandınız.", + + "Folder name shouldn't begins with '.'" => + "Klasör adı '.' ile başlayamaz.", + + "Please enter new file name." => + "Lütfen yeni dosya adını girin.", + + "Unallowable characters in file name." => + "Dosya adında izin verilmeyen karakter kullandınız.", + + "File name shouldn't begins with '.'" => + "Dosya adı '.' ile başlayamaz.", + + "Are you sure you want to delete this file?" => + "Dosyayı silmek istediğinizden emin misiniz?", + + "Are you sure you want to delete this folder and all its content?" => + "Bu klasörü ve tüm içeriğini silmek istediğinizden emin misiniz?", + + "Inexistant or inaccessible folder." => + "Klasör yok yada ulaşılamıyor.", + + "Undefined MIME types." => + "Tanımsız MIME türü.", + + "Fileinfo PECL extension is missing." => + "Dosya Bilgisi PECL uzantısı eksik.", + + "Opening fileinfo database failed." => + "Dosya Bilgisi veritabanı açılırken hata oluştu.", + + "You can't upload such files." => + "Bu tür dosyaları yükleyemezsiniz.", + + "The file '{file}' does not exist." => + "'{file}' dosyası yok.", + + "Cannot read '{file}'." => + "'{file}' dosyası okunamıyor.", + + "Cannot copy '{file}'." => + "'{file}' dosyası kopyalanamıyor.", + + "Cannot move '{file}'." => + "'{file}' dosyası taşınamıyor.", + + "Cannot delete '{file}'." => + "'{file}' dosyası silinemiyor.", + + "Click to remove from the Clipboard" => + "Panodan çıkarmak için tıklayın", + + "This file is already added to the Clipboard." => + "Bu dosya zaten panoya eklenmiş.", + + "Copy files here" => + "Dosyaları Buraya Kopyala", + + "Move files here" => + "Dosyaları Buraya Taşı", + + "Delete files" => + "Dosyaları Sil", + + "Clear the Clipboard" => + "Panoyu Temizle", + + "Are you sure you want to delete all files in the Clipboard?" => + "Panodaki tüm dosyaları silmek istediğinizden emin misiniz?", + + "Copy {count} files" => + "{count} adet dosyayı kopyala", + + "Move {count} files" => + "{count} adet dosyayı taşı", + + "Add to Clipboard" => + "Panoya Ekle", + + "New folder name:" => "Yeni Klasör Adı:", + "New file name:" => "Yeni Dosya Adı:", + + "Upload" => "Yükle", + "Refresh" => "Yenile", + "Settings" => "Ayarlar", + "Maximize" => "Pencereyi Büyüt", + "About" => "Hakkında", + "files" => "dosya", + "View:" => "Görüntüleme:", + "Show:" => "Göster:", + "Order by:" => "Sıralama:", + "Thumbnails" => "Önizleme", + "List" => "Liste", + "Name" => "Ad", + "Size" => "Boyut", + "Date" => "Tarih", + "Descending" => "Azalarak", + "Uploading file..." => "Dosya Gönderiliyor...", + "Loading image..." => "Resim Yükleniyor...", + "Loading folders..." => "Klasörler Yükleniyor...", + "Loading files..." => "Dosyalar Yükleniyor...", + "New Subfolder..." => "Yeni Alt Klasör...", + "Rename..." => "İsim Değiştir...", + "Delete" => "Sil", + "OK" => "Tamam", + "Cancel" => "İptal", + "Select" => "Seç", + "Select Thumbnail" => "Önizleme Resmini Seç", + "View" => "Göster", + "Download" => "İndir", + "Clipboard" => "Pano", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "Klasör adı değiştirilemiyor.", + + "Non-existing directory type." => + "Geçersiz klasör türü.", + + "Cannot delete the folder." => + "Klasör silinemiyor.", + + "The files in the Clipboard are not readable." => + "Panodaki dosyalar okunamıyor.", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "Panodaki {count} adet dosya okunamıyor. Geri kalanlarını kopyalamak istiyor musunuz?", + + "The files in the Clipboard are not movable." => + "Panodaki dosyalar taşınamıyor.", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "Panodaki {count} adet dosya taşınamıyor. Geri kalanlarını taşımak istiyor musunuz?", + + "The files in the Clipboard are not removable." => + "Dosyalar panodan çıkartılamıyor.", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "{count} adet dosya panodan çıkartılamıyor. Geri kalanları silmek istiyor musunuz?", + + "The selected files are not removable." => + "Seçilen dosyalar panodan çıkartılamıyor.", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "Seçilen dosyaların {count} adedi panodan çıkartılamıyor. Geri kalanları silmek istiyor musunuz?", + + "Are you sure you want to delete all selected files?" => + "Seçilen tüm dosyaları silmek istediğinizden emin misiniz?", + + "Failed to delete {count} files/folders." => + "{count} adet dosya/klasör silinemedi.", + + "A file or folder with that name already exists." => + "Bu isimde bir klasör yada dosya zaten var.", + + "selected files" => "dosya seçildi", + "Type" => "Tür", + "Select Thumbnails" => "Önizleme Resimlerini Seç", + "Download files" => "Dosyaları İndir", + + // SINCE 2.4 + + "Checking for new version..." => "Yeni versiyon kontrol ediliyor...", + "Unable to connect!" => "Bağlantı yapılamıyor!", + "Download version {version} now!" => " {version} versiyonunu hemen indir!", + "KCFinder is up to date!" => "KCFinder güncel durumda!", + "Licenses:" => "Lisanslar:", + "Attention" => "Dikkat", + "Question" => "Soru", + "Yes" => "Evet", + "No" => "Hayır", + + // SINCE 2.41 + + "You cannot rename the extension of files!" => "Dosya uzantılarını değiştiremezsiniz!", +); + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lang/vi.php b/protected/extensions/ckeditor/kcfinder/lang/vi.php new file mode 100644 index 0000000..0119121 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/vi.php @@ -0,0 +1,127 @@ + "vi_VN.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%d.%m.%Y %H:%M", + + "You don't have permissions to upload files." => "Bạn không có quyền tải lên", + "You don't have permissions to browse server." => "Bạn không có quyền truy cập", + "Cannot move uploaded file to target folder." => "Không thể tải lên thư mục đích", + "Unknown error." => "Lỗi không xác định", + "The uploaded file exceeds {size} bytes." => "Tập tin tải lên lớn hơn {size}", + "The uploaded file was only partially uploaded." => "Các tập tin chỉ được tải lên một phần", + "No file was uploaded." => "Không có tập tin được tải lên", + "Missing a temporary folder." => "Không thấy thư mục tạm", + "Failed to write file." => "Không thể ghi", + "Denied file extension." => "Phần mở rộng không được phép", + "Unknown image format/encoding." => "Không biết định dạng ảnh/mã hóa này", + "The image is too big and/or cannot be resized." => "Hình ảnh quá lơn/hoặc không thể thay đổi kích thước", + "Cannot create {dir} folder." => "Không thể tạo thư mục {dir}", + "Cannot rename the folder." => "Không thể đổi tên thư mục", + "Cannot write to upload folder." => "Không thể ghi vào thư mục", + "Cannot read .htaccess" => "Không thể đọc tập tin .htaccess", + "Incorrect .htaccess file. Cannot rewrite it!" => "không thể ghi tập tin .htaccess", + "Cannot read upload folder." => "Không thể đọc thư mục để tải lên", + "Cannot access or create thumbnails folder." => "Không có quyền truy cập hoặc không thể tạo thư mục", + "Cannot access or write to upload folder." => "Không có quyền truy cập hoặc không thể ghi", + "Please enter new folder name." => "Vui lòng nhập tên thư mục", + "Unallowable characters in folder name." => "Tên thư mục có chứa những ký tự không được phép", + "Folder name shouldn't begins with '.'" => "Thư mục không thể bắt đầu bằng '.'", + "Please enter new file name." => "Vui lòng nhập tên tập tin", + "Unallowable characters in file name." => "Tên tập tin chứa những ký tự không được phép", + "File name shouldn't begins with '.'" => "Tập tin không thể bắt đầu bằng '.'", + "Are you sure you want to delete this file?" => "Bạn có chắc bạn muốn xóa tập tin này?", + "Are you sure you want to delete this folder and all its content?" => "Bạn có chắc bạn muốn xóa thư mục và tất cả nội dung bên trong?", + "Non-existing directory type." => "Không tồn tại thư mục", + "Undefined MIME types." => "Không biết kiểu MIME này", + "Fileinfo PECL extension is missing." => "Fileinfo PECL extension is missing", + "Opening fileinfo database failed." => "Opening fileinfo database failed", + "You can't upload such files." => "Bạn không thể tải các tập tin như vậy.", + "The file '{file}' does not exist." => "Tập tin '{file}' đã có", + "Cannot read '{file}'." => "Không thể đọc '{file}'.", + "Cannot copy '{file}'." => "Không thể sao chép '{file}'.", + "Cannot move '{file}'." => "Không thể di chuyển '{file}'.", + "Cannot delete '{file}'." => "Không thể xóa tập tin '{file}'.", + "Cannot delete the folder." => "Không thể xóa thư mục", + "Click to remove from the Clipboard" => "Không thể xóa từ Bộ nhớ", + "This file is already added to the Clipboard." => "Tập tin đã có trong bộ nhớ", + "The files in the Clipboard are not readable." => "Không thể đọc các tập tin trong Bộ nhớ", + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => "{count} tập tin trong Bộ nhớ không thể đọc. Bạn chắc chắn muốn sao chép phần còn lại?", + "The files in the Clipboard are not movable." => "Không thể di chuyển các tập tin trong Bộ nhớ", + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => "{count} tập tin trong Bộ nhớ không thể di chuyển. Bạn chắc chắn muốn di chuyển phần còn lại?", + "The files in the Clipboard are not removable." => "Không thể xóa các tập tin trong Bộ nhớ", + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => "{count} tập tin trong Bộ nhớ không thể xóa. Bạn chắc chắn muốn xóa phần còn lại?", + "The selected files are not removable." => "Lựa chọn tập tin để xóa", + "{count} selected files are not removable. Do you want to delete the rest?" => "{count} tập tin không thể xóa. Bạn chắc chắn muốn xóa phần còn lại?", + "Are you sure you want to delete all selected files?" => "Bạn có chắc bạn muốn xóa tất cả tập tin đựoc chọn?", + "Failed to delete {count} files/folders." => "Không thể xóa {count} tập tin/thư mục", + "A file or folder with that name already exists." => "Đã tồn tại tập tin hoặc thư mục với tên này", + "Copy files here" => "Sao chép ở đây", + "Move files here" => "Di chuyển ở đây", + "Delete files" => "Xóa tập tin", + "Clear the Clipboard" => "Xóa bộ nhớ", + "Are you sure you want to delete all files in the Clipboard?" => "Bạn có chắc bạn muốn xóa tất cả tập tin trong Bộ nhớ?", + "Copy {count} files" => "Sao chep {count} tập tin", + "Move {count} files" => "Di chuyển {count} tập tin", + "Add to Clipboard" => "Thêm vào Bộ nhớ", + "Inexistant or inaccessible folder." => "Thư mục không tồn tại hoặc không thể truy cập", + "New folder name:" => "Tên mới của thư mục", + "New file name:" => "Tên mới của tập tin", + "Upload" => "Tải lên", + "Refresh" => "Làm mới", + "Settings" => "Cấu hình", + "Maximize" => "Tối đa", + "About" => "Giới thiệu", + "files" => "tập tin", + "selected files" => "chọn tập tin", + "View:" => "Xem", + "Show:" => "Hiện", + "Order by:" => "Thứ tự bởi", + "Thumbnails" => "Ảnh thu nhỏ", + "List" => "Danh sách", + "Name" => "Tên", + "Type" => "Kiểu", + "Size" => "Kích thước", + "Date" => "Ngày tháng", + "Descending" => "Giảm dần", + "Uploading file..." => "Đang tải lên", + "Loading image..." => "Đang đọc ảnh", + "Loading folders..." => "Đang đọc thư mục...", + "Loading files..." => "Đang đọc tập tin...", + "New Subfolder..." => "Thư mục con mới...", + "Rename..." => "Đổi tên...", + "Delete" => "Xóa", + "OK" => "Đồng Ý", + "Cancel" => "Hủy", + "Select" => "Chọn", + "Select Thumbnail" => "Chọn ảnh thu nhỏ", + "Select Thumbnails" => "Chọn nhiều ảnh thu nhỏ", + "View" => "Xem", + "Download" => "Tải xuống", + "Download files" => "Tải xuống tập tin", + "Clipboard" => "Bộ nhớ", + "Checking for new version..." => "Kiểm tra phiên bản mới", + "Unable to connect!" => "Không thể kết nối", + "Download version {version} now!" => "Có phiên bản mới {version}, tải về ngay!", + "KCFinder is up to date!" => "Không có cập nhật", + "Licenses:" => "Bản quyền", + "Attention" => "Cảnh báo", + "Question" => "Câu hỏi", + "Yes" => "Có", + "No" => "Không", + "You cannot rename the extension of files!" => "Bạn không thể đổi tên phần mở rộng của các tập tin!", + "Uploading file {number} of {count}... {progress}" => "Đang tải tập tin thứ {number} của {count}... {progress}", + "Failed to upload {filename}!" => "Tải lên thất bại {filename}!", +); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lang/zh-cn.php b/protected/extensions/ckeditor/kcfinder/lang/zh-cn.php new file mode 100644 index 0000000..129596d --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lang/zh-cn.php @@ -0,0 +1,244 @@ + "zh_CN.UTF-8", // UNIX localization code + '_charset' => "utf-8", // Browser charset + + // Date time formats. See http://www.php.net/manual/en/function.strftime.php + '_dateTimeFull' => "%A, %e %B, %Y %H:%M", + '_dateTimeMid' => "%a %e %b %Y %H:%M", + '_dateTimeSmall' => "%Y-%m-%d %H:%M", + + "You don't have permissions to upload files." => + "您没有权限上传文件。", + + "You don't have permissions to browse server." => + "您没有权限查看服务器文件。", + + "Cannot move uploaded file to target folder." => + "无法移动上传文件到指定文件夹。", + + "Unknown error." => + "发生不可预知异常。", + + "The uploaded file exceeds {size} bytes." => + "文件大小超过{size}字节。", + + "The uploaded file was only partially uploaded." => + "文件未完全上传。", + + "No file was uploaded." => + "文件未上传。", + + "Missing a temporary folder." => + "临时文件夹不存在。", + + "Failed to write file." => + "写入文件失败。", + + "Denied file extension." => + "禁止的文件扩展名。", + + "Unknown image format/encoding." => + "无法确认图片格式。", + + "The image is too big and/or cannot be resized." => + "图片大太,且(或)无法更改大小。", + + "Cannot create {dir} folder." => + "无法创建{dir}文件夹。", + + "Cannot write to upload folder." => + "无法写入上传文件夹。", + + "Cannot read .htaccess" => + "文件.htaccess无法读取。", + + "Incorrect .htaccess file. Cannot rewrite it!" => + "文件.htaccess错误,无法重写。", + + "Cannot read upload folder." => + "无法读取上传目录。", + + "Cannot access or create thumbnails folder." => + "无法访问或创建缩略图文件夹。", + + "Cannot access or write to upload folder." => + "无法访问或写入上传文件夹。", + + "Please enter new folder name." => + "请输入文件夹名。", + + "Unallowable characters in folder name." => + "文件夹名含有禁止字符。", + + "Folder name shouldn't begins with '.'" => + "文件夹名不能以点(.)为首字符。", + + "Please enter new file name." => + "请输入新文件名。", + + "Unallowable characters in file name." => + "文件名含有禁止字符。", + + "File name shouldn't begins with '.'" => + "文件名不能以点(.)为首字符。", + + "Are you sure you want to delete this file?" => + "是否确认删除该文件?", + + "Are you sure you want to delete this folder and all its content?" => + "是否确认删除该文件夹以及其子文件和子目录?", + + "Inexistant or inaccessible folder." => + "不存在或不可访问的文件夹。", + + "Undefined MIME types." => + "未定义的MIME类型。", + + "Fileinfo PECL extension is missing." => + "文件PECL属性不存在。", + + "Opening fileinfo database failed." => + "打开文件属性数据库出错。", + + "You can't upload such files." => + "你无法上传该文件。", + + "The file '{file}' does not exist." => + "文件{file}不存在。", + + "Cannot read '{file}'." => + "无法读取文件{file}。", + + "Cannot copy '{file}'." => + "无法复制文件{file}。", + + "Cannot move '{file}'." => + "无法移动文件{file}。", + + "Cannot delete '{file}'." => + "无法删除文件{file}。", + + "Click to remove from the Clipboard" => + "点击从剪贴板删除", + + "This file is already added to the Clipboard." => + "文件已复制到剪贴板。", + + "Copy files here" => + "复制到这里", + + "Move files here" => + "移动到这里", + + "Delete files" => + "删除这些文件", + + "Clear the Clipboard" => + "清除剪贴板", + + "Are you sure you want to delete all files in the Clipboard?" => + "是否确认删除所有在剪贴板的文件?", + + "Copy {count} files" => + "复制 {count} 个文件", + + "Move {count} files" => + "移动 {count} 个文件 ", + + "Add to Clipboard" => + "添加到剪贴板", + + "New folder name:" => "新文件夹名:", + "New file name:" => "新文件夹:", + + "Upload" => "上传", + "Refresh" => "刷新", + "Settings" => "设置", + "Maximize" => "最大化", + "About" => "关于", + "files" => "文件", + "View:" => "视图:", + "Show:" => "显示:", + "Order by:" => "排序:", + "Thumbnails" => "图标", + "List" => "列表", + "Name" => "文件名", + "Size" => "大小", + "Date" => "日期", + "Descending" => "降序", + "Uploading file..." => "正在上传文件...", + "Loading image..." => "正在加载图片...", + "Loading folders..." => "正在加载文件夹...", + "Loading files..." => "正在加载文件...", + "New Subfolder..." => "新建文件夹...", + "Rename..." => "重命名...", + "Delete" => "删除", + "OK" => "OK", + "Cancel" => "取消", + "Select" => "选择", + "Select Thumbnail" => "选择缩略图", + "View" => "查看", + "Download" => "下载", + "Clipboard" => "剪贴板", + + // VERSION 2 NEW LABELS + + "Cannot rename the folder." => + "无法重命名该文件夹。", + + "Non-existing directory type." => + "不存在的目录类型。", + + "Cannot delete the folder." => + "无法删除该文件夹。", + + "The files in the Clipboard are not readable." => + "剪贴板上该文件无法读取。", + + "{count} files in the Clipboard are not readable. Do you want to copy the rest?" => + "剪贴板{count}个文件无法读取。 是否复制静态文件?", + + "The files in the Clipboard are not movable." => + "剪贴板上该文件无法移动。", + + "{count} files in the Clipboard are not movable. Do you want to move the rest?" => + "剪贴板{count}个文件无法移动。 是否移动静态文件?", + + "The files in the Clipboard are not removable." => + "剪贴板上该文件无法删除。", + + "{count} files in the Clipboard are not removable. Do you want to delete the rest?" => + "剪贴板{count}个文件无法删除。 是否删除静态文件?", + + "The selected files are not removable." => + "选中文件未删除。", + + "{count} selected files are not removable. Do you want to delete the rest?" => + "选中的{count}个文件未删除。是否删除静态文件?", + + "Are you sure you want to delete all selected files?" => + "是否确认删除选中文件?", + + "Failed to delete {count} files/folders." => + "{count}个文件或文件夹无法删除。", + + "A file or folder with that name already exists." => + "文件或文件夹已存在。", + + "selected files" => "选中的文件", + "Type" => "种类", + "Select Thumbnails" => "选择缩略图", + "Download files" => "下载文件", +); + +?> diff --git a/protected/extensions/ckeditor/kcfinder/lib/.htaccess b/protected/extensions/ckeditor/kcfinder/lib/.htaccess new file mode 100644 index 0000000..d61b264 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lib/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + diff --git a/protected/extensions/ckeditor/kcfinder/lib/class_gd.php b/protected/extensions/ckeditor/kcfinder/lib/class_gd.php new file mode 100644 index 0000000..8bb7fba --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lib/class_gd.php @@ -0,0 +1,399 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class gd { + + /** GD resource + * @var resource */ + protected $image; + + /** Image width + * @var integer */ + protected $width; + + /** Image height + * @var integer */ + protected $height; + + /** Init error + * @var bool */ + public $init_error = false; + + /** Last builded image type constant (IMAGETYPE_XXX) + * @var integer */ + public $type; + + /** Returns an array. Element 0 - GD resource. Element 1 - width. Element 2 - height. + * Returns FALSE on failure. The only one parameter $image can be an instance of this class, + * a GD resource, an array(width, height) or path to image file. + * @param mixed $image + * @return array */ + + protected function build_image($image) { + + if ($image instanceof gd) { + $width = $image->get_width(); + $height = $image->get_height(); + $image = $image->get_image(); + + } elseif (is_resource($image) && (get_resource_type($image) == "gd")) { + $width = @imagesx($image); + $height = @imagesy($image); + + } elseif (is_array($image)) { + list($key, $width) = each($image); + list($key, $height) = each($image); + $image = imagecreatetruecolor($width, $height); + + } elseif (false !== (list($width, $height, $type) = @getimagesize($image))) { + $image = + ($type == IMAGETYPE_GIF) ? @imagecreatefromgif($image) : ( + ($type == IMAGETYPE_WBMP) ? @imagecreatefromwbmp($image) : ( + ($type == IMAGETYPE_JPEG) ? @imagecreatefromjpeg($image) : ( + ($type == IMAGETYPE_JPEG2000) ? @imagecreatefromjpeg($image) : ( + ($type == IMAGETYPE_PNG) ? imagecreatefrompng($image) : ( + ($type == IMAGETYPE_XBM) ? @imagecreatefromxbm($image) : false + ))))); + + if ($type == IMAGETYPE_PNG) + imagealphablending($image, false); + } + + $return = ( + is_resource($image) && + (get_resource_type($image) == "gd") && + isset($width) && + isset($height) && + (preg_match('/^[1-9][0-9]*$/', $width) !== false) && + (preg_match('/^[1-9][0-9]*$/', $height) !== false) + ) + ? array($image, $width, $height) + : false; + + if (($return !== false) && isset($type)) + $this->type = $type; + + return $return; + } + + /** Parameter $image can be: + * 1. An instance of this class (copy instance). + * 2. A GD resource. + * 3. An array with two elements. First - width, second - height. Create a blank image. + * 4. A filename string. Get image form file. + * The non-required parameter $bigger_size is the bigger dimension (width or height) the image + * will be resized to. The other dimension (height or width) will be calculated autamaticaly + * @param mixed $image + * @param integer $bigger_size + * @return gd */ + + public function __construct($image, $bigger_size=null) { + $this->image = $this->width = $this->height = null; + + $image_details = $this->build_image($image); + + if ($image_details !== false) + list($this->image, $this->width, $this->height) = $image_details; + else + $this->init_error = true; + + if (!is_null($this->image) && + !is_null($bigger_size) && + (preg_match('/^[1-9][0-9]*$/', $bigger_size) !== false) + ) { + $image = $this->image; + list($width, $height) = $this->get_prop_size($bigger_size); + $this->image = imagecreatetruecolor($width, $height); + if ($this->type == IMAGETYPE_PNG) { + imagealphablending($this->image, false); + imagesavealpha($this->image, true); + } + $this->width = $width; + $this->height = $height; + $this->imagecopyresampled($image); + } + } + + /** Returns the GD resource + * @return resource */ + + public function get_image() { + return $this->image; + } + + /** Returns the image width + * @return integer */ + + public function get_width() { + return $this->width; + } + + /** Returns the image height + * @return integer */ + + public function get_height() { + return $this->height; + } + + /** Returns calculated proportional width from the given height + * @param integer $resized_height + * @return integer */ + + public function get_prop_width($resized_height) { + $width = intval(($this->width * $resized_height) / $this->height); + if (!$width) $width = 1; + return $width; + } + + /** Returns calculated proportional height from the given width + * @param integer $resized_width + * @return integer */ + + public function get_prop_height($resized_width) { + $height = intval(($this->height * $resized_width) / $this->width); + if (!$height) $height = 1; + return $height; + } + + /** Returns an array with calculated proportional width & height. + * The parameter $bigger_size is the bigger dimension (width or height) of calculated sizes. + * The other dimension (height or width) will be calculated autamaticaly + * @param integer $bigger_size + * @return array */ + + public function get_prop_size($bigger_size) { + + if ($this->width > $this->height) { + $width = $bigger_size; + $height = $this->get_prop_height($width); + + } elseif ($this->height > $this->width) { + $height = $bigger_size; + $width = $this->get_prop_width($height); + + } else + $width = $height = $bigger_size; + + return array($width, $height); + } + + /** Resize image. Returns TRUE on success or FALSE on failure + * @param integer $width + * @param integer $height + * @return bool */ + + public function resize($width, $height) { + if (!$width) $width = 1; + if (!$height) $height = 1; + return ( + (false !== ($img = new gd(array($width, $height)))) && + $img->imagecopyresampled($this) && + (false !== ($this->image = $img->get_image())) && + (false !== ($this->width = $img->get_width())) && + (false !== ($this->height = $img->get_height())) + ); + } + + /** Resize the given image source (GD, gd object or image file path) to fit in the own image. + * The outside ares will be cropped out. Returns TRUE on success or FALSE on failure + * @param mixed $src + * @return bool */ + + public function resize_crop($src) { + $image_details = $this->build_image($src); + + if ($image_details !== false) { + list($src, $src_width, $src_height) = $image_details; + + if (($src_width / $src_height) > ($this->width / $this->height)) { + $src_w = $this->get_prop_width($src_height); + $src_h = $src_height; + $src_x = intval(($src_width - $src_w) / 2); + $src_y = 0; + + } else { + $src_w = $src_width; + $src_h = $this->get_prop_height($src_width); + $src_x = 0; + $src_y = intval(($src_height - $src_h) / 2); + } + + return imagecopyresampled($this->image, $src, 0, 0, $src_x, $src_y, $this->width, $this->height, $src_w, $src_h); + + } else + return false; + } + + /** Resize image to fit in given resolution. Returns TRUE on success or FALSE on failure + * @param integer $width + * @param integer $height + * @return bool */ + + public function resize_fit($width, $height) { + if ((!$width && !$height) || (($width == $this->width) && ($height == $this->height))) + return true; + if (!$width || (($height / $width) < ($this->height / $this->width))) + $width = intval(($this->width * $height) / $this->height); + elseif (!$height || (($width / $height) < ($this->width / $this->height))) + $height = intval(($this->height * $width) / $this->width); + if (!$width) $width = 1; + if (!$height) $height = 1; + return $this->resize($width, $height); + } + + /** Neka si predstavim vyobrazhaem pravoygylnik s razmeri $width i $height. + * Izobrazhenieto shte se preorazmeri taka che to shte izliza ot tozi pravoygylnik, + * no samo po edno (x ili y) izmerenie + * @param integer $width + * @param integer $height + * @return bool */ + + public function resize_overflow($width, $height) { + + $big = (($this->width / $this->height) > ($width / $height)) + ? ($this->width * $height) / $this->height + : ($this->height * $width) / $this->width; + $big = intval($big); + + $return = ($img = new gd($this->image, $big)); + + if ($return) { + $this->image = $img->get_image(); + $this->width = $img->get_width(); + $this->height = $img->get_height(); + } + + return $return; + } + + public function gd_color() { + $args = func_get_args(); + + $expr_rgb = '/^rgb\(\s*(\d{1,3})\s*\,\s*(\d{1,3})\s*\,\s*(\d{1,3})\s*\)$/i'; + $expr_hex1 = '/^\#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i'; + $expr_hex2 = '/^\#?([0-9a-f])([0-9a-f])([0-9a-f])$/i'; + $expr_byte = '/^([01]?\d?\d|2[0-4]\d|25[0-5])$/'; + + if (!isset($args[0])) + return false; + + if (count($args[0]) == 3) { + list($r, $g, $b) = $args[0]; + + } elseif (preg_match($expr_rgb, $args[0])) { + list($r, $g, $b) = explode(" ", preg_replace($expr_rgb, "$1 $2 $3", $args[0])); + + } elseif (preg_match($expr_hex1, $args[0])) { + list($r, $g, $b) = explode(" ", preg_replace($expr_hex1, "$1 $2 $3", $args[0])); + $r = hexdec($r); + $g = hexdec($g); + $b = hexdec($b); + + } elseif (preg_match($expr_hex2, $args[0])) { + list($r, $g, $b) = explode(" ", preg_replace($expr_hex2, "$1$1 $2$2 $3$3", $args[0])); + $r = hexdec($r); + $g = hexdec($g); + $b = hexdec($b); + + } elseif ((count($args) == 3) && + preg_match($expr_byte, $args[0]) && + preg_match($expr_byte, $args[1]) && + preg_match($expr_byte, $args[2]) + ) { + list($r, $g, $b) = $args; + + } else + return false; + + return imagecolorallocate($this->image, $r, $g, $b); + } + + public function fill_color($color) { + return $this->imagefilledrectangle(0, 0, $this->width - 1, $this->height - 1, $color); + } + + +/* G D M E T H O D S */ + + public function imagecopy( + $src, + $dst_x=0, $dst_y=0, + $src_x=0, $src_y=0, + $dst_w=null, $dst_h=null, + $src_w=null, $src_h=null + ) { + $image_details = $this->build_image($src); + + if ($image_details !== false) { + list($src, $src_width, $src_height) = $image_details; + + if (is_null($dst_w)) $dst_w = $this->width - $dst_x; + if (is_null($dst_h)) $dst_h = $this->height - $dst_y; + if (is_null($src_w)) $src_w = $src_width - $src_x; + if (is_null($src_h)) $src_h = $src_height - $src_y; + return imagecopy($this->image, $src, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h); + + } else + return false; + } + + public function imagecopyresampled( + $src, + $dst_x=0, $dst_y=0, + $src_x=0, $src_y=0, + $dst_w=null, $dst_h=null, + $src_w=null, $src_h=null + ) { + $image_details = $this->build_image($src); + + if ($image_details !== false) { + list($src, $src_width, $src_height) = $image_details; + + if (is_null($dst_w)) $dst_w = $this->width - $dst_x; + if (is_null($dst_h)) $dst_h = $this->height - $dst_y; + if (is_null($src_w)) $src_w = $src_width - $src_x; + if (is_null($src_h)) $src_h = $src_height - $src_y; + return imagecopyresampled($this->image, $src, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h); + + } else + return false; + } + + public function imagefilledrectangle($x1, $y1, $x2, $y2, $color) { + $color = $this->gd_color($color); + if ($color === false) return false; + return imagefilledrectangle($this->image, $x1, $y1, $x2, $y2, $color); + } + + public function imagepng($filename=null, $quality=null, $filters=null) { + if (is_null($filename) && !headers_sent()) + header("Content-Type: image/png"); + @imagesavealpha($this->image, true); + return imagepng($this->image, $filename, $quality, $filters); + } + + public function imagejpeg($filename=null, $quality=75) { + if (is_null($filename) && !headers_sent()) + header("Content-Type: image/jpeg"); + return imagejpeg($this->image, $filename, $quality); + } + + public function imagegif($filename=null) { + if (is_null($filename) && !headers_sent()) + header("Content-Type: image/gif"); + return imagegif($this->image, $filename); + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lib/class_input.php b/protected/extensions/ckeditor/kcfinder/lib/class_input.php new file mode 100644 index 0000000..ef98b8f --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lib/class_input.php @@ -0,0 +1,86 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class input { + + /** Filtered $_GET array + * @var array */ + public $get; + + /** Filtered $_POST array + * @var array */ + public $post; + + /** Filtered $_COOKIE array + * @var array */ + public $cookie; + + /** magic_quetes_gpc ini setting flag + * @var bool */ + protected $magic_quotes_gpc; + + /** magic_quetes_sybase ini setting flag + * @var bool */ + protected $magic_quotes_sybase; + + public function __construct() { + $this->magic_quotes_gpc = function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc(); + $this->magic_quotes_sybase = ini_get('magic_quotes_sybase'); + $this->magic_quotes_sybase = $this->magic_quotes_sybase + ? !in_array(strtolower(trim($this->magic_quotes_sybase)), + array('off', 'no', 'false')) + : false; + $_GET = $this->filter($_GET); + $_POST = $this->filter($_POST); + $_COOKIE = $this->filter($_COOKIE); + $this->get = &$_GET; + $this->post = &$_POST; + $this->cookie = &$_COOKIE; + } + + /** Magic method to get non-public properties like public. + * @param string $property + * @return mixed */ + + public function __get($property) { + return property_exists($this, $property) ? $this->$property : null; + } + + /** Filter the given subject. If magic_quotes_gpc and/or magic_quotes_sybase + * ini settings are turned on, the method will remove backslashes from some + * escaped characters. If the subject is an array, elements with non- + * alphanumeric keys will be removed + * @param mixed $subject + * @return mixed */ + + public function filter($subject) { + if ($this->magic_quotes_gpc) { + if (is_array($subject)) { + foreach ($subject as $key => $val) + if (!preg_match('/^[a-z\d_]+$/si', $key)) + unset($subject[$key]); + else + $subject[$key] = $this->filter($val); + } elseif (is_scalar($subject)) + $subject = $this->magic_quotes_sybase + ? str_replace("\\'", "'", $subject) + : stripslashes($subject); + + } + + return $subject; + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lib/class_zipFolder.php b/protected/extensions/ckeditor/kcfinder/lib/class_zipFolder.php new file mode 100644 index 0000000..bbdd1fc --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lib/class_zipFolder.php @@ -0,0 +1,60 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class zipFolder { + protected $zip; + protected $root; + protected $ignored; + + function __construct($file, $folder, $ignored=null) { + $this->zip = new ZipArchive(); + + $this->ignored = is_array($ignored) + ? $ignored + : ($ignored ? array($ignored) : array()); + + if ($this->zip->open($file, ZIPARCHIVE::CREATE) !== TRUE) + throw new Exception("cannot open <$file>\n"); + + $folder = rtrim($folder, '/'); + + if (strstr($folder, '/')) { + $this->root = substr($folder, 0, strrpos($folder, '/') + 1); + $folder = substr($folder, strrpos($folder, '/') + 1); + } + + $this->zip($folder); + $this->zip->close(); + } + + function zip($folder, $parent=null) { + $full_path = "{$this->root}$parent$folder"; + $zip_path = "$parent$folder"; + $this->zip->addEmptyDir($zip_path); + $dir = new DirectoryIterator($full_path); + foreach ($dir as $file) + if (!$file->isDot()) { + $filename = $file->getFilename(); + if (!in_array($filename, $this->ignored)) { + if ($file->isDir()) + $this->zip($filename, "$zip_path/"); + else + $this->zip->addFile("$full_path/$filename", "$zip_path/$filename"); + } + } + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lib/helper_dir.php b/protected/extensions/ckeditor/kcfinder/lib/helper_dir.php new file mode 100644 index 0000000..156ee1e --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lib/helper_dir.php @@ -0,0 +1,161 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class dir { + + /** Checks if the given directory is really writable. The standard PHP + * function is_writable() does not work properly on Windows servers + * @param string $dir + * @return bool */ + + static function isWritable($dir) { + $dir = path::normalize($dir); + if (!is_dir($dir)) + return false; + $i = 0; + do { + $file = "$dir/is_writable_" . md5($i++); + } while (file_exists($file)); + if (!@touch($file)) + return false; + unlink($file); + return true; + } + + /** Recursively delete the given directory. Returns TRUE on success. + * If $firstFailExit parameter is true (default), the method returns the + * path to the first failed file or directory which cannot be deleted. + * If $firstFailExit is false, the method returns an array with failed + * files and directories which cannot be deleted. The third parameter + * $failed is used for internal use only. + * @param string $dir + * @param bool $firstFailExit + * @param array $failed + * @return mixed */ + + static function prune($dir, $firstFailExit=true, array $failed=null) { + if ($failed === null) $failed = array(); + $files = self::content($dir); + if ($files === false) { + if ($firstFailExit) + return $dir; + $failed[] = $dir; + return $failed; + } + + foreach ($files as $file) { + if (is_dir($file)) { + $failed_in = self::prune($file, $firstFailExit, $failed); + if ($failed_in !== true) { + if ($firstFailExit) + return $failed_in; + if (is_array($failed_in)) + $failed = array_merge($failed, $failed_in); + else + $failed[] = $failed_in; + } + } elseif (!@unlink($file)) { + if ($firstFailExit) + return $file; + $failed[] = $file; + } + } + + if (!@rmdir($dir)) { + if ($firstFailExit) + return $dir; + $failed[] = $dir; + } + + return count($failed) ? $failed : true; + } + + /** Get the content of the given directory. Returns an array with filenames + * or FALSE on failure + * @param string $dir + * @param array $options + * @return mixed */ + + static function content($dir, array $options=null) { + + $defaultOptions = array( + 'types' => "all", // Allowed: "all" or possible return values + // of filetype(), or an array with them + 'addPath' => true, // Whether to add directory path to filenames + 'pattern' => '/./', // Regular expression pattern for filename + 'followLinks' => true + ); + + if (!is_dir($dir) || !is_readable($dir)) + return false; + + if (strtoupper(substr(PHP_OS, 0, 3)) == "WIN") + $dir = str_replace("\\", "/", $dir); + $dir = rtrim($dir, "/"); + + $dh = @opendir($dir); + if ($dh === false) + return false; + + if ($options === null) + $options = $defaultOptions; + + foreach ($defaultOptions as $key => $val) + if (!isset($options[$key])) + $options[$key] = $val; + + $files = array(); + while (($file = @readdir($dh)) !== false) { + $type = filetype("$dir/$file"); + + if ($options['followLinks'] && ($type === "link")) { + $lfile = "$dir/$file"; + do { + $ldir = dirname($lfile); + $lfile = @readlink($lfile); + if (substr($lfile, 0, 1) != "/") + $lfile = "$ldir/$lfile"; + $type = filetype($lfile); + } while ($type == "link"); + } + + if ((($type === "dir") && (($file == ".") || ($file == ".."))) || + !preg_match($options['pattern'], $file) + ) + continue; + + if (($options['types'] === "all") || ($type === $options['types']) || + ((is_array($options['types'])) && in_array($type, $options['types'])) + ) + $files[] = $options['addPath'] ? "$dir/$file" : $file; + } + closedir($dh); + usort($files, "dir::fileSort"); + return $files; + } + + static function fileSort($a, $b) { + if (function_exists("mb_strtolower")) { + $a = mb_strtolower($a); + $b = mb_strtolower($b); + } else { + $a = strtolower($a); + $b = strtolower($b); + } + if ($a == $b) return 0; + return ($a < $b) ? -1 : 1; + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lib/helper_file.php b/protected/extensions/ckeditor/kcfinder/lib/helper_file.php new file mode 100644 index 0000000..efb7011 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lib/helper_file.php @@ -0,0 +1,202 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class file { + + static $MIME = array( + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'avi' => 'video/x-msvideo', + 'bin' => 'application/macbinary', + 'bmp' => 'image/bmp', + 'cpt' => 'application/mac-compactpro', + 'css' => 'text/css', + 'csv' => 'text/x-comma-separated-values', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dvi' => 'application/x-dvi', + 'dxr' => 'application/x-director', + 'eml' => 'message/rfc822', + 'eps' => 'application/postscript', + 'flv' => 'video/x-flv', + 'gif' => 'image/gif', + 'gtar' => 'application/x-gtar', + 'gz' => 'application/x-gzip', + 'hqx' => 'application/mac-binhex40', + 'htm' => 'text/html', + 'html' => 'text/html', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'js' => 'application/x-javascript', + 'log' => 'text/plain', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mif' => 'application/vnd.mif', + 'mov' => 'video/quicktime', + 'movie' => 'video/x-sgi-movie', + 'mp2' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpga' => 'audio/mpeg', + 'oda' => 'application/oda', + 'pdf' => 'application/pdf', + 'php' => 'application/x-httpd-php', + 'php3' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'phtml' => 'application/x-httpd-php', + 'png' => 'image/png', + 'ppt' => 'application/powerpoint', + 'ps' => 'application/postscript', + 'psd' => 'application/x-photoshop', + 'qt' => 'video/quicktime', + 'ra' => 'audio/x-realaudio', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'rtf' => 'text/rtf', + 'rtx' => 'text/richtext', + 'rv' => 'video/vnd.rn-realvideo', + 'shtml' => 'text/html', + 'sit' => 'application/x-stuffit', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'swf' => 'application/x-shockwave-flash', + 'tar' => 'application/x-tar', + 'tgz' => 'application/x-tar', + 'text' => 'text/plain', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'txt' => 'text/plain', + 'wav' => 'audio/x-wav', + 'wbxml' => 'application/wbxml', + 'wmlc' => 'application/wmlc', + 'word' => 'application/msword', + 'xht' => 'application/xhtml+xml', + 'xhtml' => 'application/xhtml+xml', + 'xl' => 'application/excel', + 'xls' => 'application/excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'zip' => 'application/x-zip' + ); + + /** Checks if the given file is really writable. The standard PHP function + * is_writable() does not work properly on Windows servers. + * @param string $dir + * @return bool */ + + static function isWritable($filename) { + $filename = path::normalize($filename); + if (!is_file($filename) || (false === ($fp = @fopen($filename, 'a+')))) + return false; + fclose($fp); + return true; + } + + /** Get the extension from filename + * @param string $file + * @param bool $toLower + * @return string */ + + static function getExtension($filename, $toLower=true) { + return preg_match('/^.*\.([^\.]*)$/s', $filename, $patt) + ? ($toLower ? strtolower($patt[1]) : $patt[1]) : ""; + } + + /** Get MIME type of the given filename. If Fileinfo PHP extension is + * available the MIME type will be fetched by the file's content. The + * second parameter is optional and defines the magic file path. If you + * skip it, the default one will be loaded. + * If Fileinfo PHP extension is not available the MIME type will be fetched + * by filename extension regarding $MIME property. If the file extension + * does not exist there, returned type will be application/octet-stream + * @param string $filename + * @param string $magic + * @return string */ + + static function getMimeType($filename, $magic=null) { + if (class_exists("finfo")) { + $finfo = ($magic === null) + ? new finfo(FILEINFO_MIME) + : new finfo(FILEINFO_MIME, $magic); + if ($finfo) { + $mime = $finfo->file($filename); + $mime = substr($mime, 0, strrpos($mime, ";")); + return $mime; + } + } + $ext = self::getExtension($filename, true); + return isset(self::$MIME[$ext]) ? self::$MIME[$ext] : "application/octet-stream"; + } + + /** Get inexistant filename based on the given filename. If you skip $dir + * parameter the directory will be fetched from $filename and returned + * value will be full filename path. The third parameter is optional and + * defines the template, the filename will be renamed to. Default template + * is {name}({sufix}){ext}. Examples: + * + * file::getInexistantFilename("/my/directory/myfile.txt"); + * If myfile.txt does not exist - returns the same path to the file + * otherwise returns "/my/directory/myfile(1).txt" + * + * file::getInexistantFilename("myfile.txt", "/my/directory"); + * returns "myfile.txt" or "myfile(1).txt" or "myfile(2).txt" etc... + * + * file::getInexistantFilename("myfile.txt", "/dir", "{name}[{sufix}]{ext}"); + * returns "myfile.txt" or "myfile[1].txt" or "myfile[2].txt" etc... + * + * @param string $filename + * @param string $dir + * @param string $tpl + * @return string */ + + static function getInexistantFilename($filename, $dir=null, $tpl=null) { + if ($tpl === null) $tpl = "{name}({sufix}){ext}"; + $fullPath = ($dir === null); + if ($fullPath) + $dir = path::normalize(dirname($filename)); + else { + $fdir = dirname($filename); + $dir = strlen($fdir) + ? path::normalize("$dir/$fdir") + : path::normalize($dir); + } + $filename = basename($filename); + $ext = self::getExtension($filename, false); + $name = strlen($ext) ? substr($filename, 0, -strlen($ext) - 1) : $filename; + $tpl = str_replace('{name}', $name, $tpl); + $tpl = str_replace('{ext}', (strlen($ext) ? ".$ext" : ""), $tpl); + $i = 1; $file = "$dir/$filename"; + while (file_exists($file)) + $file = "$dir/" . str_replace('{sufix}', $i++, $tpl); + + return $fullPath + ? $file + : (strlen($fdir) + ? "$fdir/" . basename($file) + : basename($file)); + } + +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lib/helper_httpCache.php b/protected/extensions/ckeditor/kcfinder/lib/helper_httpCache.php new file mode 100644 index 0000000..56af073 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lib/helper_httpCache.php @@ -0,0 +1,98 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class httpCache { + const DEFAULT_TYPE = "text/html"; + const DEFAULT_EXPIRE = 604800; // in seconds + + /** Cache a file. The $type parameter might define the MIME type of the file + * or path to magic file to autodetect the MIME type. If you skip $type + * parameter the method will try with the default magic file. Autodetection + * of MIME type requires Fileinfo PHP extension used in file::getMimeType() + * @param string $file + * @param string $type + * @param integer $expire + * @param array $headers */ + + static function file($file, $type=null, $expire=null, array $headers=null) { + $mtime = @filemtime($file); + if ($mtime !== false) self::checkMTime($mtime); + + if ($type === null) { + $magic = ((substr($type, 0, 1) == "/") || preg_match('/^[a-z]\:/i', $type)) + ? $type : null; + $type = file::getMimeType($file, $magic); + if (!$type) $type = null; + } + + self::content(@file_get_contents($file), $mtime, $type, $expire, $headers, false); + } + + /** Cache the given $content with $mtime modification time. + * @param binary $content + * @param integer $mtime + * @param string $type + * @param integer $expire + * @param array $headers + * @param bool $checkMTime */ + + static function content($content, $mtime, $type=null, $expire=null, array $headers=null, $checkMTime=true) { + if ($checkMTime) self::checkMTime($mtime); + if ($type === null) $type = self::DEFAULT_TYPE; + if ($expire === null) $expire = self::DEFAULT_EXPIRE; + $size = strlen($content); + $expires = gmdate("D, d M Y H:i:s", time() + $expire) . " GMT"; + header("Content-Type: $type"); + header("Expires: $expires"); + header("Cache-Control: max-age=$expire"); + header("Pragma: !invalid"); + header("Content-Length: $size"); + if ($headers !== null) foreach ($headers as $header) header($header); + echo $content; + } + + /** Check if given modification time is newer than client-side one. If not, + * the method will tell the client to get the content from its own cache. + * Afterwards the script process will be terminated. This feature requires + * the PHP to be configured as Apache module. + * @param integer $mtime */ + + static function checkMTime($mtime, $sendHeaders=null) { + header("Last-Modified: " . gmdate("D, d M Y H:i:s", $mtime) . " GMT"); + + $headers = function_exists("getallheaders") + ? getallheaders() + : (function_exists("apache_request_headers") + ? apache_request_headers() + : false); + + if (is_array($headers) && isset($headers['If-Modified-Since'])) { + $client_mtime = explode(';', $headers['If-Modified-Since']); + $client_mtime = @strtotime($client_mtime[0]); + if ($client_mtime >= $mtime) { + header('HTTP/1.1 304 Not Modified'); + if (is_array($sendHeaders) && count($sendHeaders)) + foreach ($sendHeaders as $header) + header($header); + elseif ($sendHeaders !== null) + header($sendHeaders); + + + die; + } + } + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lib/helper_path.php b/protected/extensions/ckeditor/kcfinder/lib/helper_path.php new file mode 100644 index 0000000..50d5424 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lib/helper_path.php @@ -0,0 +1,144 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class path { + + /** Get the absolute URL path of the given one. Returns FALSE if the URL + * is not valid or the current directory cannot be resolved (getcwd()) + * @param string $path + * @return string */ + + static function rel2abs_url($path) { + if (substr($path, 0, 1) == "/") return $path; + $dir = @getcwd(); + + if (!isset($_SERVER['DOCUMENT_ROOT']) || ($dir === false)) + return false; + + $dir = self::normalize($dir); + $doc_root = self::normalize($_SERVER['DOCUMENT_ROOT']); + + if (substr($dir, 0, strlen($doc_root)) != $doc_root) + return false; + + $return = self::normalize(substr($dir, strlen($doc_root)) . "/$path"); + if (substr($return, 0, 1) !== "/") + $return = "/$return"; + + return $return; + } + + /** Resolve full filesystem path of given URL. Returns FALSE if the URL + * cannot be resolved + * @param string $url + * @return string */ + + static function url2fullPath($url) { + $url = self::normalize($url); + + $uri = isset($_SERVER['SCRIPT_NAME']) + ? $_SERVER['SCRIPT_NAME'] : (isset($_SERVER['PHP_SELF']) + ? $_SERVER['PHP_SELF'] + : false); + + $uri = self::normalize($uri); + + if (substr($url, 0, 1) !== "/") { + if ($uri === false) return false; + $url = dirname($uri) . "/$url"; + } + + if (isset($_SERVER['DOCUMENT_ROOT'])) { + return self::normalize($_SERVER['DOCUMENT_ROOT'] . "/$url"); + + } else { + if ($uri === false) return false; + + if (isset($_SERVER['SCRIPT_FILENAME'])) { + $scr_filename = self::normalize($_SERVER['SCRIPT_FILENAME']); + return self::normalize(substr($scr_filename, 0, -strlen($uri)) . "/$url"); + } + + $count = count(explode('/', $uri)) - 1; + for ($i = 0, $chdir = ""; $i < $count; $i++) + $chdir .= "../"; + $chdir = self::normalize($chdir); + + $dir = getcwd(); + if (($dir === false) || !@chdir($chdir)) + return false; + $rdir = getcwd(); + chdir($dir); + return ($rdir !== false) ? self::normalize($rdir . "/$url") : false; + } + } + + /** Normalize the given path. On Windows servers backslash will be replaced + * with slash. Remobes unnecessary doble slashes and double dots. Removes + * last slash if it exists. Examples: + * path::normalize("C:\\any\\path\\") returns "C:/any/path" + * path::normalize("/your/path/..//home/") returns "/your/home" + * @param string $path + * @return string */ + + static function normalize($path) { + if (strtoupper(substr(PHP_OS, 0, 3)) == "WIN") { + $path = preg_replace('/([^\\\])\\\([^\\\])/', "$1/$2", $path); + if (substr($path, -1) == "\\") $path = substr($path, 0, -1); + if (substr($path, 0, 1) == "\\") $path = "/" . substr($path, 1); + } + + $path = preg_replace('/\/+/s', "/", $path); + + $path = "/$path"; + if (substr($path, -1) != "/") + $path .= "/"; + + $expr = '/\/([^\/]{1}|[^\.\/]{2}|[^\/]{3,})\/\.\.\//s'; + while (preg_match($expr, $path)) + $path = preg_replace($expr, "/", $path); + + $path = substr($path, 0, -1); + $path = substr($path, 1); + return $path; + } + + /** Encode URL Path + * @param string $path + * @return string */ + + static function urlPathEncode($path) { + $path = self::normalize($path); + $encoded = ""; + foreach (explode("/", $path) as $dir) + $encoded .= rawurlencode($dir) . "/"; + $encoded = substr($encoded, 0, -1); + return $encoded; + } + + /** Decode URL Path + * @param string $path + * @return string */ + + static function urlPathDecode($path) { + $path = self::normalize($path); + $decoded = ""; + foreach (explode("/", $path) as $dir) + $decoded .= rawurldecode($dir) . "/"; + $decoded = substr($decoded, 0, -1); + return $decoded; + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/lib/helper_text.php b/protected/extensions/ckeditor/kcfinder/lib/helper_text.php new file mode 100644 index 0000000..dd571b9 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/lib/helper_text.php @@ -0,0 +1,79 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +class text { + + /** Replace repeated white spaces to single space + * @param string $string + * @return string */ + + static function clearWhitespaces($string) { + return trim(preg_replace('/\s+/s', " ", $string)); + } + + /** Normalize the string for HTML attribute value + * @param string $string + * @return string */ + + static function htmlValue($string) { + return + str_replace('"', """, + str_replace("'", ''', + str_replace('<', '<', + str_replace('&', "&", + $string)))); + } + + /** Normalize the string for JavaScript string value + * @param string $string + * @return string */ + + static function jsValue($string) { + return + preg_replace('/\r?\n/', "\\n", + str_replace('"', "\\\"", + str_replace("'", "\\'", + str_replace("\\", "\\\\", + $string)))); + } + + /** Normalize the string for XML tag content data + * @param string $string + * @param bool $cdata */ + + static function xmlData($string, $cdata=false) { + $string = str_replace("]]>", "]]]]>", $string); + if (!$cdata) + $string = ""; + return $string; + } + + /** Returns compressed content of given CSS code + * @param string $code + * @return string */ + + static function compressCSS($code) { + $code = self::clearWhitespaces($code); + $code = preg_replace('/ ?\{ ?/', "{", $code); + $code = preg_replace('/ ?\} ?/', "}", $code); + $code = preg_replace('/ ?\; ?/', ";", $code); + $code = preg_replace('/ ?\> ?/', ">", $code); + $code = preg_replace('/ ?\, ?/', ",", $code); + $code = preg_replace('/ ?\: ?/', ":", $code); + $code = str_replace(";}", "}", $code); + return $code; + } +} + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/about.txt b/protected/extensions/ckeditor/kcfinder/themes/dark/about.txt new file mode 100644 index 0000000..8cda559 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/themes/dark/about.txt @@ -0,0 +1,15 @@ +This folder contains files for designing Dark visual theme for KCFinder + +Some Icons are Copyright © Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 license. +http://p.yusukekamiyamane.com + +Other icons are taken from default KDE4 visual theme +http://www.kde.org + +Theme Details: + +Project: KCFinder - http://kcfinder.sunhater.com +Version: 1.3 +Author: Dark Preacher +Licenses: GPLv2 - http://www.opensource.org/licenses/gpl-2.0.php + LGPLv2 - http://www.opensource.org/licenses/lgpl-2.1.php diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/bg_transparent.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/bg_transparent.png new file mode 100644 index 0000000..3200632 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/bg_transparent.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/cross.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/cross.png new file mode 100644 index 0000000..5cdf6ea Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/cross.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/..png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/..png new file mode 100644 index 0000000..aaff484 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/..png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/.image.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/.image.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/.image.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/avi.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/avi.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/avi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/bat.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/bat.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/bat.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/bmp.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/bmp.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/bmp.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/bz2.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/bz2.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/bz2.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ccd.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ccd.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ccd.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/cgi.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/cgi.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/cgi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/com.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/com.png new file mode 100644 index 0000000..427a328 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/com.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/csh.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/csh.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/csh.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/cue.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/cue.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/cue.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/deb.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/deb.png new file mode 100644 index 0000000..14ce82f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/deb.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/dll.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/dll.png new file mode 100644 index 0000000..9e03a48 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/dll.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/doc.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/doc.png new file mode 100644 index 0000000..b544dcc Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/doc.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/docx.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/docx.png new file mode 100644 index 0000000..b544dcc Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/docx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/exe.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/exe.png new file mode 100644 index 0000000..427a328 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/exe.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/fla.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/fla.png new file mode 100644 index 0000000..5e7c751 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/fla.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/flv.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/flv.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/flv.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/fon.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/fon.png new file mode 100644 index 0000000..3815dac Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/fon.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/gif.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/gif.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/gif.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/gz.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/gz.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/gz.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/htm.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/htm.png new file mode 100644 index 0000000..4995b6b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/htm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/html.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/html.png new file mode 100644 index 0000000..4995b6b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/html.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ini.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ini.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ini.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/iso.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/iso.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/iso.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/jar.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/jar.png new file mode 100644 index 0000000..cef54cd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/jar.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/java.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/java.png new file mode 100644 index 0000000..351b5db Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/java.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/jpeg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/jpeg.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/jpeg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/jpg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/jpg.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/jpg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/js.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/js.png new file mode 100644 index 0000000..fcb1f8f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/js.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mds.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mds.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mds.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mdx.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mdx.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mdx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mid.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mid.png new file mode 100644 index 0000000..6187bc5 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mid.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/midi.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/midi.png new file mode 100644 index 0000000..6187bc5 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/midi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mkv.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mkv.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mkv.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mov.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mov.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mov.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mp3.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mp3.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mp3.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mpeg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mpeg.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mpeg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mpg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mpg.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/mpg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/nfo.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/nfo.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/nfo.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/nrg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/nrg.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/nrg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ogg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ogg.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ogg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pdf.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pdf.png new file mode 100644 index 0000000..49cf5e3 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pdf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/php.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/php.png new file mode 100644 index 0000000..588bef8 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/php.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/phps.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/phps.png new file mode 100644 index 0000000..588bef8 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/phps.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pl.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pl.png new file mode 100644 index 0000000..d3468a5 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pl.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pm.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pm.png new file mode 100644 index 0000000..d3468a5 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/png.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/png.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/png.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ppt.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ppt.png new file mode 100644 index 0000000..ae13c8a Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ppt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pptx.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pptx.png new file mode 100644 index 0000000..ae13c8a Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/pptx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/qt.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/qt.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/qt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/rpm.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/rpm.png new file mode 100644 index 0000000..0708eef Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/rpm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/rtf.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/rtf.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/rtf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/sh.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/sh.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/sh.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/srt.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/srt.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/srt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/sub.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/sub.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/sub.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/swf.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/swf.png new file mode 100644 index 0000000..45a8208 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/swf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/tgz.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/tgz.png new file mode 100644 index 0000000..d7e7b5b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/tgz.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/tif.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/tif.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/tif.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/tiff.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/tiff.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/tiff.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/torrent.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/torrent.png new file mode 100644 index 0000000..0bffac4 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/torrent.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ttf.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ttf.png new file mode 100644 index 0000000..4f43e19 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/ttf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/txt.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/txt.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/txt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/wav.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/wav.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/wav.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/wma.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/wma.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/wma.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/xls.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/xls.png new file mode 100644 index 0000000..ddf069f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/xls.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/xlsx.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/xlsx.png new file mode 100644 index 0000000..ddf069f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/xlsx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/zip.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/zip.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/big/zip.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/..png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/..png new file mode 100644 index 0000000..6b2545a Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/..png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/.image.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/.image.png new file mode 100644 index 0000000..8f07172 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/.image.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/avi.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/avi.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/avi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/bat.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/bat.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/bat.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/bmp.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/bmp.png new file mode 100644 index 0000000..8f07172 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/bmp.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/bz2.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/bz2.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/bz2.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ccd.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ccd.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ccd.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/cgi.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/cgi.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/cgi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/com.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/com.png new file mode 100644 index 0000000..2246f30 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/com.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/csh.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/csh.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/csh.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/cue.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/cue.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/cue.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/deb.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/deb.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/deb.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/dll.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/dll.png new file mode 100644 index 0000000..b1a2f1c Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/dll.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/doc.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/doc.png new file mode 100644 index 0000000..069059d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/doc.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/docx.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/docx.png new file mode 100644 index 0000000..069059d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/docx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/exe.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/exe.png new file mode 100644 index 0000000..2246f30 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/exe.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/fla.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/fla.png new file mode 100644 index 0000000..c50ec52 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/fla.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/flv.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/flv.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/flv.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/fon.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/fon.png new file mode 100644 index 0000000..2303efe Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/fon.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/gif.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/gif.png new file mode 100644 index 0000000..8f07172 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/gif.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/gz.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/gz.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/gz.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/htm.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/htm.png new file mode 100644 index 0000000..cc2f1bf Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/htm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/html.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/html.png new file mode 100644 index 0000000..cc2f1bf Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/html.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ini.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ini.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ini.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/iso.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/iso.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/iso.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/jar.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/jar.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/jar.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/java.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/java.png new file mode 100644 index 0000000..58fa8d0 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/java.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/jpeg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/jpeg.png new file mode 100644 index 0000000..8f07172 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/jpeg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/jpg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/jpg.png new file mode 100644 index 0000000..8f07172 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/jpg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/js.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/js.png new file mode 100644 index 0000000..db79975 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/js.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mds.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mds.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mds.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mdx.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mdx.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mdx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mid.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mid.png new file mode 100644 index 0000000..1d08c50 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mid.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/midi.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/midi.png new file mode 100644 index 0000000..1d08c50 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/midi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mkv.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mkv.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mkv.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mov.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mov.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mov.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mp3.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mp3.png new file mode 100644 index 0000000..1d08c50 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mp3.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mpeg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mpeg.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mpeg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mpg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mpg.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/mpg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/nfo.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/nfo.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/nfo.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/nrg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/nrg.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/nrg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ogg.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ogg.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ogg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pdf.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pdf.png new file mode 100644 index 0000000..9498f0f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pdf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/php.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/php.png new file mode 100644 index 0000000..d73934b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/php.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/phps.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/phps.png new file mode 100644 index 0000000..d73934b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/phps.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pl.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pl.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pl.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pm.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pm.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/png.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/png.png new file mode 100644 index 0000000..8f07172 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/png.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ppt.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ppt.png new file mode 100644 index 0000000..bdccbb6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ppt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pptx.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pptx.png new file mode 100644 index 0000000..bdccbb6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/pptx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/qt.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/qt.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/qt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/rpm.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/rpm.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/rpm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/rtf.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/rtf.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/rtf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/sh.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/sh.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/sh.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/srt.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/srt.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/srt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/sub.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/sub.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/sub.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/swf.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/swf.png new file mode 100644 index 0000000..80e05a3 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/swf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/tgz.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/tgz.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/tgz.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/tif.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/tif.png new file mode 100644 index 0000000..8f07172 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/tif.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/tiff.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/tiff.png new file mode 100644 index 0000000..8f07172 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/tiff.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/torrent.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/torrent.png new file mode 100644 index 0000000..55c04aa Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/torrent.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ttf.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ttf.png new file mode 100644 index 0000000..ed3e0f6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/ttf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/txt.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/txt.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/txt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/wav.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/wav.png new file mode 100644 index 0000000..1d08c50 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/wav.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/wma.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/wma.png new file mode 100644 index 0000000..1d08c50 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/wma.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/xls.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/xls.png new file mode 100644 index 0000000..573d141 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/xls.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/xlsx.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/xlsx.png new file mode 100644 index 0000000..573d141 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/xlsx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/zip.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/zip.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/files/small/zip.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/about.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/about.png new file mode 100644 index 0000000..fa9a60b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/about.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/clipboard-add.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/clipboard-add.png new file mode 100644 index 0000000..2492449 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/clipboard-add.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/clipboard-clear.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/clipboard-clear.png new file mode 100644 index 0000000..b689cff Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/clipboard-clear.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/clipboard.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/clipboard.png new file mode 100644 index 0000000..0cf8887 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/clipboard.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/close-clicked.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/close-clicked.png new file mode 100644 index 0000000..fa39b1c Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/close-clicked.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/close-hover.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/close-hover.png new file mode 100644 index 0000000..cd7d766 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/close-hover.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/close.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/close.png new file mode 100644 index 0000000..151de43 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/close.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/copy.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/copy.png new file mode 100644 index 0000000..ccfa6bb Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/copy.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/delete.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/delete.png new file mode 100644 index 0000000..6b9fa6d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/delete.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/download.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/download.png new file mode 100644 index 0000000..8d5209b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/download.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/folder-new.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/folder-new.png new file mode 100644 index 0000000..c665ac6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/folder-new.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/maximize.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/maximize.png new file mode 100644 index 0000000..9d81b7f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/maximize.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/move.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/move.png new file mode 100644 index 0000000..20462af Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/move.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/refresh.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/refresh.png new file mode 100644 index 0000000..dda7132 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/refresh.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/rename.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/rename.png new file mode 100644 index 0000000..3cfe301 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/rename.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/select.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/select.png new file mode 100644 index 0000000..2414885 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/select.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/settings.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/settings.png new file mode 100644 index 0000000..efc599d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/settings.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/upload.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/upload.png new file mode 100644 index 0000000..4e4f5b8 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/upload.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/view.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/view.png new file mode 100644 index 0000000..7a5ae62 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/icons/view.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/kcf_logo.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/kcf_logo.png new file mode 100644 index 0000000..e829043 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/kcf_logo.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/loading.gif b/protected/extensions/ckeditor/kcfinder/themes/dark/img/loading.gif new file mode 100644 index 0000000..c085499 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/loading.gif differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/question.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/question.png new file mode 100644 index 0000000..09dc996 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/question.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/denied.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/denied.png new file mode 100644 index 0000000..a9d5f4d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/denied.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/folder.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/folder.png new file mode 100644 index 0000000..260b415 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/folder.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/folder_current.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/folder_current.png new file mode 100644 index 0000000..dbaa6ee Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/folder_current.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/minus.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/minus.png new file mode 100644 index 0000000..f783a6f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/minus.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/plus.png b/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/plus.png new file mode 100644 index 0000000..79c5ff7 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/dark/img/tree/plus.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/init.js b/protected/extensions/ckeditor/kcfinder/themes/dark/init.js new file mode 100644 index 0000000..dc64b6d --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/themes/dark/init.js @@ -0,0 +1,4 @@ +// If this file exists in theme directory, it will be loaded in section + +var imgLoading = new Image(); +imgLoading.src = 'themes/dark/img/loading.gif'; diff --git a/protected/extensions/ckeditor/kcfinder/themes/dark/style.css b/protected/extensions/ckeditor/kcfinder/themes/dark/style.css new file mode 100644 index 0000000..63adb77 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/themes/dark/style.css @@ -0,0 +1,560 @@ +body { + background: #3B4148; + color: #ffffff; +} + +input { + margin: 0; +} + +input[type="radio"], input[type="checkbox"], label { + cursor: pointer; +} + +input[type="text"] { + border: 1px solid #3B4148; + background: #fff; + padding: 2px; + margin: 0; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + outline-width: 0; +} + +input[type="text"]:hover { + border-color: #69727B; +} + +input[type="text"]:focus { + border-color: #69727B; + box-shadow: 0 0 3px rgba(0,0,0,1); + -moz-box-shadow: 0 0 3px rgba(0,0,0,1); + -webkit-box-shadow: 0 0 3px rgba(0,0,0,1); +} + +input[type="button"], input[type="submit"], input[type="reset"], button { + outline-width: 0; + background: #edeceb; + border: 1px solid #fff; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + box-shadow: 0 1px 1px rgba(0,0,0,0.6); + -moz-box-shadow: 0 1px 1px rgba(0,0,0,0.6); + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.6); + color: #222; +} + +input[type="button"]:hover, input[type="submit"]:hover, input[type="reset"]:hover, button:hover { + box-shadow: 0 0 1px rgba(0,0,0,0.6); + -moz-box-shadow: 0 0 1px rgba(0,0,0,0.6); + -webkit-box-shadow: 0 0 1px rgba(0,0,0,0.6); +} + +input[type="button"]:focus, input[type="submit"]:focus, input[type="reset"]:focus, button:focus { + box-shadow: 0 0 2px rgba(54,135,226,1); + -moz-box-shadow: 0 0 2px rgba(255,255,255,1); + -webkit-box-shadow: 0 0 2px rgba(54,135,226,1); +} + +fieldset { + margin: 0 5px 5px 0px; + padding: 5px; + border: 1px solid #69727B; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + cursor: default; +} + +fieldset td { + white-space: nowrap; +} + +legend { + margin: 0; + padding:0 3px; + font-weight: bold; +} + +#folders { + margin: 4px 4px 0 4px; + background: #566068; + border: 1px solid #69727B; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; +} + +#files { + float: left; + margin: 0 4px 0 0; + background: #566068; + border: 1px solid #69727B; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; +} + +#files.drag { + background: #69727B; +} + +#topic { + padding-left: 12px; +} + + +div.folder { + padding-top: 2px; + margin-top: 4px; + white-space: nowrap; +} + +div.folder a { + text-decoration: none; + cursor: default; + outline: none; + color: #ffffff; +} + +span.folder { + padding: 2px 3px 2px 23px; + outline: none; + background: no-repeat 3px center; + cursor: pointer; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border: 1px solid #566068; +} + +span.brace { + width: 16px; + height: 16px; + outline: none; +} + +span.current { + background-image: url(img/tree/folder_current.png); + background-color: #454C55; + border-color: #3B4148; + color: #fff; +} + +span.regular { + background-image: url(img/tree/folder.png); + background-color: #69727B; +} + +span.regular:hover, span.context { + background-color: #9199A1; + border-color: #69727B +} + +span.opened { + background-image: url(img/tree/minus.png); +} + +span.closed { + background-image: url(img/tree/plus.png); +} + +span.denied { + background-image: url(img/tree/denied.png); +} + +div.file { + padding: 4px; + margin: 3px; + border: 1px solid #3B4148; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + background: #69727B; + color: #000000; +} + +div.file:hover { + background: #9199A1; + border-color: #3B4148; +} + +div.file .name { + margin-top: 4px; + font-weight: normal; + height: 16px; + overflow: hidden; +} + +div.file .time { + font-size: 10px; +} + +div.file .size { + font-size: 10px; +} + +#files div.selected, +#files div.selected:hover { + background-color: #3B4148; + border-color: #69727B; + color: #ffffff; +} + +tr.file > td { + padding: 3px 4px; + background-color: #69727B +} + +tr.file:hover > td { + background-color: #9199A1; +} + +tr.selected > td, +tr.selected:hover > td { + background-color: #3B4148; + color: #fff; +} + +#toolbar { + padding: 5px 0; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +#toolbar a { + color: #ffffff; + padding: 4px 4px 4px 24px; + margin-right: 5px; + border: 1px solid transparent; + background: no-repeat 2px center; + outline: none; + display: block; + float: left; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; +} + +#toolbar a:hover, +#toolbar a.hover { + background-color: #566068; + border-color: #69727B; + color: #ffffff; +} + +#toolbar a.selected { + background-color: #566068; + border-color: #69727B; +} + +#toolbar a[href="kcact:upload"] { + background-image: url(img/icons/upload.png); +} + +#toolbar a[href="kcact:refresh"] { + background-image: url(img/icons/refresh.png); +} + +#toolbar a[href="kcact:settings"] { + background-image: url(img/icons/settings.png); +} + +#toolbar a[href="kcact:about"] { + background-image: url(img/icons/about.png); +} + +#toolbar a[href="kcact:maximize"] { + background-image: url(img/icons/maximize.png); +} + +#settings { + /*background: #e0dfde;*/ +} + +.box, #loading, #alert { + padding: 5px; + border: 1px solid #69727B; + background: #566068; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +.box, #alert { + padding: 8px; + border-color: #69727B; + -moz-box-shadow: 0 0 8px rgba(0,0,0,1); + -webkit-box-shadow: 0 0 8px rgba(0,0,0,1); + box-shadow: 0 0 8px rgba(0,0,0,1); +} + +#loading { + background-image: url(img/loading.gif); + font-weight: normal; + margin-right: 4px; + color: #ffffff; +} + +#alert div.message { + padding: 0 0 0 40px; +} + +#alert { + background: #566068 url(img/cross.png) no-repeat 8px 29px; +} + +#dialog div.question { + padding: 0 0 0 40px; + background: transparent url(img/question.png) no-repeat 0 0; +} + +#alert div.ok, #dialog div.buttons { + padding-top: 5px; + text-align: right; +} + +.menu { + padding: 2px; + border: 1px solid #69727B; + background: #3B4148; + opacity: 0.95; +} + +.menu a { + text-decoration: none; + padding: 3px 3px 3px 22px; + background: no-repeat 2px center; + color: #ffffff; + margin: 0; + background-color: #3B4148; + outline: none; + border: 1px solid transparent; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; +} + +.menu .delimiter { + border-top: 1px solid #69727B; + padding-bottom: 3px; + margin: 3px 2px 0 2px; +} + +.menu a:hover { + background-color: #566068; + border-color: #69727B; +} + +.menu a[href="kcact:refresh"] { + background-image: url(img/icons/refresh.png); +} + +.menu a[href="kcact:mkdir"] { + background-image: url(img/icons/folder-new.png); +} + +.menu a[href="kcact:mvdir"], .menu a[href="kcact:mv"] { + background-image: url(img/icons/rename.png); +} + +.menu a[href="kcact:rmdir"], .menu a[href="kcact:rm"], .menu a[href="kcact:rmcbd"] { + background-image: url(img/icons/delete.png); +} + +.menu a[href="kcact:clpbrdadd"] { + background-image: url(img/icons/clipboard-add.png); +} + +.menu a[href="kcact:pick"], .menu a[href="kcact:pick_thumb"] { + background-image: url(img/icons/select.png); +} + +.menu a[href="kcact:download"] { + background-image: url(img/icons/download.png); +} + +.menu a[href="kcact:view"] { + background-image: url(img/icons/view.png); +} + +.menu a[href="kcact:cpcbd"] { + background-image: url(img/icons/copy.png); +} + +.menu a[href="kcact:mvcbd"] { + background-image: url(img/icons/move.png); +} + +.menu a[href="kcact:clrcbd"] { + background-image: url(img/icons/clipboard-clear.png); +} + +a.denied { + color: #666; + opacity: 0.5; + filter: alpha(opacity:50); + cursor: default; +} + +a.denied:hover { + background-color: #e4e3e2; + border-color: transparent; +} + +#dialog { + -moz-box-shadow: 0 0 5px rgba(0,0,0,0.5); + -webkit-box-shadow: 0 0 5px rgba(0,0,0,0.5); + box-shadow: 0 0 5px rgba(0,0,0,0.5); +} + +#dialog input[type="text"] { + margin: 5px 0; + width: 200px; +} + +#dialog div.slideshow { + border: 1px solid #000; + padding: 5px 5px 3px 5px; + background: #000; + -moz-box-shadow: 0 0 8px rgba(0,0,0,1); + -webkit-box-shadow: 0 0 8px rgba(0,0,0,1); + box-shadow: 0 0 8px rgba(0,0,0,1); +} + +#dialog img { + border: 1px solid #3687e2; + background: url(img/bg_transparent.png); +} + +#loadingDirs { + padding: 5px 0 1px 24px; +} + +.about { + text-align: center; + padding: 6px; +} + +.about div.head { + font-weight: bold; + font-size: 12px; + padding: 3px 0 8px 0; +} + +.about div.head a { + background: url(img/kcf_logo.png) no-repeat left center; + padding: 0 0 0 27px; + font-size: 17px; +} + +.about a { + text-decoration: none; + color: #ffffff; +} + +.about a:hover { + text-decoration: underline; +} + +.about button { + margin-top: 8px; +} + +#clipboard { + padding: 0 4px 1px 0; +} + +#clipboard div { + background: url(img/icons/clipboard.png) no-repeat center center; + border: 1px solid transparent; + padding: 1px; + cursor: pointer; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; +} + +#clipboard div:hover { + background-color: #bfbdbb; + border-color: #a9a59f; +} + +#clipboard.selected div, #clipboard.selected div:hover { + background-color: #c9c7c4; + border-color: #3687e2; +} + +#shadow {background: #000000;} + +button, input[type="submit"], input[type="button"] { +color: #ffffff; +background: #3B4148; +border: 1px solid #69727B; +padding: 3px 5px; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px;} +#checkver { + padding-bottom: 8px; +} +#checkver > span { + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} +#checkver > span.loading { + background: url(img/loading.gif); +} + +#checkver span { + padding: 2px; +} + +#checkver a { + font-weight: normal; + padding: 3px 3px 3px 20px; + background: url(img/icons/download.png) no-repeat left center; +} + +div.title { + background: #1a1d1f; + overflow: auto; + text-align: center; + margin: -5px -5px 5px -5px; + padding-left: 19px; + padding-bottom: 2px; + padding-top: 2px; + font-weight: bold; + cursor: move; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + box-shadow: 0 0 1px rgba(0,0,0,0.6); + -moz-box-shadow: 0 0 1px rgba(0,0,0,0.6); + -webkit-box-shadow: 0 0 1px rgba(0,0,0,0.6); +} + +.about div.title { + cursor: default; +} + +span.close, span.clicked { + float: right; + width: 19px; + height: 20px; + background: url(img/icons/close.png) no-repeat left 2px; + margin-top: -3px; + cursor: default; +} + +span.close:hover { + background-image: url(img/icons/close-hover.png); +} + +span.clicked:hover { + background-image: url(img/icons/close-clicked.png); +} \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/about.txt b/protected/extensions/ckeditor/kcfinder/themes/oxygen/about.txt new file mode 100644 index 0000000..8139418 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/themes/oxygen/about.txt @@ -0,0 +1,11 @@ +This folder contains files for designing Oxygen visual theme for KCFinder +Icons and color schemes are taken from default KDE4 visual theme +http://www.kde.org + +Theme Details: + +Project: KCFinder - http://kcfinder.sunhater.com +Version: 2.51 +Author: Pavel Tzonkov +Licenses: GPLv2 - http://www.opensource.org/licenses/gpl-2.0.php + LGPLv2 - http://www.opensource.org/licenses/lgpl-2.1.php diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/alert.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/alert.png new file mode 100644 index 0000000..b2e019d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/alert.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/bg_transparent.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/bg_transparent.png new file mode 100644 index 0000000..3200632 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/bg_transparent.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/confirm.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/confirm.png new file mode 100644 index 0000000..1e9a1cd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/confirm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/..png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/..png new file mode 100644 index 0000000..aaff484 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/..png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/.image.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/.image.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/.image.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/avi.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/avi.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/avi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/bat.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/bat.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/bat.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/bmp.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/bmp.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/bmp.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/bz2.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/bz2.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/bz2.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ccd.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ccd.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ccd.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/cgi.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/cgi.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/cgi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/com.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/com.png new file mode 100644 index 0000000..427a328 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/com.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/csh.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/csh.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/csh.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/cue.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/cue.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/cue.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/deb.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/deb.png new file mode 100644 index 0000000..14ce82f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/deb.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/dll.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/dll.png new file mode 100644 index 0000000..9e03a48 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/dll.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/doc.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/doc.png new file mode 100644 index 0000000..b544dcc Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/doc.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/docx.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/docx.png new file mode 100644 index 0000000..b544dcc Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/docx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/exe.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/exe.png new file mode 100644 index 0000000..427a328 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/exe.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/fla.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/fla.png new file mode 100644 index 0000000..5e7c751 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/fla.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/flv.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/flv.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/flv.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/fon.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/fon.png new file mode 100644 index 0000000..3815dac Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/fon.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/gif.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/gif.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/gif.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/gz.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/gz.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/gz.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/htm.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/htm.png new file mode 100644 index 0000000..4995b6b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/htm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/html.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/html.png new file mode 100644 index 0000000..4995b6b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/html.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ini.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ini.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ini.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/iso.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/iso.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/iso.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/jar.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/jar.png new file mode 100644 index 0000000..cef54cd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/jar.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/java.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/java.png new file mode 100644 index 0000000..351b5db Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/java.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/jpeg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/jpeg.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/jpeg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/jpg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/jpg.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/jpg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/js.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/js.png new file mode 100644 index 0000000..fcb1f8f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/js.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mds.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mds.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mds.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mdx.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mdx.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mdx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mid.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mid.png new file mode 100644 index 0000000..6187bc5 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mid.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/midi.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/midi.png new file mode 100644 index 0000000..6187bc5 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/midi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mkv.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mkv.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mkv.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mov.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mov.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mov.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mp3.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mp3.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mp3.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mpeg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mpeg.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mpeg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mpg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mpg.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/mpg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/nfo.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/nfo.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/nfo.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/nrg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/nrg.png new file mode 100644 index 0000000..aa9f4a2 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/nrg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ogg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ogg.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ogg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pdf.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pdf.png new file mode 100644 index 0000000..49cf5e3 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pdf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/php.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/php.png new file mode 100644 index 0000000..588bef8 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/php.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/phps.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/phps.png new file mode 100644 index 0000000..588bef8 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/phps.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pl.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pl.png new file mode 100644 index 0000000..d3468a5 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pl.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pm.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pm.png new file mode 100644 index 0000000..d3468a5 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/png.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/png.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/png.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ppt.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ppt.png new file mode 100644 index 0000000..ae13c8a Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ppt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pptx.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pptx.png new file mode 100644 index 0000000..ae13c8a Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/pptx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/psd.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/psd.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/psd.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/qt.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/qt.png new file mode 100644 index 0000000..28f9700 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/qt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/rar.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/rar.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/rar.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/rpm.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/rpm.png new file mode 100644 index 0000000..0708eef Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/rpm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/rtf.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/rtf.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/rtf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/sh.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/sh.png new file mode 100644 index 0000000..eaa3dc9 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/sh.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/srt.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/srt.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/srt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/sub.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/sub.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/sub.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/swf.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/swf.png new file mode 100644 index 0000000..45a8208 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/swf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/tgz.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/tgz.png new file mode 100644 index 0000000..d7e7b5b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/tgz.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/tif.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/tif.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/tif.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/tiff.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/tiff.png new file mode 100644 index 0000000..bbe1180 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/tiff.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/torrent.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/torrent.png new file mode 100644 index 0000000..0bffac4 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/torrent.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ttf.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ttf.png new file mode 100644 index 0000000..4f43e19 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/ttf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/txt.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/txt.png new file mode 100644 index 0000000..02489bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/txt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/wav.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/wav.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/wav.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/wma.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/wma.png new file mode 100644 index 0000000..5f4c206 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/wma.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/xls.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/xls.png new file mode 100644 index 0000000..ddf069f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/xls.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/xlsx.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/xlsx.png new file mode 100644 index 0000000..ddf069f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/xlsx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/zip.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/zip.png new file mode 100644 index 0000000..84eaa19 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/big/zip.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/..png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/..png new file mode 100644 index 0000000..67f4c5f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/..png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/.image.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/.image.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/.image.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/avi.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/avi.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/avi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/bat.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/bat.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/bat.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/bmp.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/bmp.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/bmp.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/bz2.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/bz2.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/bz2.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ccd.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ccd.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ccd.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/cgi.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/cgi.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/cgi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/com.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/com.png new file mode 100644 index 0000000..2246f30 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/com.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/csh.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/csh.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/csh.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/cue.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/cue.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/cue.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/deb.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/deb.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/deb.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/dll.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/dll.png new file mode 100644 index 0000000..b1a2f1c Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/dll.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/doc.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/doc.png new file mode 100644 index 0000000..069059d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/doc.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/docx.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/docx.png new file mode 100644 index 0000000..069059d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/docx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/exe.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/exe.png new file mode 100644 index 0000000..2246f30 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/exe.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/fla.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/fla.png new file mode 100644 index 0000000..c50ec52 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/fla.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/flv.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/flv.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/flv.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/fon.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/fon.png new file mode 100644 index 0000000..2303efe Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/fon.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/gif.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/gif.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/gif.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/gz.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/gz.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/gz.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/htm.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/htm.png new file mode 100644 index 0000000..cc2f1bf Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/htm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/html.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/html.png new file mode 100644 index 0000000..cc2f1bf Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/html.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ini.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ini.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ini.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/iso.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/iso.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/iso.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/jar.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/jar.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/jar.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/java.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/java.png new file mode 100644 index 0000000..58fa8d0 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/java.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/jpeg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/jpeg.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/jpeg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/jpg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/jpg.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/jpg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/js.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/js.png new file mode 100644 index 0000000..db79975 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/js.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mds.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mds.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mds.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mdx.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mdx.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mdx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mid.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mid.png new file mode 100644 index 0000000..e1ed4bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mid.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/midi.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/midi.png new file mode 100644 index 0000000..e1ed4bd Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/midi.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mkv.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mkv.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mkv.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mov.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mov.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mov.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mp3.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mp3.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mp3.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mpeg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mpeg.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mpeg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mpg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mpg.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/mpg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/nfo.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/nfo.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/nfo.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/nrg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/nrg.png new file mode 100644 index 0000000..4e8d91d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/nrg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ogg.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ogg.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ogg.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pdf.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pdf.png new file mode 100644 index 0000000..9498f0f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pdf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/php.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/php.png new file mode 100644 index 0000000..d73934b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/php.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/phps.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/phps.png new file mode 100644 index 0000000..d73934b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/phps.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pl.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pl.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pl.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pm.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pm.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/png.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/png.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/png.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ppt.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ppt.png new file mode 100644 index 0000000..bdccbb6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ppt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pptx.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pptx.png new file mode 100644 index 0000000..bdccbb6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/pptx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/psd.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/psd.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/psd.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/qt.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/qt.png new file mode 100644 index 0000000..bbff051 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/qt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/rar.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/rar.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/rar.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/rpm.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/rpm.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/rpm.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/rtf.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/rtf.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/rtf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/sh.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/sh.png new file mode 100644 index 0000000..7b87884 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/sh.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/srt.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/srt.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/srt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/sub.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/sub.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/sub.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/swf.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/swf.png new file mode 100644 index 0000000..80e05a3 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/swf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/tgz.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/tgz.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/tgz.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/tif.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/tif.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/tif.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/tiff.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/tiff.png new file mode 100644 index 0000000..638dee6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/tiff.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/torrent.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/torrent.png new file mode 100644 index 0000000..55c04aa Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/torrent.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ttf.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ttf.png new file mode 100644 index 0000000..ed3e0f6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/ttf.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/txt.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/txt.png new file mode 100644 index 0000000..d904593 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/txt.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/wav.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/wav.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/wav.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/wma.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/wma.png new file mode 100644 index 0000000..017b00d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/wma.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/xls.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/xls.png new file mode 100644 index 0000000..573d141 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/xls.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/xlsx.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/xlsx.png new file mode 100644 index 0000000..573d141 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/xlsx.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/zip.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/zip.png new file mode 100644 index 0000000..305f01b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/files/small/zip.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/about.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/about.png new file mode 100644 index 0000000..e1eb797 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/about.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/clipboard-add.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/clipboard-add.png new file mode 100644 index 0000000..4654f2b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/clipboard-add.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/clipboard-clear.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/clipboard-clear.png new file mode 100644 index 0000000..e400360 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/clipboard-clear.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/clipboard.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/clipboard.png new file mode 100644 index 0000000..9d3a8fa Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/clipboard.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/close-clicked.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/close-clicked.png new file mode 100644 index 0000000..6fb8507 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/close-clicked.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/close-hover.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/close-hover.png new file mode 100644 index 0000000..a5b8306 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/close-hover.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/close.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/close.png new file mode 100644 index 0000000..88516c3 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/close.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/copy.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/copy.png new file mode 100644 index 0000000..5cdeb5f Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/copy.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/delete.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/delete.png new file mode 100644 index 0000000..d04a554 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/delete.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/download.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/download.png new file mode 100644 index 0000000..d0746f6 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/download.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/folder-new.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/folder-new.png new file mode 100644 index 0000000..955efbf Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/folder-new.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/maximize.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/maximize.png new file mode 100644 index 0000000..d41fc7e Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/maximize.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/move.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/move.png new file mode 100644 index 0000000..ebcc0fa Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/move.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/refresh.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/refresh.png new file mode 100644 index 0000000..86b6f82 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/refresh.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/rename.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/rename.png new file mode 100644 index 0000000..2323757 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/rename.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/select.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/select.png new file mode 100644 index 0000000..f1d290c Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/select.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/settings.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/settings.png new file mode 100644 index 0000000..5ce478b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/settings.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/upload.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/upload.png new file mode 100644 index 0000000..37b1f80 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/upload.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/view.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/view.png new file mode 100644 index 0000000..6b7a682 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/icons/view.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/kcf_logo.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/kcf_logo.png new file mode 100644 index 0000000..e829043 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/kcf_logo.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/loading.gif b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/loading.gif new file mode 100644 index 0000000..5f5cedc Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/loading.gif differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/denied.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/denied.png new file mode 100644 index 0000000..07b93c1 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/denied.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/folder.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/folder.png new file mode 100644 index 0000000..536da3d Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/folder.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/folder_current.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/folder_current.png new file mode 100644 index 0000000..1d2f301 Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/folder_current.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/minus.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/minus.png new file mode 100644 index 0000000..af617bb Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/minus.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/plus.png b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/plus.png new file mode 100644 index 0000000..897088b Binary files /dev/null and b/protected/extensions/ckeditor/kcfinder/themes/oxygen/img/tree/plus.png differ diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/init.js b/protected/extensions/ckeditor/kcfinder/themes/oxygen/init.js new file mode 100644 index 0000000..a507231 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/themes/oxygen/init.js @@ -0,0 +1,4 @@ +// If this file exists in theme directory, it will be loaded in section + +var imgLoading = new Image(); +imgLoading.src = 'themes/oxygen/img/loading.gif'; diff --git a/protected/extensions/ckeditor/kcfinder/themes/oxygen/style.css b/protected/extensions/ckeditor/kcfinder/themes/oxygen/style.css new file mode 100644 index 0000000..d5c74de --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/themes/oxygen/style.css @@ -0,0 +1,566 @@ +body { + background: #e0dfde; +} + +input { + margin: 0; +} + +input[type="radio"], input[type="checkbox"], label { + cursor: pointer; +} + +input[type="text"] { + border: 1px solid #d3d3d3; + background: #fff; + padding: 2px; + margin: 0; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + box-shadow: 0 -1px 0 rgba(0,0,0,0.5); + -moz-box-shadow: 0 -1px 0 rgba(0,0,0,0.5); + -webkit-box-shadow: 0 -1px 0 rgba(0,0,0,0.5); + outline-width: 0; +} + +input[type="text"]:hover { + box-shadow: 0 -1px 0 rgba(0,0,0,0.2); + -moz-box-shadow: 0 -1px 0 rgba(0,0,0,0.2); + -webkit-box-shadow: 0 -1px 0 rgba(0,0,0,0.2); +} + +input[type="text"]:focus { + border-color: #3687e2; + box-shadow: 0 0 3px rgba(54,135,226,1); + -moz-box-shadow: 0 0 3px rgba(54,135,226,1); + -webkit-box-shadow: 0 0 3px rgba(54,135,226,1); +} + +input[type="button"], input[type="submit"], input[type="reset"], button { + outline-width: 0; + background: #edeceb; + border: 1px solid #fff; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + box-shadow: 0 1px 1px rgba(0,0,0,0.6); + -moz-box-shadow: 0 1px 1px rgba(0,0,0,0.6); + -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.6); + color: #222; +} + +input[type="button"]:hover, input[type="submit"]:hover, input[type="reset"]:hover, button:hover { + box-shadow: 0 0 1px rgba(0,0,0,0.6); + -moz-box-shadow: 0 0 1px rgba(0,0,0,0.6); + -webkit-box-shadow: 0 0 1px rgba(0,0,0,0.6); +} + +input[type="button"]:focus, input[type="submit"]:focus, input[type="reset"]:focus, button:focus { + box-shadow: 0 0 5px rgba(54,135,226,1); + -moz-box-shadow: 0 0 5px rgba(54,135,226,1); + -webkit-box-shadow: 0 0 5px rgba(54,135,226,1); +} + +fieldset { + margin: 0 5px 5px 0px; + padding: 5px; + border: 1px solid #afadaa; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + cursor: default; +} + +fieldset td { + white-space: nowrap; +} + +legend { + margin: 0; + padding:0 3px; + font-weight: bold; +} + +#folders { + margin: 4px 4px 0 4px; + background: #f8f7f6; + border: 1px solid #adaba9; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; +} + +#files { + float: left; + margin: 0 4px 0 0; + background: #f8f7f6; + border: 1px solid #adaba9; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; +} + +#files.drag { + background: #ddebf8; +} + +#topic { + padding-left: 12px; +} + + +div.folder { + padding-top: 2px; + margin-top: 4px; + white-space: nowrap; +} + +div.folder a { + text-decoration: none; + cursor: default; + outline: none; + color: #000; +} + +span.folder { + padding: 2px 3px 2px 23px; + outline: none; + background: no-repeat 3px center; + cursor: pointer; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border: 1px solid transparent; +} + +span.brace { + width: 16px; + height: 16px; + outline: none; +} + +span.current { + background-image: url(img/tree/folder_current.png); + background-color: #5b9bda; + border-color: #2973bd; + color: #fff; +} + +span.regular { + background-image: url(img/tree/folder.png); + background-color: #f8f7f6; +} + +span.regular:hover, span.context { + background-color: #ddebf8; + border-color: #cee0f4; + color: #000; +} + +span.opened { + background-image: url(img/tree/minus.png); +} + +span.closed { + background-image: url(img/tree/plus.png); +} + +span.denied { + background-image: url(img/tree/denied.png); +} + +div.file { + padding: 4px; + margin: 3px; + border: 1px solid #aaa; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + background: #fff; +} + +div.file:hover { + background: #ddebf8; + border-color: #a7bed7; +} + +div.file .name { + margin-top: 4px; + font-weight: bold; + height: 16px; + overflow: hidden; +} + +div.file .time { + font-size: 10px; +} + +div.file .size { + font-size: 10px; +} + +#files div.selected, +#files div.selected:hover { + background-color: #5b9bda; + border-color: #2973bd; + color: #fff; +} + +tr.file > td { + padding: 3px 4px; + background-color: #f8f7f6 +} + +tr.file:hover > td { + background-color: #ddebf8; +} + +tr.selected > td, +tr.selected:hover > td { + background-color: #5b9bda; + color: #fff; +} + +#toolbar { + padding: 5px 0; + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +#toolbar a { + color: #000; + padding: 4px 4px 4px 24px; + margin-right: 5px; + border: 1px solid transparent; + background: no-repeat 2px center; + outline: none; + display: block; + float: left; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; +} + +#toolbar a:hover, +#toolbar a.hover { + background-color: #cfcfcf; + border-color: #afadaa; + box-shadow: inset 0 0 3px rgba(175,173,170,1); + -moz-box-shadow: inset 0 0 3px rgba(175,173,170,1); + -webkit-box-shadow: inset 0 0 3px rgba(175,173,170,1); +} + +#toolbar a.selected { + background-color: #eeeeff; + border-color: #3687e2; + box-shadow: inset 0 0 3px rgba(54,135,226,1); + -moz-box-shadow: inset 0 0 3px rgba(54,135,226,1); + -webkit-box-shadow: inset 0 0 3px rgba(54,135,226,1); +} + +#toolbar a[href="kcact:upload"] { + background-image: url(img/icons/upload.png); +} + +#toolbar a[href="kcact:refresh"] { + background-image: url(img/icons/refresh.png); +} + +#toolbar a[href="kcact:settings"] { + background-image: url(img/icons/settings.png); +} + +#toolbar a[href="kcact:about"] { + background-image: url(img/icons/about.png); +} + +#toolbar a[href="kcact:maximize"] { + background-image: url(img/icons/maximize.png); +} + +#settings { + background: #e0dfde; +} + +.box, #loading, #alert { + padding: 5px; + border: 1px solid #3687e2; + background: #e0dfde; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +.box, #alert { + padding: 8px; + border-color: #fff; + -moz-box-shadow: 0 0 8px rgba(255,255,255,1); + -webkit-box-shadow: 0 0 8px rgba(255,255,255,1); + box-shadow: 0 0 8px rgba(255,255,255,1); +} + +#loading { + background-image: url(img/loading.gif); + font-weight: bold; + margin-right: 4px; + box-shadow: 0 0 3px rgba(54,135,226,1); + -moz-box-shadow: 0 0 3px rgba(54,135,226,1); + -webkit-box-shadow: 0 0 3px rgba(54,135,226,1); +} + +#alert div.message, #dialog div.question { + padding: 0 0 0 40px; +} + +#alert { + background: #e0dfde url(img/alert.png) no-repeat 8px 29px; +} + +#dialog div.question { + background: #e0dfde url(img/confirm.png) no-repeat 0 0; +} + +#alert div.ok, #dialog div.buttons { + padding-top: 5px; + text-align: right; +} + +.menu { + padding: 2px; + border: 1px solid #acaaa7; + background: #e4e3e2; + opacity: 0.95; +} + +.menu a { + text-decoration: none; + padding: 3px 3px 3px 22px; + background: no-repeat 2px center; + color: #000; + margin: 0; + background-color: #e4e3e2; + outline: none; + border: 1px solid transparent; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; +} + +.menu .delimiter { + border-top: 1px solid #acaaa7; + padding-bottom: 3px; + margin: 3px 2px 0 2px; +} + +.menu a:hover { + background-color: #cfcfcf; + border-color: #afadaa; + box-shadow: inset 0 0 3px rgba(175,173,170,1); + -moz-box-shadow: inset 0 0 3px rgba(175,173,170,1); + -webkit-box-shadow: inset 0 0 3px rgba(175,173,170,1); +} + +.menu a[href="kcact:refresh"] { + background-image: url(img/icons/refresh.png); +} + +.menu a[href="kcact:mkdir"] { + background-image: url(img/icons/folder-new.png); +} + +.menu a[href="kcact:mvdir"], .menu a[href="kcact:mv"] { + background-image: url(img/icons/rename.png); +} + +.menu a[href="kcact:rmdir"], .menu a[href="kcact:rm"], .menu a[href="kcact:rmcbd"] { + background-image: url(img/icons/delete.png); +} + +.menu a[href="kcact:clpbrdadd"] { + background-image: url(img/icons/clipboard-add.png); +} + +.menu a[href="kcact:pick"], .menu a[href="kcact:pick_thumb"] { + background-image: url(img/icons/select.png); +} + +.menu a[href="kcact:download"] { + background-image: url(img/icons/download.png); +} + +.menu a[href="kcact:view"] { + background-image: url(img/icons/view.png); +} + +.menu a[href="kcact:cpcbd"] { + background-image: url(img/icons/copy.png); +} + +.menu a[href="kcact:mvcbd"] { + background-image: url(img/icons/move.png); +} + +.menu a[href="kcact:clrcbd"] { + background-image: url(img/icons/clipboard-clear.png); +} + +a.denied { + color: #666; + opacity: 0.5; + filter: alpha(opacity:50); + cursor: default; +} + +a.denied:hover { + background-color: #e4e3e2; + border-color: transparent; + box-shadow: none; + -moz-box-shadow: none; + -webkit-box-shadow: none; +} + +#dialog { + -moz-box-shadow: 0 0 5px rgba(0,0,0,0.5); + -webkit-box-shadow: 0 0 5px rgba(0,0,0,0.5); + box-shadow: 0 0 5px rgba(0,0,0,0.5); +} + +#dialog input[type="text"] { + margin: 5px 0; + width: 200px; +} + +#dialog div.slideshow { + border: 1px solid #000; + padding: 5px 5px 3px 5px; + background: #000; + -moz-box-shadow: 0 0 8px rgba(255,255,255,1); + -webkit-box-shadow: 0 0 8px rgba(255,255,255,1); + box-shadow: 0 0 8px rgba(255,255,255,1); +} + +#dialog img { + padding: 0; + margin: 0; + background: url(img/bg_transparent.png); +} + +#loadingDirs { + padding: 5px 0 1px 24px; +} + +.about { + text-align: center; +} + +.about div.head { + font-weight: bold; + font-size: 12px; + padding: 3px 0 8px 0; +} + +.about div.head a { + background: url(img/kcf_logo.png) no-repeat left center; + padding: 0 0 0 27px; + font-size: 17px; +} + +.about a { + text-decoration: none; + color: #0055ff; +} + +.about a:hover { + text-decoration: underline; +} + +.about button { + margin-top: 8px; +} + +#clipboard { + padding: 0 4px 1px 0; +} + +#clipboard div { + background: url(img/icons/clipboard.png) no-repeat center center; + border: 1px solid transparent; + padding: 1px; + cursor: pointer; + border-radius: 4px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; +} + +#clipboard div:hover { + background-color: #bfbdbb; + border-color: #a9a59f; +} + +#clipboard.selected div, #clipboard.selected div:hover { + background-color: #c9c7c4; + border-color: #3687e2; +} + +#checkver { + padding-bottom: 8px; +} +#checkver > span { + padding: 2px; + border: 1px solid transparent; + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +#checkver > span.loading { + background: url(img/loading.gif); + border: 1px solid #3687e2; + box-shadow: 0 0 3px rgba(54,135,226,1); + -moz-box-shadow: 0 0 3px rgba(54,135,226,1); + -webkit-box-shadow: 0 0 3px rgba(54,135,226,1); +} + +#checkver span { + padding: 3px; +} + +#checkver a { + font-weight: normal; + padding: 3px 3px 3px 20px; + background: url(img/icons/download.png) no-repeat left center; +} + +div.title { + overflow: auto; + text-align: center; + margin: -3px -5px 5px -5px; + padding-left: 19px; + padding-bottom: 2px; + border-bottom: 1px solid #bbb; + font-weight: bold; + cursor: move; +} + +.about div.title { + cursor: default; +} + +span.close, span.clicked { + float: right; + width: 19px; + height: 19px; + background: url(img/icons/close.png); + margin-top: -3px; + cursor: default; +} + +span.close:hover { + background: url(img/icons/close-hover.png); +} + +span.clicked:hover { + background: url(img/icons/close-clicked.png); +} \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/tpl/.htaccess b/protected/extensions/ckeditor/kcfinder/tpl/.htaccess new file mode 100644 index 0000000..7484f13 --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/tpl/.htaccess @@ -0,0 +1,4 @@ + +Order allow,deny +Deny from all + \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/tpl/tpl_browser.php b/protected/extensions/ckeditor/kcfinder/tpl/tpl_browser.php new file mode 100644 index 0000000..2838e4e --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/tpl/tpl_browser.php @@ -0,0 +1,86 @@ + + + +KCFinder: /<?php echo $this->session['dir'] ?> + + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
     
    +
    + + diff --git a/protected/extensions/ckeditor/kcfinder/tpl/tpl_css.php b/protected/extensions/ckeditor/kcfinder/tpl/tpl_css.php new file mode 100644 index 0000000..6ad453d --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/tpl/tpl_css.php @@ -0,0 +1,2 @@ + + diff --git a/protected/extensions/ckeditor/kcfinder/tpl/tpl_javascript.php b/protected/extensions/ckeditor/kcfinder/tpl/tpl_javascript.php new file mode 100644 index 0000000..0d8aeaa --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/tpl/tpl_javascript.php @@ -0,0 +1,45 @@ + + + + + + +opener['TinyMCE']) && $this->opener['TinyMCE']): ?> + + +config['theme']}/init.js")): ?> + + + diff --git a/protected/extensions/ckeditor/kcfinder/upload.php b/protected/extensions/ckeditor/kcfinder/upload.php new file mode 100644 index 0000000..2bdcbcd --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/upload.php @@ -0,0 +1,19 @@ + + * @copyright 2010, 2011 KCFinder Project + * @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2 + * @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2 + * @link http://kcfinder.sunhater.com + */ + +require "core/autoload.php"; +$uploader = new uploader(); +$uploader->upload(); + +?> \ No newline at end of file diff --git a/protected/extensions/ckeditor/kcfinder/upload/.htaccess b/protected/extensions/ckeditor/kcfinder/upload/.htaccess new file mode 100644 index 0000000..33c697e --- /dev/null +++ b/protected/extensions/ckeditor/kcfinder/upload/.htaccess @@ -0,0 +1,6 @@ + + php_value engine off + + + php_value engine off + diff --git a/protected/extensions/elfinder/ElFinderConnectorAction.php b/protected/extensions/elfinder/ElFinderConnectorAction.php index 2f0ceee..f512e1c 100644 --- a/protected/extensions/elfinder/ElFinderConnectorAction.php +++ b/protected/extensions/elfinder/ElFinderConnectorAction.php @@ -9,9 +9,34 @@ class ElFinderConnectorAction extends CAction public function run() { - require_once(dirname(__FILE__) . '/php/elFinder.class.php'); - $fm = new elFinder($this->settings); - $fm->run(); + $elFinderPath = Yii::getPathOfAlias('ext.elfinder'); + + + include_once $elFinderPath.'/php/elFinderConnector.class.php'; + include_once $elFinderPath.'/php/elFinder.class.php'; + include_once $elFinderPath.'/php/elFinderVolumeDriver.class.php'; + include_once $elFinderPath.'/php/elFinderVolumeLocalFileSystem.class.php'; + // Required for MySQL storage connector + // include_once dirname(__FILE__).DIRECTORY_SEPARATOR.'elFinderVolumeMySQL.class.php'; + // Required for FTP connector support + // include_once dirname(__FILE__).DIRECTORY_SEPARATOR.'elFinderVolumeFTP.class.php'; + + + + + // Documentation for connector options: + // https://github.com/Studio-42/elFinder/wiki/Connector-configuration-options + $opts = array( + 'debug' => true, + 'roots' => array( + $this->settings + ) + ); + + + // run elFinder + $connector = new elFinderConnector(new elFinder($opts)); + $connector->run(); } } diff --git a/protected/extensions/elfinder/ServerFileInput.php b/protected/extensions/elfinder/ServerFileInput.php index f8c6368..5b80fff 100644 --- a/protected/extensions/elfinder/ServerFileInput.php +++ b/protected/extensions/elfinder/ServerFileInput.php @@ -28,7 +28,8 @@ public function init() // $cs->registerScriptFile('http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.21/jquery-ui.min.js'); // elFinder CSS - $cs->registerCssFile($this->assetsDir . '/css/elfinder.css'); + $cs->registerCssFile($this->assetsDir . '/css/elfinder.full.css'); + $cs->registerCssFile($this->assetsDir . '/css/theme.css'); // elFinder JS if (YII_DEBUG) { @@ -103,7 +104,9 @@ public function run() $settings = array_merge(array( 'places' => "", - 'rememberLastDir' => false,), + 'rememberLastDir' => false, + 'resizable' => false, + ), $this->settings ); @@ -113,32 +116,38 @@ public function run() 'modal' => true, 'title' => "Files", ); - $settings['editorCallback'] = 'js:function(url) { - $(\'#\'+aFieldId).attr(\'value\',url); - $(\'#\'+aFieldId+\'_image\').attr(\'src\',url).show(); + $settings['getFileCallback'] = 'js:function(data) { + var url = data["url"]; + $(\'#'.$id.'\').attr(\'value\',url); + $(\'#'.$id.'_image\').attr(\'src\',url).show(); + $("#elFinderBrowser_'.$id.'").dialog("close"); + $("#elFinderBrowser_'.$id.'").elfinder("destroy"); }'; $settings['closeOnEditorCallback'] = true; $connectorUrl = CJavaScript::encode($this->settings['url']); $settings = CJavaScript::encode($settings); $script = <<").attr("id", "elFinderBrowser")); - var settings = $settings; - settings["url"] = connector; - $("#elFinderBrowser").elfinder(settings); + window.elfinderBrowse = function(field_id, connector, settings) { + var aFieldId = field_id, aWin = this; + if($("#elFinderBrowser").length == 0) { + + $("body").append($("
    ").attr("id", "elFinderBrowser_"+aFieldId)); + $( "#elFinderBrowser_"+aFieldId ).dialog({ minWidth: 1000, minHeight: 600, resizable: true }); + + settings["url"] = connector; + $("#elFinderBrowser_"+aFieldId).elfinder(settings); + } + else { + $("#elFinderBrowser_"+aFieldId).dialog('open'); + $("#elFinderBrowser_"+aFieldId).elfinder("open", connector); + } } - else { - $("#elFinderBrowser").elfinder("open", connector); - } - } EOD; $cs = Yii::app()->getClientScript(); $cs->registerScript('ServerFileInput#global', $script); $js = //'$("#'.$id.'").focus(function(){window.elfinderBrowse("'.$name.'")});'. - '$("#' . $id . 'browse").click(function(){window.elfinderBrowse("' . $id . '", '.$connectorUrl.')});'; + '$("#' . $id . 'browse").click(function(){window.elfinderBrowse("' . $id . '", '.$connectorUrl.', '.$settings.')});'; $cs->registerScript('ServerFileInput#' . $id, $js); diff --git a/protected/extensions/elfinder/assets/css/elfinder.full.css b/protected/extensions/elfinder/assets/css/elfinder.full.css new file mode 100644 index 0000000..c3fb931 --- /dev/null +++ b/protected/extensions/elfinder/assets/css/elfinder.full.css @@ -0,0 +1,1669 @@ +/*! + * elFinder - file manager for web + * Version 2.x (Nightly: 8f9f39a) (2015-09-28) + * http://elfinder.org + * + * Copyright 2009-2015, Studio 42 + * Licensed under a 3 clauses BSD license + */ + +/* File: /css/commands.css */ +/******************************************************************/ +/* COMMANDS STYLES */ +/******************************************************************/ + +/********************** COMMAND "RESIZE" ****************************/ +.elfinder-dialog-resize { margin-top:.3em; } +.elfinder-resize-type { float:left; margin-bottom: .4em; } +.elfinder-resize-control { padding-top:3em; } +.elfinder-resize-control input[type=text] { border:1px solid #aaa; text-align: right; } +.elfinder-resize-preview { + width:400px; + height:400px; + padding:10px; + background:#fff; + border:1px solid #aaa; + float:right; + position:relative; + overflow:auto; +/* z-index:100;*/ +} + +.elfinder-resize-handle { position:relative;} + +.elfinder-resize-handle-hline, +.elfinder-resize-handle-vline { + position:absolute; + background-image:url("../img/crop.gif"); +} + +.elfinder-resize-handle-hline { + width:100%; + height:1px !important; + background-repeat:repeat-x; +} +.elfinder-resize-handle-vline { + width:1px !important; + height:100%; + background-repeat:repeat-y; +} + +.elfinder-resize-handle-hline-top { top:0; left:0; } +.elfinder-resize-handle-hline-bottom { bottom:0; left:0; } +.elfinder-resize-handle-vline-left { top:0; left:0; } +.elfinder-resize-handle-vline-right { top:0; right:0; } + +.elfinder-resize-handle-point { + position:absolute; + width:8px; + height:8px; + border:1px solid #777; + background:transparent; +} + +.elfinder-resize-handle-point-n { + top:0; + left:50%; + margin-top:-5px; + margin-left:-5px; +} +.elfinder-resize-handle-point-ne { + top:0; + right:0; + margin-top:-5px; + margin-right:-5px; +} +.elfinder-resize-handle-point-e { + top:50%; + right:0; + margin-top:-5px; + margin-right:-5px; +} +.elfinder-resize-handle-point-se { + bottom:0; + right:0; + margin-bottom:-5px; + margin-right:-5px; +} +.elfinder-resize-handle-point-s { + bottom:0; + left:50%; + margin-bottom:-5px; + margin-left:-5px; +} +.elfinder-resize-handle-point-sw { + bottom:0; + left:0; + margin-bottom:-5px; + margin-left:-5px; +} +.elfinder-resize-handle-point-w { + top:50%; + left:0; + margin-top:-5px; + margin-left:-5px; +} +.elfinder-resize-handle-point-nw { + top:0; + left:0; + margin-top:-5px; + margin-left:-5px; +} + +.elfinder-resize-spinner { + position:absolute; + width:200px; + height:30px; + top:50%; + margin-top:-25px; + left:50%; + margin-left:-100px; + text-align:center; + background:url(../img/progress.gif) center bottom repeat-x; +} + +.elfinder-resize-row { margin-bottom:7px; position:relative;} + +.elfinder-resize-label { float:left; width:80px; padding-top: 3px; } + +.elfinder-resize-reset { + width:16px; + height:16px; +/* border:1px solid #111;*/ + position:absolute; + margin-top:-8px; +} + +.elfinder-dialog .elfinder-dialog-resize .ui-resizable-e { height:100%; width:10px; } +.elfinder-dialog .elfinder-dialog-resize .ui-resizable-s { width:100%; height:10px; } +.elfinder-dialog .elfinder-dialog-resize .ui-resizable-se { + background:transparent; + bottom:0; + right:0; + margin-right:-7px; + margin-bottom:-7px; +} + +.elfinder-dialog-resize .ui-icon-grip-solid-vertical { + position:absolute; + top:50%; + right:0; + margin-top:-8px; + margin-right:-11px; +} +.elfinder-dialog-resize .ui-icon-grip-solid-horizontal { + position:absolute; + left:50%; + bottom:0; + margin-left:-8px; + margin-bottom:-11px;; +} + +.elfinder-resize-row .elfinder-buttonset { float:right; } + +.elfinder-resize-rotate-slider { + float: left; + width: 195px; + margin: 7px 7px 0; +} + +/********************** COMMAND "EDIT" ****************************/ +/* edit text file textarea */ +.elfinder-file-edit { + width:99%; + height:99%; + margin:0; + padding:2px; + border:1px solid #ccc; +} + +/********************** COMMAND "SORT" ****************************/ +/* for list table header sort triangle icon */ +div.elfinder-cwd-wrapper-list tr.ui-state-default td { + position: relative; +} +div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon { + position: absolute; + top: -5px; + left: 0; + right: 0; + margin: auto; +} + + +/********************** COMMAND "HELP" ****************************/ +/* help dialog */ +.elfinder-help { margin-bottom:.5em; } + +/* fix tabs */ +.elfinder-help .ui-tabs-panel { padding:.5em; } +.elfinder-dialog .ui-tabs .ui-tabs-nav li a { padding:.2em 1em;} + +.elfinder-help-shortcuts { + height:300px; + padding:1em; + margin:.5em 0; + overflow:auto; +} +.elfinder-help-shortcut { white-space:nowrap; clear:both;} + +.elfinder-help-shortcut-pattern { float:left; width:160px;} + +.elfinder-help-logo { + width:100px; + height:96px; + float:left; + margin-right:1em; + background:url('../img/logo.png') center center no-repeat; +} + +.elfinder-help h3 { font-size:1.5em; margin:.2em 0 .3em 0; } + +.elfinder-help-separator { clear:both; padding:.5em; } + +.elfinder-help-link { padding:2px; } + +.elfinder-help .ui-priority-secondary { font-size:.9em;} + +.elfinder-help .ui-priority-primary { margin-bottom:7px;} + +.elfinder-help-team { + clear: both; + text-align:right; + border-bottom:1px solid #ccc; + margin:.5em 0; + font-size:.9em; +} + +.elfinder-help-team div { float:left; } +.elfinder-help-license { font-size:.9em;} + +.elfinder-help-disabled { + font-weight:bold; + text-align:center; + margin:90px 0; +} + +.elfinder-help .elfinder-dont-panic { + display:block; + border:1px solid transparent; + width:200px; + height:200px; + margin:30px auto; + text-decoration:none; + text-align:center; + position:relative; + background:#d90004; + -moz-box-shadow: 5px 5px 9px #111; + -webkit-box-shadow: 5px 5px 9px #111; + box-shadow: 5px 5px 9px #111; + background: -moz-radial-gradient(80px 80px, circle farthest-corner, #d90004 35%, #960004 100%); + background: -webkit-gradient(radial, 80 80, 60, 80 80, 120, from(#d90004), to(#960004)); + -moz-border-radius: 100px; + -webkit-border-radius: 100px; + border-radius: 100px; + outline:none; +} + +.elfinder-help .elfinder-dont-panic span { + font-size:3em; + font-weight:bold; + text-align:center; + color:#fff; + position:absolute; + left:0; + top:45px; +} + + + + +/* File: /css/common.css */ +/*********************************************/ +/* COMMON ELFINDER STUFFS */ +/*********************************************/ + +/* common container */ +.elfinder { padding:0; position:relative; display:block; } + +.ui-dialog .ui-dialog-content.elfinder { overflow-y: hidden; } + +/* right to left enviroment */ +.elfinder-rtl { text-align:right; direction:rtl; } + +/* nav and cwd container */ +.elfinder-workzone { + padding: 0; + position:relative; + overflow:hidden; +} + +/* dir/file permissions and symlink markers */ +.elfinder-perms, +.elfinder-symlink { + position:absolute; + width:16px; + height:16px; + background-image:url(../img/toolbar.png); + background-repeat:no-repeat; + background-position:0 -528px; +} + +.elfinder-symlink { } + +/* noaccess */ +.elfinder-na .elfinder-perms { background-position:0 -96px; } + +/* read only */ +.elfinder-ro .elfinder-perms { background-position:0 -64px;} + +/* write only */ +.elfinder-wo .elfinder-perms { background-position:0 -80px;} + +/* drag helper */ +.elfinder-drag-helper { + width:60px; + height:50px; + padding:0 0 0 25px; + z-index:100000; +} + +/* drag helper "plus" icon */ +.elfinder-drag-helper-icon-plus { + position:absolute; + width:16px; + height:16px; + left:43px; + top:55px; + background:url('../img/toolbar.png') 0 -544px no-repeat; + display:none; +} + +/* show "plus" icon when ctrl/shift pressed */ +.elfinder-drag-helper-plus .elfinder-drag-helper-icon-plus { display:block; } + +/* files num in drag helper */ +.elfinder-drag-num { + position:absolute; + top:0; + left:0; + width:16px; + height:14px; + text-align:center; + padding-top:2px; + + font-weight:bold; + color:#fff; + background-color:red; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; +} + +/* icon in drag helper */ +.elfinder-drag-helper .elfinder-cwd-icon { margin:0 0 0 -24px; float:left; } + +/* transparent overlay >_< */ +.elfinder-overlay { opacity: 0; filter:Alpha(Opacity=0); } + +/* panels under/below cwd (for search field etc) */ +.elfinder .elfinder-panel { + position:relative; + background-image:none; + padding:7px 12px; +} + + + + + + +/* File: /css/contextmenu.css */ +/* menu and submenu */ +.elfinder-contextmenu, +.elfinder-contextmenu-sub { + display:none; + position:absolute; + border:1px solid #aaa; + background:#fff; + color:#555; + padding:4px 0; +} + +/* submenu */ +.elfinder-contextmenu-sub { top:5px; } +/* submenu in rtl/ltr enviroment */ +.elfinder-contextmenu-ltr .elfinder-contextmenu-sub { margin-left:-5px; } +.elfinder-contextmenu-rtl .elfinder-contextmenu-sub { margin-right:-5px; } + +/* menu item */ +.elfinder-contextmenu-item { + position:relative; + display:block; + padding:4px 30px; + text-decoration:none; + white-space:nowrap; + cursor:default; +} +.elfinder-contextmenu-item .ui-icon { + width:16px; + height:16px; + position:absolute; + left:2px; + top:50%; + margin-top:-8px; + display:none; +} + +/* text in item */ +.elfinder-contextmenu .elfinder-contextmenu-item span { display:block; } + + + +/* submenu item in rtl/ltr enviroment */ +.elfinder-contextmenu-ltr .elfinder-contextmenu-item { text-align:left; } +.elfinder-contextmenu-rtl .elfinder-contextmenu-item { text-align:right; } +.elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextmenu-item { padding-left:12px; } +.elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextmenu-item { padding-right:12px; } + +/* command/submenu icon */ +.elfinder-contextmenu-arrow, +.elfinder-contextmenu-icon { + position:absolute; + top:50%; + margin-top:-8px; +} + +/* command icon in rtl/ltr enviroment */ +.elfinder-contextmenu-ltr .elfinder-contextmenu-icon { left:8px; } +.elfinder-contextmenu-rtl .elfinder-contextmenu-icon { right:8px; } + +/* arrow icon */ +.elfinder-contextmenu-arrow { + width:16px; + height:16px; + background:url('../img/arrows-normal.png') 5px 4px no-repeat; +} + +/* arrow icon in rtl/ltr enviroment */ +.elfinder-contextmenu-ltr .elfinder-contextmenu-arrow { right:5px; } +.elfinder-contextmenu-rtl .elfinder-contextmenu-arrow { left:5px; background-position: 0 -10px; } + +/* disable ui border/bg image on hover */ +.elfinder-contextmenu .ui-state-hover { border:0 solid; background-image:none;} + +/* separator */ +.elfinder-contextmenu-separator { + height:0px; + border-top:1px solid #ccc; + margin:0 1px; +} + +/* File: /css/cwd.css */ +/******************************************************************/ +/* CURRENT DIRECTORY STYLES */ +/******************************************************************/ +/* cwd container to avoid selectable on scrollbar */ +.elfinder-cwd-wrapper { + overflow: auto; + position:relative; + padding:2px; + margin:0; +} + +.elfinder-cwd-wrapper-list { padding:0; } + +/* container */ +.elfinder-cwd { + position:relative; + cursor:default; + padding:0; + margin:0; + -ms-touch-action: auto; + touch-action: auto; + -moz-user-select: -moz-none; + -khtml-user-select: none; + -webkit-user-select: none; + user-select: none; + -webkit-tap-highlight-color:rgba(0,0,0,0); +} + +/* container active on dropenter */ +.elfinder .elfinder-cwd-wrapper.elfinder-droppable-active { + padding:0; + border:2px solid #8cafed; +} + + +/************************** ICONS VIEW ********************************/ + +/* file container */ +.elfinder-cwd-view-icons .elfinder-cwd-file { + width:120px; + height:80px; + padding-bottom:2px; + cursor:default; + border:1px solid #fff; +/* overflow:hidden;*/ +/* position:relative;*/ +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file { float:left; margin:0 3px 12px 0; } +.elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file { float:right; margin:0 0 5px 3px; } + +/* remove ui hover class border */ +.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover { border:0 solid; } + +/* icon wrapper to create selected highlight around icon */ +.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper { + width:52px; + height:52px; + margin:1px auto 1px auto; + padding:2px; + position:relative; +} + +/* file name place */ +.elfinder-cwd-view-icons .elfinder-cwd-filename { + text-align:center; + white-space:pre; + overflow:hidden; + text-overflow:ellipsis; + -o-text-overflow:ellipsis; + margin:3px 1px 0 1px; + padding:1px; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; +} + +/* permissions/symlink markers */ +.elfinder-cwd-view-icons .elfinder-perms { bottom:4px; right:2px; } +.elfinder-cwd-view-icons .elfinder-symlink { bottom:6px; left:0px; } + +/* icon/thumbnail */ +.elfinder-cwd-icon { + display:block; + width:48px; + height:48px; + margin:0 auto; + background: url('../img/icons-big.png') 0 0 no-repeat; + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; +} + +/* "opened folder" icon on dragover */ +.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon { background-position: 0 -100px; } + +/* mimetypes icons */ +.elfinder-cwd-icon-directory { background-position:0 -50px; } +.elfinder-cwd-icon-application { background-position:0 -150px; } +.elfinder-cwd-icon-x-empty, +.elfinder-cwd-icon-text { background-position:0 -200px; } +.elfinder-cwd-icon-image, +.elfinder-cwd-icon-vnd-adobe-photoshop, +.elfinder-cwd-icon-postscript { background-position:0 -250px; } +.elfinder-cwd-icon-audio { background-position:0 -300px; } +.elfinder-cwd-icon-video, +.elfinder-cwd-icon-flash-video { background-position:0 -350px; } +.elfinder-cwd-icon-rtf, +.elfinder-cwd-icon-rtfd { background-position: 0 -401px; } +.elfinder-cwd-icon-pdf { background-position: 0 -450px; } +.elfinder-cwd-icon-ms-excel, +.elfinder-cwd-icon-msword, +.elfinder-cwd-icon-vnd-ms-excel, +.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-office, +.elfinder-cwd-icon-vnd-ms-powerpoint, +.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-word, +.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12, +.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12, +.elfinder-cwd-icon-vnd-oasis-opendocument-chart, +.elfinder-cwd-icon-vnd-oasis-opendocument-database, +.elfinder-cwd-icon-vnd-oasis-opendocument-formula, +.elfinder-cwd-icon-vnd-oasis-opendocument-graphics, +.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template, +.elfinder-cwd-icon-vnd-oasis-opendocument-image, +.elfinder-cwd-icon-vnd-oasis-opendocument-presentation, +.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template, +.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet, +.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template, +.elfinder-cwd-icon-vnd-oasis-opendocument-text, +.elfinder-cwd-icon-vnd-oasis-opendocument-text-master, +.elfinder-cwd-icon-vnd-oasis-opendocument-text-template, +.elfinder-cwd-icon-vnd-oasis-opendocument-text-web, +.elfinder-cwd-icon-vnd-openofficeorg-extension, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document, +.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template { background-position: 0 -500px; } +.elfinder-cwd-icon-html { background-position: 0 -550px; } +.elfinder-cwd-icon-css { background-position: 0 -600px; } +.elfinder-cwd-icon-javascript, +.elfinder-cwd-icon-x-javascript { background-position: 0 -650px; } +.elfinder-cwd-icon-x-perl { background-position: 0 -700px; } +.elfinder-cwd-icon-x-python { background-position: 0 -750px; } +.elfinder-cwd-icon-x-ruby { background-position: 0 -800px; } +.elfinder-cwd-icon-x-sh, +.elfinder-cwd-icon-x-shellscript { background-position: 0 -850px; } +.elfinder-cwd-icon-x-c, +.elfinder-cwd-icon-x-csrc, +.elfinder-cwd-icon-x-chdr, +.elfinder-cwd-icon-x-c--, +.elfinder-cwd-icon-x-c--src, +.elfinder-cwd-icon-x-c--hdr, +.elfinder-cwd-icon-x-java, +.elfinder-cwd-icon-x-java-source { background-position: 0 -900px; } +.elfinder-cwd-icon-x-php { background-position: 0 -950px; } +.elfinder-cwd-icon-xml { background-position: 0 -1000px; } +.elfinder-cwd-icon-zip, +.elfinder-cwd-icon-x-zip, +.elfinder-cwd-icon-x-xz, +.elfinder-cwd-icon-x-7z-compressed { background-position: 0 -1050px; } +.elfinder-cwd-icon-x-gzip, +.elfinder-cwd-icon-x-tar { background-position: 0 -1100px; } +.elfinder-cwd-icon-x-bzip, +.elfinder-cwd-icon-x-bzip2 { background-position: 0 -1150px; } +.elfinder-cwd-icon-x-rar, +.elfinder-cwd-icon-x-rar-compressed { background-position: 0 -1200px; } +.elfinder-cwd-icon-x-shockwave-flash { background-position: 0 -1250px; } +.elfinder-cwd-icon-group { background-position:0 -1300px;} + +/* textfield inside icon */ +.elfinder-cwd input { width:100%; border:0px solid; margin:0; padding:0; } +.elfinder-cwd-view-icons input {text-align:center; } + +.elfinder-cwd-view-icons { text-align:center; } + + +/************************************ LIST VIEW ************************************/ + +/*.elfinder-cwd-view-list { padding:0 0 4px 0; }*/ + +.elfinder-cwd table { + width: 100%; + border-collapse: separate; + border: 0 solid; + margin: 0 0 10px 0; + border-spacing: 0; +} +.elfinder .elfinder-cwd table thead tr { border-left:0 solid; border-top:0 solid; border-right:0 solid; } + +.elfinder .elfinder-cwd table td { + padding:4px 12px; + white-space:pre; + overflow:hidden; + text-align:right; + cursor:default; + border:0 solid; + +} + +.elfinder-ltr .elfinder-cwd table td { text-align:right; } +.elfinder-ltr .elfinder-cwd table td:first-child { text-align:left; } +.elfinder-rtl .elfinder-cwd table td { text-align:left; } +.elfinder-rtl .elfinder-cwd table td:first-child { text-align:right; } + +.elfinder-odd-row { background:#eee; } + +/* filename container */ +.elfinder-cwd-view-list .elfinder-cwd-file-wrapper { width:97%; position:relative; } +/* filename container in ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-file-wrapper { padding-left:23px; } +.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-file-wrapper { padding-right:23px; } + +/* premissions/symlink marker */ +.elfinder-cwd-view-list .elfinder-perms, +.elfinder-cwd-view-list .elfinder-symlink { top:50%; margin-top:-6px; } +/* markers in ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms { left:7px; } +.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink { left:-7px; } + +/* file icon */ +.elfinder-cwd-view-list td .elfinder-cwd-icon { + width:16px; + height:16px; + position:absolute; + top:50%; + margin-top:-8px; + background-image:url(../img/icons-small.png); +} +/* icon in ltr/rtl enviroment */ +.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon { left:0; } +.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon { right:0; } + + + +/* File: /css/dialog.css */ +/*********************************************/ +/* DIALOGS STYLES */ +/*********************************************/ + +/* common dialogs class */ +.std42-dialog { + padding:0; + position:absolute; + left:auto; + right:auto; +} + +/* titlebar */ +.std42-dialog .ui-dialog-titlebar { + border-left:0 solid transparent; + border-top:0 solid transparent; + border-right:0 solid transparent; + -moz-border-radius-bottomleft: 0; + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomright: 0; + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + font-weight:normal; + padding:.2em 1em; +} + +.std42-dialog .ui-dialog-titlebar-close, +.std42-dialog .ui-dialog-titlebar-close:hover { padding:1px; } + +.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar { text-align:right; } +.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close { right:auto; left:.3em; } + +/* content */ +.std42-dialog .ui-dialog-content { + padding:.3em .5em; +} + +/* buttons */ +.std42-dialog .ui-dialog-buttonpane { + border:0 solid; + margin:0; + padding:.5em .7em; +} + +.std42-dialog .ui-dialog-buttonpane button { margin:0 0 0 .4em; padding:0; outline:0px solid; } +.std42-dialog .ui-dialog-buttonpane button span { padding:2px 9px; } + +.elfinder-dialog .ui-resizable-e, +.elfinder-dialog .ui-resizable-s { width:0; height:0;} + +.std42-dialog .ui-button input { cursor: pointer;} + +/* error/notify/confirm dialogs icon */ +.elfinder-dialog-icon { + position:absolute; + width:32px; + height:32px; + left:12px; + top:50%; + margin-top:-15px; + background:url("../img/dialogs.png") 0 0 no-repeat; +} + +.elfinder-rtl .elfinder-dialog-icon { left:auto; right:12px;} + + + +/*********************** ERROR DIALOG **************************/ + +.elfinder-dialog-error .ui-dialog-content, +.elfinder-dialog-confirm .ui-dialog-content { padding-left: 56px; min-height:35px; } + +.elfinder-rtl .elfinder-dialog-error .ui-dialog-content, +.elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content { padding-left:0; padding-right: 56px; } + +/*********************** NOTIFY DIALOG **************************/ + +.elfinder-dialog-notify .ui-dialog-titlebar-close { display:none; } +.elfinder-dialog-notify .ui-dialog-content { padding:0; } + +/* one notification container */ +.elfinder-notify { + border-bottom:1px solid #ccc; + position:relative; + padding:.5em; + + text-align:center; + overflow:hidden; +} + +.elfinder-ltr .elfinder-notify { padding-left:30px; } +.elfinder-rtl .elfinder-notify { padding-right:30px; } + +.elfinder-notify:last-child { border:0 solid; } + +/* progressbar */ +.elfinder-notify-progressbar { + width:180px; + height:8px; + border:1px solid #aaa; + background:#f5f5f5; + margin:5px auto; + overflow:hidden; +} + +.elfinder-notify-progress { + width:100%; + height:8px; + background:url(../img/progress.gif) center center repeat-x; +} + +.elfinder-notify-progressbar, .elfinder-notify-progress { + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + border-radius: 2px; +} + +/* icons */ +.elfinder-dialog-icon-open, +.elfinder-dialog-icon-file { background-position: 0 -225px; } +.elfinder-dialog-icon-reload { background-position: 0 -225px; } +.elfinder-dialog-icon-mkdir { background-position: 0 -64px; } +.elfinder-dialog-icon-mkfile { background-position: 0 -96px; } +.elfinder-dialog-icon-copy, +.elfinder-dialog-icon-prepare, +.elfinder-dialog-icon-move { background-position: 0 -128px;} +.elfinder-dialog-icon-upload { background-position: 0 -160px; } +.elfinder-dialog-icon-rm { background-position: 0 -192px; } +.elfinder-dialog-icon-download { background-position: 0 -260px; } +.elfinder-dialog-icon-save { background-position: 0 -295px; } +.elfinder-dialog-icon-rename { background-position: 0 -330px; } +.elfinder-dialog-icon-archive, +.elfinder-dialog-icon-extract { background-position: 0 -365px; } +.elfinder-dialog-icon-search { background-position: 0 -402px; } +.elfinder-dialog-icon-resize, +.elfinder-dialog-icon-loadimg, +.elfinder-dialog-icon-netmount, +.elfinder-dialog-icon-netunmount, +.elfinder-dialog-icon-dim { background-position: 0 -434px; } + +/*********************** CONFIRM DIALOG **************************/ + +.elfinder-dialog-confirm-applyall { padding-top:3px; } + +.elfinder-dialog-confirm .elfinder-dialog-icon { background-position:0 -32px; } + + + +/*********************** FILE INFO DIALOG **************************/ + + +.elfinder-info-title .elfinder-cwd-icon { + float:left; + width:48px; + height:48px; + margin-right:1em; +} + +.elfinder-info-title strong { display:block; padding:.3em 0 .5em 0; } + +.elfinder-info-tb { + min-width:200px; + border:0 solid; + margin:1em .2em 1em .2em; +} + +.elfinder-info-tb td { white-space:nowrap; padding:2px; } + +.elfinder-info-tb tr td:first-child { text-align:right; } + +.elfinder-info-tb span { float:left;} +.elfinder-info-tb a { outline: none; text-decoration:underline; } +.elfinder-info-tb a:hover { text-decoration:none; } +.elfinder-info-spinner { + width:14px; + height:14px; + float:left; + background: url("../img/spinner-mini.gif") center center no-repeat; + margin:0 5px; +} + +.elfinder-netmount-tb { margin:0 auto; } +.elfinder-netmount-tb input { border:1px solid #ccc; } +/*********************** UPLOAD DIALOG **************************/ + +.elfinder-upload-dropbox { + text-align:center; + padding:2em 0; + border:3px dashed #aaa; +} + +.elfinder-upload-dropbox.ui-state-hover { + background:#dfdfdf; + border:3px dashed #555; +} + +.elfinder-upload-dialog-or { + margin:.3em 0; + text-align:center; +} + +.elfinder-upload-dialog-wrapper { text-align:center; } + +.elfinder-upload-dialog-wrapper .ui-button { position:relative; overflow:hidden; } + +.elfinder-upload-dialog-wrapper .ui-button form { + position:absolute; + right:0; + top:0; + opacity: 0; filter:Alpha(Opacity=0); +} + +.elfinder-upload-dialog-wrapper .ui-button form input { + padding:0 20px; + font-size:3em; + +} + + +/* dialog for elFinder itself */ +.dialogelfinder .dialogelfinder-drag { + border-left:0 solid; + border-top:0 solid; + border-right:0 solid; + font-weight:normal; + padding:2px 12px; + cursor:move; + position:relative; + text-align:left; +} + +.elfinder-rtl .dialogelfinder-drag { text-align:right;} + +.dialogelfinder-drag-close { + position: absolute; + top:50%; + margin-top:-8px; +} + +.elfinder-ltr .dialogelfinder-drag-close { right:12px; } +.elfinder-rtl .dialogelfinder-drag-close { left:12px; } + + + +/* File: /css/fonts.css */ +.elfinder-contextmenu .elfinder-contextmenu-item span { font-size:.76em; } + +.elfinder-cwd-view-icons .elfinder-cwd-filename { font-size:.7em; } +.elfinder-cwd-view-list td { font-size:.7em; } + +.std42-dialog .ui-dialog-titlebar { font-size:.82em; } +.std42-dialog .ui-dialog-content { font-size:.72em; } +.std42-dialog .ui-dialog-buttonpane { font-size:.76em; } +.elfinder-info-tb { font-size:.9em; } +.elfinder-upload-dropbox { font-size:1.2em; } +.elfinder-upload-dialog-or { font-size:1.2em; } +.dialogelfinder .dialogelfinder-drag { font-size:.9em; } +.elfinder .elfinder-navbar { font-size:.72em; } +.elfinder-place-drag .elfinder-navbar-dir { font-size:.9em;} +.elfinder-quicklook-title { font-size:.7em; } +.elfinder-quicklook-info-data { font-size:.72em; } +.elfinder-quicklook-preview-text-wrapper { font-size:.9em; } +.elfinder-button-menu-item { font-size:.72em; } +.elfinder-button-search input { font-size:.8em; } +.elfinder-statusbar div { font-size:.7em; } +.elfinder-drag-num { font-size:12px; } + + +/* File: /css/navbar.css */ +/*********************************************/ +/* NAVIGATION PANEL */ +/*********************************************/ + +/* container */ +.elfinder .elfinder-navbar { + width:230px; + padding:3px 5px; + background-image:none; + border-top:0 solid; + border-bottom:0 solid; + overflow:auto; + display:none; + position:relative; + -moz-user-select: none; + -khtml-user-select: none; + -webkit-user-select: none; + user-select: none; + -webkit-tap-highlight-color:rgba(0,0,0,0); +/* border:1px solid #111;*/ +} + + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar { float:left; border-left:0 solid; } +.elfinder-rtl .elfinder-navbar { float:right; border-right:0 solid; } +.elfinder-ltr .ui-resizable-e { margin-left:10px; } + +/* folders tree container */ +.elfinder-tree { + display:table; width:100%; margin: 0 0 .5em 0; + -webkit-tap-highlight-color:rgba(0,0,0,0); +} + +/* one folder wrapper */ +.elfinder-navbar-wrapper, .elfinder-place-wrapper { } + +/* folder */ +.elfinder-navbar-dir { + position:relative; + display:block; + white-space:nowrap; + padding:3px 12px; + margin: 0; + outline:0px solid; + border:1px solid transparent; + cursor:default; + +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-dir { padding-left:35px; } +.elfinder-rtl .elfinder-navbar-dir { padding-right:35px; } + +/* arrow before icon */ +.elfinder-navbar-arrow { + width:12px; + height:14px; + position:absolute; + display:none; + top:50%; + margin-top:-8px; + background-image:url("../img/arrows-normal.png"); + background-repeat:no-repeat; +/* border:1px solid #111;*/ +} + +.ui-state-active .elfinder-navbar-arrow { background-image:url("../img/arrows-active.png"); } + +/* collapsed/expanded arrow view */ +.elfinder-navbar-collapsed .elfinder-navbar-arrow { display:block; } + +/* arrow ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow { background-position: 0 4px; left:0; } +.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow { background-position: 0 -10px; right:0; } +.elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow, +.elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow { background-position:0 -21px; } + + +/* folder icon */ +.elfinder-navbar-icon { + width:16px; + height:16px; + position:absolute; + top:50%; + margin-top:-8px; + background-image:url("../img/toolbar.png"); + background-repeat:no-repeat; + background-position:0 -16px; +} + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-icon { left:14px; } +.elfinder-rtl .elfinder-navbar-icon { right:14px; } + +/* root folder */ +.elfinder-tree .elfinder-navbar-root .elfinder-navbar-icon { background-position:0 0; } +.elfinder-places .elfinder-navbar-root .elfinder-navbar-icon { background-position:0 -48px; } + +/* icon in active/hove/dropactive state */ +.ui-state-active .elfinder-navbar-icon, +.elfinder-droppable-active .elfinder-navbar-icon, +.ui-state-hover .elfinder-navbar-icon { background-position:0 -32px; } + +/* subdirs tree */ +.elfinder-navbar-subtree { display:none; } + +/* ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-subtree { margin-left:12px; } +.elfinder-rtl .elfinder-navbar-subtree { margin-right:12px; } + + +/* spinner */ +.elfinder-navbar-spinner { + width:14px; + height:14px; + position:absolute; + display:block; + top:50%; + margin-top:-7px; + background: url("../img/spinner-mini.gif") center center no-repeat; +} +/* spinner ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar-spinner { left:0; margin-left:-2px; } +.elfinder-rtl .elfinder-navbar-spinner { right:0; margin-right:-2px; } + +/* permissions marker */ +.elfinder-navbar .elfinder-perms { top:50%; margin-top:-8px; } + +/* permissions/symlink markers ltr/rtl enviroment */ +.elfinder-ltr .elfinder-navbar .elfinder-perms { left: 18px; } +.elfinder-rtl .elfinder-navbar .elfinder-perms { right: 18px; } +.elfinder-ltr .elfinder-navbar .elfinder-symlink { left: 8px; } +.elfinder-rtl .elfinder-navbar .elfinder-symlink { right: 8px; } + +/* resizable */ +.elfinder-navbar .ui-resizable-handle { width:12px; background:transparent url('../img/resize.png') center center no-repeat; left:0; } +.elfinder-nav-handle-icon { + position:absolute; + top:50%; + margin:-8px 2px 0 2px; + opacity: .5; filter:Alpha(Opacity=50); +} + +.elfinder-places { + border: none; + margin: 0; + padding: 0; +} +.elfinder-places.elfinder-droppable-active { + /*border:1px solid #8cafed;*/ +} + + + + + + + +/* File: /css/places.css */ + +/* File: /css/quicklook.css */ +/* quicklook window */ +.elfinder-quicklook { + position:absolute; + background:url("../img/quicklook-bg.png"); + display:none; + overflow:hidden; + border-radius:7px; + -moz-border-radius:7px; + -webkit-border-radius:7px; + padding:20px 0 40px 0; +} + +.elfinder-quicklook .ui-resizable-se { + width:14px; + height:14px; + right:5px; + bottom:3px; + background:url("../img/toolbar.png") 0 -496px no-repeat;} + +/* quicklook fullscreen window */ +.elfinder-quicklook-fullscreen { + border-radius:0; + -moz-border-radius:0; + -webkit-border-radius:0; + -webkit-background-clip: padding-box; +/* background-clip:padding-box;*/ + padding:0; + background:#000; + z-index:90000; + display:block; +} +/* hide titlebar in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar { display:none; } + +/* hide preview border in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-preview { border:0 solid ;} + +/* quicklook titlebar */ +.elfinder-quicklook-titlebar { + text-align:center; + background:#777; + position:absolute; + left:0; + top:0; + width:100%; + height:20px; + -moz-border-radius-topleft: 7px; + -webkit-border-top-left-radius: 7px; + border-top-left-radius: 7px; + -moz-border-radius-topright: 7px; + -webkit-border-top-right-radius: 7px; + border-top-right-radius: 7px; + cursor:move; +} + +/* window title */ +.elfinder-quicklook-title { + color:#fff; + white-space:nowrap; + overflow:hidden; + padding:2px 0; +} + +/* icon "close" in titlebar */ +.elfinder-quicklook-titlebar .ui-icon { + position:absolute; + left : 4px; + top:50%; + margin-top:-8px; + width:16px; + height:16px; + cursor:default; +} + +/* main part of quicklook window */ +.elfinder-quicklook-preview { + overflow:hidden; + position:relative; + border:0 solid; + border-left:1px solid transparent; + border-right:1px solid transparent; + height:100%; +} + +/* wrapper for file info/icon */ +.elfinder-quicklook-info-wrapper { + position:absolute; + width:100%; + left:0; + top:50%; + margin-top:-50px; +} + +/* file info */ +.elfinder-quicklook-info { + padding: 0 12px 0 112px; +} + +/* file name in info */ +.elfinder-quicklook-info .elfinder-quicklook-info-data:first-child { + color:#fff; + font-weight:bold; + padding-bottom:.5em; +} + +/* other data in info */ +.elfinder-quicklook-info-data { + padding-bottom:.2em; + color:#fff; +} + + +/* file icon */ +.elfinder-quicklook .elfinder-cwd-icon { + position:absolute; + left:32px; + top:50%; + margin-top:-20px; +} + +/* image in preview */ +.elfinder-quicklook-preview img { + display:block; + margin:0 auto; +} + +/* navigation bar on quicklook window bottom */ +.elfinder-quicklook-navbar { + position:absolute; + left:50%; + bottom:4px; + width:140px; + height:32px; + padding:0px; + margin-left:-70px; + border:1px solid transparent; + border-radius:19px; + -moz-border-radius:19px; + -webkit-border-radius:19px; +} + +/* navigation bar in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar { + width:188px; + margin-left:-94px; + padding:5px; + border:1px solid #eee; + background:#000; +} + +/* show close icon in fullscreen mode */ +.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close, +.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator { + display:inline; +} + +/* icons in navbar */ +.elfinder-quicklook-navbar-icon { + width:32px; + height:32px; + margin:0 7px; + float:left; + background:url("../img/quicklook-icons.png") 0 0 no-repeat; + +} + +/* fullscreen icon */ +.elfinder-quicklook-navbar-icon-fullscreen { + background-position:0 -64px; +} + +/* exit fullscreen icon */ +.elfinder-quicklook-navbar-icon-fullscreen-off { + background-position:0 -96px; +} + +/* prev file icon */ +.elfinder-quicklook-navbar-icon-prev { + background-position:0 0; +} + +/* next file icon */ +.elfinder-quicklook-navbar-icon-next { + background-position:0 -32px; +} + +/* close icon */ +.elfinder-quicklook-navbar-icon-close { + background-position:0 -128px; + display:none; +} + +/* icons separator */ +.elfinder-quicklook-navbar-separator { + width:1px; + height:32px; + float:left; + border-left:1px solid #fff; + display:none; +} + +/* text files preview wrapper */ +.elfinder-quicklook-preview-text-wrapper { + width: 100%; + height:100%; + background:#fff; + color:#222; + overflow:auto; +} + +/* text preview */ +pre.elfinder-quicklook-preview-text { + margin:0; + padding:3px 9px; +} + +/* html/pdf preview */ +.elfinder-quicklook-preview-html, +.elfinder-quicklook-preview-pdf { + width:100%; + height:100%; + background:#fff; + border:0 solid; + margin:0; +} + +/* swf preview container */ +.elfinder-quicklook-preview-flash { + width:100%; + height:100%; +} + +/* audio preview container */ +.elfinder-quicklook-preview-audio { + width:100%; + position:absolute; + bottom:0; + left:0; +} + +/* audio preview using embed */ +embed.elfinder-quicklook-preview-audio { + height:30px; + background:transparent; +} + +/* video preview container */ +.elfinder-quicklook-preview-video { + width:100%; + height:100%; +} + + + + + + + + + + + + + + +/* File: /css/statusbar.css */ +/******************************************************************/ +/* STATUSBAR STYLES */ +/******************************************************************/ + + +/* statusbar container */ +.elfinder-statusbar { + text-align:center; + font-weight:normal; + padding:.2em .5em; + + border-right:0 solid transparent; + border-bottom:0 solid transparent; + border-left:0 solid transparent; +} + +.elfinder-statusbar a { text-decoration:none; } + + + +/* path in statusbar */ +.elfinder-path { + max-width:30%; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + -o-text-overflow:ellipsis; +} +.elfinder-ltr .elfinder-path { float:left; } +.elfinder-rtl .elfinder-path { float:right; } + +/* total/selected size in statusbar */ +.elfinder-stat-size { white-space:nowrap; } +.elfinder-ltr .elfinder-stat-size { float:right; } +.elfinder-rtl .elfinder-stat-size { float:left; } + +.elfinder-stat-selected { white-space:nowrap; overflow:hidden; } + +/* File: /css/toolbar.css */ +/*********************************************/ +/* TOOLBAR STYLES */ +/*********************************************/ +/* toolbar container */ +.elfinder-toolbar { + padding:4px 0 3px 0; + border-left:0 solid transparent; + border-top:0 solid transparent; + border-right:0 solid transparent; +} + +/* container for button's group */ +.elfinder-buttonset { + margin: 1px 4px; + float:left; + background:transparent; + padding:0; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} + +/*.elfinder-buttonset:first-child { margin:0; }*/ + +/* button */ +.elfinder .elfinder-button { + width:16px; + height:16px; + margin:0; + padding:4px; + float:left; + overflow:hidden; + position:relative; + border:0 solid; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.elfinder .ui-icon-search { cursor:pointer;} + +.elfinder-button:first-child { + -moz-border-radius-topleft: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; +} + +.elfinder-button:last-child { + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-bottomright: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +/* separator between buttons, required for berder between button with ui color */ +.elfinder-toolbar-button-separator { + float:left; + padding:0; + height:24px; + border-top:0 solid; + border-right:0 solid; + border-bottom:0 solid; + width:0; +} + +/* change icon opacity^ not button */ +.elfinder .elfinder-button.ui-state-disabled { opacity:1; filter:Alpha(Opacity=100);} +.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon { opacity:.4; filter:Alpha(Opacity=40);} + +/* rtl enviroment */ +.elfinder-rtl .elfinder-buttonset { float:right; } + +/* icon inside button */ +.elfinder-button-icon { + width:16px; + height:16px; + display:block; + background:url('../img/toolbar.png') no-repeat; +} + +/* buttons icons */ +.elfinder-button-icon-home { background-position: 0 0; } +.elfinder-button-icon-back { background-position: 0 -112px; } +.elfinder-button-icon-forward { background-position: 0 -128px; } +.elfinder-button-icon-up { background-position: 0 -144px; } +.elfinder-button-icon-reload { background-position: 0 -160px; } +.elfinder-button-icon-open { background-position: 0 -176px; } +.elfinder-button-icon-mkdir { background-position: 0 -192px; } +.elfinder-button-icon-mkfile { background-position: 0 -208px; } +.elfinder-button-icon-rm { background-position: 0 -224px; } +.elfinder-button-icon-copy { background-position: 0 -240px; } +.elfinder-button-icon-cut { background-position: 0 -256px; } +.elfinder-button-icon-paste { background-position: 0 -272px; } +.elfinder-button-icon-getfile { background-position: 0 -288px; } +.elfinder-button-icon-duplicate { background-position: 0 -304px; } +.elfinder-button-icon-rename { background-position: 0 -320px; } +.elfinder-button-icon-edit { background-position: 0 -336px; } +.elfinder-button-icon-quicklook { background-position: 0 -352px; } +.elfinder-button-icon-upload { background-position: 0 -368px; } +.elfinder-button-icon-download { background-position: 0 -384px; } +.elfinder-button-icon-info { background-position: 0 -400px; } +.elfinder-button-icon-extract { background-position: 0 -416px; } +.elfinder-button-icon-archive { background-position: 0 -432px; } +.elfinder-button-icon-view { background-position: 0 -448px; } +.elfinder-button-icon-view-list { background-position: 0 -464px; } +.elfinder-button-icon-help { background-position: 0 -480px; } +.elfinder-button-icon-resize { background-position: 0 -512px; } +.elfinder-button-icon-search { background-position: 0 -561px; } +.elfinder-button-icon-sort { background-position: 0 -577px; } +.elfinder-button-icon-rotate-r { background-position: 0 -625px; } +.elfinder-button-icon-rotate-l { background-position: 0 -641px; } + +/* button with dropdown menu*/ +.elfinder .elfinder-menubutton { overflow:visible; } + + + +/* menu */ +.elfinder-button-menu { + position:absolute; + left:0; + top:25px; + padding:3px 0; +} + +/* menu item */ +.elfinder-button-menu-item { + white-space:nowrap; + cursor:default; + padding:5px 19px; + position:relative; +} + +/* fix hover ui class */ +.elfinder-button-menu .ui-state-hover { border:0 solid; } + +.elfinder-button-menu-item-separated { border-top:1px solid #ccc; } + +.elfinder-button-menu-item .ui-icon { + width:16px; + height:16px; + position:absolute; + left:2px; + top:50%; + margin-top:-8px; + display:none; +} + +.elfinder-button-menu-item-selected .ui-icon { display:block; } +.elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-n { display:none; } +.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-s { display:none; } + +/* hack for upload button */ +.elfinder-button form { + position:absolute; + top:0; + right:0; + opacity: 0; filter:Alpha(Opacity=0); + cursor: pointer; +} + +.elfinder .elfinder-button form input { background:transparent; cursor: default;} + +/* search "button" */ +.elfinder .elfinder-button-search { + border:0 solid; + background:transparent; + padding:0; + margin: 1px 4px; + height: auto; + min-height: 26px; + float:right; + width:202px; +} + +/* ltr/rte enviroment */ +.elfinder-ltr .elfinder-button-search { float:right; margin-right:10px; } +.elfinder-rtl .elfinder-button-search { float:left; margin-left:10px; } + +/* search text field */ +.elfinder-button-search input { + width:160px; + height:22px; + padding:0 20px; + line-height: 22px; + border:0 solid; + border:1px solid #aaa; + -moz-border-radius: 12px; + -webkit-border-radius: 12px; + border-radius: 12px; + outline:0px solid; +} + +.elfinder-rtl .elfinder-button-search input { direction:rtl; } + +/* icons */ +.elfinder-button-search .ui-icon { + position:absolute; + height:18px; + top: 50%; + margin:-9px 4px 0 4px; + opacity: .6; + filter:Alpha(Opacity=60); +} + +/* search/close icons */ +.elfinder-ltr .elfinder-button-search .ui-icon-search { left:0;} +.elfinder-rtl .elfinder-button-search .ui-icon-search { right:0;} +.elfinder-ltr .elfinder-button-search .ui-icon-close { right:0;} +.elfinder-rtl .elfinder-button-search .ui-icon-close { left:0;} + + + + + + diff --git a/protected/extensions/elfinder/assets/css/elfinder.min.css b/protected/extensions/elfinder/assets/css/elfinder.min.css new file mode 100644 index 0000000..d0bde67 --- /dev/null +++ b/protected/extensions/elfinder/assets/css/elfinder.min.css @@ -0,0 +1,9 @@ +/*! + * elFinder - file manager for web + * Version 2.x (Nightly: 8f9f39a) (2015-09-28) + * http://elfinder.org + * + * Copyright 2009-2015, Studio 42 + * Licensed under a 3 clauses BSD license + */ +.elfinder-dialog-resize{margin-top:.3em}.elfinder-resize-type{float:left;margin-bottom:.4em}.elfinder-resize-control{padding-top:3em}.elfinder-resize-control input[type=text]{border:1px solid #aaa;text-align:right}.elfinder-resize-preview{width:400px;height:400px;padding:10px;background:#fff;border:1px solid #aaa;float:right;position:relative;overflow:auto}.elfinder-resize-handle{position:relative}.elfinder-resize-handle-hline,.elfinder-resize-handle-vline{position:absolute;background-image:url("../img/crop.gif")}.elfinder-resize-handle-hline{width:100%;height:1px!important;background-repeat:repeat-x}.elfinder-resize-handle-vline{width:1px!important;height:100%;background-repeat:repeat-y}.elfinder-resize-handle-hline-top{top:0;left:0}.elfinder-resize-handle-hline-bottom{bottom:0;left:0}.elfinder-resize-handle-vline-left{top:0;left:0}.elfinder-resize-handle-vline-right{top:0;right:0}.elfinder-resize-handle-point{position:absolute;width:8px;height:8px;border:1px solid #777;background:0 0}.elfinder-resize-handle-point-n{top:0;left:50%;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-ne{top:0;right:0;margin-top:-5px;margin-right:-5px}.elfinder-resize-handle-point-e{top:50%;right:0;margin-top:-5px;margin-right:-5px}.elfinder-resize-handle-point-se{bottom:0;right:0;margin-bottom:-5px;margin-right:-5px}.elfinder-resize-handle-point-s{bottom:0;left:50%;margin-bottom:-5px;margin-left:-5px}.elfinder-resize-handle-point-sw{bottom:0;left:0;margin-bottom:-5px;margin-left:-5px}.elfinder-resize-handle-point-w{top:50%;left:0;margin-top:-5px;margin-left:-5px}.elfinder-resize-handle-point-nw{top:0;left:0;margin-top:-5px;margin-left:-5px}.elfinder-resize-spinner{position:absolute;width:200px;height:30px;top:50%;margin-top:-25px;left:50%;margin-left:-100px;text-align:center;background:url(../img/progress.gif) center bottom repeat-x}.elfinder-resize-row{margin-bottom:7px;position:relative}.elfinder-resize-label{float:left;width:80px;padding-top:3px}.elfinder-resize-reset{width:16px;height:16px;position:absolute;margin-top:-8px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-e{height:100%;width:10px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-s{width:100%;height:10px}.elfinder-dialog .elfinder-dialog-resize .ui-resizable-se{background:0 0;bottom:0;right:0;margin-right:-7px;margin-bottom:-7px}.elfinder-dialog-resize .ui-icon-grip-solid-vertical{position:absolute;top:50%;right:0;margin-top:-8px;margin-right:-11px}.elfinder-dialog-resize .ui-icon-grip-solid-horizontal{position:absolute;left:50%;bottom:0;margin-left:-8px;margin-bottom:-11px}.elfinder-resize-row .elfinder-buttonset{float:right}.elfinder-resize-rotate-slider{float:left;width:195px;margin:7px 7px 0}.elfinder-file-edit{width:99%;height:99%;margin:0;padding:2px;border:1px solid #ccc}div.elfinder-cwd-wrapper-list tr.ui-state-default td{position:relative}div.elfinder-cwd-wrapper-list tr.ui-state-default td span.ui-icon{position:absolute;top:-5px;left:0;right:0;margin:auto}.elfinder-help{margin-bottom:.5em}.elfinder-help .ui-tabs-panel{padding:.5em}.elfinder-dialog .ui-tabs .ui-tabs-nav li a{padding:.2em 1em}.elfinder-help-shortcuts{height:300px;padding:1em;margin:.5em 0;overflow:auto}.elfinder-help-shortcut{white-space:nowrap;clear:both}.elfinder-help-shortcut-pattern{float:left;width:160px}.elfinder-help-logo{width:100px;height:96px;float:left;margin-right:1em;background:url('../img/logo.png') center center no-repeat}.elfinder-help h3{font-size:1.5em;margin:.2em 0 .3em}.elfinder-help-separator{clear:both;padding:.5em}.elfinder-help-link{padding:2px}.elfinder-help .ui-priority-secondary{font-size:.9em}.elfinder-help .ui-priority-primary{margin-bottom:7px}.elfinder-help-team{clear:both;text-align:right;border-bottom:1px solid #ccc;margin:.5em 0;font-size:.9em}.elfinder-help-team div{float:left}.elfinder-help-license{font-size:.9em}.elfinder-help-disabled{font-weight:700;text-align:center;margin:90px 0}.elfinder-help .elfinder-dont-panic{display:block;border:1px solid transparent;width:200px;height:200px;margin:30px auto;text-decoration:none;text-align:center;position:relative;background:#d90004;-moz-box-shadow:5px 5px 9px #111;-webkit-box-shadow:5px 5px 9px #111;box-shadow:5px 5px 9px #111;background:-moz-radial-gradient(80px 80px,circle farthest-corner,#d90004 35%,#960004 100%);background:-webkit-gradient(radial,80 80,60,80 80,120,from(#d90004),to(#960004));-moz-border-radius:100px;-webkit-border-radius:100px;border-radius:100px;outline:none}.elfinder-help .elfinder-dont-panic span{font-size:3em;font-weight:700;text-align:center;color:#fff;position:absolute;left:0;top:45px}.elfinder{padding:0;position:relative;display:block}.elfinder-rtl{text-align:right;direction:rtl}.elfinder-workzone{padding:0;position:relative;overflow:hidden}.elfinder-perms,.elfinder-symlink{position:absolute;width:16px;height:16px;background-image:url(../img/toolbar.png);background-repeat:no-repeat;background-position:0 -528px}.elfinder-na .elfinder-perms{background-position:0 -96px}.elfinder-ro .elfinder-perms{background-position:0 -64px}.elfinder-wo .elfinder-perms{background-position:0 -80px}.elfinder-drag-helper{width:60px;height:50px;padding:0 0 0 25px;z-index:100000}.elfinder-drag-helper-icon-plus{position:absolute;width:16px;height:16px;left:43px;top:55px;background:url('../img/toolbar.png') 0 -544px no-repeat;display:none}.elfinder-drag-helper-plus .elfinder-drag-helper-icon-plus{display:block}.elfinder-drag-num{position:absolute;top:0;left:0;width:16px;height:14px;text-align:center;padding-top:2px;font-weight:700;color:#fff;background-color:red;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-drag-helper .elfinder-cwd-icon{margin:0 0 0 -24px;float:left}.elfinder-overlay{opacity:0;filter:Alpha(Opacity=0)}.elfinder .elfinder-panel{position:relative;background-image:none;padding:7px 12px}.elfinder-contextmenu,.elfinder-contextmenu-sub{display:none;position:absolute;border:1px solid #aaa;background:#fff;color:#555;padding:4px 0}.elfinder-contextmenu-sub{top:5px}.elfinder-contextmenu-ltr .elfinder-contextmenu-sub{margin-left:-5px}.elfinder-contextmenu-rtl .elfinder-contextmenu-sub{margin-right:-5px}.elfinder-contextmenu-item{position:relative;display:block;padding:4px 30px;text-decoration:none;white-space:nowrap;cursor:default}.elfinder-contextmenu-item .ui-icon{width:16px;height:16px;position:absolute;left:2px;top:50%;margin-top:-8px;display:none}.elfinder-contextmenu .elfinder-contextmenu-item span{display:block}.elfinder-contextmenu-ltr .elfinder-contextmenu-item{text-align:left}.elfinder-contextmenu-rtl .elfinder-contextmenu-item{text-align:right}.elfinder-contextmenu-ltr .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-left:12px}.elfinder-contextmenu-rtl .elfinder-contextmenu-sub .elfinder-contextmenu-item{padding-right:12px}.elfinder-contextmenu-arrow,.elfinder-contextmenu-icon{position:absolute;top:50%;margin-top:-8px}.elfinder-contextmenu-ltr .elfinder-contextmenu-icon{left:8px}.elfinder-contextmenu-rtl .elfinder-contextmenu-icon{right:8px}.elfinder-contextmenu-arrow{width:16px;height:16px;background:url('../img/arrows-normal.png') 5px 4px no-repeat}.elfinder-contextmenu-ltr .elfinder-contextmenu-arrow{right:5px}.elfinder-contextmenu-rtl .elfinder-contextmenu-arrow{left:5px;background-position:0 -10px}.elfinder-contextmenu .ui-state-hover{border:0 solid;background-image:none}.elfinder-contextmenu-separator{height:0;border-top:1px solid #ccc;margin:0 1px}.elfinder-cwd-wrapper{overflow:auto;position:relative;padding:2px;margin:0}.elfinder-cwd-wrapper-list{padding:0}.elfinder-cwd{position:relative;cursor:default;padding:0;margin:0;-ms-touch-action:auto;touch-action:auto;-moz-user-select:-moz-none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.elfinder .elfinder-cwd-wrapper.elfinder-droppable-active{padding:0;border:2px solid #8cafed}.elfinder-cwd-view-icons .elfinder-cwd-file{width:120px;height:80px;padding-bottom:2px;cursor:default;border:none}.elfinder-ltr .elfinder-cwd-view-icons .elfinder-cwd-file{float:left;margin:0 3px 12px 0}.elfinder-rtl .elfinder-cwd-view-icons .elfinder-cwd-file{float:right;margin:0 0 5px 3px}.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover{border:0 solid}.elfinder-cwd-view-icons .elfinder-cwd-file-wrapper{width:52px;height:52px;margin:1px auto;padding:2px;position:relative}.elfinder-cwd-view-icons .elfinder-cwd-filename{text-align:center;white-space:pre;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;margin:3px 1px 0;padding:1px;-moz-border-radius:8px;-webkit-border-radius:8px;border-radius:8px}.elfinder-cwd-view-icons .elfinder-perms{bottom:4px;right:2px}.elfinder-cwd-view-icons .elfinder-symlink{bottom:6px;left:0}.elfinder-cwd-icon{display:block;width:48px;height:48px;margin:0 auto;background:url('../img/icons-big.png') 0 0 no-repeat;-moz-background-clip:padding;-webkit-background-clip:padding-box;background-clip:padding-box}.elfinder-cwd .elfinder-droppable-active .elfinder-cwd-icon{background-position:0 -100px}.elfinder-cwd-icon-directory{background-position:0 -50px}.elfinder-cwd-icon-application{background-position:0 -150px}.elfinder-cwd-icon-x-empty,.elfinder-cwd-icon-text{background-position:0 -200px}.elfinder-cwd-icon-image,.elfinder-cwd-icon-vnd-adobe-photoshop,.elfinder-cwd-icon-postscript{background-position:0 -250px}.elfinder-cwd-icon-audio{background-position:0 -300px}.elfinder-cwd-icon-video,.elfinder-cwd-icon-flash-video{background-position:0 -350px}.elfinder-cwd-icon-rtf,.elfinder-cwd-icon-rtfd{background-position:0 -401px}.elfinder-cwd-icon-pdf{background-position:0 -450px}.elfinder-cwd-icon-ms-excel,.elfinder-cwd-icon-msword,.elfinder-cwd-icon-vnd-ms-excel,.elfinder-cwd-icon-vnd-ms-excel-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-binary-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-sheet-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-excel-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-office,.elfinder-cwd-icon-vnd-ms-powerpoint,.elfinder-cwd-icon-vnd-ms-powerpoint-addin-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-presentation-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slide-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-slideshow-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-powerpoint-template-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word,.elfinder-cwd-icon-vnd-ms-word-document-macroEnabled-12,.elfinder-cwd-icon-vnd-ms-word-template-macroEnabled-12,.elfinder-cwd-icon-vnd-oasis-opendocument-chart,.elfinder-cwd-icon-vnd-oasis-opendocument-database,.elfinder-cwd-icon-vnd-oasis-opendocument-formula,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics,.elfinder-cwd-icon-vnd-oasis-opendocument-graphics-template,.elfinder-cwd-icon-vnd-oasis-opendocument-image,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation,.elfinder-cwd-icon-vnd-oasis-opendocument-presentation-template,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet,.elfinder-cwd-icon-vnd-oasis-opendocument-spreadsheet-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text,.elfinder-cwd-icon-vnd-oasis-opendocument-text-master,.elfinder-cwd-icon-vnd-oasis-opendocument-text-template,.elfinder-cwd-icon-vnd-oasis-opendocument-text-web,.elfinder-cwd-icon-vnd-openofficeorg-extension,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-presentation,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slide,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-slideshow,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-presentationml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-sheet,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-spreadsheetml-template,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-document,.elfinder-cwd-icon-vnd-openxmlformats-officedocument-wordprocessingml-template{background-position:0 -500px}.elfinder-cwd-icon-html{background-position:0 -550px}.elfinder-cwd-icon-css{background-position:0 -600px}.elfinder-cwd-icon-javascript,.elfinder-cwd-icon-x-javascript{background-position:0 -650px}.elfinder-cwd-icon-x-perl{background-position:0 -700px}.elfinder-cwd-icon-x-python{background-position:0 -750px}.elfinder-cwd-icon-x-ruby{background-position:0 -800px}.elfinder-cwd-icon-x-sh,.elfinder-cwd-icon-x-shellscript{background-position:0 -850px}.elfinder-cwd-icon-x-c,.elfinder-cwd-icon-x-csrc,.elfinder-cwd-icon-x-chdr,.elfinder-cwd-icon-x-c--,.elfinder-cwd-icon-x-c--src,.elfinder-cwd-icon-x-c--hdr,.elfinder-cwd-icon-x-java,.elfinder-cwd-icon-x-java-source{background-position:0 -900px}.elfinder-cwd-icon-x-php{background-position:0 -950px}.elfinder-cwd-icon-xml{background-position:0 -1000px}.elfinder-cwd-icon-zip,.elfinder-cwd-icon-x-zip,.elfinder-cwd-icon-x-xz,.elfinder-cwd-icon-x-7z-compressed{background-position:0 -1050px}.elfinder-cwd-icon-x-gzip,.elfinder-cwd-icon-x-tar{background-position:0 -1100px}.elfinder-cwd-icon-x-bzip,.elfinder-cwd-icon-x-bzip2{background-position:0 -1150px}.elfinder-cwd-icon-x-rar,.elfinder-cwd-icon-x-rar-compressed{background-position:0 -1200px}.elfinder-cwd-icon-x-shockwave-flash{background-position:0 -1250px}.elfinder-cwd-icon-group{background-position:0 -1300px}.elfinder-cwd input{width:100%;border:0 solid;margin:0;padding:0}.elfinder-cwd-view-icons input,.elfinder-cwd-view-icons{text-align:center}.elfinder-cwd table{width:100%;border-collapse:separate;border:0 solid;margin:0 0 10px;border-spacing:0}.elfinder .elfinder-cwd table thead tr{border-left:0 solid;border-top:0 solid;border-right:0 solid}.elfinder .elfinder-cwd table td{padding:4px 12px;white-space:pre;overflow:hidden;text-align:right;cursor:default;border:0 solid}.elfinder-ltr .elfinder-cwd table td{text-align:right}.elfinder-ltr .elfinder-cwd table td:first-child{text-align:left}.elfinder-rtl .elfinder-cwd table td{text-align:left}.elfinder-rtl .elfinder-cwd table td:first-child{text-align:right}.elfinder-odd-row{background:#eee}.elfinder-cwd-view-list .elfinder-cwd-file-wrapper{width:97%;position:relative}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-file-wrapper{padding-left:23px}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-file-wrapper{padding-right:23px}.elfinder-cwd-view-list .elfinder-perms,.elfinder-cwd-view-list .elfinder-symlink{top:50%;margin-top:-6px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-perms{left:7px}.elfinder-ltr .elfinder-cwd-view-list .elfinder-symlink{left:-7px}.elfinder-cwd-view-list td .elfinder-cwd-icon{width:16px;height:16px;position:absolute;top:50%;margin-top:-8px;background-image:url(../img/icons-small.png)}.elfinder-ltr .elfinder-cwd-view-list .elfinder-cwd-icon{left:0}.elfinder-rtl .elfinder-cwd-view-list .elfinder-cwd-icon{right:0}.std42-dialog{padding:0;position:absolute;left:auto;right:auto}.std42-dialog .ui-dialog-titlebar{border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;font-weight:400;padding:.2em 1em}.std42-dialog .ui-dialog-titlebar-close,.std42-dialog .ui-dialog-titlebar-close:hover{padding:1px}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar{text-align:right}.elfinder-rtl .elfinder-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close{right:auto;left:.3em}.std42-dialog .ui-dialog-content{padding:.3em .5em}.std42-dialog .ui-dialog-buttonpane{border:0 solid;margin:0;padding:.5em .7em}.std42-dialog .ui-dialog-buttonpane button{margin:0 0 0 .4em;padding:0;outline:0 solid}.std42-dialog .ui-dialog-buttonpane button span{padding:2px 9px}.elfinder-dialog .ui-resizable-e,.elfinder-dialog .ui-resizable-s{width:0;height:0}.std42-dialog .ui-button input{cursor:pointer}.elfinder-dialog-icon{position:absolute;width:32px;height:32px;left:12px;top:50%;margin-top:-15px;background:url("../img/dialogs.png") 0 0 no-repeat}.elfinder-rtl .elfinder-dialog-icon{left:auto;right:12px}.elfinder-dialog-error .ui-dialog-content,.elfinder-dialog-confirm .ui-dialog-content{padding-left:56px;min-height:35px}.elfinder-rtl .elfinder-dialog-error .ui-dialog-content,.elfinder-rtl .elfinder-dialog-confirm .ui-dialog-content{padding-left:0;padding-right:56px}.elfinder-dialog-notify .ui-dialog-titlebar-close{display:none}.elfinder-dialog-notify .ui-dialog-content{padding:0}.elfinder-notify{border-bottom:1px solid #ccc;position:relative;padding:.5em;text-align:center;overflow:hidden}.elfinder-ltr .elfinder-notify{padding-left:30px}.elfinder-rtl .elfinder-notify{padding-right:30px}.elfinder-notify:last-child{border:0 solid}.elfinder-notify-progressbar{width:180px;height:8px;border:1px solid #aaa;background:#f5f5f5;margin:5px auto;overflow:hidden}.elfinder-notify-progress{width:100%;height:8px;background:url(../img/progress.gif) center center repeat-x}.elfinder-notify-progressbar,.elfinder-notify-progress{-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}.elfinder-dialog-icon-open,.elfinder-dialog-icon-file,.elfinder-dialog-icon-reload{background-position:0 -225px}.elfinder-dialog-icon-mkdir{background-position:0 -64px}.elfinder-dialog-icon-mkfile{background-position:0 -96px}.elfinder-dialog-icon-copy,.elfinder-dialog-icon-prepare,.elfinder-dialog-icon-move{background-position:0 -128px}.elfinder-dialog-icon-upload{background-position:0 -160px}.elfinder-dialog-icon-rm{background-position:0 -192px}.elfinder-dialog-icon-download{background-position:0 -260px}.elfinder-dialog-icon-save{background-position:0 -295px}.elfinder-dialog-icon-rename{background-position:0 -330px}.elfinder-dialog-icon-archive,.elfinder-dialog-icon-extract{background-position:0 -365px}.elfinder-dialog-icon-search{background-position:0 -402px}.elfinder-dialog-icon-resize,.elfinder-dialog-icon-loadimg,.elfinder-dialog-icon-netmount,.elfinder-dialog-icon-netunmount,.elfinder-dialog-icon-dim{background-position:0 -434px}.elfinder-dialog-confirm-applyall{padding-top:3px}.elfinder-dialog-confirm .elfinder-dialog-icon{background-position:0 -32px}.elfinder-info-title .elfinder-cwd-icon{float:left;width:48px;height:48px;margin-right:1em}.elfinder-info-title strong{display:block;padding:.3em 0 .5em}.elfinder-info-tb{min-width:200px;border:0 solid;margin:1em .2em}.elfinder-info-tb td{white-space:nowrap;padding:2px}.elfinder-info-tb tr td:first-child{text-align:right}.elfinder-info-tb span{float:left}.elfinder-info-tb a{outline:none;text-decoration:underline}.elfinder-info-tb a:hover{text-decoration:none}.elfinder-info-spinner{width:14px;height:14px;float:left;background:url("../img/spinner-mini.gif") center center no-repeat;margin:0 5px}.elfinder-netmount-tb{margin:0 auto}.elfinder-netmount-tb input{border:1px solid #ccc}.elfinder-upload-dropbox{text-align:center;padding:2em 0;border:3px dashed #aaa}.elfinder-upload-dropbox.ui-state-hover{background:#dfdfdf;border:3px dashed #555}.elfinder-upload-dialog-or{margin:.3em 0;text-align:center}.elfinder-upload-dialog-wrapper{text-align:center}.elfinder-upload-dialog-wrapper .ui-button{position:relative;overflow:hidden}.elfinder-upload-dialog-wrapper .ui-button form{position:absolute;right:0;top:0;opacity:0;filter:Alpha(Opacity=0)}.elfinder-upload-dialog-wrapper .ui-button form input{padding:0 20px;font-size:3em}.dialogelfinder .dialogelfinder-drag{border-left:0 solid;border-top:0 solid;border-right:0 solid;font-weight:400;padding:2px 12px;cursor:move;position:relative;text-align:left}.elfinder-rtl .dialogelfinder-drag{text-align:right}.dialogelfinder-drag-close{position:absolute;top:50%;margin-top:-8px}.elfinder-ltr .dialogelfinder-drag-close{right:12px}.elfinder-rtl .dialogelfinder-drag-close{left:12px}.elfinder-contextmenu .elfinder-contextmenu-item span{font-size:.76em}.elfinder-cwd-view-icons .elfinder-cwd-filename,.elfinder-cwd-view-list td{font-size:.7em}.std42-dialog .ui-dialog-titlebar{font-size:.82em}.std42-dialog .ui-dialog-content{font-size:.72em}.std42-dialog .ui-dialog-buttonpane{font-size:.76em}.elfinder-info-tb{font-size:.9em}.elfinder-upload-dropbox,.elfinder-upload-dialog-or{font-size:1.2em}.dialogelfinder .dialogelfinder-drag{font-size:.9em}.elfinder .elfinder-navbar{font-size:.72em}.elfinder-place-drag .elfinder-navbar-dir{font-size:.9em}.elfinder-quicklook-title{font-size:.7em}.elfinder-quicklook-info-data{font-size:.72em}.elfinder-quicklook-preview-text-wrapper{font-size:.9em}.elfinder-button-menu-item{font-size:.72em}.elfinder-button-search input{font-size:.8em}.elfinder-statusbar div{font-size:.7em}.elfinder-drag-num{font-size:12px}.elfinder .elfinder-navbar{width:230px;padding:3px 5px;background-image:none;border-top:0 solid;border-bottom:0 solid;overflow:auto;display:none;position:relative;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.elfinder-ltr .elfinder-navbar{float:left;border-left:0 solid}.elfinder-rtl .elfinder-navbar{float:right;border-right:0 solid}.elfinder-ltr .ui-resizable-e{margin-left:10px}.elfinder-tree{display:table;width:100%;margin:0 0 .5em;-webkit-tap-highlight-color:rgba(0,0,0,0)}.elfinder-navbar-dir{position:relative;display:block;white-space:nowrap;padding:3px 12px;margin:0;outline:0 solid;border:1px solid transparent;cursor:default}.elfinder-ltr .elfinder-navbar-dir{padding-left:35px}.elfinder-rtl .elfinder-navbar-dir{padding-right:35px}.elfinder-navbar-arrow{width:12px;height:14px;position:absolute;display:none;top:50%;margin-top:-8px;background-image:url("../img/arrows-normal.png");background-repeat:no-repeat}.ui-state-active .elfinder-navbar-arrow{background-image:url("../img/arrows-active.png")}.elfinder-navbar-collapsed .elfinder-navbar-arrow{display:block}.elfinder-ltr .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 4px;left:0}.elfinder-rtl .elfinder-navbar-collapsed .elfinder-navbar-arrow{background-position:0 -10px;right:0}.elfinder-ltr .elfinder-navbar-expanded .elfinder-navbar-arrow,.elfinder-rtl .elfinder-navbar-expanded .elfinder-navbar-arrow{background-position:0 -21px}.elfinder-navbar-icon{width:16px;height:16px;position:absolute;top:50%;margin-top:-8px;background-image:url("../img/toolbar.png");background-repeat:no-repeat;background-position:0 -16px}.elfinder-ltr .elfinder-navbar-icon{left:14px}.elfinder-rtl .elfinder-navbar-icon{right:14px}.elfinder-tree .elfinder-navbar-root .elfinder-navbar-icon{background-position:0 0}.elfinder-places .elfinder-navbar-root .elfinder-navbar-icon{background-position:0 -48px}.ui-state-active .elfinder-navbar-icon,.elfinder-droppable-active .elfinder-navbar-icon,.ui-state-hover .elfinder-navbar-icon{background-position:0 -32px}.elfinder-navbar-subtree{display:none}.elfinder-ltr .elfinder-navbar-subtree{margin-left:12px}.elfinder-rtl .elfinder-navbar-subtree{margin-right:12px}.elfinder-navbar-spinner{width:14px;height:14px;position:absolute;display:block;top:50%;margin-top:-7px;background:url("../img/spinner-mini.gif") center center no-repeat}.elfinder-ltr .elfinder-navbar-spinner{left:0;margin-left:-2px}.elfinder-rtl .elfinder-navbar-spinner{right:0;margin-right:-2px}.elfinder-navbar .elfinder-perms{top:50%;margin-top:-8px}.elfinder-ltr .elfinder-navbar .elfinder-perms{left:18px}.elfinder-rtl .elfinder-navbar .elfinder-perms{right:18px}.elfinder-ltr .elfinder-navbar .elfinder-symlink{left:8px}.elfinder-rtl .elfinder-navbar .elfinder-symlink{right:8px}.elfinder-navbar .ui-resizable-handle{width:12px;background:url('../img/resize.png') center center no-repeat;left:0}.elfinder-nav-handle-icon{position:absolute;top:50%;margin:-8px 2px 0;opacity:.5;filter:Alpha(Opacity=50)}.elfinder-places{border:none;margin:0;padding:0}.elfinder-quicklook{position:absolute;background:url("../img/quicklook-bg.png");display:none;overflow:hidden;border-radius:7px;-moz-border-radius:7px;-webkit-border-radius:7px;padding:20px 0 40px}.elfinder-quicklook .ui-resizable-se{width:14px;height:14px;right:5px;bottom:3px;background:url("../img/toolbar.png") 0 -496px no-repeat}.elfinder-quicklook-fullscreen{border-radius:0;-moz-border-radius:0;-webkit-border-radius:0;-webkit-background-clip:padding-box;padding:0;background:#000;z-index:90000;display:block}.elfinder-quicklook-fullscreen .elfinder-quicklook-titlebar{display:none}.elfinder-quicklook-fullscreen .elfinder-quicklook-preview{border:0 solid}.elfinder-quicklook-titlebar{text-align:center;background:#777;position:absolute;left:0;top:0;width:100%;height:20px;-moz-border-radius-topleft:7px;-webkit-border-top-left-radius:7px;border-top-left-radius:7px;-moz-border-radius-topright:7px;-webkit-border-top-right-radius:7px;border-top-right-radius:7px;cursor:move}.elfinder-quicklook-title{color:#fff;white-space:nowrap;overflow:hidden;padding:2px 0}.elfinder-quicklook-titlebar .ui-icon{position:absolute;left:4px;top:50%;margin-top:-8px;width:16px;height:16px;cursor:default}.elfinder-quicklook-preview{overflow:hidden;position:relative;border:0 solid;border-left:1px solid transparent;border-right:1px solid transparent;height:100%}.elfinder-quicklook-info-wrapper{position:absolute;width:100%;left:0;top:50%;margin-top:-50px}.elfinder-quicklook-info{padding:0 12px 0 112px}.elfinder-quicklook-info .elfinder-quicklook-info-data:first-child{color:#fff;font-weight:700;padding-bottom:.5em}.elfinder-quicklook-info-data{padding-bottom:.2em;color:#fff}.elfinder-quicklook .elfinder-cwd-icon{position:absolute;left:32px;top:50%;margin-top:-20px}.elfinder-quicklook-preview img{display:block;margin:0 auto}.elfinder-quicklook-navbar{position:absolute;left:50%;bottom:4px;width:140px;height:32px;padding:0;margin-left:-70px;border:1px solid transparent;border-radius:19px;-moz-border-radius:19px;-webkit-border-radius:19px}.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar{width:188px;margin-left:-94px;padding:5px;border:1px solid #eee;background:#000}.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-icon-close,.elfinder-quicklook-fullscreen .elfinder-quicklook-navbar-separator{display:inline}.elfinder-quicklook-navbar-icon{width:32px;height:32px;margin:0 7px;float:left;background:url("../img/quicklook-icons.png") 0 0 no-repeat}.elfinder-quicklook-navbar-icon-fullscreen{background-position:0 -64px}.elfinder-quicklook-navbar-icon-fullscreen-off{background-position:0 -96px}.elfinder-quicklook-navbar-icon-prev{background-position:0 0}.elfinder-quicklook-navbar-icon-next{background-position:0 -32px}.elfinder-quicklook-navbar-icon-close{background-position:0 -128px;display:none}.elfinder-quicklook-navbar-separator{width:1px;height:32px;float:left;border-left:1px solid #fff;display:none}.elfinder-quicklook-preview-text-wrapper{width:100%;height:100%;background:#fff;color:#222;overflow:auto}pre.elfinder-quicklook-preview-text{margin:0;padding:3px 9px}.elfinder-quicklook-preview-html,.elfinder-quicklook-preview-pdf{width:100%;height:100%;background:#fff;border:0 solid;margin:0}.elfinder-quicklook-preview-flash{width:100%;height:100%}.elfinder-quicklook-preview-audio{width:100%;position:absolute;bottom:0;left:0}embed.elfinder-quicklook-preview-audio{height:30px;background:0 0}.elfinder-quicklook-preview-video{width:100%;height:100%}.elfinder-statusbar{text-align:center;font-weight:400;padding:.2em .5em;border-right:0 solid transparent;border-bottom:0 solid transparent;border-left:0 solid transparent}.elfinder-statusbar a{text-decoration:none}.elfinder-path{max-width:30%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis}.elfinder-ltr .elfinder-path{float:left}.elfinder-rtl .elfinder-path{float:right}.elfinder-stat-size{white-space:nowrap}.elfinder-ltr .elfinder-stat-size{float:right}.elfinder-rtl .elfinder-stat-size{float:left}.elfinder-stat-selected{white-space:nowrap;overflow:hidden}.elfinder-toolbar{padding:4px 0 3px;border-left:0 solid transparent;border-top:0 solid transparent;border-right:0 solid transparent}.elfinder-buttonset{margin:1px 4px;float:left;background:0 0;padding:0;-moz-border-radius:4px;-webkit-border-radius:4px;border-radius:4px}.elfinder .elfinder-button{width:16px;height:16px;margin:0;padding:4px;float:left;overflow:hidden;position:relative;border:0 solid;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.elfinder .ui-icon-search{cursor:pointer}.elfinder-button:first-child{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.elfinder-button:last-child{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.elfinder-toolbar-button-separator{float:left;padding:0;height:24px;border-top:0 solid;border-right:0 solid;border-bottom:0 solid;width:0}.elfinder .elfinder-button.ui-state-disabled{opacity:1;filter:Alpha(Opacity=100)}.elfinder .elfinder-button.ui-state-disabled .elfinder-button-icon{opacity:.4;filter:Alpha(Opacity=40)}.elfinder-rtl .elfinder-buttonset{float:right}.elfinder-button-icon{width:16px;height:16px;display:block;background:url('../img/toolbar.png') no-repeat}.elfinder-button-icon-home{background-position:0 0}.elfinder-button-icon-back{background-position:0 -112px}.elfinder-button-icon-forward{background-position:0 -128px}.elfinder-button-icon-up{background-position:0 -144px}.elfinder-button-icon-reload{background-position:0 -160px}.elfinder-button-icon-open{background-position:0 -176px}.elfinder-button-icon-mkdir{background-position:0 -192px}.elfinder-button-icon-mkfile{background-position:0 -208px}.elfinder-button-icon-rm{background-position:0 -224px}.elfinder-button-icon-copy{background-position:0 -240px}.elfinder-button-icon-cut{background-position:0 -256px}.elfinder-button-icon-paste{background-position:0 -272px}.elfinder-button-icon-getfile{background-position:0 -288px}.elfinder-button-icon-duplicate{background-position:0 -304px}.elfinder-button-icon-rename{background-position:0 -320px}.elfinder-button-icon-edit{background-position:0 -336px}.elfinder-button-icon-quicklook{background-position:0 -352px}.elfinder-button-icon-upload{background-position:0 -368px}.elfinder-button-icon-download{background-position:0 -384px}.elfinder-button-icon-info{background-position:0 -400px}.elfinder-button-icon-extract{background-position:0 -416px}.elfinder-button-icon-archive{background-position:0 -432px}.elfinder-button-icon-view{background-position:0 -448px}.elfinder-button-icon-view-list{background-position:0 -464px}.elfinder-button-icon-help{background-position:0 -480px}.elfinder-button-icon-resize{background-position:0 -512px}.elfinder-button-icon-search{background-position:0 -561px}.elfinder-button-icon-sort{background-position:0 -577px}.elfinder-button-icon-rotate-r{background-position:0 -625px}.elfinder-button-icon-rotate-l{background-position:0 -641px}.elfinder .elfinder-menubutton{overflow:visible}.elfinder-button-menu{position:absolute;left:0;top:25px;padding:3px 0}.elfinder-button-menu-item{white-space:nowrap;cursor:default;padding:5px 19px;position:relative}.elfinder-button-menu .ui-state-hover{border:0 solid}.elfinder-button-menu-item-separated{border-top:1px solid #ccc}.elfinder-button-menu-item .ui-icon{width:16px;height:16px;position:absolute;left:2px;top:50%;margin-top:-8px;display:none}.elfinder-button-menu-item-selected .ui-icon{display:block}.elfinder-button-menu-item-selected-asc .ui-icon-arrowthick-1-n,.elfinder-button-menu-item-selected-desc .ui-icon-arrowthick-1-s{display:none}.elfinder-button form{position:absolute;top:0;right:0;opacity:0;filter:Alpha(Opacity=0);cursor:pointer}.elfinder .elfinder-button form input{background:0 0;cursor:default}.elfinder .elfinder-button-search{border:0 solid;background:0 0;padding:0;margin:1px 4px;height:auto;min-height:26px;float:right;width:202px}.elfinder-ltr .elfinder-button-search{float:right;margin-right:10px}.elfinder-rtl .elfinder-button-search{float:left;margin-left:10px}.elfinder-button-search input{width:160px;height:22px;padding:0 20px;line-height:22px;border:1px solid #aaa;-moz-border-radius:12px;-webkit-border-radius:12px;border-radius:12px;outline:0 solid}.elfinder-rtl .elfinder-button-search input{direction:rtl}.elfinder-button-search .ui-icon{position:absolute;height:18px;top:50%;margin:-9px 4px 0;opacity:.6;filter:Alpha(Opacity=60)}.elfinder-ltr .elfinder-button-search .ui-icon-search{left:0}.elfinder-rtl .elfinder-button-search .ui-icon-search,.elfinder-ltr .elfinder-button-search .ui-icon-close{right:0}.elfinder-rtl .elfinder-button-search .ui-icon-close{left:0} \ No newline at end of file diff --git a/protected/extensions/elfinder/assets/css/theme.css b/protected/extensions/elfinder/assets/css/theme.css new file mode 100644 index 0000000..fce0c99 --- /dev/null +++ b/protected/extensions/elfinder/assets/css/theme.css @@ -0,0 +1,55 @@ +/** + * MacOS X like theme for elFinder. + * Required jquery ui "smoothness" theme. + * + * @author Dmitry (dio) Levashov + **/ + +/* dialogs */ +.std42-dialog, .std42-dialog .ui-widget-content { background-color:#ededed; background-image:none; background-clip: content-box; } + +/* navbar */ +.elfinder .elfinder-navbar { background:#dde4eb; } +.elfinder-navbar .ui-state-hover { background:transparent; border-color:transparent; } +.elfinder-navbar .ui-state-active { background: #3875d7; border-color:#3875d7; color:#fff; } +.elfinder-navbar .elfinder-droppable-active {background:#A7C6E5 !important;} +/* disabled elfinder */ +.elfinder-disabled .elfinder-navbar .ui-state-active { background: #dadada; border-color:#aaa; color:#fff; } + + +/* current directory */ +/* selected file in "icons" view */ +.elfinder-cwd-view-icons .elfinder-cwd-file .ui-state-hover { background:#ccc; } + +/* list view*/ +.elfinder-cwd table thead td.ui-state-hover { background:#ddd; } +.elfinder-cwd table tr:nth-child(odd) { background-color:#edf3fe; } +.elfinder-cwd table tr { + border: 1px solid transparent; + border-top:1px solid #fff; +} + +/* common selected background/color */ +.elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover, +.elfinder-cwd table td.ui-state-hover, +.elfinder-button-menu .ui-state-hover { background: #3875d7; color:#fff;} +/* disabled elfinder */ +.elfinder-disabled .elfinder-cwd-view-icons .elfinder-cwd-file .elfinder-cwd-filename.ui-state-hover, +.elfinder-disabled .elfinder-cwd table td.ui-state-hover { background:#dadada;} + +/* statusbar */ +.elfinder .elfinder-statusbar { color:#555; } +.elfinder .elfinder-statusbar a { text-decoration:none; color:#555;} + + +.std42-dialog .elfinder-help, .std42-dialog .elfinder-help .ui-widget-content { background:#fff;} + +/* contextmenu */ +.elfinder-contextmenu .ui-state-hover { background: #3875d7; color:#fff; } +.elfinder-contextmenu .ui-state-hover .elfinder-contextmenu-arrow { background-image:url('../img/arrows-active.png'); } + + + + + + diff --git a/protected/extensions/elfinder/assets/img/arrows-active.png b/protected/extensions/elfinder/assets/img/arrows-active.png new file mode 100644 index 0000000..2ad7109 Binary files /dev/null and b/protected/extensions/elfinder/assets/img/arrows-active.png differ diff --git a/protected/extensions/elfinder/assets/img/arrows-normal.png b/protected/extensions/elfinder/assets/img/arrows-normal.png new file mode 100644 index 0000000..9d8b4d2 Binary files /dev/null and b/protected/extensions/elfinder/assets/img/arrows-normal.png differ diff --git a/protected/extensions/elfinder/assets/img/crop.gif b/protected/extensions/elfinder/assets/img/crop.gif new file mode 100644 index 0000000..72ea7cc Binary files /dev/null and b/protected/extensions/elfinder/assets/img/crop.gif differ diff --git a/protected/extensions/elfinder/assets/img/dialogs.png b/protected/extensions/elfinder/assets/img/dialogs.png new file mode 100644 index 0000000..20de357 Binary files /dev/null and b/protected/extensions/elfinder/assets/img/dialogs.png differ diff --git a/protected/extensions/elfinder/assets/img/icons-big.png b/protected/extensions/elfinder/assets/img/icons-big.png new file mode 100644 index 0000000..00be0a6 Binary files /dev/null and b/protected/extensions/elfinder/assets/img/icons-big.png differ diff --git a/protected/extensions/elfinder/assets/img/icons-small.png b/protected/extensions/elfinder/assets/img/icons-small.png new file mode 100644 index 0000000..95849dc Binary files /dev/null and b/protected/extensions/elfinder/assets/img/icons-small.png differ diff --git a/protected/extensions/elfinder/assets/img/logo.png b/protected/extensions/elfinder/assets/img/logo.png new file mode 100644 index 0000000..c1036de Binary files /dev/null and b/protected/extensions/elfinder/assets/img/logo.png differ diff --git a/protected/extensions/elfinder/assets/img/progress.gif b/protected/extensions/elfinder/assets/img/progress.gif new file mode 100644 index 0000000..8bab11e Binary files /dev/null and b/protected/extensions/elfinder/assets/img/progress.gif differ diff --git a/protected/extensions/elfinder/assets/img/quicklook-bg.png b/protected/extensions/elfinder/assets/img/quicklook-bg.png new file mode 100644 index 0000000..aedeadd Binary files /dev/null and b/protected/extensions/elfinder/assets/img/quicklook-bg.png differ diff --git a/protected/extensions/elfinder/assets/img/quicklook-icons.png b/protected/extensions/elfinder/assets/img/quicklook-icons.png new file mode 100644 index 0000000..76df30c Binary files /dev/null and b/protected/extensions/elfinder/assets/img/quicklook-icons.png differ diff --git a/protected/extensions/elfinder/assets/img/resize.png b/protected/extensions/elfinder/assets/img/resize.png new file mode 100644 index 0000000..6ec17cd Binary files /dev/null and b/protected/extensions/elfinder/assets/img/resize.png differ diff --git a/protected/extensions/elfinder/assets/img/spinner-mini.gif b/protected/extensions/elfinder/assets/img/spinner-mini.gif new file mode 100644 index 0000000..5b33f7e Binary files /dev/null and b/protected/extensions/elfinder/assets/img/spinner-mini.gif differ diff --git a/protected/extensions/elfinder/assets/img/toolbar.png b/protected/extensions/elfinder/assets/img/toolbar.png new file mode 100644 index 0000000..3b51326 Binary files /dev/null and b/protected/extensions/elfinder/assets/img/toolbar.png differ diff --git a/protected/extensions/elfinder/assets/js/elfinder.full.js b/protected/extensions/elfinder/assets/js/elfinder.full.js index c57c484..160a153 100644 --- a/protected/extensions/elfinder/assets/js/elfinder.full.js +++ b/protected/extensions/elfinder/assets/js/elfinder.full.js @@ -1,3339 +1,11522 @@ +/*! + * elFinder - file manager for web + * Version 2.x (Nightly: 8f9f39a) (2015-09-28) + * http://elfinder.org + * + * Copyright 2009-2015, Studio 42 + * Licensed under a 3 clauses BSD license + */ (function($) { - /** - * @class File manager (main controller) - * @author dio dio@std42.ru - **/ - elFinder = function(el, o) { - var self = this, id; + +/* + * File: /js/elFinder.js + */ + +/** + * @class elFinder - file manager for web + * + * @author Dmitry (dio) Levashov + **/ +window.elFinder = function(node, opts) { + this.time('load'); + + var self = this, - this.log = function(m) { - window.console && window.console.log && window.console.log(m); - } /** - * Object. File manager configuration + * Node on which elfinder creating + * + * @type jQuery **/ - this.options = $.extend({}, this.options, o||{}); - - if (!this.options.url) { - alert('Invalid configuration! You have to set URL option.'); - return; - } + node = $(node), /** - * String. element id, create random if not set; + * Store node contents. + * + * @see this.destroy + * @type jQuery **/ - this.id = ''; - if ((id = $(el).attr('id'))) { - this.id = id; - } else { - // this.id = 'el-finder-'+Math.random().toString().substring(2); - } + prevContent = $('
    ').append(node.contents()), /** - * String. Version number; - **/ - this.version = '1.2'; - /** - * String. jQuery version; - **/ - this.jquery = $.fn.jquery.split('.').join(''); - - /** - * Object. Current Working Dir info - **/ - this.cwd = {}; - /** - * Object. Current Dir Content. Files/folders info - **/ - this.cdc = {}; - /** - * Object. Buffer for copied files - **/ - this.buffer = {}; - /** - * Array. Selected files IDs - **/ - this.selected = []; - /** - * Array. Folder navigation history - **/ - this.history = []; - /** - * Boolean. Enable/disable actions - **/ - this.locked = false; - /** - * Number. Max z-index on page + 1, need for contextmenu and quicklook - **/ - this.zIndex = 2; - /** - * DOMElement. jQueryUI dialog - **/ - this.dialog = null; - /** - * DOMElement. For docked mode - place where fm is docked - **/ - this.anchor = this.options.docked ? $('
    ').hide().insertBefore(el) : null; - /** - * Object. Some options get from server - **/ - this.params = { dotFiles : false, arc : '', uplMaxSize : '' }; - this.vCookie = 'el-finder-view-'+this.id; - this.pCookie = 'el-finder-places-'+this.id; - this.lCookie = 'el-finder-last-'+this.id; - /** - * Object. View. After init we can accessel as this.view.win + * Store node inline styles + * + * @see this.destroy + * @type String **/ - this.view = new this.view(this, el); + prevStyle = node.attr('style'), + /** - * Object. User Iterface. Controller for commands/buttons/contextmenu + * Instance ID. Required to get/set cookie + * + * @type String **/ - this.ui = new this.ui(this); + id = node.attr('id') || '', + /** - * Object. Set/update events + * Events namespace + * + * @type String **/ - this.eventsManager = new this.eventsManager(this); + namespace = 'elfinder-'+(id || Math.random().toString().substr(2, 7)), + /** - * Object. Quick Look like in MacOS X :) + * Mousedown event + * + * @type String **/ - this.quickLook = new this.quickLook(this); - + mousedown = 'mousedown.'+namespace, + /** - * Set/get cookie value + * Keydown event * - * @param String name cookie name - * @param String value cookie value, null to unset + * @type String **/ - this.cookie = function(name, value) { - if (typeof value == 'undefined') { - if (document.cookie && document.cookie != '') { - var i, c = document.cookie.split(';'); - name += '='; - for (i=0; ip', self.view.cwd).css('background', ' url("'+data.images[i]+'") 0 0 no-repeat'); - } - - } - data.tmb && self.tmb(); - } - }, {lock : false, silent : true}); - } + rules = {}, /** - * Return folders in places IDs + * Current working directory hash * - * @return Array + * @type String **/ - this.getPlaces = function() { - var pl = [], p = this.cookie(this.pCookie); - if (p.length) { - if (p.indexOf(':')!=-1) { - pl = p.split(':'); - } else { - pl.push(p); - } - } - return pl; - } + cwd = '', /** - * Add new folder to places + * Current working directory options * - * @param String Folder ID - * @return Boolean + * @type Object **/ - this.addPlace = function(id) { - var p = this.getPlaces(); - if ($.inArray(id, p) == -1) { - p.push(id); - this.savePlaces(p); - return true; - } - } + cwdOptions = { + path : '', + url : '', + tmbUrl : '', + disabled : [], + separator : '/', + archives : [], + extract : [], + copyOverwrite : true, + tmb : false // old API + }, /** - * Remove folder from places + * Files/dirs cache * - * @param String Folder ID - * @return Boolean + * @type Object **/ - this.removePlace = function(id) { - var p = this.getPlaces(); - if ($.inArray(id, p) != -1) { - this.savePlaces($.map(p, function(o) { return o == id?null:o; })); - return true; - } - } + files = {}, /** - * Save new places data in cookie + * Selected files hashes * - * @param Array Folders IDs + * @type Array **/ - this.savePlaces = function(p) { - this.cookie(this.pCookie, p.join(':')); - } + selected = [], /** - * Update file manager content + * Events listeners * - * @param Object Data from server + * @type Object **/ - this.reload = function(data) { - var i; - this.cwd = data.cwd; - - this.cdc = {}; - for (i=0; i0) { - this.iID && clearInterval(this.iID); - this.iID = setInterval(function() { !self.locked && self.ui.exec('reload'); }, this.options.autoReload*60000); - } - } + listeners = {}, /** - * Redraw current directory + * Shortcuts * - */ - this.updateCwd = function() { - this.lockShortcuts(true); - this.selected = []; - this.view.renderCwd(); - this.eventsManager.updateCwd(); - this.view.tree.find('a[key="'+this.cwd.hash+'"]').trigger('select'); - this.lockShortcuts(); - } + * @type Object + **/ + shortcuts = {}, /** - * Execute after files was dropped onto folder + * Buffer for copied files * - * @param Object drop event - * @param Object drag helper object - * @param String target folder ID - */ - this.drop = function(e, ui, target) { - if (ui.helper.find('[key="'+target+'"]').length) { - return self.view.error('Unable to copy into itself'); - } - var ids = []; - ui.helper.find('div:not(.noaccess):has(>label):not(:has(em[class="readonly"],em[class=""]))').each(function() { - ids.push($(this).hide().attr('key')); - }); - - if (!ui.helper.find('div:has(>label):visible').length) { - ui.helper.hide(); - } - if (ids.length) { - self.setBuffer(ids, e.shiftKey?0:1, target); - if (self.buffer.files) { - /* some strange jquery ui bug (in list view) */ - setTimeout(function() {self.ui.exec('paste'); self.buffer = {}}, 300); - } - } else { - $(this).removeClass('el-finder-droppable'); - } - } + * @type Array + **/ + clipboard = [], /** - * Return selected files data + * Copied/cuted files hashes + * Prevent from remove its from cache. + * Required for dispaly correct files names in error messages * - * @param Number if set, returns only element with this index or empty object - * @return Array|Object - */ - this.getSelected = function(ndx) { - var i, s = []; - if (ndx>=0) { - return this.cdc[this.selected[ndx]]||{}; - } - for (i=0; i:]+$/); - } + * @type String + * @default "auto" + **/ + width = 'auto', /** - * Return true if file with this name exists + * elFinder node height * - * @param String file/folder name - * @return Boolean - */ - this.fileExists = function(n) { - for (var i in this.cdc) { - if (this.cdc[i].name == n) { - return i; + * @type Number + * @default 400 + **/ + height = 400, + + beeper = $(document.createElement('audio')).hide().appendTo('body')[0], + + syncInterval, + + open = function(data) { + if (data.init) { + // init - reset cache + files = {}; + } else { + // remove only files from prev cwd + for (var i in files) { + if (files.hasOwnProperty(i) + && files[i].mime != 'directory' + && files[i].phash == cwd + && $.inArray(i, remember) === -1) { + delete files[i]; + } } } - return false; - } + + cwd = data.cwd.hash; + cache(data.files); + if (!files[cwd]) { + cache([data.cwd]); + } + self.lastDir(cwd); + }, /** - * Return name for new file/folder + * Store info about files/dirs in "files" object. * - * @param String base name (i18n) - * @param String extension for file - * @return String - */ - this.uniqueName = function(n, ext) { - n = self.i18n(n); - var name = n, i = 0, ext = ext||''; - - if (!this.fileExists(name+ext)) { - return name+ext; - } + * @param Array files + * @return void + **/ + cache = function(data) { + var l = data.length, f; - while (i++<100) { - if (!this.fileExists(name+i+ext)) { - return name+i+ext; - } - } - return name.replace('100', '')+Math.random()+ext; - } + while (l--) { + f = data[l]; + if (f.name && f.hash && f.mime) { + if (!f.phash) { + var name = 'volume_'+f.name, + i18 = self.i18n(name); - /** - * Get/set last opened dir - * - * @param String dir hash - * @return String - */ - this.lastDir = function(dir) { - if (this.options.rememberLastDir) { - return dir ? this.cookie(this.lCookie, dir) : this.cookie(this.lCookie); + if (name != i18) { + f.i18 = i18; + } + } + files[f.hash] = f; + } } - } - - /** - * Resize file manager - * - * @param Number width - * @param Number height - */ - function resize(w, h) { - w && self.view.win.width(w); - h && self.view.nav.add(self.view.cwd).height(h); - } + }, /** - * Resize file manager in dialog window while it resize + * Exec shortcut * + * @param jQuery.Event keydown/keypress event + * @return void */ - function dialogResize() { - resize(null, self.dialog.height()-self.view.tlb.parent().height()-($.browser.msie ? 47 : 32)) - } + execShortcut = function(e) { + var code = e.keyCode, + ctrlKey = !!(e.ctrlKey || e.metaKey); - this.time = function() { - return new Date().getMilliseconds(); - } + if (enabled) { - /* here we init file manager */ - - this.setView(this.cookie(this.vCookie)); - resize(self.options.width, self.options.height); - - /* dialog or docked mode */ - if (this.options.dialog || this.options.docked) { - this.options.dialog = $.extend({width : 570, dialogClass : '', minWidth : 480, minHeight: 330}, this.options.dialog || {}); - this.options.dialog.open = function() { - setTimeout(function() { - $('').appendTo(self.view.win).focus().select().remove() - }, 200) - - } - this.options.dialog.dialogClass += 'el-finder-dialog'; - this.options.dialog.resize = dialogResize; - if (this.options.docked) { - /* docked mode - create dialog and store size */ - this.options.dialog.close = function() { self.dock(); }; + $.each(shortcuts, function(i, shortcut) { + if (shortcut.type == e.type + && shortcut.keyCode == code + && shortcut.shiftKey == e.shiftKey + && shortcut.ctrlKey == ctrlKey + && shortcut.altKey == e.altKey) { + e.preventDefault() + e.stopPropagation(); + shortcut.callback(e, self); + self.debug('shortcut-exec', i+' : '+shortcut.description); + } + }); - this.view.win.data('size', {width : this.view.win.width(), height : this.view.nav.height()}); - } else { - this.options.dialog.close = function() { - self.destroy(); + // prevent tab out of elfinder + if (code == 9 && !$(e.target).is(':input')) { + e.preventDefault(); } - this.dialog = $('
    ').append(this.view.win).dialog(this.options.dialog); - } - } - this.ajax({ - cmd : 'open', - target : this.lastDir()||'', - init : true, - tree : true - }, - function(data) { - if (data.cwd) { - self.eventsManager.init(); - self.reload(data); - $.extend(self.params, data.params||{}); - - $('*', document.body).each(function() { - var z = parseInt($(this).css('z-index')); - if (z >= self.zIndex) { - self.zIndex = z+1; - } - }); - self.ui.init(data.disabled); - } - - }, {force : true}); - - - this.open = function() { - this.dialog ? this.dialog.dialog('open') : this.view.win.show(); - this.eventsManager.lock = false; - } - - this.close = function() { - this.quickLook.hide(); - if (this.options.docked && this.view.win.attr('undocked')) { - this.dock(); - } else { - this.dialog ? this.dialog.dialog('close') : this.view.win.hide(); } - this.eventsManager.lock = true; - } - - this.destroy = function() { + }, + date = new Date(), + utc, + i18n + ; - this.eventsManager.lock = true; - this.quickLook.hide(); - this.quickLook.win.remove(); - if (this.dialog && $( this.dialog ).is(":ui-dialog")) { - this.dialog.dialog('destroy'); - this.view.win.parent().remove(); - } else { - this.view.win.remove(); - } - this.ui.menu.remove(); - } - - this.dock = function() { - if (this.options.docked && this.view.win.attr('undocked')) { - this.quickLook.hide(); - var s =this.view.win.data('size'); - this.view.win.insertAfter(this.anchor).removeAttr('undocked'); - resize(s.width, s.height); - this.dialog.dialog('destroy'); - this.dialog = null; - } - } - - this.undock = function() { - if (this.options.docked && !this.view.win.attr('undocked')) { - this.quickLook.hide(); - this.dialog = $('
    ').append(this.view.win.css('width', '100%').attr('undocked', true).show()).dialog(this.options.dialog); - dialogResize(); - } - } - } + + /** + * Protocol version + * + * @type String + **/ + this.api = null; /** - * Translate message into selected language - * - * @param String message in english - * @param String translated or original message - */ - elFinder.prototype.i18n = function(m) { - return this.options.i18n[this.options.lang] && this.options.i18n[this.options.lang][m] ? this.options.i18n[this.options.lang][m] : m; - } - - /** - * Default config - * - */ - elFinder.prototype.options = { - /* connector url. Required! */ - url : '', - /* interface language */ - lang : 'en', - /* additional css class for filemanager container */ - cssClass : '', - /* characters number to wrap file name in icons view. set to 0 to disable wrap */ - wrap : 14, - /* Name for places/favorites (i18n), set to '' to disable places */ - places : 'Places', - /* show places before navigation? */ - placesFirst : true, - /* callback to get file url (for wswing editors) */ - editorCallback : null, - /* string to cut from file url begin before pass it to editorCallback. variants: '' - nothing to cut, 'root' - cut root url, 'http://...' - string if it exists in the beginig of url */ - cutURL : '', - /* close elfinder after editorCallback */ - closeOnEditorCallback : true, - /* i18 messages. not set manually! */ - i18n : {}, - /* fm view (icons|list) */ - view : 'icons', - /* width to overwrite css options */ - width : '', - /* height to overwrite css options. Attenion! this is heigt of navigation/cwd panels! not total fm height */ - height : '', - /* disable shortcuts exclude arrows/space */ - disableShortcuts : false, - /* open last visited dir after reload page or close and open browser */ - rememberLastDir : true, - /* cookie options */ - cookie : { - expires : 30, - domain : '', - path : '/', - secure : false - }, - /* buttons on toolbar */ - toolbar : [ - ['back', 'reload'], - ['select', 'open'], - ['mkdir', 'mkfile', 'upload'], - ['copy', 'paste', 'rm'], - ['rename', 'edit'], - ['info', 'quicklook', 'resize'], - ['icons', 'list'], - ['help'] - ], - /* contextmenu commands */ - contextmenu : { - 'cwd' : ['reload', 'delim', 'mkdir', 'mkfile', 'upload', 'delim', 'paste', 'delim', 'info'], - 'file' : ['select', 'open', 'quicklook', 'delim', 'copy', 'cut', 'rm', 'delim', 'duplicate', 'rename', 'edit', 'resize', 'archive', 'extract', 'delim', 'info'], - 'group' : ['select', 'copy', 'cut', 'rm', 'delim', 'archive', 'extract', 'delim', 'info'] - }, - /* jqueryUI dialog options */ - dialog : null, - /* docked mode */ - docked : false, - /* auto reload time (min) */ - autoReload : 0, - /* set to true if you need to select several files at once from editorCallback */ - selectMultiple : false - } - + * elFinder use new api + * + * @type Boolean + **/ + this.newAPI = false; - $.fn.elfinder = function(o) { - - return this.each(function() { - - var cmd = typeof(o) == 'string' ? o : ''; - if (!this.elfinder) { - this.elfinder = new elFinder(this, typeof(o) == 'object' ? o : {}) - } - - switch(cmd) { - case 'close': - case 'hide': - this.elfinder.close(); - break; - - case 'open': - case 'show': - this.elfinder.open(); - break; - - case 'dock': - this.elfinder.dock(); - break; - - case 'undock': - this.elfinder.undock(); - break; - - case'destroy': - this.elfinder.destroy(); - break; - } - - }) - } + /** + * elFinder use old api + * + * @type Boolean + **/ + this.oldAPI = false; -})(jQuery); -(function($) { -elFinder.prototype.view = function(fm, el) { - var self = this; - this.fm = fm; /** - * Object. Mimetypes to kinds mapping + * Net drivers names + * + * @type Array **/ - this.kinds = { - 'unknown' : 'Unknown', - 'directory' : 'Folder', - 'symlink' : 'Alias', - 'symlink-broken' : 'Broken alias', - 'application/x-empty' : 'Plain text', - 'application/postscript' : 'Postscript document', - 'application/octet-stream' : 'Application', - 'application/vnd.ms-office' : 'Microsoft Office document', - 'application/vnd.ms-word' : 'Microsoft Word document', - 'application/vnd.ms-excel' : 'Microsoft Excel document', - 'application/vnd.ms-powerpoint' : 'Microsoft Powerpoint presentation', - 'application/pdf' : 'Portable Document Format (PDF)', - 'application/vnd.oasis.opendocument.text' : 'Open Office document', - 'application/x-shockwave-flash' : 'Flash application', - 'application/xml' : 'XML document', - 'application/x-bittorrent' : 'Bittorrent file', - 'application/x-7z-compressed' : '7z archive', - 'application/x-tar' : 'TAR archive', - 'application/x-gzip' : 'GZIP archive', - 'application/x-bzip2' : 'BZIP archive', - 'application/zip' : 'ZIP archive', - 'application/x-rar' : 'RAR archive', - 'application/javascript' : 'Javascript application', - 'text/plain' : 'Plain text', - 'text/x-php' : 'PHP source', - 'text/html' : 'HTML document', - 'text/javascript' : 'Javascript source', - 'text/css' : 'CSS style sheet', - 'text/rtf' : 'Rich Text Format (RTF)', - 'text/rtfd' : 'RTF with attachments (RTFD)', - 'text/x-c' : 'C source', - 'text/x-c++' : 'C++ source', - 'text/x-shellscript' : 'Unix shell script', - 'text/x-python' : 'Python source', - 'text/x-java' : 'Java source', - 'text/x-ruby' : 'Ruby source', - 'text/x-perl' : 'Perl script', - 'text/xml' : 'XML document', - 'image/x-ms-bmp' : 'BMP image', - 'image/jpeg' : 'JPEG image', - 'image/gif' : 'GIF Image', - 'image/png' : 'PNG image', - 'image/x-targa' : 'TGA image', - 'image/tiff' : 'TIFF image', - 'image/vnd.adobe.photoshop' : 'Adobe Photoshop image', - 'audio/mpeg' : 'MPEG audio', - 'audio/midi' : 'MIDI audio', - 'audio/ogg' : 'Ogg Vorbis audio', - 'audio/mp4' : 'MP4 audio', - 'audio/wav' : 'WAV audio', - 'video/x-dv' : 'DV video', - 'video/mp4' : 'MP4 video', - 'video/mpeg' : 'MPEG video', - 'video/x-msvideo' : 'AVI video', - 'video/quicktime' : 'Quicktime video', - 'video/x-ms-wmv' : 'WM video', - 'video/x-flv' : 'Flash video', - 'video/x-matroska' : 'Matroska video' - } - - this.tlb = $('
      '); - - this.nav = $('
      ').resizable({handles : 'e', autoHide : true, minWidth : 200, maxWidth: 500}); - this.cwd = $('
      ').attr('unselectable', 'on'); - this.spn = $('
      '); - this.err = $('

      ').click(function() { $(this).hide(); }); - this.nfo = $('
      '); - this.pth = $('
      '); - this.sel = $('
      '); - this.stb = $('
      ') - .append(this.pth) - .append(this.nfo) - .append(this.sel); - this.wrz = $('
      ') - .append(this.nav) - .append(this.cwd) - .append(this.spn) - .append(this.err) - .append('
      '); - this.win = $(el).empty().attr('id', this.fm.id).addClass('el-finder '+(fm.options.cssClass||'')) - .append($('
      ').append(this.tlb)) - .append(this.wrz) - .append(this.stb); - - this.tree = $('
        ').appendTo(this.nav); - this.plc = $('
        • '+this.fm.i18n(this.fm.options.places)+'
            ').hide(); - - this.nav[this.fm.options.placesFirst ? 'prepend' : 'append'](this.plc); - - /* - * Render ajax spinner - */ - this.spinner = function(show) { - this.win.toggleClass('el-finder-disabled', show); - this.spn.toggle(show); - } - - /* - * Display ajax error - */ - this.fatal = function(t) { - self.error(t.status != '404' ? 'Invalid backend configuration' : 'Unable to connect to backend') - } - - /* - * Render error - */ - this.error = function(err, data) { - this.fm.lock(); - this.err.show().children('strong').html(this.fm.i18n(err)+'!'+this.formatErrorData(data)); - setTimeout(function() { self.err.fadeOut('slow'); }, 4000); - } - - /* - * Render navigation panel with dirs tree - */ - this.renderNav = function(tree) { - var d = tree.dirs.length ? traverse(tree.dirs) : '', - li = '
          • '+d+'
          • '; - this.tree.html(li); - - this.fm.options.places && this.renderPlaces(); - - function traverse(tree) { - var i, hash, c, html = '
              '; - for (i=0; i < tree.length; i++) { - if (!tree[i].name || !tree[i].hash) { - continue; - } - c = ''; - if (!tree[i].read && !tree[i].write) { - c = 'noaccess'; - } else if (!tree[i].read) { - c = 'dropbox'; - } else if (!tree[i].write) { - c = 'readonly'; - } - - html += '
            • '; - - if (tree[i].dirs.length) { - html += traverse(tree[i].dirs); - } - html += '
            • '; - } - return html +'
            '; - } - } + this.netDrivers = []; + /** + * User os. Required to bind native shortcuts for open/rename + * + * @type String + **/ + this.OS = navigator.userAgent.indexOf('Mac') !== -1 ? 'mac' : navigator.userAgent.indexOf('Win') !== -1 ? 'win' : 'other'; - /* - * Render places - */ - this.renderPlaces = function() { - var i, c, - pl = this.fm.getPlaces(), - ul = this.plc.show().find('ul').empty().hide(); - $('div:first', this.plc).removeClass('collapsed expanded'); - - if (pl.length) { - pl.sort(function(a, b) { - var _a = self.tree.find('a[key="'+a+'"]').text()||'', - _b = self.tree.find('a[key="'+b+'"]').text()||''; - return _a.localeCompare(_b); - }); - - for (i=0; i < pl.length; i++) { - if ((c = this.tree.find('a[key="'+pl[i]+'"]:not(.dropbox)').parent()) && c.length) { - ul.append(c.clone().children('ul').remove().end().find('div').removeClass('collapsed expanded').end()); - } else { - this.fm.removePlace(pl[i]); - } - }; - ul.children().length && $('div:first', this.plc).addClass('collapsed'); - } - } + /** + * User browser UA. + * jQuery.browser: version deprecated: 1.3, removed: 1.9 + * + * @type Object + **/ + this.UA = (function(){ + var webkit = !document.uniqueID && !window.opera && !window.sidebar && window.localStorage && typeof window.orientation == "undefined"; + return { + // Browser IE <= IE 6 + ltIE6:typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined", + // Browser IE <= IE 7 + ltIE7:typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined", + // Browser IE <= IE 8 + ltIE8:typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined", + IE:document.uniqueID, + Firefox:window.sidebar, + Opera:window.opera, + Webkit:webkit, + Chrome:webkit && window.chrome, + Safari:webkit && !window.chrome, + Mobile:typeof window.orientation != "undefined" + } + })(); - /* - * Render current directory - */ - this.renderCwd = function() { - this.cwd.empty(); - - var num = 0, size = 0, html = ''; - for (var hash in this.fm.cdc) { - num++; - size += this.fm.cdc[hash].size; - html += this.fm.options.view == 'icons' - ? this.renderIcon(this.fm.cdc[hash]) - : this.renderRow(this.fm.cdc[hash], num%2); - } - if (this.fm.options.view == 'icons') { - this.cwd.append(html); - } else { - this.cwd.append(''+html+'
            '+this.fm.i18n('Name')+''+this.fm.i18n('Permissions')+''+this.fm.i18n('Modified')+''+this.fm.i18n('Size')+''+this.fm.i18n('Kind')+'
            '); - } - - this.pth.text(fm.cwd.rel); - this.nfo.text(fm.i18n('items')+': '+num+', '+this.formatSize(size)); - this.sel.empty(); - } - - /* - * Render one file as icon - */ - this.renderIcon = function(f) { - var str = ''; - if (f.link || f.mime == 'symlink-broken') { - str += ''; - } - if (!f.read && !f.write) { - str += ''; - } else if (f.read && !f.write) { - str += ''; - } else if (!f.read && f.write) { - str += ''; - } - return '
            '+str+'
            '; - } - - /* - * Render one file as table row - */ - this.renderRow = function(f, odd) { - var str = f.link || f.mime =='symlink-broken' ? '' : ''; - if (!f.read && !f.write) { - str += ''; - } else if (f.read && !f.write) { - str += ''; - } else if (!f.read && f.write) { - str += ''; - } - return '

            '+str+'

            '+f.name+''+self.formatPermissions(f.read, f.write, f.rm)+''+self.formatDate(f.date)+''+self.formatSize(f.size)+''+self.mime2kind(f.link ? 'symlink' : f.mime)+''; - } - - /* - * Re-render file (after editing) - */ - this.updateFile = function(f) { - var e = this.cwd.find('[key="'+f.hash+'"]'); - e.replaceWith(e[0].nodeName == 'DIV' ? this.renderIcon(f) : this.renderRow(f)); - } - - /* - * Update info about selected files - */ - this.selectedInfo = function() { - var i, s = 0, sel; - - if (self.fm.selected.length) { - sel = this.fm.getSelected(); - for (i=0; i0 ? this.fm.i18n('selected items')+': '+sel.length+', '+this.formatSize(s) : ''); - } - - /* - * Return wraped file name if needed - */ - this.formatName = function(n) { - var w = self.fm.options.wrap; - if (w>0) { - if (n.length > w*2) { - return n.substr(0, w)+"­"+n.substr(w, w-5)+"…"+n.substr(n.length-3); - } else if (n.length > w) { - return n.substr(0, w)+"­"+n.substr(w); - } - } - return n; - } - - /* - * Return error message - */ - this.formatErrorData = function(data) { - var i, err = '' - if (typeof(data) == 'object') { - err = '
            '; - for (i in data) { - err += i+' '+self.fm.i18n(data[i])+'
            '; - } - } - return err; + /** + * Configuration options + * + * @type Object + **/ + this.options = $.extend(true, {}, this._options, opts||{}); + + if (opts.ui) { + this.options.ui = opts.ui; } - - /* - * Convert mimetype into css class - */ - this.mime2class = function(mime) { - return mime.replace('/' , ' ').replace(/\./g, '-'); + + if (opts.commands) { + this.options.commands = opts.commands; } - - /* - * Return localized date - */ - this.formatDate = function(d) { - return d.replace(/([a-z]+)\s/i, function(a1, a2) { return self.fm.i18n(a2)+' '; }); + + if (opts.uiOptions && opts.uiOptions.toolbar) { + this.options.uiOptions.toolbar = opts.uiOptions.toolbar; } - /* - * Return formated file size - */ - this.formatSize = function(s) { - var n = 1, u = 'bytes'; - if (s > 1073741824) { - n = 1073741824; - u = 'Gb'; - } else if (s > 1048576) { - n = 1048576; - u = 'Mb'; - } else if (s > 1024) { - n = 1024; - u = 'Kb'; - } - return Math.round(s/n)+' '+u; - } + $.extend(this.options.contextmenu, opts.contextmenu); - /* - * Return localized string with file permissions - */ - this.formatPermissions = function(r, w, rm) { - var p = []; - r && p.push(self.fm.i18n('read')); - w && p.push(self.fm.i18n('write')); - rm && p.push(self.fm.i18n('remove')); - return p.join('/'); - } - /* - * Return kind of file - */ - this.mime2kind = function(mime) { - return this.fm.i18n(this.kinds[mime]||'unknown'); - } + /** + * Ajax request type + * + * @type String + * @default "get" + **/ + this.requestType = /^(get|post)$/i.test(this.options.requestType) ? this.options.requestType.toLowerCase() : 'get', -} - -})(jQuery); -/** - * @class elFinder user Interface. - * @author dio dio@std42.ru - **/ -(function($) { -elFinder.prototype.ui = function(fm) { + /** + * Any data to send across every ajax request + * + * @type Object + * @default {} + **/ + this.customData = $.isPlainObject(this.options.customData) ? this.options.customData : {}; - var self = this; - this.fm = fm; - this.cmd = {}; - this.buttons = {}; - this.menu = $('
            ').appendTo(document.body).hide(); - this.dockButton = $('
            '); + /** + * ID. Required to create unique cookie name + * + * @type String + **/ + this.id = id; - this.exec = function(cmd, arg) { - if (this.cmd[cmd]) { - if (cmd != 'open' && !this.cmd[cmd].isAllowed()) { - return this.fm.view.error('Command not allowed'); - } - if (!this.fm.locked) { - this.fm.quickLook.hide(); - $('.el-finder-info').remove(); - this.cmd[cmd].exec(arg); - this.update(); - } - } - } + /** + * URL to upload files + * + * @type String + **/ + this.uploadURL = opts.urlUpload || opts.url; - this.cmdName = function(cmd) { - if (this.cmd[cmd] && this.cmd[cmd].name) { - return cmd == 'archive' && this.fm.params.archives.length == 1 - ? this.fm.i18n('Create')+' '+this.fm.view.mime2kind(this.fm.params.archives[0]).toLowerCase() - : this.fm.i18n(this.cmd[cmd].name); - } - return cmd; - } + /** + * Events namespace + * + * @type String + **/ + this.namespace = namespace; + + /** + * Interface language + * + * @type String + * @default "en" + **/ + this.lang = this.i18[this.options.lang] && this.i18[this.options.lang].messages ? this.options.lang : 'en'; - this.isCmdAllowed = function(cmd) { - return self.cmd[cmd] && self.cmd[cmd].isAllowed(); - } + i18n = this.lang == 'en' + ? this.i18['en'] + : $.extend(true, {}, this.i18['en'], this.i18[this.lang]); - this.execIfAllowed = function(cmd) { - this.isCmdAllowed(cmd) && this.exec(cmd); - } + /** + * Interface direction + * + * @type String + * @default "ltr" + **/ + this.direction = i18n.direction; - this.includeInCm = function(cmd, t) { - return this.isCmdAllowed(cmd) && this.cmd[cmd].cm(t); - } + /** + * i18 messages + * + * @type Object + **/ + this.messages = i18n.messages; - this.showMenu = function(e) { - var t, win, size, id = ''; - this.hideMenu(); - - if (!self.fm.selected.length) { - t = 'cwd'; - } else if (self.fm.selected.length == 1) { - t = 'file'; - } else { - t = 'group'; - } - - menu(t); - - win = $(window); - size = { - height : win.height(), - width : win.width(), - sT : win.scrollTop(), - cW : this.menu.width(), - cH : this.menu.height() - }; - this.menu.css({ - left : ((e.clientX + size.cW) > size.width ? ( e.clientX - size.cW) : e.clientX), - top : ((e.clientY + size.cH) > size.height && e.clientY > size.cH ? (e.clientY + size.sT - size.cH) : e.clientY + size.sT) - }) - .show() - .find('div[name]') - .hover( - function() { - var t = $(this), s = t.children('div'), w; - t.addClass('hover'); - if (s.length) { - if (!s.attr('pos')) { - w = t.outerWidth(); - s.css($(window).width() - w - t.offset().left > s.width() ? 'left' : 'right', w-5).attr('pos', true); - } - s.show(); - } - }, - function() { $(this).removeClass('hover').children('div').hide(); } - ).click(function(e) { - e.stopPropagation(); - var t = $(this); - if (!t.children('div').length) { - self.hideMenu(); - self.exec(t.attr('name'), t.attr('argc')); - } - }); - function menu(t) { - var i, j, a, html, l, src = self.fm.options.contextmenu[t]||[]; - for (i=0; i < src.length; i++) { - if (src[i] == 'delim') { - self.menu.children().length && !self.menu.children(':last').hasClass('delim') && self.menu.append('
            '); - } else if (self.fm.ui.includeInCm(src[i], t)) { - a = self.cmd[src[i]].argc(); - html = ''; - - if (a.length) { - html = '
            '; - for (var j=0; j < a.length; j++) { - html += '
            '+a[j].text+'
            '; - }; - html += '
            '; - } - self.menu.append('
            '+html+self.cmdName(src[i])+'
            '); - } - }; - } + /** + * Date/time format + * + * @type String + * @default "m.d.Y" + **/ + this.dateFormat = this.options.dateFormat || i18n.dateFormat; - } + /** + * Date format like "Yesterday 10:20:12" + * + * @type String + * @default "{day} {time}" + **/ + this.fancyFormat = this.options.fancyDateFormat || i18n.fancyDateFormat; + + /** + * Today timestamp + * + * @type Number + **/ + this.today = (new Date(date.getFullYear(), date.getMonth(), date.getDate())).getTime()/1000; - this.hideMenu = function() { - this.menu.hide().empty(); - } + /** + * Yesterday timestamp + * + * @type Number + **/ + this.yesterday = this.today - 86400; - this.update = function() { - for (var i in this.buttons) { - this.buttons[i].toggleClass('disabled', !this.cmd[i].isAllowed()); - } - } + utc = this.options.UTCDate ? 'UTC' : ''; - this.init = function(disabled) { - var i, j, n, c=false, zindex = 2, z, t = this.fm.options.toolbar; - /* disable select command if there is no callback for it */ - if (!this.fm.options.editorCallback) { - disabled.push('select'); - } - /* disable archive command if no archivers enabled */ - if (!this.fm.params.archives.length && $.inArray('archive', disabled) == -1) { - disabled.push('archive'); - } - for (i in this.commands) { - if ($.inArray(i, disabled) == -1) { - this.commands[i].prototype = this.command.prototype; - this.cmd[i] = new this.commands[i](this.fm); - } - } + this.getHours = 'get'+utc+'Hours'; + this.getMinutes = 'get'+utc+'Minutes'; + this.getSeconds = 'get'+utc+'Seconds'; + this.getDate = 'get'+utc+'Date'; + this.getDay = 'get'+utc+'Day'; + this.getMonth = 'get'+utc+'Month'; + this.getFullYear = 'get'+utc+'FullYear'; + + /** + * Css classes + * + * @type String + **/ + this.cssClass = 'ui-helper-reset ui-helper-clearfix ui-widget ui-widget-content ui-corner-all elfinder elfinder-'+(this.direction == 'rtl' ? 'rtl' : 'ltr')+' '+this.options.cssClass; - for (i=0; i'); - } - c = false; - for (j=0; j') - .appendTo(this.fm.view.tlb) - .click(function(e) { e.stopPropagation(); }) - .bind('click', (function(ui){ return function() { - !$(this).hasClass('disabled') && ui.exec($(this).attr('name')); - } })(this) - ).hover( - function() { !$(this).hasClass('disabled') && $(this).addClass('el-finder-tb-hover')}, - function() { $(this).removeClass('el-finder-tb-hover')} - ); - } - } - } - this.update(); - /* set z-index for context menu */ - this.menu.css('z-index', this.fm.zIndex); - - if (this.fm.options.docked) { - this.dockButton.hover( - function() { $(this).addClass('el-finder-dock-button-hover')}, - function() { $(this).removeClass('el-finder-dock-button-hover')} - ).click(function() { - self.fm.view.win.attr('undocked') ? self.fm.dock() : self.fm.undock(); - $(this).trigger('mouseout'); - }).prependTo(this.fm.view.tlb); + /** + * Method to store/fetch data + * + * @type Function + **/ + this.storage = (function() { + try { + return 'localStorage' in window && window['localStorage'] !== null ? self.localStorage : self.cookie; + } catch (e) { + return self.cookie; } - - } - -} - -/** - * @class elFinder user Interface Command. - * @author dio dio@std42.ru - **/ -elFinder.prototype.ui.prototype.command = function(fm) { } + })(); -/** - * Return true if command can be applied now - * @return Boolean - **/ -elFinder.prototype.ui.prototype.command.prototype.isAllowed = function() { - return true; -} + this.viewType = this.storage('view') || this.options.defaultView || 'icons'; -/** - * Return true if command can be included in contextmenu of required type - * @param String contextmenu type (cwd|group|file) - * @return Boolean - **/ -elFinder.prototype.ui.prototype.command.prototype.cm = function(t) { - return false; -} + this.sortType = this.storage('sortType') || this.options.sortType || 'name'; + + this.sortOrder = this.storage('sortOrder') || this.options.sortOrder || 'asc'; -/** - * Return not empty array if command required submenu in contextmenu - * @return Array - **/ -elFinder.prototype.ui.prototype.command.prototype.argc = function(t) { - return []; -} + this.sortStickFolders = this.storage('sortStickFolders'); + if (this.sortStickFolders === null) { + this.sortStickFolders = !!this.options.sortStickFolders; + } else { + this.sortStickFolders = !!this.sortStickFolders + } -elFinder.prototype.ui.prototype.commands = { + this.sortRules = $.extend(true, {}, this._sortRules, this.options.sortsRules); + + $.each(this.sortRules, function(name, method) { + if (typeof method != 'function') { + delete self.sortRules[name]; + } + }); + + this.compare = $.proxy(this.compare, this); /** - * @class Go into previous folder - * @param Object elFinder + * Delay in ms before open notification dialog + * + * @type Number + * @default 500 **/ - back : function(fm) { - var self = this; - this.name = 'Back'; - this.fm = fm; - - this.exec = function() { - if (this.fm.history.length) { - this.fm.ajax({ cmd : 'open', target : this.fm.history.pop() }, function(data) { - self.fm.reload(data); - }); - } - } - - this.isAllowed = function() { - return this.fm.history.length - } - - }, + this.notifyDelay = this.options.notifyDelay > 0 ? parseInt(this.options.notifyDelay) : 500; /** - * @class Reload current directory and navigation panel - * @param Object elFinder + * Dragging UI Helper object + * + * @type jQuery | null **/ - reload : function(fm) { - var self = this; - this.name = 'Reload'; - this.fm = fm; - - this.exec = function() { - this.fm.ajax({ cmd : 'open', target : this.fm.cwd.hash, tree : true }, function(data) { - self.fm.reload(data); - }); - } - - this.cm = function(t) { - return t == 'cwd'; - } - }, + this.draggingUiHelper = null, /** - * @class Open file/folder - * @param Object elFinder + * Base draggable options + * + * @type Object **/ - open : function(fm) { - var self = this; - this.name = 'Open'; - this.fm = fm; - - /** - * Open file/folder - * @param String file/folder id (only from click on nav tree) - **/ - this.exec = function(dir) { - var t = null; - if (dir) { - t = { - hash : $(dir).attr('key'), - mime : 'directory', - read : !$(dir).hasClass('noaccess') && !$(dir).hasClass('dropbox') + this.draggable = { + appendTo : 'body', + addClasses : true, + delay : 30, + distance : 8, + revert : true, + refreshPositions : true, + cursor : 'move', + cursorAt : {left : 50, top : 47}, + start : function(e, ui) { + var targets = $.map(ui.helper.data('files')||[], function(h) { return h || null ;}), + cnt, h; + self.draggingUiHelper = ui.helper; + cnt = targets.length; + while (cnt--) { + h = targets[cnt]; + if (files[h].locked) { + ui.helper.addClass('elfinder-drag-helper-plus').data('locked', true); + break; } - } else { - t = this.fm.getSelected(0); - } - - if (!t.hash) { - return; - } - if (!t.read) { - return this.fm.view.error('Access denied'); - } - if (t.type == 'link' && !t.link) { - return this.fm.view.error('Unable to open broken link'); - } - if (t.mime == 'directory') { - openDir(t.link||t.hash); - } else { - openFile(t); } + }, + stop : function() { + self.draggingUiHelper = null; + self.trigger('focus').trigger('dragstop'); + }, + helper : function(e, ui) { + var element = this.id ? $(this) : $(this).parents('[id]:first'), + helper = $('
            '), + icon = function(mime) { return '
            '; }, + hashes, l; - function openDir(id) { - self.fm.history.push(self.fm.cwd.hash); - self.fm.ajax({ cmd : 'open', target : id }, function(data) { - self.fm.reload(data); - }); + self.draggingUiHelper && self.draggingUiHelper.stop(true, true); + + self.trigger('dragstart', {target : element[0], originalEvent : e}); + + hashes = element.is('.'+self.res('class', 'cwdfile')) + ? self.selected() + : [self.navId2Hash(element.attr('id'))]; + + helper.append(icon(files[hashes[0]].mime)).data('files', hashes).data('locked', false); + + if ((l = hashes.length) > 1) { + helper.append(icon(files[hashes[l-1]].mime) + ''+l+''); } - function openFile(f) { - var s, ws = ''; - if (f.dim) { - s = f.dim.split('x'); - ws = 'width='+(parseInt(s[0])+20)+',height='+(parseInt(s[1])+20)+','; + $(document).bind(keydown + ' keyup.' + namespace, function(e){ + if (helper.is(':visible') && ! helper.data('locked')) { + helper.toggleClass('elfinder-drag-helper-plus', e.shiftKey||e.ctrlKey||e.metaKey); } - window.open(f.url||self.fm.options.url+'?cmd=open¤t='+(f.parent||self.fm.cwd.hash)+'&target='+(f.link||f.hash), false, 'top=50,left=50,'+ws+'scrollbars=yes,resizable=yes'); - } + }); + + return helper; } + }; - this.isAllowed = function() { - return this.fm.selected.length == 1 && this.fm.getSelected(0).read; - } - - this.cm = function(t) { - return t == 'file'; - } - - }, + /** + * Base droppable options + * + * @type Object + **/ + this.droppable = { + // greedy : true, + tolerance : 'pointer', + accept : '.elfinder-cwd-file-wrapper,.elfinder-navbar-dir,.elfinder-cwd-file', + hoverClass : this.res('class', 'adroppable'), + drop : function(e, ui) { + var dst = $(this), + targets = $.map(ui.helper.data('files')||[], function(h) { return h || null }), + result = [], + c = 'class', + cnt, hash, i, h; + + if (dst.is('.'+self.res(c, 'cwd'))) { + hash = cwd; + } else if (dst.is('.'+self.res(c, 'cwdfile'))) { + hash = dst.attr('id'); + } else if (dst.is('.'+self.res(c, 'navdir'))) { + hash = self.navId2Hash(dst.attr('id')); + } + + cnt = targets.length; + + while (cnt--) { + h = targets[cnt]; + // ignore drop into itself or in own location + h != hash && files[h].phash != hash && result.push(h); + } + + if (result.length) { + ui.helper.hide(); + self.clipboard(result, !(e.ctrlKey||e.shiftKey||e.metaKey||ui.helper.data('locked'))); + self.exec('paste', hash); + self.trigger('drop', {files : targets}); + + } + } + }; /** - * @class. Return file url - * @param Object elFinder + * Return true if filemanager is active + * + * @return Boolean **/ - select : function(fm) { - this.name = 'Select file'; - this.fm = fm; - - if (fm.options.selectMultiple) { - this.exec = function() { - - var selected = $(fm.getSelected()).map(function() { - return fm.options.cutURL == 'root' ? this.url.substr(fm.params.url.length) : this.url.replace(new RegExp('^('+fm.options.cutURL+')'), ''); - }); - - fm.options.editorCallback(selected); - - if (fm.options.closeOnEditorCallback) { - fm.dock(); - fm.close(); - } - } - } else { - this.exec = function() { - var f = this.fm.getSelected(0); - - if (!f.url) { - return this.fm.view.error('File URL disabled by connector config'); - } - this.fm.options.editorCallback(this.fm.options.cutURL == 'root' ? f.url.substr(this.fm.params.url.length) : f.url.replace(new RegExp('^('+this.fm.options.cutURL+')'), '')); - - if (this.fm.options.closeOnEditorCallback) { - this.fm.dock(); - this.fm.close(); - this.fm.destroy(); - } - - } - } - - this.isAllowed = function() { - return ((this.fm.options.selectMultiple && this.fm.selected.length >= 1) || this.fm.selected.length == 1) && !/(symlink\-broken|directory)/.test(this.fm.getSelected(0).mime); - } - - this.cm = function(t) { - return t != 'cwd'; - // return t == 'file'; - } - }, + this.enabled = function() { + return node.is(':visible') && enabled; + } /** - * @class. Open/close quickLook window - * @param Object elFinder + * Return true if filemanager is visible + * + * @return Boolean **/ - quicklook : function(fm) { - var self = this; - this.name = 'Preview with Quick Look'; - this.fm = fm; + this.visible = function() { + return node.is(':visible'); + } + + /** + * Return root dir hash for current working directory + * + * @return String + */ + this.root = function(hash) { + var dir = files[hash || cwd], i; - this.exec = function() { - self.fm.quickLook.toggle(); + while (dir && dir.phash) { + dir = files[dir.phash] } - - this.isAllowed = function() { - return this.fm.selected.length == 1; + if (dir) { + return dir.hash; } - this.cm = function() { - return true; + while (i in files && files.hasOwnProperty(i)) { + dir = files[i] + if (!dir.phash && !dir.mime == 'directory' && dir.read) { + return dir.hash + } } - }, + + return ''; + } /** - * @class Display files/folders info in dialog window - * @param Object elFinder - **/ - info : function(fm) { - var self = this; - this.name = 'Get info'; - this.fm = fm; - - /** - * Open dialog windows for each selected file/folder or for current folder - **/ - this.exec = function() { - var f, s, cnt = this.fm.selected.length, w = $(window).width(), h = $(window).height(); - this.fm.lockShortcuts(true); - if (!cnt) { - /** nothing selected - show cwd info **/ - info(self.fm.cwd); - } else { - /** show info for each selected obj **/ - $.each(this.fm.getSelected(), function() { - info(this); - }); - } + * Return current working directory info + * + * @return Object + */ + this.cwd = function() { + return files[cwd] || {}; + } + + /** + * Return required cwd option + * + * @param String option name + * @return mixed + */ + this.option = function(name) { + return cwdOptions[name]||''; + } + + /** + * Return file data from current dir or tree by it's hash + * + * @param String file hash + * @return Object + */ + this.file = function(hash) { + return files[hash]; + }; + + /** + * Return all cached files + * + * @return Array + */ + this.files = function() { + return $.extend(true, {}, files); + } + + /** + * Return list of file parents hashes include file hash + * + * @param String file hash + * @return Array + */ + this.parents = function(hash) { + var parents = [], + dir; + + while ((dir = this.file(hash))) { + parents.unshift(dir.hash); + hash = dir.phash; + } + return parents; + } + + this.path2array = function(hash, i18) { + var file, + path = []; - function info(f) { - var p = ['50%', '50%'], x, y, d, - tb = ''; - - if (f.link) { - tb += ''; - } - if (f.dim) { - tb += ''; - } - if (f.url) { - tb += ''; - } - - if (cnt>1) { - d = $('.el-finder-dialog-info:last'); - if (!d.length) { - x = Math.round(((w-350)/2)-(cnt*10)); - y = Math.round(((h-300)/2)-(cnt*10)); - p = [x>20?x:20, y>20?y:20]; - } else { - x = d.offset().left+10; - y = d.offset().top+10; - p = [x').append(tb+'
            '+self.fm.i18n('Name')+''+f.name+'
            '+self.fm.i18n('Kind')+''+self.fm.view.mime2kind(f.link ? 'symlink' : f.mime)+'
            '+self.fm.i18n('Size')+''+self.fm.view.formatSize(f.size)+'
            '+self.fm.i18n('Modified')+''+self.fm.view.formatDate(f.date)+'
            '+self.fm.i18n('Permissions')+''+self.fm.view.formatPermissions(f.read, f.write, f.rm)+'
            '+self.fm.i18n('Link to')+''+f.linkTo+'
            '+self.fm.i18n('Dimensions')+''+f.dim+' px.
            '+self.fm.i18n('URL')+''+f.url+'
            ').dialog({ - dialogClass : 'el-finder-dialog el-finder-dialog-info', - width : 390, - position : p, - title : self.fm.i18n(f.mime == 'directory' ? 'Folder info' : 'File info'), - close : function() { if (--cnt <= 0) { self.fm.lockShortcuts(); } $(this).dialog('destroy'); }, - buttons : { Ok : function() { $(this).dialog('close'); }} - }); - } + var params = $.extend({}, this.customData, { + cmd: 'file', + target: file.hash + }); + if (this.oldAPI) { + params.cmd = 'open'; + params.current = file.phash; } + return this.options.url + (this.options.url.indexOf('?') === -1 ? '?' : '&') + $.param(params, true); + } - this.cm = function(t) { - return true; + /** + * Return thumbnail url + * + * @param String file hash + * @return String + */ + this.tmb = function(hash) { + var file = files[hash], + url = file && file.tmb && file.tmb != 1 ? cwdOptions['tmbUrl'] + file.tmb : ''; + + if (url && (this.UA.Opera || this.UA.IE)) { + url += '?_=' + new Date().getTime(); } - }, + return url; + } /** - * @class Rename file/folder - * @param Object elFinder + * Return selected files hashes + * + * @return Array **/ - rename : function(fm) { - var self = this; - this.name = 'Rename'; - this.fm = fm; - - this.exec = function() { - var s = this.fm.getSelected(), el, c, input, f, n; - - if (s.length == 1) { - f = s[0]; - el = this.fm.view.cwd.find('[key="'+f.hash+'"]'); - c = this.fm.options.view == 'icons' ? el.children('label') : el.find('td').eq(1); - n = c.html(); - input = $('').val(f.name).appendTo(c.empty()) - .bind('change blur', rename) - .keydown(function(e) { - e.stopPropagation(); - if (e.keyCode == 27) { - restore(); - } else if (e.keyCode == 13) { - if (f.name == input.val()) { - restore(); - } else { - $(this).trigger('change'); - } - } - }) - .click(function(e) { e.stopPropagation(); }) - .select() - .focus(); - this.fm.lockShortcuts(true); - } - - function restore() { - c.html(n); - self.fm.lockShortcuts(); + this.selected = function() { + return selected.slice(0); + } + + /** + * Return selected files info + * + * @return Array + */ + this.selectedFiles = function() { + return $.map(selected, function(hash) { return files[hash] ? $.extend({}, files[hash]) : null }); + }; + + /** + * Return true if file with required name existsin required folder + * + * @param String file name + * @param String parent folder hash + * @return Boolean + */ + this.fileByName = function(name, phash) { + var hash; + + for (hash in files) { + if (files.hasOwnProperty(hash) && files[hash].phash == phash && files[hash].name == name) { + return files[hash]; } - - function rename() { + } + }; + + /** + * Valid data for required command based on rules + * + * @param String command name + * @param Object cammand's data + * @return Boolean + */ + this.validResponse = function(cmd, data) { + return data.error || this.rules[this.rules[cmd] ? cmd : 'defaults'](data); + } + + /** + * Proccess ajax request. + * Fired events : + * @todo + * @example + * @todo + * @return $.Deferred + */ + this.request = function(options) { + var self = this, + o = this.options, + dfrd = $.Deferred(), + // request data + data = $.extend({}, o.customData, {mimes : o.onlyMimes}, options.data || options), + // command name + cmd = data.cmd, + // call default fail callback (display error dialog) ? + deffail = !(options.preventDefault || options.preventFail), + // call default success callback ? + defdone = !(options.preventDefault || options.preventDone), + // options for notify dialog + notify = $.extend({}, options.notify), + // do not normalize data - return as is + raw = !!options.raw, + // sync files on request fail + syncOnFail = options.syncOnFail, + // open notify dialog timeout + timeout, + // request options + options = $.extend({ + url : o.url, + async : true, + type : this.requestType, + dataType : 'json', + cache : false, + // timeout : 100, + data : data + }, options.options || {}), + /** + * Default success handler. + * Call default data handlers and fire event with command name. + * + * @param Object normalized response data + * @return void + **/ + done = function(data) { + data.warning && self.error(data.warning); - if (!self.fm.locked) { - var err, name = input.val(); - if (f.name == input.val()) { - return restore(); - } + cmd == 'open' && open($.extend(true, {}, data)); - if (!self.fm.isValidName(name)) { - err = 'Invalid name'; - } else if (self.fm.fileExists(name)) { - err = 'File or folder with the same name already exists'; - } - - if (err) { - self.fm.view.error(err); - el.addClass('ui-selected'); - self.fm.lockShortcuts(true); - return input.select().focus(); - } - - self.fm.ajax({cmd : 'rename', current : self.fm.cwd.hash, target : f.hash, name : name}, function(data) { - if (data.error) { - restore(); + // fire some event to update cache/ui + data.removed && data.removed.length && self.remove(data); + data.added && data.added.length && self.add(data); + data.changed && data.changed.length && self.change(data); + + // fire event with command name + self.trigger(cmd, data); + + // force update content + data.sync && self.sync(); + }, + /** + * Request error handler. Reject dfrd with correct error message. + * + * @param jqxhr request object + * @param String request status + * @return void + **/ + error = function(xhr, status) { + var error; + + switch (status) { + case 'abort': + error = xhr.quiet ? '' : ['errConnect', 'errAbort']; + break; + case 'timeout': + error = ['errConnect', 'errTimeout']; + break; + case 'parsererror': + error = ['errResponse', 'errDataNotJSON']; + break; + default: + if (xhr.status == 403) { + error = ['errConnect', 'errAccess']; + } else if (xhr.status == 404) { + error = ['errConnect', 'errNotFound']; } else { - f.mime == 'directory' && self.fm.removePlace(f.hash) && self.fm.addPlace(data.target); - self.fm.reload(data); - } - }, { force : true }); + error = 'errConnect'; + } + } + + dfrd.reject(error, xhr, status); + }, + /** + * Request success handler. Valid response data and reject/resolve dfrd. + * + * @param Object response data + * @param String request status + * @return void + **/ + success = function(response) { + if (raw) { + return dfrd.resolve(response); + } + + if (!response) { + return dfrd.reject(['errResponse', 'errDataEmpty'], xhr); + } else if (!$.isPlainObject(response)) { + return dfrd.reject(['errResponse', 'errDataNotJSON'], xhr); + } else if (response.error) { + return dfrd.reject(response.error, xhr); + } else if (!self.validResponse(cmd, response)) { + return dfrd.reject('errResponse', xhr); + } + + response = self.normalize(response); + + if (!self.api) { + self.api = response.api || 1; + self.newAPI = self.api >= 2; + self.oldAPI = !self.newAPI; + } + + if (response.options) { + cwdOptions = $.extend({}, cwdOptions, response.options); + } + + if (response.netDrivers) { + self.netDrivers = response.netDrivers; } + + dfrd.resolve(response); + response.debug && self.debug('backend-debug', response.debug); + }, + xhr, _xhr + ; + + defdone && dfrd.done(done); + dfrd.fail(function(error) { + if (error) { + deffail ? self.error(error) : self.debug('error', self.i18n(error)); } - } + }) - /** - * Return true if only one file selected and has write perms and current dir has write perms - * @return Boolean - */ - this.isAllowed = function() { - return this.fm.cwd.write && this.fm.getSelected(0).write; - } + if (!cmd) { + return dfrd.reject('errCmdReq'); + } - this.cm = function(t) { - return t == 'file'; + if (syncOnFail) { + dfrd.fail(function(error) { + error && self.sync(); + }); } - }, - - /** - * @class Copy file/folder to "clipboard" - * @param Object elFinder - **/ - copy : function(fm) { - this.name = 'Copy'; - this.fm = fm; - - this.exec = function() { - this.fm.setBuffer(this.fm.selected); + + if (notify.type && notify.cnt) { + timeout = setTimeout(function() { + self.notify(notify); + dfrd.always(function() { + notify.cnt = -(parseInt(notify.cnt)||0); + self.notify(notify); + }) + }, self.notifyDelay) + + dfrd.always(function() { + clearTimeout(timeout); + }); } - this.isAllowed = function() { - if (this.fm.selected.length) { - var s = this.fm.getSelected(), l = s.length; - while (l--) { - if (s[l].read) { - return true; - } + // quiet abort not completed "open" requests + if (cmd == 'open') { + while ((_xhr = queue.pop())) { + if (_xhr.state() == 'pending') { + _xhr.quiet = true; + _xhr.abort(); } } - return false; } + + delete options.preventFail + + xhr = this.transport.send(options).fail(error).done(success); - this.cm = function(t) { - return t != 'cwd'; - } - }, - - /** - * @class Cut file/folder to "clipboard" - * @param Object elFinder - **/ - cut : function(fm) { - this.name = 'Cut'; - this.fm = fm; + // this.transport.send(options) - this.exec = function() { - this.fm.setBuffer(this.fm.selected, 1); + // add "open" xhr into queue + if (cmd == 'open') { + queue.unshift(xhr); + dfrd.always(function() { + var ndx = $.inArray(xhr, queue); + + ndx !== -1 && queue.splice(ndx, 1); + }); } - this.isAllowed = function() { - if (this.fm.selected.length) { - var s = this.fm.getSelected(), l = s.length; + return dfrd; + }; + + /** + * Compare current files cache with new files and return diff + * + * @param Array new files + * @return Object + */ + this.diff = function(incoming) { + var raw = {}, + added = [], + removed = [], + changed = [], + isChanged = function(hash) { + var l = changed.length; + while (l--) { - if (s[l].read && s[l].rm) { + if (changed[l].hash == hash) { return true; } } + }; + + $.each(incoming, function(i, f) { + raw[f.hash] = f; + }); + + // find removed + $.each(files, function(hash, f) { + !raw[hash] && removed.push(hash); + }); + + // compare files + $.each(raw, function(hash, file) { + var origin = files[hash]; + + if (!origin) { + added.push(file); + } else { + $.each(file, function(prop) { + if (file[prop] != origin[prop]) { + changed.push(file) + return false; + } + }); } - return false; - } + }); - this.cm = function(t) { - return t != 'cwd'; - } - }, + // parents of removed dirs mark as changed (required for tree correct work) + $.each(removed, function(i, hash) { + var file = files[hash], + phash = file.phash; + + if (phash + && file.mime == 'directory' + && $.inArray(phash, removed) === -1 + && raw[phash] + && !isChanged(phash)) { + changed.push(raw[phash]); + } + }); + + return { + added : added, + removed : removed, + changed : changed + }; + } /** - * @class Paste file/folder from "clipboard" - * @param Object elFinder - **/ - paste : function(fm) { - var self = this; - this.name = 'Paste'; - this.fm = fm; - - this.exec = function() { - var i, d, f, r, msg = ''; - - if (!this.fm.buffer.dst) { - this.fm.buffer.dst = this.fm.cwd.hash; - } - d = this.fm.view.tree.find('[key="'+this.fm.buffer.dst+'"]'); - if (!d.length || d.hasClass('noaccess') || d.hasClass('readonly')) { - return this.fm.view.error('Access denied'); - } - if (this.fm.buffer.src == this.fm.buffer.dst) { - return this.fm.view.error('Unable to copy into itself'); - } - var o = { - cmd : 'paste', - current : this.fm.cwd.hash, - src : this.fm.buffer.src, - dst : this.fm.buffer.dst, - cut : this.fm.buffer.cut + * Sync content + * + * @return jQuery.Deferred + */ + this.sync = function() { + var self = this, + dfrd = $.Deferred().done(function() { self.trigger('sync'); }), + opts1 = { + data : {cmd : 'open', init : 1, target : cwd, tree : this.ui.tree ? 1 : 0}, + preventDefault : true + }, + opts2 = { + data : {cmd : 'tree', target : (cwd == this.root())? cwd : this.file(cwd).phash}, + preventDefault : true }; - if (this.fm.jquery>132) { - o.targets = this.fm.buffer.files; - } else { - o['targets[]'] = this.fm.buffer.files; - } - this.fm.ajax(o, function(data) { - data.cdc && self.fm.reload(data); - }, {force : true}); - } - this.isAllowed = function() { - return this.fm.buffer.files; - } + $.when( + this.request(opts1), + this.request(opts2) + ) + .fail(function(error) { + dfrd.reject(error); + error && self.request({ + data : {cmd : 'open', target : self.lastDir(''), tree : 1, init : 1}, + notify : {type : 'open', cnt : 1, hideCnt : true}, + preventDefault : true + }); + }) + .done(function(odata, pdata) { + var diff = self.diff(odata.files.concat(pdata && pdata.tree ? pdata.tree : [])); + + diff.added.push(odata.cwd) + diff.removed.length && self.remove(diff); + diff.added.length && self.add(diff); + diff.changed.length && self.change(diff); + return dfrd.resolve(diff); + }); - this.cm = function(t) { - return t == 'cwd'; - } - }, + return dfrd; + } + + this.upload = function(files) { + return this.transport.upload(files, this); + } /** - * @class Remove files/folders - * @param Object elFinder - **/ - rm : function(fm) { - var self = this; - this.name = 'Remove'; - this.fm = fm; - - this.exec = function() { - var i, ids = [], s =this.fm.getSelected(); - for (var i=0; i < s.length; i++) { - if (!s[i].rm) { - return this.fm.view.error(s[i].name+': '+this.fm.i18n('Access denied')); - } - ids.push(s[i].hash); - }; - if (ids.length) { - this.fm.lockShortcuts(true); - $('
            '+this.fm.i18n('Are you sure you want to remove files?
            This cannot be undone!')+'
            ') - .dialog({ - title : this.fm.i18n('Confirmation required'), - dialogClass : 'el-finder-dialog', - width : 350, - close : function() { self.fm.lockShortcuts(); }, - buttons : { - Cancel : function() { $(this).dialog('close'); }, - Ok : function() { - $(this).dialog('close'); - var o = { cmd : 'rm', current : self.fm.cwd.hash }; - if (self.fm.jquery > 132) { - o.targets = ids; - } else { - o['targets[]'] = ids; - } - self.fm.ajax(o, function(data) { data.tree && self.fm.reload(data); }, {force : true}); - } - } - }); - } - } + * Attach listener to events + * To bind to multiply events at once, separate events names by space + * + * @param String event(s) name(s) + * @param Object event handler + * @return elFinder + */ + this.bind = function(event, callback) { + var i; - this.isAllowed = function(f) { - if (this.fm.selected.length) { - var s = this.fm.getSelected(), l = s.length; - while (l--) { - if (s[l].rm) { - return true; - } + if (typeof(callback) == 'function') { + event = ('' + event).toLowerCase().split(/\s+/); + + for (i = 0; i < event.length; i++) { + if (listeners[event[i]] === void(0)) { + listeners[event[i]] = []; } + listeners[event[i]].push(callback); } - return false; - } - - this.cm = function(t) { - return t != 'cwd'; } - }, + return this; + }; /** - * @class Create new folder - * @param Object elFinder - **/ - mkdir : function(fm) { - var self = this; - this.name = 'New folder'; - this.fm = fm; - - this.exec = function() { - self.fm.unselectAll(); - var n = this.fm.uniqueName('untitled folder'); - input = $('').val(n); - prev = this.fm.view.cwd.find('.directory:last'); - f = {name : n, hash : '', mime :'directory', read : true, write : true, date : '', size : 0}, - el = this.fm.options.view == 'list' - ? $(this.fm.view.renderRow(f)).children('td').eq(1).empty().append(input).end().end() - : $(this.fm.view.renderIcon(f)).children('label').empty().append(input).end() - el.addClass('directory ui-selected'); - if (prev.length) { - el.insertAfter(prev); - } else if (this.fm.options.view == 'list') { - el.insertAfter(this.fm.view.cwd.find('tr').eq(0)) - } else { - el.prependTo(this.fm.view.cwd) - } - self.fm.checkSelectedPos(); - input.select().focus() - .click(function(e) { e.stopPropagation(); }) - .bind('change blur', mkdir) - .keydown(function(e) { - e.stopPropagation(); - if (e.keyCode == 27) { - el.remove(); - self.fm.lockShortcuts(); - } else if (e.keyCode == 13) { - mkdir(); - } - }); + * Remove event listener if exists + * + * @param String event name + * @param Function callback + * @return elFinder + */ + this.unbind = function(event, callback) { + var l = listeners[('' + event).toLowerCase()] || [], + i = l.indexOf(callback); + + i > -1 && l.splice(i, 1); + //delete callback; // need this? + callback = null + return this; + }; + + /** + * Fire event - send notification to all event listeners + * + * @param String event type + * @param Object data to send across event + * @return elFinder + */ + this.trigger = function(event, data) { + var event = event.toLowerCase(), + handlers = listeners[event] || [], i, j; + + this.debug('event-'+event, data) + + if (handlers.length) { + event = $.Event(event); - self.fm.lockShortcuts(true); + for (i = 0; i < handlers.length; i++) { + // to avoid data modifications. remember about "sharing" passing arguments in js :) + event.data = $.extend(true, {}, data); - function mkdir() { - if (!self.fm.locked) { - var err, name = input.val(); - if (!self.fm.isValidName(name)) { - err = 'Invalid name'; - } else if (self.fm.fileExists(name)) { - err = 'File or folder with the same name already exists'; - } - if (err) { - self.fm.view.error(err); - self.fm.lockShortcuts(true); - el.addClass('ui-selected'); - return input.select().focus(); + try { + if (handlers[i](event, this) === false + || event.isDefaultPrevented()) { + this.debug('event-stoped', event.type); + break; } - - self.fm.ajax({cmd : 'mkdir', current : self.fm.cwd.hash, name : name}, function(data) { - if (data.error) { - el.addClass('ui-selected'); - return input.select().focus(); - } - self.fm.reload(data); - }, {force : true}); + } catch (ex) { + window.console && window.console.log && window.console.log(ex); } + } } - - this.isAllowed = function() { - return this.fm.cwd.write; - } - - this.cm = function(t) { - return t == 'cwd'; - } - }, + return this; + } /** - * @class Create new text file - * @param Object elFinder - **/ - mkfile : function(fm) { - var self = this; - this.name = 'New text file'; - this.fm = fm; - - this.exec = function() { - self.fm.unselectAll(); - var n = this.fm.uniqueName('untitled file', '.txt'), - input = $('').val(n), - f = {name : n, hash : '', mime :'text/plain', read : true, write : true, date : '', size : 0}, - el = this.fm.options.view == 'list' - ? $(this.fm.view.renderRow(f)).children('td').eq(1).empty().append(input).end().end() - : $(this.fm.view.renderIcon(f)).children('label').empty().append(input).end(); - - el.addClass('text ui-selected').appendTo(this.fm.options.view == 'list' ? self.fm.view.cwd.children('table') : self.fm.view.cwd); + * Bind keybord shortcut to keydown event + * + * @example + * elfinder.shortcut({ + * pattern : 'ctrl+a', + * description : 'Select all files', + * callback : function(e) { ... }, + * keypress : true|false (bind to keypress instead of keydown) + * }) + * + * @param Object shortcut config + * @return elFinder + */ + this.shortcut = function(s) { + var patterns, pattern, code, i, parts; + + if (this.options.allowShortcuts && s.pattern && $.isFunction(s.callback)) { + patterns = s.pattern.toUpperCase().split(/\s+/); - input.select().focus() - .bind('change blur', mkfile) - .click(function(e) { e.stopPropagation(); }) - .keydown(function(e) { - e.stopPropagation(); - if (e.keyCode == 27) { - el.remove(); - self.fm.lockShortcuts(); - } else if (e.keyCode == 13) { - mkfile(); - } - }); - self.fm.lockShortcuts(true); - - function mkfile() { - if (!self.fm.locked) { - var err, name = input.val(); - if (!self.fm.isValidName(name)) { - err = 'Invalid name'; - } else if (self.fm.fileExists(name)) { - err = 'File or folder with the same name already exists'; - } - if (err) { - self.fm.view.error(err); - self.fm.lockShortcuts(true); - el.addClass('ui-selected'); - return input.select().focus(); - } - self.fm.ajax({cmd : 'mkfile', current : self.fm.cwd.hash, name : name}, function(data) { - if (data.error) { - el.addClass('ui-selected'); - return input.select().focus(); - } - self.fm.reload(data); - }, {force : true }); + for (i= 0; i < patterns.length; i++) { + pattern = patterns[i] + parts = pattern.split('+'); + code = (code = parts.pop()).length == 1 + ? code > 0 ? code : code.charCodeAt(0) + : $.ui.keyCode[code]; + + if (code && !shortcuts[pattern]) { + shortcuts[pattern] = { + keyCode : code, + altKey : $.inArray('ALT', parts) != -1, + ctrlKey : $.inArray('CTRL', parts) != -1, + shiftKey : $.inArray('SHIFT', parts) != -1, + type : s.type || 'keydown', + callback : s.callback, + description : s.description, + pattern : pattern + }; } } - - } - - this.isAllowed = function(f) { - return this.fm.cwd.write; - } - - this.cm = function(t) { - return t == 'cwd'; } - }, + return this; + } /** - * @class Upload files - * @param Object elFinder + * Registered shortcuts + * + * @type Object **/ - upload : function(fm) { - var self = this; - this.name = 'Upload files'; - this.fm = fm; - - this.exec = function() { - - var id = 'el-finder-io-'+(new Date().getTime()), - e = $('
            '), - m = this.fm.params.uplMaxSize ? '

            '+this.fm.i18n('Maximum allowed files size')+': '+this.fm.params.uplMaxSize+'

            ' : '', - b = $('

            '+this.fm.i18n('Add field')+'

            ') - .click(function() { $(this).before('

            '); }), - f = '
            ', - d = $('
            '), - i = 3; - - while (i--) { f += '

            '; } - - // Rails csrf meta tag (for XSS protection), see #256 - var rails_csrf_token = $('meta[name=csrf-token]').attr('content'); - var rails_csrf_param = $('meta[name=csrf-param]').attr('content'); - if (rails_csrf_param != null && rails_csrf_token != null) { - f += ''; - } - - f = $(f+''); - - d.append(f.append(e.hide()).prepend(m).append(b)).dialog({ - dialogClass : 'el-finder-dialog', - title : self.fm.i18n('Upload files'), - modal : true, - resizable : false, - close : function() { self.fm.lockShortcuts(); }, - buttons : { - Cancel : function() { $(this).dialog('close'); }, - Ok : function() { - if (!$(':file[value]', f).length) { - return error(self.fm.i18n('Select at least one file to upload')); - } - setTimeout(function() { - self.fm.lock(); - if ($.browser.safari) { - $.ajax({ - url : self.fm.options.url, - data : {cmd : 'ping'}, - error : submit, - success : submit - }); - } else { - submit(); - } - }); - $(this).dialog('close'); - } - } - }); - - self.fm.lockShortcuts(true); - - function error(err) { - e.show().find('div').empty().text(err); - } + this.shortcuts = function() { + var ret = []; + + $.each(shortcuts, function(i, s) { + ret.push([s.pattern, self.i18n(s.description)]); + }); + return ret; + }; + + /** + * Get/set clipboard content. + * Return new clipboard content. + * + * @example + * this.clipboard([]) - clean clipboard + * this.clipboard([{...}, {...}], true) - put 2 files in clipboard and mark it as cutted + * + * @param Array new files hashes + * @param Boolean cut files? + * @return Array + */ + this.clipboard = function(hashes, cut) { + var map = function() { return $.map(clipboard, function(f) { return f.hash }); } - function submit() { - var $io = $('', + error : '

            The requested content cannot be loaded.
            Please try again later.

            ', + closeBtn : '', + next : '', + prev : '' + }, + + // Properties for each animation type + // Opening fancyBox + openEffect : 'fade', // 'elastic', 'fade' or 'none' + openSpeed : 250, + openEasing : 'swing', + openOpacity : true, + openMethod : 'zoomIn', + + // Closing fancyBox + closeEffect : 'fade', // 'elastic', 'fade' or 'none' + closeSpeed : 250, + closeEasing : 'swing', + closeOpacity : true, + closeMethod : 'zoomOut', + + // Changing next gallery item + nextEffect : 'elastic', // 'elastic', 'fade' or 'none' + nextSpeed : 250, + nextEasing : 'swing', + nextMethod : 'changeIn', + + // Changing previous gallery item + prevEffect : 'elastic', // 'elastic', 'fade' or 'none' + prevSpeed : 250, + prevEasing : 'swing', + prevMethod : 'changeOut', + + // Enable default helpers + helpers : { + overlay : true, + title : true + }, + + // Callbacks + onCancel : $.noop, // If canceling + beforeLoad : $.noop, // Before loading + afterLoad : $.noop, // After loading + beforeShow : $.noop, // Before changing in current item + afterShow : $.noop, // After opening + beforeChange : $.noop, // Before changing gallery item + beforeClose : $.noop, // Before closing + afterClose : $.noop // After closing + }, + + //Current state + group : {}, // Selected group + opts : {}, // Group options + previous : null, // Previous element + coming : null, // Element being loaded + current : null, // Currently loaded element + isActive : false, // Is activated + isOpen : false, // Is currently open + isOpened : false, // Have been fully opened at least once + + wrap : null, + skin : null, + outer : null, + inner : null, + + player : { + timer : null, + isActive : false + }, + + // Loaders + ajaxLoad : null, + imgPreload : null, + + // Some collections + transitions : {}, + helpers : {}, + + /* + * Static methods + */ + + open: function (group, opts) { + if (!group) { + return; + } + + if (!$.isPlainObject(opts)) { + opts = {}; + } + + // Close if already active + if (false === F.close(true)) { + return; + } + + // Normalize group + if (!$.isArray(group)) { + group = isQuery(group) ? $(group).get() : [group]; + } + + // Recheck if the type of each element is `object` and set content type (image, ajax, etc) + $.each(group, function(i, element) { + var obj = {}, + href, + title, + content, + type, + rez, + hrefParts, + selector; + + if ($.type(element) === "object") { + // Check if is DOM element + if (element.nodeType) { + element = $(element); + } + + if (isQuery(element)) { + obj = { + href : element.data('fancybox-href') || element.attr('href'), + title : element.data('fancybox-title') || element.attr('title'), + isDom : true, + element : element + }; + + if ($.metadata) { + $.extend(true, obj, element.metadata()); + } + + } else { + obj = element; + } + } + + href = opts.href || obj.href || (isString(element) ? element : null); + title = opts.title !== undefined ? opts.title : obj.title || ''; + + content = opts.content || obj.content; + type = content ? 'html' : (opts.type || obj.type); + + if (!type && obj.isDom) { + type = element.data('fancybox-type'); + + if (!type) { + rez = element.prop('class').match(/fancybox\.(\w+)/); + type = rez ? rez[1] : null; + } + } + + if (isString(href)) { + // Try to guess the content type + if (!type) { + if (F.isImage(href)) { + type = 'image'; + + } else if (F.isSWF(href)) { + type = 'swf'; + + } else if (href.charAt(0) === '#') { + type = 'inline'; + + } else if (isString(element)) { + type = 'html'; + content = element; + } + } + + // Split url into two pieces with source url and content selector, e.g, + // "/mypage.html #my_id" will load "/mypage.html" and display element having id "my_id" + if (type === 'ajax') { + hrefParts = href.split(/\s+/, 2); + href = hrefParts.shift(); + selector = hrefParts.shift(); + } + } + + if (!content) { + if (type === 'inline') { + if (href) { + content = $( isString(href) ? href.replace(/.*(?=#[^\s]+$)/, '') : href ); //strip for ie7 + + } else if (obj.isDom) { + content = element; + } + + } else if (type === 'html') { + content = href; + + } else if (!type && !href && obj.isDom) { + type = 'inline'; + content = element; + } + } + + $.extend(obj, { + href : href, + type : type, + content : content, + title : title, + selector : selector + }); + + group[ i ] = obj; + }); + + // Extend the defaults + F.opts = $.extend(true, {}, F.defaults, opts); + + // All options are merged recursive except keys + if (opts.keys !== undefined) { + F.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false; + } + + F.group = group; + + return F._start(F.opts.index); + }, + + // Cancel image loading or abort ajax request + cancel: function () { + var coming = F.coming; + + if (!coming || false === F.trigger('onCancel')) { + return; + } + + F.hideLoading(); + + if (F.ajaxLoad) { + F.ajaxLoad.abort(); + } + + F.ajaxLoad = null; + + if (F.imgPreload) { + F.imgPreload.onload = F.imgPreload.onerror = null; + } + + if (coming.wrap) { + coming.wrap.stop(true, true).trigger('onReset').remove(); + } + + F.coming = null; + + // If the first item has been canceled, then clear everything + if (!F.current) { + F._afterZoomOut( coming ); + } + }, + + // Start closing animation if is open; remove immediately if opening/closing + close: function (event) { + F.cancel(); + + if (false === F.trigger('beforeClose')) { + return; + } + + F.unbindEvents(); + + if (!F.isActive) { + return; + } + + if (!F.isOpen || event === true) { + $('.fancybox-wrap').stop(true).trigger('onReset').remove(); + + F._afterZoomOut(); + + } else { + F.isOpen = F.isOpened = false; + F.isClosing = true; + + $('.fancybox-item, .fancybox-nav').remove(); + + F.wrap.stop(true, true).removeClass('fancybox-opened'); + + F.transitions[ F.current.closeMethod ](); + } + }, + + // Manage slideshow: + // $.fancybox.play(); - toggle slideshow + // $.fancybox.play( true ); - start + // $.fancybox.play( false ); - stop + play: function ( action ) { + var clear = function () { + clearTimeout(F.player.timer); + }, + set = function () { + clear(); + + if (F.current && F.player.isActive) { + F.player.timer = setTimeout(F.next, F.current.playSpeed); + } + }, + stop = function () { + clear(); + + D.unbind('.player'); + + F.player.isActive = false; + + F.trigger('onPlayEnd'); + }, + start = function () { + if (F.current && (F.current.loop || F.current.index < F.group.length - 1)) { + F.player.isActive = true; + + D.bind({ + 'onCancel.player beforeClose.player' : stop, + 'onUpdate.player' : set, + 'beforeLoad.player' : clear + }); + + set(); + + F.trigger('onPlayStart'); + } + }; + + if (action === true || (!F.player.isActive && action !== false)) { + start(); + } else { + stop(); + } + }, + + // Navigate to next gallery item + next: function ( direction ) { + var current = F.current; + + if (current) { + if (!isString(direction)) { + direction = current.direction.next; + } + + F.jumpto(current.index + 1, direction, 'next'); + } + }, + + // Navigate to previous gallery item + prev: function ( direction ) { + var current = F.current; + + if (current) { + if (!isString(direction)) { + direction = current.direction.prev; + } + + F.jumpto(current.index - 1, direction, 'prev'); + } + }, + + // Navigate to gallery item by index + jumpto: function ( index, direction, router ) { + var current = F.current; + + if (!current) { + return; + } + + index = getScalar(index); + + F.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ]; + F.router = router || 'jumpto'; + + if (current.loop) { + if (index < 0) { + index = current.group.length + (index % current.group.length); + } + + index = index % current.group.length; + } + + if (current.group[ index ] !== undefined) { + F.cancel(); + + F._start(index); + } + }, + + // Center inside viewport and toggle position type to fixed or absolute if needed + reposition: function (e, onlyAbsolute) { + var current = F.current, + wrap = current ? current.wrap : null, + pos; + + if (wrap) { + pos = F._getPosition(onlyAbsolute); + + if (e && e.type === 'scroll') { + delete pos.position; + + wrap.stop(true, true).animate(pos, 200); + + } else { + wrap.css(pos); + + current.pos = $.extend({}, current.dim, pos); + } + } + }, + + update: function (e) { + var type = (e && e.type), + anyway = !type || type === 'orientationchange'; + + if (anyway) { + clearTimeout(didUpdate); + + didUpdate = null; + } + + if (!F.isOpen || didUpdate) { + return; + } + + didUpdate = setTimeout(function() { + var current = F.current; + + if (!current || F.isClosing) { + return; + } + + F.wrap.removeClass('fancybox-tmp'); + + if (anyway || type === 'load' || (type === 'resize' && current.autoResize)) { + F._setDimension(); + } + + if (!(type === 'scroll' && current.canShrink)) { + F.reposition(e); + } + + F.trigger('onUpdate'); + + didUpdate = null; + + }, (anyway && !isTouch ? 0 : 300)); + }, + + // Shrink content to fit inside viewport or restore if resized + toggle: function ( action ) { + if (F.isOpen) { + F.current.fitToView = $.type(action) === "boolean" ? action : !F.current.fitToView; + + // Help browser to restore document dimensions + if (isTouch) { + F.wrap.removeAttr('style').addClass('fancybox-tmp'); + + F.trigger('onUpdate'); + } + + F.update(); + } + }, + + hideLoading: function () { + D.unbind('.loading'); + + $('#fancybox-loading').remove(); + }, + + showLoading: function () { + var el, viewport; + + F.hideLoading(); + + el = $('
            ').click(F.cancel).appendTo('body'); + + // If user will press the escape-button, the request will be canceled + D.bind('keydown.loading', function(e) { + if ((e.which || e.keyCode) === 27) { + e.preventDefault(); + + F.cancel(); + } + }); + + if (!F.defaults.fixed) { + viewport = F.getViewport(); + + el.css({ + position : 'absolute', + top : (viewport.h * 0.5) + viewport.y, + left : (viewport.w * 0.5) + viewport.x + }); + } + }, + + getViewport: function () { + var locked = (F.current && F.current.locked) || false, + rez = { + x: W.scrollLeft(), + y: W.scrollTop() + }; + + if (locked) { + rez.w = locked[0].clientWidth; + rez.h = locked[0].clientHeight; + + } else { + // See http://bugs.jquery.com/ticket/6724 + rez.w = isTouch && window.innerWidth ? window.innerWidth : W.width(); + rez.h = isTouch && window.innerHeight ? window.innerHeight : W.height(); + } + + return rez; + }, + + // Unbind the keyboard / clicking actions + unbindEvents: function () { + if (F.wrap && isQuery(F.wrap)) { + F.wrap.unbind('.fb'); + } + + D.unbind('.fb'); + W.unbind('.fb'); + }, + + bindEvents: function () { + var current = F.current, + keys; + + if (!current) { + return; + } + + // Changing document height on iOS devices triggers a 'resize' event, + // that can change document height... repeating infinitely + W.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update); + + keys = current.keys; + + if (keys) { + D.bind('keydown.fb', function (e) { + var code = e.which || e.keyCode, + target = e.target || e.srcElement; + + // Skip esc key if loading, because showLoading will cancel preloading + if (code === 27 && F.coming) { + return false; + } + + // Ignore key combinations and key events within form elements + if (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) { + $.each(keys, function(i, val) { + if (current.group.length > 1 && val[ code ] !== undefined) { + F[ i ]( val[ code ] ); + + e.preventDefault(); + return false; + } + + if ($.inArray(code, val) > -1) { + F[ i ] (); + + e.preventDefault(); + return false; + } + }); + } + }); + } + + if ($.fn.mousewheel && current.mouseWheel) { + F.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) { + var target = e.target || null, + parent = $(target), + canScroll = false; + + while (parent.length) { + if (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) { + break; + } + + canScroll = isScrollable( parent[0] ); + parent = $(parent).parent(); + } + + if (delta !== 0 && !canScroll) { + if (F.group.length > 1 && !current.canShrink) { + if (deltaY > 0 || deltaX > 0) { + F.prev( deltaY > 0 ? 'down' : 'left' ); + + } else if (deltaY < 0 || deltaX < 0) { + F.next( deltaY < 0 ? 'up' : 'right' ); + } + + e.preventDefault(); + } + } + }); + } + }, + + trigger: function (event, o) { + var ret, obj = o || F.coming || F.current; + + if (!obj) { + return; + } + + if ($.isFunction( obj[event] )) { + ret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1)); + } + + if (ret === false) { + return false; + } + + if (obj.helpers) { + $.each(obj.helpers, function (helper, opts) { + if (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) { + F.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj); + } + }); + } + + D.trigger(event); + }, + + isImage: function (str) { + return isString(str) && str.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i); + }, + + isSWF: function (str) { + return isString(str) && str.match(/\.(swf)((\?|#).*)?$/i); + }, + + _start: function (index) { + var coming = {}, + obj, + href, + type, + margin, + padding; + + index = getScalar( index ); + obj = F.group[ index ] || null; + + if (!obj) { + return false; + } + + coming = $.extend(true, {}, F.opts, obj); + + // Convert margin and padding properties to array - top, right, bottom, left + margin = coming.margin; + padding = coming.padding; + + if ($.type(margin) === 'number') { + coming.margin = [margin, margin, margin, margin]; + } + + if ($.type(padding) === 'number') { + coming.padding = [padding, padding, padding, padding]; + } + + // 'modal' propery is just a shortcut + if (coming.modal) { + $.extend(true, coming, { + closeBtn : false, + closeClick : false, + nextClick : false, + arrows : false, + mouseWheel : false, + keys : null, + helpers: { + overlay : { + closeClick : false + } + } + }); + } + + // 'autoSize' property is a shortcut, too + if (coming.autoSize) { + coming.autoWidth = coming.autoHeight = true; + } + + if (coming.width === 'auto') { + coming.autoWidth = true; + } + + if (coming.height === 'auto') { + coming.autoHeight = true; + } + + /* + * Add reference to the group, so it`s possible to access from callbacks, example: + * afterLoad : function() { + * this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); + * } + */ + + coming.group = F.group; + coming.index = index; + + // Give a chance for callback or helpers to update coming item (type, title, etc) + F.coming = coming; + + if (false === F.trigger('beforeLoad')) { + F.coming = null; + + return; + } + + type = coming.type; + href = coming.href; + + if (!type) { + F.coming = null; + + //If we can not determine content type then drop silently or display next/prev item if looping through gallery + if (F.current && F.router && F.router !== 'jumpto') { + F.current.index = index; + + return F[ F.router ]( F.direction ); + } + + return false; + } + + F.isActive = true; + + if (type === 'image' || type === 'swf') { + coming.autoHeight = coming.autoWidth = false; + coming.scrolling = 'visible'; + } + + if (type === 'image') { + coming.aspectRatio = true; + } + + if (type === 'iframe' && isTouch) { + coming.scrolling = 'scroll'; + } + + // Build the neccessary markup + coming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' ); + + $.extend(coming, { + skin : $('.fancybox-skin', coming.wrap), + outer : $('.fancybox-outer', coming.wrap), + inner : $('.fancybox-inner', coming.wrap) + }); + + $.each(["Top", "Right", "Bottom", "Left"], function(i, v) { + coming.skin.css('padding' + v, getValue(coming.padding[ i ])); + }); + + F.trigger('onReady'); + + // Check before try to load; 'inline' and 'html' types need content, others - href + if (type === 'inline' || type === 'html') { + if (!coming.content || !coming.content.length) { + return F._error( 'content' ); + } + + } else if (!href) { + return F._error( 'href' ); + } + + if (type === 'image') { + F._loadImage(); + + } else if (type === 'ajax') { + F._loadAjax(); + + } else if (type === 'iframe') { + F._loadIframe(); + + } else { + F._afterLoad(); + } + }, + + _error: function ( type ) { + $.extend(F.coming, { + type : 'html', + autoWidth : true, + autoHeight : true, + minWidth : 0, + minHeight : 0, + scrolling : 'no', + hasError : type, + content : F.coming.tpl.error + }); + + F._afterLoad(); + }, + + _loadImage: function () { + // Reset preload image so it is later possible to check "complete" property + var img = F.imgPreload = new Image(); + + img.onload = function () { + this.onload = this.onerror = null; + + F.coming.width = this.width / F.opts.pixelRatio; + F.coming.height = this.height / F.opts.pixelRatio; + + F._afterLoad(); + }; + + img.onerror = function () { + this.onload = this.onerror = null; + + F._error( 'image' ); + }; + + img.src = F.coming.href; + + if (img.complete !== true) { + F.showLoading(); + } + }, + + _loadAjax: function () { + var coming = F.coming; + + F.showLoading(); + + F.ajaxLoad = $.ajax($.extend({}, coming.ajax, { + url: coming.href, + error: function (jqXHR, textStatus) { + if (F.coming && textStatus !== 'abort') { + F._error( 'ajax', jqXHR ); + + } else { + F.hideLoading(); + } + }, + success: function (data, textStatus) { + if (textStatus === 'success') { + coming.content = data; + + F._afterLoad(); + } + } + })); + }, + + _loadIframe: function() { + var coming = F.coming, + iframe = $(coming.tpl.iframe.replace(/\{rnd\}/g, new Date().getTime())) + .attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling) + .attr('src', coming.href); + + // This helps IE + $(coming.wrap).bind('onReset', function () { + try { + $(this).find('iframe').hide().attr('src', '//about:blank').end().empty(); + } catch (e) {} + }); + + if (coming.iframe.preload) { + F.showLoading(); + + iframe.one('load', function() { + $(this).data('ready', 1); + + // iOS will lose scrolling if we resize + if (!isTouch) { + $(this).bind('load.fb', F.update); + } + + // Without this trick: + // - iframe won't scroll on iOS devices + // - IE7 sometimes displays empty iframe + $(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show(); + + F._afterLoad(); + }); + } + + coming.content = iframe.appendTo( coming.inner ); + + if (!coming.iframe.preload) { + F._afterLoad(); + } + }, + + _preloadImages: function() { + var group = F.group, + current = F.current, + len = group.length, + cnt = current.preload ? Math.min(current.preload, len - 1) : 0, + item, + i; + + for (i = 1; i <= cnt; i += 1) { + item = group[ (current.index + i ) % len ]; + + if (item.type === 'image' && item.href) { + new Image().src = item.href; + } + } + }, + + _afterLoad: function () { + var coming = F.coming, + previous = F.current, + placeholder = 'fancybox-placeholder', + current, + content, + type, + scrolling, + href, + embed; + + F.hideLoading(); + + if (!coming || F.isActive === false) { + return; + } + + if (false === F.trigger('afterLoad', coming, previous)) { + coming.wrap.stop(true).trigger('onReset').remove(); + + F.coming = null; + + return; + } + + if (previous) { + F.trigger('beforeChange', previous); + + previous.wrap.stop(true).removeClass('fancybox-opened') + .find('.fancybox-item, .fancybox-nav') + .remove(); + } + + F.unbindEvents(); + + current = coming; + content = coming.content; + type = coming.type; + scrolling = coming.scrolling; + + $.extend(F, { + wrap : current.wrap, + skin : current.skin, + outer : current.outer, + inner : current.inner, + current : current, + previous : previous + }); + + href = current.href; + + switch (type) { + case 'inline': + case 'ajax': + case 'html': + if (current.selector) { + content = $('
            ').html(content).find(current.selector); + + } else if (isQuery(content)) { + if (!content.data(placeholder)) { + content.data(placeholder, $('
            ').insertAfter( content ).hide() ); + } + + content = content.show().detach(); + + current.wrap.bind('onReset', function () { + if ($(this).find(content).length) { + content.hide().replaceAll( content.data(placeholder) ).data(placeholder, false); + } + }); + } + break; + + case 'image': + content = current.tpl.image.replace('{href}', href); + break; + + case 'swf': + content = ''; + embed = ''; + + $.each(current.swf, function(name, val) { + content += ''; + embed += ' ' + name + '="' + val + '"'; + }); + + content += ''; + break; + } + + if (!(isQuery(content) && content.parent().is(current.inner))) { + current.inner.append( content ); + } + + // Give a chance for helpers or callbacks to update elements + F.trigger('beforeShow'); + + // Set scrolling before calculating dimensions + current.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling)); + + // Set initial dimensions and start position + F._setDimension(); + + F.reposition(); + + F.isOpen = false; + F.coming = null; + + F.bindEvents(); + + if (!F.isOpened) { + $('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove(); + + } else if (previous.prevMethod) { + F.transitions[ previous.prevMethod ](); + } + + F.transitions[ F.isOpened ? current.nextMethod : current.openMethod ](); + + F._preloadImages(); + }, + + _setDimension: function () { + var viewport = F.getViewport(), + steps = 0, + canShrink = false, + canExpand = false, + wrap = F.wrap, + skin = F.skin, + inner = F.inner, + current = F.current, + width = current.width, + height = current.height, + minWidth = current.minWidth, + minHeight = current.minHeight, + maxWidth = current.maxWidth, + maxHeight = current.maxHeight, + scrolling = current.scrolling, + scrollOut = current.scrollOutside ? current.scrollbarWidth : 0, + margin = current.margin, + wMargin = getScalar(margin[1] + margin[3]), + hMargin = getScalar(margin[0] + margin[2]), + wPadding, + hPadding, + wSpace, + hSpace, + origWidth, + origHeight, + origMaxWidth, + origMaxHeight, + ratio, + width_, + height_, + maxWidth_, + maxHeight_, + iframe, + body; + + // Reset dimensions so we could re-check actual size + wrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp'); + + wPadding = getScalar(skin.outerWidth(true) - skin.width()); + hPadding = getScalar(skin.outerHeight(true) - skin.height()); + + // Any space between content and viewport (margin, padding, border, title) + wSpace = wMargin + wPadding; + hSpace = hMargin + hPadding; + + origWidth = isPercentage(width) ? (viewport.w - wSpace) * getScalar(width) / 100 : width; + origHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height; + + if (current.type === 'iframe') { + iframe = current.content; + + if (current.autoHeight && iframe.data('ready') === 1) { + try { + if (iframe[0].contentWindow.document.location) { + inner.width( origWidth ).height(9999); + + body = iframe.contents().find('body'); + + if (scrollOut) { + body.css('overflow-x', 'hidden'); + } + + origHeight = body.outerHeight(true); + } + + } catch (e) {} + } + + } else if (current.autoWidth || current.autoHeight) { + inner.addClass( 'fancybox-tmp' ); + + // Set width or height in case we need to calculate only one dimension + if (!current.autoWidth) { + inner.width( origWidth ); + } + + if (!current.autoHeight) { + inner.height( origHeight ); + } + + if (current.autoWidth) { + origWidth = inner.width(); + } + + if (current.autoHeight) { + origHeight = inner.height(); + } + + inner.removeClass( 'fancybox-tmp' ); + } + + width = getScalar( origWidth ); + height = getScalar( origHeight ); + + ratio = origWidth / origHeight; + + // Calculations for the content + minWidth = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth); + maxWidth = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth); + + minHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight); + maxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight); + + // These will be used to determine if wrap can fit in the viewport + origMaxWidth = maxWidth; + origMaxHeight = maxHeight; + + if (current.fitToView) { + maxWidth = Math.min(viewport.w - wSpace, maxWidth); + maxHeight = Math.min(viewport.h - hSpace, maxHeight); + } + + maxWidth_ = viewport.w - wMargin; + maxHeight_ = viewport.h - hMargin; + + if (current.aspectRatio) { + if (width > maxWidth) { + width = maxWidth; + height = getScalar(width / ratio); + } + + if (height > maxHeight) { + height = maxHeight; + width = getScalar(height * ratio); + } + + if (width < minWidth) { + width = minWidth; + height = getScalar(width / ratio); + } + + if (height < minHeight) { + height = minHeight; + width = getScalar(height * ratio); + } + + } else { + width = Math.max(minWidth, Math.min(width, maxWidth)); + + if (current.autoHeight && current.type !== 'iframe') { + inner.width( width ); + + height = inner.height(); + } + + height = Math.max(minHeight, Math.min(height, maxHeight)); + } + + // Try to fit inside viewport (including the title) + if (current.fitToView) { + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + // Real wrap dimensions + width_ = wrap.width(); + height_ = wrap.height(); + + if (current.aspectRatio) { + while ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) { + if (steps++ > 19) { + break; + } + + height = Math.max(minHeight, Math.min(maxHeight, height - 10)); + width = getScalar(height * ratio); + + if (width < minWidth) { + width = minWidth; + height = getScalar(width / ratio); + } + + if (width > maxWidth) { + width = maxWidth; + height = getScalar(width / ratio); + } + + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + width_ = wrap.width(); + height_ = wrap.height(); + } + + } else { + width = Math.max(minWidth, Math.min(width, width - (width_ - maxWidth_))); + height = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_))); + } + } + + if (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) { + width += scrollOut; + } + + inner.width( width ).height( height ); + + wrap.width( width + wPadding ); + + width_ = wrap.width(); + height_ = wrap.height(); + + canShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight; + canExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight)); + + $.extend(current, { + dim : { + width : getValue( width_ ), + height : getValue( height_ ) + }, + origWidth : origWidth, + origHeight : origHeight, + canShrink : canShrink, + canExpand : canExpand, + wPadding : wPadding, + hPadding : hPadding, + wrapSpace : height_ - skin.outerHeight(true), + skinSpace : skin.height() - height + }); + + if (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) { + inner.height('auto'); + } + }, + + _getPosition: function (onlyAbsolute) { + var current = F.current, + viewport = F.getViewport(), + margin = current.margin, + width = F.wrap.width() + margin[1] + margin[3], + height = F.wrap.height() + margin[0] + margin[2], + rez = { + position: 'absolute', + top : margin[0], + left : margin[3] + }; + + if (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) { + rez.position = 'fixed'; + + } else if (!current.locked) { + rez.top += viewport.y; + rez.left += viewport.x; + } + + rez.top = getValue(Math.max(rez.top, rez.top + ((viewport.h - height) * current.topRatio))); + rez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width) * current.leftRatio))); + + return rez; + }, + + _afterZoomIn: function () { + var current = F.current; + + if (!current) { + return; + } + + F.isOpen = F.isOpened = true; + + F.wrap.css('overflow', 'visible').addClass('fancybox-opened'); + + F.update(); + + // Assign a click event + if ( current.closeClick || (current.nextClick && F.group.length > 1) ) { + F.inner.css('cursor', 'pointer').bind('click.fb', function(e) { + if (!$(e.target).is('a') && !$(e.target).parent().is('a')) { + e.preventDefault(); + + F[ current.closeClick ? 'close' : 'next' ](); + } + }); + } + + // Create a close button + if (current.closeBtn) { + $(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) { + e.preventDefault(); + + F.close(); + }); + } + + // Create navigation arrows + if (current.arrows && F.group.length > 1) { + if (current.loop || current.index > 0) { + $(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev); + } + + if (current.loop || current.index < F.group.length - 1) { + $(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next); + } + } + + F.trigger('afterShow'); + + // Stop the slideshow if this is the last item + if (!current.loop && current.index === current.group.length - 1) { + F.play( false ); + + } else if (F.opts.autoPlay && !F.player.isActive) { + F.opts.autoPlay = false; + + F.play(); + } + }, + + _afterZoomOut: function ( obj ) { + obj = obj || F.current; + + $('.fancybox-wrap').trigger('onReset').remove(); + + $.extend(F, { + group : {}, + opts : {}, + router : false, + current : null, + isActive : false, + isOpened : false, + isOpen : false, + isClosing : false, + wrap : null, + skin : null, + outer : null, + inner : null + }); + + F.trigger('afterClose', obj); + } + }); + + /* + * Default transitions + */ + + F.transitions = { + getOrigPosition: function () { + var current = F.current, + element = current.element, + orig = current.orig, + pos = {}, + width = 50, + height = 50, + hPadding = current.hPadding, + wPadding = current.wPadding, + viewport = F.getViewport(); + + if (!orig && current.isDom && element.is(':visible')) { + orig = element.find('img:first'); + + if (!orig.length) { + orig = element; + } + } + + if (isQuery(orig)) { + pos = orig.offset(); + + if (orig.is('img')) { + width = orig.outerWidth(); + height = orig.outerHeight(); + } + + } else { + pos.top = viewport.y + (viewport.h - height) * current.topRatio; + pos.left = viewport.x + (viewport.w - width) * current.leftRatio; + } + + if (F.wrap.css('position') === 'fixed' || current.locked) { + pos.top -= viewport.y; + pos.left -= viewport.x; + } + + pos = { + top : getValue(pos.top - hPadding * current.topRatio), + left : getValue(pos.left - wPadding * current.leftRatio), + width : getValue(width + wPadding), + height : getValue(height + hPadding) + }; + + return pos; + }, + + step: function (now, fx) { + var ratio, + padding, + value, + prop = fx.prop, + current = F.current, + wrapSpace = current.wrapSpace, + skinSpace = current.skinSpace; + + if (prop === 'width' || prop === 'height') { + ratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start); + + if (F.isClosing) { + ratio = 1 - ratio; + } + + padding = prop === 'width' ? current.wPadding : current.hPadding; + value = now - padding; + + F.skin[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) ) ); + F.inner[ prop ]( getScalar( prop === 'width' ? value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) ); + } + }, + + zoomIn: function () { + var current = F.current, + startPos = current.pos, + effect = current.openEffect, + elastic = effect === 'elastic', + endPos = $.extend({opacity : 1}, startPos); + + // Remove "position" property that breaks older IE + delete endPos.position; + + if (elastic) { + startPos = this.getOrigPosition(); + + if (current.openOpacity) { + startPos.opacity = 0.1; + } + + } else if (effect === 'fade') { + startPos.opacity = 0.1; + } + + F.wrap.css(startPos).animate(endPos, { + duration : effect === 'none' ? 0 : current.openSpeed, + easing : current.openEasing, + step : elastic ? this.step : null, + complete : F._afterZoomIn + }); + }, + + zoomOut: function () { + var current = F.current, + effect = current.closeEffect, + elastic = effect === 'elastic', + endPos = {opacity : 0.1}; + + if (elastic) { + endPos = this.getOrigPosition(); + + if (current.closeOpacity) { + endPos.opacity = 0.1; + } + } + + F.wrap.animate(endPos, { + duration : effect === 'none' ? 0 : current.closeSpeed, + easing : current.closeEasing, + step : elastic ? this.step : null, + complete : F._afterZoomOut + }); + }, + + changeIn: function () { + var current = F.current, + effect = current.nextEffect, + startPos = current.pos, + endPos = { opacity : 1 }, + direction = F.direction, + distance = 200, + field; + + startPos.opacity = 0.1; + + if (effect === 'elastic') { + field = direction === 'down' || direction === 'up' ? 'top' : 'left'; + + if (direction === 'down' || direction === 'right') { + startPos[ field ] = getValue(getScalar(startPos[ field ]) - distance); + endPos[ field ] = '+=' + distance + 'px'; + + } else { + startPos[ field ] = getValue(getScalar(startPos[ field ]) + distance); + endPos[ field ] = '-=' + distance + 'px'; + } + } + + // Workaround for http://bugs.jquery.com/ticket/12273 + if (effect === 'none') { + F._afterZoomIn(); + + } else { + F.wrap.css(startPos).animate(endPos, { + duration : current.nextSpeed, + easing : current.nextEasing, + complete : F._afterZoomIn + }); + } + }, + + changeOut: function () { + var previous = F.previous, + effect = previous.prevEffect, + endPos = { opacity : 0.1 }, + direction = F.direction, + distance = 200; + + if (effect === 'elastic') { + endPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px'; + } + + previous.wrap.animate(endPos, { + duration : effect === 'none' ? 0 : previous.prevSpeed, + easing : previous.prevEasing, + complete : function () { + $(this).trigger('onReset').remove(); + } + }); + } + }; + + /* + * Overlay helper + */ + + F.helpers.overlay = { + defaults : { + closeClick : true, // if true, fancyBox will be closed when user clicks on the overlay + speedOut : 200, // duration of fadeOut animation + showEarly : true, // indicates if should be opened immediately or wait until the content is ready + css : {}, // custom CSS properties + locked : !isTouch, // if true, the content will be locked into overlay + fixed : true // if false, the overlay CSS position property will not be set to "fixed" + }, + + overlay : null, // current handle + fixed : false, // indicates if the overlay has position "fixed" + el : $('html'), // element that contains "the lock" + + // Public methods + create : function(opts) { + opts = $.extend({}, this.defaults, opts); + + if (this.overlay) { + this.close(); + } + + this.overlay = $('
            ').appendTo( F.coming ? F.coming.parent : opts.parent ); + this.fixed = false; + + if (opts.fixed && F.defaults.fixed) { + this.overlay.addClass('fancybox-overlay-fixed'); + + this.fixed = true; + } + }, + + open : function(opts) { + var that = this; + + opts = $.extend({}, this.defaults, opts); + + if (this.overlay) { + this.overlay.unbind('.overlay').width('auto').height('auto'); + + } else { + this.create(opts); + } + + if (!this.fixed) { + W.bind('resize.overlay', $.proxy( this.update, this) ); + + this.update(); + } + + if (opts.closeClick) { + this.overlay.bind('click.overlay', function(e) { + if ($(e.target).hasClass('fancybox-overlay')) { + if (F.isActive) { + F.close(); + } else { + that.close(); + } + + return false; + } + }); + } + + this.overlay.css( opts.css ).show(); + }, + + close : function() { + var scrollV, scrollH; + + W.unbind('resize.overlay'); + + if (this.el.hasClass('fancybox-lock')) { + $('.fancybox-margin').removeClass('fancybox-margin'); + + scrollV = W.scrollTop(); + scrollH = W.scrollLeft(); + + this.el.removeClass('fancybox-lock'); + + W.scrollTop( scrollV ).scrollLeft( scrollH ); + } + + $('.fancybox-overlay').remove().hide(); + + $.extend(this, { + overlay : null, + fixed : false + }); + }, + + // Private, callbacks + + update : function () { + var width = '100%', offsetWidth; + + // Reset width/height so it will not mess + this.overlay.width(width).height('100%'); + + // jQuery does not return reliable result for IE + if (IE) { + offsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); + + if (D.width() > offsetWidth) { + width = D.width(); + } + + } else if (D.width() > W.width()) { + width = D.width(); + } + + this.overlay.width(width).height(D.height()); + }, + + // This is where we can manipulate DOM, because later it would cause iframes to reload + onReady : function (opts, obj) { + var overlay = this.overlay; + + $('.fancybox-overlay').stop(true, true); + + if (!overlay) { + this.create(opts); + } + + if (opts.locked && this.fixed && obj.fixed) { + if (!overlay) { + this.margin = D.height() > W.height() ? $('html').css('margin-right').replace("px", "") : false; + } + + obj.locked = this.overlay.append( obj.wrap ); + obj.fixed = false; + } + + if (opts.showEarly === true) { + this.beforeShow.apply(this, arguments); + } + }, + + beforeShow : function(opts, obj) { + var scrollV, scrollH; + + if (obj.locked) { + if (this.margin !== false) { + $('*').filter(function(){ + return ($(this).css('position') === 'fixed' && !$(this).hasClass("fancybox-overlay") && !$(this).hasClass("fancybox-wrap") ); + }).addClass('fancybox-margin'); + + this.el.addClass('fancybox-margin'); + } + + scrollV = W.scrollTop(); + scrollH = W.scrollLeft(); + + this.el.addClass('fancybox-lock'); + + W.scrollTop( scrollV ).scrollLeft( scrollH ); + } + + this.open(opts); + }, + + onUpdate : function() { + if (!this.fixed) { + this.update(); + } + }, + + afterClose: function (opts) { + // Remove overlay if exists and fancyBox is not opening + // (e.g., it is not being open using afterClose callback) + //if (this.overlay && !F.isActive) { + if (this.overlay && !F.coming) { + this.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this )); + } + } + }; + + /* + * Title helper + */ + + F.helpers.title = { + defaults : { + type : 'float', // 'float', 'inside', 'outside' or 'over', + position : 'bottom' // 'top' or 'bottom' + }, + + beforeShow: function (opts) { + var current = F.current, + text = current.title, + type = opts.type, + title, + target; + + if ($.isFunction(text)) { + text = text.call(current.element, current); + } + + if (!isString(text) || $.trim(text) === '') { + return; + } + + title = $('
            ' + text + '
            '); + + switch (type) { + case 'inside': + target = F.skin; + break; + + case 'outside': + target = F.wrap; + break; + + case 'over': + target = F.inner; + break; + + default: // 'float' + target = F.skin; + + title.appendTo('body'); + + if (IE) { + title.width( title.width() ); + } + + title.wrapInner(''); + + //Increase bottom margin so this title will also fit into viewport + F.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) ); + break; + } + + title[ (opts.position === 'top' ? 'prependTo' : 'appendTo') ](target); + } + }; + + // jQuery plugin initialization + $.fn.fancybox = function (options) { + var index, + that = $(this), + selector = this.selector || '', + run = function(e) { + var what = $(this).blur(), idx = index, relType, relVal; + + if (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) { + relType = options.groupAttr || 'data-fancybox-group'; + relVal = what.attr(relType); + + if (!relVal) { + relType = 'rel'; + relVal = what.get(0)[ relType ]; + } + + if (relVal && relVal !== '' && relVal !== 'nofollow') { + what = selector.length ? $(selector) : that; + what = what.filter('[' + relType + '="' + relVal + '"]'); + idx = what.index(this); + } + + options.index = idx; + + // Stop an event from bubbling if everything is fine + if (F.open(what, options) !== false) { + e.preventDefault(); + } + } + }; + + options = options || {}; + index = options.index || 0; + + if (!selector || options.live === false) { + that.unbind('click.fb-start').bind('click.fb-start', run); + + } else { + D.undelegate(selector, 'click.fb-start').delegate(selector + ":not('.fancybox-item, .fancybox-nav')", 'click.fb-start', run); + } + + this.filter('[data-fancybox-start=1]').trigger('click'); + + return this; + }; + + // Tests that need a body at doc ready + D.ready(function() { + var w1, w2; + + if ( $.scrollbarWidth === undefined ) { + // http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth + $.scrollbarWidth = function() { + var parent = $('
            ').appendTo('body'), + child = parent.children(), + width = child.innerWidth() - child.height( 99 ).innerWidth(); + + parent.remove(); + + return width; + }; + } + + if ( $.support.fixedPosition === undefined ) { + $.support.fixedPosition = (function() { + var elem = $('
            ').appendTo('body'), + fixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 ); + + elem.remove(); + + return fixed; + }()); + } + + $.extend(F.defaults, { + scrollbarWidth : $.scrollbarWidth(), + fixed : $.support.fixedPosition, + parent : $('body') + }); + + //Get real width of page scroll-bar + w1 = $(window).width(); + + H.addClass('fancybox-lock-test'); + + w2 = $(window).width(); + + H.removeClass('fancybox-lock-test'); + + $("").appendTo("head"); + }); + +}(window, document, jQuery)); \ No newline at end of file diff --git a/protected/extensions/fancybox/assets/jquery.fancybox.pack.js b/protected/extensions/fancybox/assets/jquery.fancybox.pack.js new file mode 100644 index 0000000..73f7578 --- /dev/null +++ b/protected/extensions/fancybox/assets/jquery.fancybox.pack.js @@ -0,0 +1,46 @@ +/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */ +(function(r,G,f,v){var J=f("html"),n=f(r),p=f(G),b=f.fancybox=function(){b.open.apply(this,arguments)},I=navigator.userAgent.match(/msie/i),B=null,s=G.createTouch!==v,t=function(a){return a&&a.hasOwnProperty&&a instanceof f},q=function(a){return a&&"string"===f.type(a)},E=function(a){return q(a)&&0
            ',image:'',iframe:'",error:'

            The requested content cannot be loaded.
            Please try again later.

            ',closeBtn:'',next:'',prev:''},openEffect:"fade",openSpeed:250,openEasing:"swing",openOpacity:!0, +openMethod:"zoomIn",closeEffect:"fade",closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:250,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",prevSpeed:250,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:!0,title:!0},onCancel:f.noop,beforeLoad:f.noop,afterLoad:f.noop,beforeShow:f.noop,afterShow:f.noop,beforeChange:f.noop,beforeClose:f.noop,afterClose:f.noop},group:{},opts:{},previous:null,coming:null,current:null,isActive:!1, +isOpen:!1,isOpened:!1,wrap:null,skin:null,outer:null,inner:null,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(a,d){if(a&&(f.isPlainObject(d)||(d={}),!1!==b.close(!0)))return f.isArray(a)||(a=t(a)?f(a).get():[a]),f.each(a,function(e,c){var k={},g,h,j,m,l;"object"===f.type(c)&&(c.nodeType&&(c=f(c)),t(c)?(k={href:c.data("fancybox-href")||c.attr("href"),title:c.data("fancybox-title")||c.attr("title"),isDom:!0,element:c},f.metadata&&f.extend(!0,k, +c.metadata())):k=c);g=d.href||k.href||(q(c)?c:null);h=d.title!==v?d.title:k.title||"";m=(j=d.content||k.content)?"html":d.type||k.type;!m&&k.isDom&&(m=c.data("fancybox-type"),m||(m=(m=c.prop("class").match(/fancybox\.(\w+)/))?m[1]:null));q(g)&&(m||(b.isImage(g)?m="image":b.isSWF(g)?m="swf":"#"===g.charAt(0)?m="inline":q(c)&&(m="html",j=c)),"ajax"===m&&(l=g.split(/\s+/,2),g=l.shift(),l=l.shift()));j||("inline"===m?g?j=f(q(g)?g.replace(/.*(?=#[^\s]+$)/,""):g):k.isDom&&(j=c):"html"===m?j=g:!m&&(!g&& +k.isDom)&&(m="inline",j=c));f.extend(k,{href:g,type:m,content:j,title:h,selector:l});a[e]=k}),b.opts=f.extend(!0,{},b.defaults,d),d.keys!==v&&(b.opts.keys=d.keys?f.extend({},b.defaults.keys,d.keys):!1),b.group=a,b._start(b.opts.index)},cancel:function(){var a=b.coming;a&&!1!==b.trigger("onCancel")&&(b.hideLoading(),b.ajaxLoad&&b.ajaxLoad.abort(),b.ajaxLoad=null,b.imgPreload&&(b.imgPreload.onload=b.imgPreload.onerror=null),a.wrap&&a.wrap.stop(!0,!0).trigger("onReset").remove(),b.coming=null,b.current|| +b._afterZoomOut(a))},close:function(a){b.cancel();!1!==b.trigger("beforeClose")&&(b.unbindEvents(),b.isActive&&(!b.isOpen||!0===a?(f(".fancybox-wrap").stop(!0).trigger("onReset").remove(),b._afterZoomOut()):(b.isOpen=b.isOpened=!1,b.isClosing=!0,f(".fancybox-item, .fancybox-nav").remove(),b.wrap.stop(!0,!0).removeClass("fancybox-opened"),b.transitions[b.current.closeMethod]())))},play:function(a){var d=function(){clearTimeout(b.player.timer)},e=function(){d();b.current&&b.player.isActive&&(b.player.timer= +setTimeout(b.next,b.current.playSpeed))},c=function(){d();p.unbind(".player");b.player.isActive=!1;b.trigger("onPlayEnd")};if(!0===a||!b.player.isActive&&!1!==a){if(b.current&&(b.current.loop||b.current.index=c.index?"next":"prev"],b.router=e||"jumpto",c.loop&&(0>a&&(a=c.group.length+a%c.group.length),a%=c.group.length),c.group[a]!==v&&(b.cancel(),b._start(a)))},reposition:function(a,d){var e=b.current,c=e?e.wrap:null,k;c&&(k=b._getPosition(d),a&&"scroll"===a.type?(delete k.position,c.stop(!0,!0).animate(k,200)):(c.css(k),e.pos=f.extend({},e.dim,k)))},update:function(a){var d= +a&&a.type,e=!d||"orientationchange"===d;e&&(clearTimeout(B),B=null);b.isOpen&&!B&&(B=setTimeout(function(){var c=b.current;c&&!b.isClosing&&(b.wrap.removeClass("fancybox-tmp"),(e||"load"===d||"resize"===d&&c.autoResize)&&b._setDimension(),"scroll"===d&&c.canShrink||b.reposition(a),b.trigger("onUpdate"),B=null)},e&&!s?0:300))},toggle:function(a){b.isOpen&&(b.current.fitToView="boolean"===f.type(a)?a:!b.current.fitToView,s&&(b.wrap.removeAttr("style").addClass("fancybox-tmp"),b.trigger("onUpdate")), +b.update())},hideLoading:function(){p.unbind(".loading");f("#fancybox-loading").remove()},showLoading:function(){var a,d;b.hideLoading();a=f('
            ').click(b.cancel).appendTo("body");p.bind("keydown.loading",function(a){if(27===(a.which||a.keyCode))a.preventDefault(),b.cancel()});b.defaults.fixed||(d=b.getViewport(),a.css({position:"absolute",top:0.5*d.h+d.y,left:0.5*d.w+d.x}))},getViewport:function(){var a=b.current&&b.current.locked||!1,d={x:n.scrollLeft(), +y:n.scrollTop()};a?(d.w=a[0].clientWidth,d.h=a[0].clientHeight):(d.w=s&&r.innerWidth?r.innerWidth:n.width(),d.h=s&&r.innerHeight?r.innerHeight:n.height());return d},unbindEvents:function(){b.wrap&&t(b.wrap)&&b.wrap.unbind(".fb");p.unbind(".fb");n.unbind(".fb")},bindEvents:function(){var a=b.current,d;a&&(n.bind("orientationchange.fb"+(s?"":" resize.fb")+(a.autoCenter&&!a.locked?" scroll.fb":""),b.update),(d=a.keys)&&p.bind("keydown.fb",function(e){var c=e.which||e.keyCode,k=e.target||e.srcElement; +if(27===c&&b.coming)return!1;!e.ctrlKey&&(!e.altKey&&!e.shiftKey&&!e.metaKey&&(!k||!k.type&&!f(k).is("[contenteditable]")))&&f.each(d,function(d,k){if(1h[0].clientWidth||h[0].clientHeight&&h[0].scrollHeight>h[0].clientHeight),h=f(h).parent();if(0!==c&&!j&&1g||0>k)b.next(0>g?"up":"right");d.preventDefault()}}))},trigger:function(a,d){var e,c=d||b.coming||b.current;if(c){f.isFunction(c[a])&&(e=c[a].apply(c,Array.prototype.slice.call(arguments,1)));if(!1===e)return!1;c.helpers&&f.each(c.helpers,function(d,e){if(e&&b.helpers[d]&&f.isFunction(b.helpers[d][a]))b.helpers[d][a](f.extend(!0, +{},b.helpers[d].defaults,e),c)});p.trigger(a)}},isImage:function(a){return q(a)&&a.match(/(^data:image\/.*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\?|#).*)?$)/i)},isSWF:function(a){return q(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(a){var d={},e,c;a=l(a);e=b.group[a]||null;if(!e)return!1;d=f.extend(!0,{},b.opts,e);e=d.margin;c=d.padding;"number"===f.type(e)&&(d.margin=[e,e,e,e]);"number"===f.type(c)&&(d.padding=[c,c,c,c]);d.modal&&f.extend(!0,d,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1, +mouseWheel:!1,keys:null,helpers:{overlay:{closeClick:!1}}});d.autoSize&&(d.autoWidth=d.autoHeight=!0);"auto"===d.width&&(d.autoWidth=!0);"auto"===d.height&&(d.autoHeight=!0);d.group=b.group;d.index=a;b.coming=d;if(!1===b.trigger("beforeLoad"))b.coming=null;else{c=d.type;e=d.href;if(!c)return b.coming=null,b.current&&b.router&&"jumpto"!==b.router?(b.current.index=a,b[b.router](b.direction)):!1;b.isActive=!0;if("image"===c||"swf"===c)d.autoHeight=d.autoWidth=!1,d.scrolling="visible";"image"===c&&(d.aspectRatio= +!0);"iframe"===c&&s&&(d.scrolling="scroll");d.wrap=f(d.tpl.wrap).addClass("fancybox-"+(s?"mobile":"desktop")+" fancybox-type-"+c+" fancybox-tmp "+d.wrapCSS).appendTo(d.parent||"body");f.extend(d,{skin:f(".fancybox-skin",d.wrap),outer:f(".fancybox-outer",d.wrap),inner:f(".fancybox-inner",d.wrap)});f.each(["Top","Right","Bottom","Left"],function(a,b){d.skin.css("padding"+b,w(d.padding[a]))});b.trigger("onReady");if("inline"===c||"html"===c){if(!d.content||!d.content.length)return b._error("content")}else if(!e)return b._error("href"); +"image"===c?b._loadImage():"ajax"===c?b._loadAjax():"iframe"===c?b._loadIframe():b._afterLoad()}},_error:function(a){f.extend(b.coming,{type:"html",autoWidth:!0,autoHeight:!0,minWidth:0,minHeight:0,scrolling:"no",hasError:a,content:b.coming.tpl.error});b._afterLoad()},_loadImage:function(){var a=b.imgPreload=new Image;a.onload=function(){this.onload=this.onerror=null;b.coming.width=this.width/b.opts.pixelRatio;b.coming.height=this.height/b.opts.pixelRatio;b._afterLoad()};a.onerror=function(){this.onload= +this.onerror=null;b._error("image")};a.src=b.coming.href;!0!==a.complete&&b.showLoading()},_loadAjax:function(){var a=b.coming;b.showLoading();b.ajaxLoad=f.ajax(f.extend({},a.ajax,{url:a.href,error:function(a,e){b.coming&&"abort"!==e?b._error("ajax",a):b.hideLoading()},success:function(d,e){"success"===e&&(a.content=d,b._afterLoad())}}))},_loadIframe:function(){var a=b.coming,d=f(a.tpl.iframe.replace(/\{rnd\}/g,(new Date).getTime())).attr("scrolling",s?"auto":a.iframe.scrolling).attr("src",a.href); +f(a.wrap).bind("onReset",function(){try{f(this).find("iframe").hide().attr("src","//about:blank").end().empty()}catch(a){}});a.iframe.preload&&(b.showLoading(),d.one("load",function(){f(this).data("ready",1);s||f(this).bind("load.fb",b.update);f(this).parents(".fancybox-wrap").width("100%").removeClass("fancybox-tmp").show();b._afterLoad()}));a.content=d.appendTo(a.inner);a.iframe.preload||b._afterLoad()},_preloadImages:function(){var a=b.group,d=b.current,e=a.length,c=d.preload?Math.min(d.preload, +e-1):0,f,g;for(g=1;g<=c;g+=1)f=a[(d.index+g)%e],"image"===f.type&&f.href&&((new Image).src=f.href)},_afterLoad:function(){var a=b.coming,d=b.current,e,c,k,g,h;b.hideLoading();if(a&&!1!==b.isActive)if(!1===b.trigger("afterLoad",a,d))a.wrap.stop(!0).trigger("onReset").remove(),b.coming=null;else{d&&(b.trigger("beforeChange",d),d.wrap.stop(!0).removeClass("fancybox-opened").find(".fancybox-item, .fancybox-nav").remove());b.unbindEvents();e=a.content;c=a.type;k=a.scrolling;f.extend(b,{wrap:a.wrap,skin:a.skin, +outer:a.outer,inner:a.inner,current:a,previous:d});g=a.href;switch(c){case "inline":case "ajax":case "html":a.selector?e=f("
            ").html(e).find(a.selector):t(e)&&(e.data("fancybox-placeholder")||e.data("fancybox-placeholder",f('
            ').insertAfter(e).hide()),e=e.show().detach(),a.wrap.bind("onReset",function(){f(this).find(e).length&&e.hide().replaceAll(e.data("fancybox-placeholder")).data("fancybox-placeholder",!1)}));break;case "image":e=a.tpl.image.replace("{href}", +g);break;case "swf":e='',h="",f.each(a.swf,function(a,b){e+='';h+=" "+a+'="'+b+'"'}),e+='"}(!t(e)||!e.parent().is(a.inner))&&a.inner.append(e);b.trigger("beforeShow");a.inner.css("overflow","yes"===k?"scroll": +"no"===k?"hidden":k);b._setDimension();b.reposition();b.isOpen=!1;b.coming=null;b.bindEvents();if(b.isOpened){if(d.prevMethod)b.transitions[d.prevMethod]()}else f(".fancybox-wrap").not(a.wrap).stop(!0).trigger("onReset").remove();b.transitions[b.isOpened?a.nextMethod:a.openMethod]();b._preloadImages()}},_setDimension:function(){var a=b.getViewport(),d=0,e=!1,c=!1,e=b.wrap,k=b.skin,g=b.inner,h=b.current,c=h.width,j=h.height,m=h.minWidth,u=h.minHeight,n=h.maxWidth,p=h.maxHeight,s=h.scrolling,q=h.scrollOutside? +h.scrollbarWidth:0,x=h.margin,y=l(x[1]+x[3]),r=l(x[0]+x[2]),v,z,t,C,A,F,B,D,H;e.add(k).add(g).width("auto").height("auto").removeClass("fancybox-tmp");x=l(k.outerWidth(!0)-k.width());v=l(k.outerHeight(!0)-k.height());z=y+x;t=r+v;C=E(c)?(a.w-z)*l(c)/100:c;A=E(j)?(a.h-t)*l(j)/100:j;if("iframe"===h.type){if(H=h.content,h.autoHeight&&1===H.data("ready"))try{H[0].contentWindow.document.location&&(g.width(C).height(9999),F=H.contents().find("body"),q&&F.css("overflow-x","hidden"),A=F.outerHeight(!0))}catch(G){}}else if(h.autoWidth|| +h.autoHeight)g.addClass("fancybox-tmp"),h.autoWidth||g.width(C),h.autoHeight||g.height(A),h.autoWidth&&(C=g.width()),h.autoHeight&&(A=g.height()),g.removeClass("fancybox-tmp");c=l(C);j=l(A);D=C/A;m=l(E(m)?l(m,"w")-z:m);n=l(E(n)?l(n,"w")-z:n);u=l(E(u)?l(u,"h")-t:u);p=l(E(p)?l(p,"h")-t:p);F=n;B=p;h.fitToView&&(n=Math.min(a.w-z,n),p=Math.min(a.h-t,p));z=a.w-y;r=a.h-r;h.aspectRatio?(c>n&&(c=n,j=l(c/D)),j>p&&(j=p,c=l(j*D)),cz||y>r)&&(c>m&&j>u)&&!(19n&&(c=n,j=l(c/D)),g.width(c).height(j),e.width(c+x),a=e.width(),y=e.height();else c=Math.max(m,Math.min(c,c-(a-z))),j=Math.max(u,Math.min(j,j-(y-r)));q&&("auto"===s&&jz||y>r)&&c>m&&j>u;c=h.aspectRatio?cu&&j
            ').appendTo(b.coming?b.coming.parent:a.parent);this.fixed=!1;a.fixed&&b.defaults.fixed&&(this.overlay.addClass("fancybox-overlay-fixed"),this.fixed=!0)},open:function(a){var d=this;a=f.extend({},this.defaults,a);this.overlay?this.overlay.unbind(".overlay").width("auto").height("auto"):this.create(a);this.fixed||(n.bind("resize.overlay",f.proxy(this.update,this)),this.update());a.closeClick&&this.overlay.bind("click.overlay",function(a){if(f(a.target).hasClass("fancybox-overlay"))return b.isActive? +b.close():d.close(),!1});this.overlay.css(a.css).show()},close:function(){var a,b;n.unbind("resize.overlay");this.el.hasClass("fancybox-lock")&&(f(".fancybox-margin").removeClass("fancybox-margin"),a=n.scrollTop(),b=n.scrollLeft(),this.el.removeClass("fancybox-lock"),n.scrollTop(a).scrollLeft(b));f(".fancybox-overlay").remove().hide();f.extend(this,{overlay:null,fixed:!1})},update:function(){var a="100%",b;this.overlay.width(a).height("100%");I?(b=Math.max(G.documentElement.offsetWidth,G.body.offsetWidth), +p.width()>b&&(a=p.width())):p.width()>n.width()&&(a=p.width());this.overlay.width(a).height(p.height())},onReady:function(a,b){var e=this.overlay;f(".fancybox-overlay").stop(!0,!0);e||this.create(a);a.locked&&(this.fixed&&b.fixed)&&(e||(this.margin=p.height()>n.height()?f("html").css("margin-right").replace("px",""):!1),b.locked=this.overlay.append(b.wrap),b.fixed=!1);!0===a.showEarly&&this.beforeShow.apply(this,arguments)},beforeShow:function(a,b){var e,c;b.locked&&(!1!==this.margin&&(f("*").filter(function(){return"fixed"=== +f(this).css("position")&&!f(this).hasClass("fancybox-overlay")&&!f(this).hasClass("fancybox-wrap")}).addClass("fancybox-margin"),this.el.addClass("fancybox-margin")),e=n.scrollTop(),c=n.scrollLeft(),this.el.addClass("fancybox-lock"),n.scrollTop(e).scrollLeft(c));this.open(a)},onUpdate:function(){this.fixed||this.update()},afterClose:function(a){this.overlay&&!b.coming&&this.overlay.fadeOut(a.speedOut,f.proxy(this.close,this))}};b.helpers.title={defaults:{type:"float",position:"bottom"},beforeShow:function(a){var d= +b.current,e=d.title,c=a.type;f.isFunction(e)&&(e=e.call(d.element,d));if(q(e)&&""!==f.trim(e)){d=f('
            '+e+"
            ");switch(c){case "inside":c=b.skin;break;case "outside":c=b.wrap;break;case "over":c=b.inner;break;default:c=b.skin,d.appendTo("body"),I&&d.width(d.width()),d.wrapInner(''),b.current.margin[2]+=Math.abs(l(d.css("margin-bottom")))}d["top"===a.position?"prependTo":"appendTo"](c)}}};f.fn.fancybox=function(a){var d, +e=f(this),c=this.selector||"",k=function(g){var h=f(this).blur(),j=d,k,l;!g.ctrlKey&&(!g.altKey&&!g.shiftKey&&!g.metaKey)&&!h.is(".fancybox-wrap")&&(k=a.groupAttr||"data-fancybox-group",l=h.attr(k),l||(k="rel",l=h.get(0)[k]),l&&(""!==l&&"nofollow"!==l)&&(h=c.length?f(c):e,h=h.filter("["+k+'="'+l+'"]'),j=h.index(this)),a.index=j,!1!==b.open(h,a)&&g.preventDefault())};a=a||{};d=a.index||0;!c||!1===a.live?e.unbind("click.fb-start").bind("click.fb-start",k):p.undelegate(c,"click.fb-start").delegate(c+ +":not('.fancybox-item, .fancybox-nav')","click.fb-start",k);this.filter("[data-fancybox-start=1]").trigger("click");return this};p.ready(function(){var a,d;f.scrollbarWidth===v&&(f.scrollbarWidth=function(){var a=f('
            ').appendTo("body"),b=a.children(),b=b.innerWidth()-b.height(99).innerWidth();a.remove();return b});if(f.support.fixedPosition===v){a=f.support;d=f('
            ').appendTo("body");var e=20=== +d[0].offsetTop||15===d[0].offsetTop;d.remove();a.fixedPosition=e}f.extend(b.defaults,{scrollbarWidth:f.scrollbarWidth(),fixed:f.support.fixedPosition,parent:f("body")});a=f(r).width();J.addClass("fancybox-lock-test");d=f(r).width();J.removeClass("fancybox-lock-test");f("").appendTo("head")})})(window,document,jQuery); \ No newline at end of file diff --git a/protected/extensions/fancybox/assets/jquery.mousewheel-3.0.6.pack.js b/protected/extensions/fancybox/assets/jquery.mousewheel-3.0.6.pack.js new file mode 100644 index 0000000..e39a83a --- /dev/null +++ b/protected/extensions/fancybox/assets/jquery.mousewheel-3.0.6.pack.js @@ -0,0 +1,13 @@ +/*! Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) + * Licensed under the MIT License (LICENSE.txt). + * + * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. + * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. + * Thanks to: Seamus Leahy for adding deltaX and deltaY + * + * Version: 3.0.6 + * + * Requires: 1.2.2+ + */ +(function(d){function e(a){var b=a||window.event,c=[].slice.call(arguments,1),f=0,e=0,g=0,a=d.event.fix(b);a.type="mousewheel";b.wheelDelta&&(f=b.wheelDelta/120);b.detail&&(f=-b.detail/3);g=f;b.axis!==void 0&&b.axis===b.HORIZONTAL_AXIS&&(g=0,e=-1*f);b.wheelDeltaY!==void 0&&(g=b.wheelDeltaY/120);b.wheelDeltaX!==void 0&&(e=-1*b.wheelDeltaX/120);c.unshift(a,f,e,g);return(d.event.dispatch||d.event.handle).apply(this,c)}var c=["DOMMouseScroll","mousewheel"];if(d.event.fixHooks)for(var h=c.length;h;)d.event.fixHooks[c[--h]]= +d.event.mouseHooks;d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=c.length;a;)this.addEventListener(c[--a],e,false);else this.onmousewheel=e},teardown:function(){if(this.removeEventListener)for(var a=c.length;a;)this.removeEventListener(c[--a],e,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery); \ No newline at end of file diff --git a/protected/modules/admin/assets/css/forms.css b/protected/modules/admin/assets/css/forms.css index 54eca9a..5c55ba5 100644 --- a/protected/modules/admin/assets/css/forms.css +++ b/protected/modules/admin/assets/css/forms.css @@ -383,4 +383,11 @@ div.form legend { /* Fix for attrs tab on product edit page */ .eavInput input { margin-left: 0 !important; +} + + + +div.form .cke_chrome{ + width: 70%; + display: inline-block; } \ No newline at end of file diff --git a/protected/modules/admin/assets/vendors/jquery_ui/css/custom-theme/jquery-ui-1.8.14.custom.css b/protected/modules/admin/assets/vendors/jquery_ui/css/custom-theme/jquery-ui-1.8.14.custom.css index 44b0ff2..6d70cde 100644 --- a/protected/modules/admin/assets/vendors/jquery_ui/css/custom-theme/jquery-ui-1.8.14.custom.css +++ b/protected/modules/admin/assets/vendors/jquery_ui/css/custom-theme/jquery-ui-1.8.14.custom.css @@ -443,7 +443,7 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad .ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; left: 0; top: 0; } .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } diff --git a/protected/modules/admin/controllers/FileManagerController.php b/protected/modules/admin/controllers/FileManagerController.php index 1935342..a87b752 100644 --- a/protected/modules/admin/controllers/FileManagerController.php +++ b/protected/modules/admin/controllers/FileManagerController.php @@ -11,7 +11,10 @@ public function actions() 'root' => Yii::getPathOfAlias('webroot') . '/uploads/', 'URL' => Yii::app()->baseUrl . '/uploads/', 'rootAlias' => 'Home', - 'mimeDetect' => 'none' + 'mimeDetect' => 'none', + 'driver' => 'LocalFileSystem', // driver for accessing file system (REQUIRED) + 'path' => Yii::getPathOfAlias('webroot') . '/uploads/', // path to files (REQUIRED) + 'accessControl' => 'access' // disable and hide dot starting files (OPTIONAL) ) ), ); diff --git a/protected/modules/admin/views/layouts/main.php b/protected/modules/admin/views/layouts/main.php index 7e12751..f73594b 100644 --- a/protected/modules/admin/views/layouts/main.php +++ b/protected/modules/admin/views/layouts/main.php @@ -23,7 +23,7 @@ Jgrowl::register(); // Back Button & Query Library - $assetsManager->registerScriptFile($adminAssetsUrl.'/vendors/jquery.ba-bbq.min.js'); +// $assetsManager->registerScriptFile($adminAssetsUrl.'/vendors/jquery.ba-bbq.min.js'); // Init script $assetsManager->registerScriptFile($adminAssetsUrl.'/scripts/init.scripts.js'); diff --git a/protected/modules/banners/models/BannersImages.php b/protected/modules/banners/models/BannersImages.php index 85c4372..4f58b1e 100644 --- a/protected/modules/banners/models/BannersImages.php +++ b/protected/modules/banners/models/BannersImages.php @@ -170,8 +170,8 @@ public function getUrl($size = false, $resizeMethod = false, $random = false) } if ($random === true) - return StoreImagesConfig::get('url').$this->image.'?'.rand(1, 10000); - return StoreImagesConfig::get('url').$this->image; + return $this->image.'?'.rand(1, 10000); + return $this->image; } diff --git a/protected/modules/banners/models/SliderForm.php b/protected/modules/banners/models/SliderForm.php index 59cca20..115f33d 100644 --- a/protected/modules/banners/models/SliderForm.php +++ b/protected/modules/banners/models/SliderForm.php @@ -14,7 +14,7 @@ class SliderForm extends CFormModel public $status; public $module_id; public $group = 'sliders'; - public $class = 'application.modules.banners.widgets.nivoslider.ENivoSlider'; + public $class = 'application.modules.banners.widgets.nivoslider.NivoSlider'; @@ -46,7 +46,7 @@ public function getData($id) public function rules() { return array( - array('name, banner_id, width, height, status', 'required'), + array('name, banner_id, status', 'required'), array('status, banner_id, width, height', 'numerical'), ); } diff --git a/protected/modules/banners/widgets/nivoslider/NivoSlider.php b/protected/modules/banners/widgets/nivoslider/NivoSlider.php index bbdf559..d1fb295 100644 --- a/protected/modules/banners/widgets/nivoslider/NivoSlider.php +++ b/protected/modules/banners/widgets/nivoslider/NivoSlider.php @@ -53,6 +53,7 @@ class NivoSlider extends CWidget public function init() { + $this->htmlOptions['class'] = 'theme-default'; if (isset($this->id)) { $this->htmlOptions['id']=$this->id; } else { @@ -63,8 +64,6 @@ public function init() public function run() { - $this->htmlOptions['style'] = 'width: '.$this->width.'px; height: '.$this->height.'px;'; - $banner = Banners::model()->findByPK($this->banner_id); $images = $banner->images; @@ -75,7 +74,7 @@ public function run() foreach($images as $image) { $this->images[] = array( - 'src' => $image->getUrl($this->width."x".$this->height,'cropFromCenter'), + 'src' => $this->width && $this->height ? $image->getUrl($this->width."x".$this->height,'cropFromCenter') : $image->getUrl(), 'caption' => $image->title, 'url' => $image->link, ); @@ -131,10 +130,9 @@ public function publishAssets() Yii::app()->clientScript->registerCoreScript('jquery'); Yii::app()->clientScript->registerScriptFile($baseUrl . '/jquery.nivo.slider.pack.js', CClientScript::POS_HEAD); Yii::app()->clientScript->registerCssFile($baseUrl . '/nivo-slider.css'); + Yii::app()->clientScript->registerCssFile($baseUrl . '/themes/default/default.css'); if (isset($this->cssFile)) { Yii::app()->clientScript->registerCssFile($this->cssFile); - } else if($this->fancy) { - Yii::app()->clientScript->registerCssFile($baseUrl.'/fancy-nivo-slider.css'); } } else { throw new Exception('CNivoSlider - Error: Couldn\'t publish assets.'); diff --git a/protected/modules/banners/widgets/nivoslider/assets/jquery.nivo.slider.js b/protected/modules/banners/widgets/nivoslider/assets/jquery.nivo.slider.js new file mode 100644 index 0000000..70a33ae --- /dev/null +++ b/protected/modules/banners/widgets/nivoslider/assets/jquery.nivo.slider.js @@ -0,0 +1,662 @@ +/* + * jQuery Nivo Slider v3.2 + * http://nivo.dev7studios.com + * + * Copyright 2012, Dev7studios + * Free to use and abuse under the MIT license. + * http://www.opensource.org/licenses/mit-license.php + */ + +(function($) { + var NivoSlider = function(element, options){ + // Defaults are below + var settings = $.extend({}, $.fn.nivoSlider.defaults, options); + + // Useful variables. Play carefully. + var vars = { + currentSlide: 0, + currentImage: '', + totalSlides: 0, + running: false, + paused: false, + stop: false, + controlNavEl: false + }; + + // Get this slider + var slider = $(element); + slider.data('nivo:vars', vars).addClass('nivoSlider'); + + // Find our slider children + var kids = slider.children(); + kids.each(function() { + var child = $(this); + var link = ''; + if(!child.is('img')){ + if(child.is('a')){ + child.addClass('nivo-imageLink'); + link = child; + } + child = child.find('img:first'); + } + // Get img width & height + var childWidth = (childWidth === 0) ? child.attr('width') : child.width(), + childHeight = (childHeight === 0) ? child.attr('height') : child.height(); + + if(link !== ''){ + link.css('display','none'); + } + child.css('display','none'); + vars.totalSlides++; + }); + + // If randomStart + if(settings.randomStart){ + settings.startSlide = Math.floor(Math.random() * vars.totalSlides); + } + + // Set startSlide + if(settings.startSlide > 0){ + if(settings.startSlide >= vars.totalSlides) { settings.startSlide = vars.totalSlides - 1; } + vars.currentSlide = settings.startSlide; + } + + // Get initial image + if($(kids[vars.currentSlide]).is('img')){ + vars.currentImage = $(kids[vars.currentSlide]); + } else { + vars.currentImage = $(kids[vars.currentSlide]).find('img:first'); + } + + // Show initial link + if($(kids[vars.currentSlide]).is('a')){ + $(kids[vars.currentSlide]).css('display','block'); + } + + // Set first background + var sliderImg = $('').addClass('nivo-main-image'); + sliderImg.attr('src', vars.currentImage.attr('src')).show(); + slider.append(sliderImg); + + // Detect Window Resize + $(window).resize(function() { + slider.children('img').width(slider.width()); + sliderImg.attr('src', vars.currentImage.attr('src')); + sliderImg.stop().height('auto'); + $('.nivo-slice').remove(); + $('.nivo-box').remove(); + }); + + //Create caption + slider.append($('
            ')); + + // Process caption function + var processCaption = function(settings){ + var nivoCaption = $('.nivo-caption', slider); + if(vars.currentImage.attr('title') != '' && vars.currentImage.attr('title') != undefined){ + var title = vars.currentImage.attr('title'); + if(title.substr(0,1) == '#') title = $(title).html(); + + if(nivoCaption.css('display') == 'block'){ + setTimeout(function(){ + nivoCaption.html(title); + }, settings.animSpeed); + } else { + nivoCaption.html(title); + nivoCaption.stop().fadeIn(settings.animSpeed); + } + } else { + nivoCaption.stop().fadeOut(settings.animSpeed); + } + } + + //Process initial caption + processCaption(settings); + + // In the words of Super Mario "let's a go!" + var timer = 0; + if(!settings.manualAdvance && kids.length > 1){ + timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime); + } + + // Add Direction nav + if(settings.directionNav){ + slider.append(''); + + $(slider).on('click', 'a.nivo-prevNav', function(){ + if(vars.running) { return false; } + clearInterval(timer); + timer = ''; + vars.currentSlide -= 2; + nivoRun(slider, kids, settings, 'prev'); + }); + + $(slider).on('click', 'a.nivo-nextNav', function(){ + if(vars.running) { return false; } + clearInterval(timer); + timer = ''; + nivoRun(slider, kids, settings, 'next'); + }); + } + + // Add Control nav + if(settings.controlNav){ + vars.controlNavEl = $('
            '); + slider.after(vars.controlNavEl); + for(var i = 0; i < kids.length; i++){ + if(settings.controlNavThumbs){ + vars.controlNavEl.addClass('nivo-thumbs-enabled'); + var child = kids.eq(i); + if(!child.is('img')){ + child = child.find('img:first'); + } + if(child.attr('data-thumb')) vars.controlNavEl.append(''); + } else { + vars.controlNavEl.append(''+ (i + 1) +''); + } + } + + //Set initial active link + $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active'); + + $('a', vars.controlNavEl).bind('click', function(){ + if(vars.running) return false; + if($(this).hasClass('active')) return false; + clearInterval(timer); + timer = ''; + sliderImg.attr('src', vars.currentImage.attr('src')); + vars.currentSlide = $(this).attr('rel') - 1; + nivoRun(slider, kids, settings, 'control'); + }); + } + + //For pauseOnHover setting + if(settings.pauseOnHover){ + slider.hover(function(){ + vars.paused = true; + clearInterval(timer); + timer = ''; + }, function(){ + vars.paused = false; + // Restart the timer + if(timer === '' && !settings.manualAdvance){ + timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime); + } + }); + } + + // Event when Animation finishes + slider.bind('nivo:animFinished', function(){ + sliderImg.attr('src', vars.currentImage.attr('src')); + vars.running = false; + // Hide child links + $(kids).each(function(){ + if($(this).is('a')){ + $(this).css('display','none'); + } + }); + // Show current link + if($(kids[vars.currentSlide]).is('a')){ + $(kids[vars.currentSlide]).css('display','block'); + } + // Restart the timer + if(timer === '' && !vars.paused && !settings.manualAdvance){ + timer = setInterval(function(){ nivoRun(slider, kids, settings, false); }, settings.pauseTime); + } + // Trigger the afterChange callback + settings.afterChange.call(this); + }); + + // Add slices for slice animations + var createSlices = function(slider, settings, vars) { + if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block'); + $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show(); + var sliceHeight = ($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().is('a')) ? $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').parent().height() : $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height(); + + for(var i = 0; i < settings.slices; i++){ + var sliceWidth = Math.round(slider.width()/settings.slices); + + if(i === settings.slices-1){ + slider.append( + $('
            ').css({ + left:(sliceWidth*i)+'px', + width:(slider.width()-(sliceWidth*i))+'px', + height:sliceHeight+'px', + opacity:'0', + overflow:'hidden' + }) + ); + } else { + slider.append( + $('
            ').css({ + left:(sliceWidth*i)+'px', + width:sliceWidth+'px', + height:sliceHeight+'px', + opacity:'0', + overflow:'hidden' + }) + ); + } + } + + $('.nivo-slice', slider).height(sliceHeight); + sliderImg.stop().animate({ + height: $(vars.currentImage).height() + }, settings.animSpeed); + }; + + // Add boxes for box animations + var createBoxes = function(slider, settings, vars){ + if($(vars.currentImage).parent().is('a')) $(vars.currentImage).parent().css('display','block'); + $('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').width(slider.width()).css('visibility', 'hidden').show(); + var boxWidth = Math.round(slider.width()/settings.boxCols), + boxHeight = Math.round($('img[src="'+ vars.currentImage.attr('src') +'"]', slider).not('.nivo-main-image,.nivo-control img').height() / settings.boxRows); + + + for(var rows = 0; rows < settings.boxRows; rows++){ + for(var cols = 0; cols < settings.boxCols; cols++){ + if(cols === settings.boxCols-1){ + slider.append( + $('
            ').css({ + opacity:0, + left:(boxWidth*cols)+'px', + top:(boxHeight*rows)+'px', + width:(slider.width()-(boxWidth*cols))+'px' + + }) + ); + $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px'); + } else { + slider.append( + $('
            ').css({ + opacity:0, + left:(boxWidth*cols)+'px', + top:(boxHeight*rows)+'px', + width:boxWidth+'px' + }) + ); + $('.nivo-box[name="'+ cols +'"]', slider).height($('.nivo-box[name="'+ cols +'"] img', slider).height()+'px'); + } + } + } + + sliderImg.stop().animate({ + height: $(vars.currentImage).height() + }, settings.animSpeed); + }; + + // Private run method + var nivoRun = function(slider, kids, settings, nudge){ + // Get our vars + var vars = slider.data('nivo:vars'); + + // Trigger the lastSlide callback + if(vars && (vars.currentSlide === vars.totalSlides - 1)){ + settings.lastSlide.call(this); + } + + // Stop + if((!vars || vars.stop) && !nudge) { return false; } + + // Trigger the beforeChange callback + settings.beforeChange.call(this); + + // Set current background before change + if(!nudge){ + sliderImg.attr('src', vars.currentImage.attr('src')); + } else { + if(nudge === 'prev'){ + sliderImg.attr('src', vars.currentImage.attr('src')); + } + if(nudge === 'next'){ + sliderImg.attr('src', vars.currentImage.attr('src')); + } + } + + vars.currentSlide++; + // Trigger the slideshowEnd callback + if(vars.currentSlide === vars.totalSlides){ + vars.currentSlide = 0; + settings.slideshowEnd.call(this); + } + if(vars.currentSlide < 0) { vars.currentSlide = (vars.totalSlides - 1); } + // Set vars.currentImage + if($(kids[vars.currentSlide]).is('img')){ + vars.currentImage = $(kids[vars.currentSlide]); + } else { + vars.currentImage = $(kids[vars.currentSlide]).find('img:first'); + } + + // Set active links + if(settings.controlNav){ + $('a', vars.controlNavEl).removeClass('active'); + $('a:eq('+ vars.currentSlide +')', vars.controlNavEl).addClass('active'); + } + + // Process caption + processCaption(settings); + + // Remove any slices from last transition + $('.nivo-slice', slider).remove(); + + // Remove any boxes from last transition + $('.nivo-box', slider).remove(); + + var currentEffect = settings.effect, + anims = ''; + + // Generate random effect + if(settings.effect === 'random'){ + anims = new Array('sliceDownRight','sliceDownLeft','sliceUpRight','sliceUpLeft','sliceUpDown','sliceUpDownLeft','fold','fade', + 'boxRandom','boxRain','boxRainReverse','boxRainGrow','boxRainGrowReverse'); + currentEffect = anims[Math.floor(Math.random()*(anims.length + 1))]; + if(currentEffect === undefined) { currentEffect = 'fade'; } + } + + // Run random effect from specified set (eg: effect:'fold,fade') + if(settings.effect.indexOf(',') !== -1){ + anims = settings.effect.split(','); + currentEffect = anims[Math.floor(Math.random()*(anims.length))]; + if(currentEffect === undefined) { currentEffect = 'fade'; } + } + + // Custom transition as defined by "data-transition" attribute + if(vars.currentImage.attr('data-transition')){ + currentEffect = vars.currentImage.attr('data-transition'); + } + + // Run effects + vars.running = true; + var timeBuff = 0, + i = 0, + slices = '', + firstSlice = '', + totalBoxes = '', + boxes = ''; + + if(currentEffect === 'sliceDown' || currentEffect === 'sliceDownRight' || currentEffect === 'sliceDownLeft'){ + createSlices(slider, settings, vars); + timeBuff = 0; + i = 0; + slices = $('.nivo-slice', slider); + if(currentEffect === 'sliceDownLeft') { slices = $('.nivo-slice', slider)._reverse(); } + + slices.each(function(){ + var slice = $(this); + slice.css({ 'top': '0px' }); + if(i === settings.slices-1){ + setTimeout(function(){ + slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); }); + }, (100 + timeBuff)); + } else { + setTimeout(function(){ + slice.animate({opacity:'1.0' }, settings.animSpeed); + }, (100 + timeBuff)); + } + timeBuff += 50; + i++; + }); + } else if(currentEffect === 'sliceUp' || currentEffect === 'sliceUpRight' || currentEffect === 'sliceUpLeft'){ + createSlices(slider, settings, vars); + timeBuff = 0; + i = 0; + slices = $('.nivo-slice', slider); + if(currentEffect === 'sliceUpLeft') { slices = $('.nivo-slice', slider)._reverse(); } + + slices.each(function(){ + var slice = $(this); + slice.css({ 'bottom': '0px' }); + if(i === settings.slices-1){ + setTimeout(function(){ + slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); }); + }, (100 + timeBuff)); + } else { + setTimeout(function(){ + slice.animate({opacity:'1.0' }, settings.animSpeed); + }, (100 + timeBuff)); + } + timeBuff += 50; + i++; + }); + } else if(currentEffect === 'sliceUpDown' || currentEffect === 'sliceUpDownRight' || currentEffect === 'sliceUpDownLeft'){ + createSlices(slider, settings, vars); + timeBuff = 0; + i = 0; + var v = 0; + slices = $('.nivo-slice', slider); + if(currentEffect === 'sliceUpDownLeft') { slices = $('.nivo-slice', slider)._reverse(); } + + slices.each(function(){ + var slice = $(this); + if(i === 0){ + slice.css('top','0px'); + i++; + } else { + slice.css('bottom','0px'); + i = 0; + } + + if(v === settings.slices-1){ + setTimeout(function(){ + slice.animate({opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); }); + }, (100 + timeBuff)); + } else { + setTimeout(function(){ + slice.animate({opacity:'1.0' }, settings.animSpeed); + }, (100 + timeBuff)); + } + timeBuff += 50; + v++; + }); + } else if(currentEffect === 'fold'){ + createSlices(slider, settings, vars); + timeBuff = 0; + i = 0; + + $('.nivo-slice', slider).each(function(){ + var slice = $(this); + var origWidth = slice.width(); + slice.css({ top:'0px', width:'0px' }); + if(i === settings.slices-1){ + setTimeout(function(){ + slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); }); + }, (100 + timeBuff)); + } else { + setTimeout(function(){ + slice.animate({ width:origWidth, opacity:'1.0' }, settings.animSpeed); + }, (100 + timeBuff)); + } + timeBuff += 50; + i++; + }); + } else if(currentEffect === 'fade'){ + createSlices(slider, settings, vars); + + firstSlice = $('.nivo-slice:first', slider); + firstSlice.css({ + 'width': slider.width() + 'px' + }); + + firstSlice.animate({ opacity:'1.0' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); }); + } else if(currentEffect === 'slideInRight'){ + createSlices(slider, settings, vars); + + firstSlice = $('.nivo-slice:first', slider); + firstSlice.css({ + 'width': '0px', + 'opacity': '1' + }); + + firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ slider.trigger('nivo:animFinished'); }); + } else if(currentEffect === 'slideInLeft'){ + createSlices(slider, settings, vars); + + firstSlice = $('.nivo-slice:first', slider); + firstSlice.css({ + 'width': '0px', + 'opacity': '1', + 'left': '', + 'right': '0px' + }); + + firstSlice.animate({ width: slider.width() + 'px' }, (settings.animSpeed*2), '', function(){ + // Reset positioning + firstSlice.css({ + 'left': '0px', + 'right': '' + }); + slider.trigger('nivo:animFinished'); + }); + } else if(currentEffect === 'boxRandom'){ + createBoxes(slider, settings, vars); + + totalBoxes = settings.boxCols * settings.boxRows; + i = 0; + timeBuff = 0; + + boxes = shuffle($('.nivo-box', slider)); + boxes.each(function(){ + var box = $(this); + if(i === totalBoxes-1){ + setTimeout(function(){ + box.animate({ opacity:'1' }, settings.animSpeed, '', function(){ slider.trigger('nivo:animFinished'); }); + }, (100 + timeBuff)); + } else { + setTimeout(function(){ + box.animate({ opacity:'1' }, settings.animSpeed); + }, (100 + timeBuff)); + } + timeBuff += 20; + i++; + }); + } else if(currentEffect === 'boxRain' || currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){ + createBoxes(slider, settings, vars); + + totalBoxes = settings.boxCols * settings.boxRows; + i = 0; + timeBuff = 0; + + // Split boxes into 2D array + var rowIndex = 0; + var colIndex = 0; + var box2Darr = []; + box2Darr[rowIndex] = []; + boxes = $('.nivo-box', slider); + if(currentEffect === 'boxRainReverse' || currentEffect === 'boxRainGrowReverse'){ + boxes = $('.nivo-box', slider)._reverse(); + } + boxes.each(function(){ + box2Darr[rowIndex][colIndex] = $(this); + colIndex++; + if(colIndex === settings.boxCols){ + rowIndex++; + colIndex = 0; + box2Darr[rowIndex] = []; + } + }); + + // Run animation + for(var cols = 0; cols < (settings.boxCols * 2); cols++){ + var prevCol = cols; + for(var rows = 0; rows < settings.boxRows; rows++){ + if(prevCol >= 0 && prevCol < settings.boxCols){ + /* Due to some weird JS bug with loop vars + being used in setTimeout, this is wrapped + with an anonymous function call */ + (function(row, col, time, i, totalBoxes) { + var box = $(box2Darr[row][col]); + var w = box.width(); + var h = box.height(); + if(currentEffect === 'boxRainGrow' || currentEffect === 'boxRainGrowReverse'){ + box.width(0).height(0); + } + if(i === totalBoxes-1){ + setTimeout(function(){ + box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3, '', function(){ slider.trigger('nivo:animFinished'); }); + }, (100 + time)); + } else { + setTimeout(function(){ + box.animate({ opacity:'1', width:w, height:h }, settings.animSpeed/1.3); + }, (100 + time)); + } + })(rows, prevCol, timeBuff, i, totalBoxes); + i++; + } + prevCol--; + } + timeBuff += 100; + } + } + }; + + // Shuffle an array + var shuffle = function(arr){ + for(var j, x, i = arr.length; i; j = parseInt(Math.random() * i, 10), x = arr[--i], arr[i] = arr[j], arr[j] = x); + return arr; + }; + + // For debugging + var trace = function(msg){ + if(this.console && typeof console.log !== 'undefined') { console.log(msg); } + }; + + // Start / Stop + this.stop = function(){ + if(!$(element).data('nivo:vars').stop){ + $(element).data('nivo:vars').stop = true; + trace('Stop Slider'); + } + }; + + this.start = function(){ + if($(element).data('nivo:vars').stop){ + $(element).data('nivo:vars').stop = false; + trace('Start Slider'); + } + }; + + // Trigger the afterLoad callback + settings.afterLoad.call(this); + + return this; + }; + + $.fn.nivoSlider = function(options) { + return this.each(function(key, value){ + var element = $(this); + // Return early if this element already has a plugin instance + if (element.data('nivoslider')) { return element.data('nivoslider'); } + // Pass options to plugin constructor + var nivoslider = new NivoSlider(this, options); + // Store plugin object in this element's data + element.data('nivoslider', nivoslider); + }); + }; + + //Default settings + $.fn.nivoSlider.defaults = { + effect: 'random', + slices: 15, + boxCols: 8, + boxRows: 4, + animSpeed: 500, + pauseTime: 3000, + startSlide: 0, + directionNav: true, + controlNav: true, + controlNavThumbs: false, + pauseOnHover: true, + manualAdvance: false, + prevText: 'Prev', + nextText: 'Next', + randomStart: false, + beforeChange: function(){}, + afterChange: function(){}, + slideshowEnd: function(){}, + lastSlide: function(){}, + afterLoad: function(){} + }; + + $.fn._reverse = [].reverse; + +})(jQuery); \ No newline at end of file diff --git a/protected/modules/banners/widgets/nivoslider/assets/jquery.nivo.slider.pack.js b/protected/modules/banners/widgets/nivoslider/assets/jquery.nivo.slider.pack.js index b066207..f18e2f9 100644 --- a/protected/modules/banners/widgets/nivoslider/assets/jquery.nivo.slider.pack.js +++ b/protected/modules/banners/widgets/nivoslider/assets/jquery.nivo.slider.pack.js @@ -1,16 +1,10 @@ /* - * jQuery Nivo Slider v2.0 + * jQuery Nivo Slider v3.2 * http://nivo.dev7studios.com * - * Copyright 2010, Gilbert Pellegrom + * Copyright 2012, Dev7studios * Free to use and abuse under the MIT license. * http://www.opensource.org/licenses/mit-license.php - * - * May 2010 - Pick random effect from specified set of effects by toronegro - * May 2010 - controlNavThumbsFromRel option added by nerd-sh - * May 2010 - Do not start nivoRun timer if there is only 1 slide by msielski - * April 2010 - controlNavThumbs option added by Jamie Thompson (http://jamiethompson.co.uk) - * March 2010 - manualAdvance option added by HelloPablo (http://hellopablo.co.uk) */ -eval(function(p,a,c,k,e,d){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(9($){$.1f.1q=9(1X){b 3=$.2i({},$.1f.1q.2c,1X);I g.E(9(){b 4={f:0,t:\'\',U:0,o:\'\',N:m,1k:m,1N:m};b 5=$(g);5.1S(\'7:4\',4);5.e(\'2h\',\'2g\');5.1n(\'1q\');b d=5.2j();d.E(9(){b j=$(g);b 1p=\'\';6(!j.K(\'B\')){6(j.K(\'a\')){j.1n(\'7-2k\');1p=j}j=j.1g(\'B:1s\')}b 1c=j.w();6(1c==0)1c=j.s(\'w\');b 1d=j.x();6(1d==0)1d=j.s(\'x\');6(1c>5.w()){5.w(1c)}6(1d>5.x()){5.x(1d)}6(1p!=\'\'){1p.e(\'P\',\'1h\')}j.e(\'P\',\'1h\');4.U++});6(3.1a>0){6(3.1a>=4.U)3.1a=4.U-1;4.f=3.1a}6($(d[4.f]).K(\'B\')){4.t=$(d[4.f])}n{4.t=$(d[4.f]).1g(\'B:1s\')}6($(d[4.f]).K(\'a\')){$(d[4.f]).e(\'P\',\'1w\')}5.e(\'W\',\'V(\'+4.t.s(\'D\')+\') R-Y\');2b(b i=0;i<3.h;i++){b G=X.27(5.w()/3.h);6(i==3.h-1){5.J($(\'\').e({21:(G*i)+\'13\',w:(5.w()-(G*i))+\'13\'}))}n{5.J($(\'\').e({21:(G*i)+\'13\',w:G+\'13\'}))}}5.J($(\'

            \').e({P:\'1h\',y:3.1Y}));6(4.t.s(\'16\')!=\'\'){$(\'.7-H p\',5).1y(4.t.s(\'16\'));$(\'.7-H\',5).1x(3.q)}b l=0;6(!3.1i&&d.1j>1){l=1v(9(){F(5,d,3,m)},3.1m)}6(3.T){5.J(\'2f2m\');6(3.2d){$(\'.7-T\',5).24();5.25(9(){$(\'.7-T\',5).2l()},9(){$(\'.7-T\',5).24()})}$(\'a.7-2a\',5).1J(\'1I\',9(){6(4.N)I m;S(l);l=\'\';4.f-=2;F(5,d,3,\'1C\')});$(\'a.7-29\',5).1J(\'1I\',9(){6(4.N)I m;S(l);l=\'\';F(5,d,3,\'1A\')})}6(3.M){b 1b=$(\'\');5.J(1b);2b(b i=0;i\')}n{1b.J(\'\')}}n{1b.J(\'\'+i+\'\')}}$(\'.7-M a:1B(\'+4.f+\')\',5).1n(\'1o\');$(\'.7-M a\',5).1J(\'1I\',9(){6(4.N)I m;6($(g).2e(\'1o\'))I m;S(l);l=\'\';5.e(\'W\',\'V(\'+4.t.s(\'D\')+\') R-Y\');4.f=$(g).s(\'11\')-1;F(5,d,3,\'1l\')})}6(3.1M){$(2q).2A(9(1L){6(1L.1Z==\'2C\'){6(4.N)I m;S(l);l=\'\';4.f-=2;F(5,d,3,\'1C\')}6(1L.1Z==\'2D\'){6(4.N)I m;S(l);l=\'\';F(5,d,3,\'1A\')}})}6(3.1T){5.25(9(){4.1k=Q;S(l);l=\'\'},9(){4.1k=m;6(l==\'\'&&!3.1i){l=1v(9(){F(5,d,3,m)},3.1m)}})}5.2E(\'7:Z\',9(){4.N=m;$(d).E(9(){6($(g).K(\'a\')){$(g).e(\'P\',\'1h\')}});6($(d[4.f]).K(\'a\')){$(d[4.f]).e(\'P\',\'1w\')}6(l==\'\'&&!4.1k&&!3.1i){l=1v(9(){F(5,d,3,m)},3.1m)}3.1U.1z(g)})});9 F(5,d,3,19){b 4=5.1S(\'7:4\');6((!4||4.1N)&&!19)I m;3.1W.1z(g);6(!19){5.e(\'W\',\'V(\'+4.t.s(\'D\')+\') R-Y\')}n{6(19==\'1C\'){5.e(\'W\',\'V(\'+4.t.s(\'D\')+\') R-Y\')}6(19==\'1A\'){5.e(\'W\',\'V(\'+4.t.s(\'D\')+\') R-Y\')}}4.f++;6(4.f==4.U){4.f=0;3.1V.1z(g)}6(4.f<0)4.f=(4.U-1);6($(d[4.f]).K(\'B\')){4.t=$(d[4.f])}n{4.t=$(d[4.f]).1g(\'B:1s\')}6(3.M){$(\'.7-M a\',5).2F(\'1o\');$(\'.7-M a:1B(\'+4.f+\')\',5).1n(\'1o\')}6(4.t.s(\'16\')!=\'\'){6($(\'.7-H\',5).e(\'P\')==\'1w\'){$(\'.7-H p\',5).22(3.q,9(){$(g).1y(4.t.s(\'16\'));$(g).1x(3.q)})}n{$(\'.7-H p\',5).1y(4.t.s(\'16\'))}$(\'.7-H\',5).1x(3.q)}n{$(\'.7-H\',5).22(3.q)}b i=0;$(\'.7-c\',5).E(9(){b G=X.27(5.w()/3.h);$(g).e({x:\'O\',y:\'0\',W:\'V(\'+4.t.s(\'D\')+\') R-Y -\'+((G+(i*G))-G)+\'13 0%\'});i++});6(3.k==\'1t\'){b 10=2G 2B("1K","14","1F","17","1E","12","1D","1r");4.o=10[X.26(X.1t()*(10.1j+1))];6(4.o==2y)4.o=\'1r\'}6(3.k.2o(\',\')!=-1){b 10=3.k.2r(\',\');4.o=$.2z(10[X.26(X.1t()*10.1j)])}4.N=Q;6(3.k==\'2p\'||3.k==\'1K\'||4.o==\'1K\'||3.k==\'14\'||4.o==\'14\'){b u=0;b i=0;b h=$(\'.7-c\',5);6(3.k==\'14\'||4.o==\'14\')h=$(\'.7-c\',5).1e();h.E(9(){b c=$(g);c.e(\'1G\',\'O\');6(i==3.h-1){L(9(){c.A({x:\'r%\',y:\'1.0\'},3.q,\'\',9(){5.18(\'7:Z\')})},(r+u))}n{L(9(){c.A({x:\'r%\',y:\'1.0\'},3.q)},(r+u))}u+=1u;i++})}n 6(3.k==\'2t\'||3.k==\'1F\'||4.o==\'1F\'||3.k==\'17\'||4.o==\'17\'){b u=0;b i=0;b h=$(\'.7-c\',5);6(3.k==\'17\'||4.o==\'17\')h=$(\'.7-c\',5).1e();h.E(9(){b c=$(g);c.e(\'23\',\'O\');6(i==3.h-1){L(9(){c.A({x:\'r%\',y:\'1.0\'},3.q,\'\',9(){5.18(\'7:Z\')})},(r+u))}n{L(9(){c.A({x:\'r%\',y:\'1.0\'},3.q)},(r+u))}u+=1u;i++})}n 6(3.k==\'1E\'||3.k==\'2u\'||4.o==\'1E\'||3.k==\'12\'||4.o==\'12\'){b u=0;b i=0;b v=0;b h=$(\'.7-c\',5);6(3.k==\'12\'||4.o==\'12\')h=$(\'.7-c\',5).1e();h.E(9(){b c=$(g);6(i==0){c.e(\'1G\',\'O\');i++}n{c.e(\'23\',\'O\');i=0}6(v==3.h-1){L(9(){c.A({x:\'r%\',y:\'1.0\'},3.q,\'\',9(){5.18(\'7:Z\')})},(r+u))}n{L(9(){c.A({x:\'r%\',y:\'1.0\'},3.q)},(r+u))}u+=1u;v++})}n 6(3.k==\'1D\'||4.o==\'1D\'){b u=0;b i=0;$(\'.7-c\',5).E(9(){b c=$(g);b 1H=c.w();c.e({1G:\'O\',x:\'r%\',w:\'O\'});6(i==3.h-1){L(9(){c.A({w:1H,y:\'1.0\'},3.q,\'\',9(){5.18(\'7:Z\')})},(r+u))}n{L(9(){c.A({w:1H,y:\'1.0\'},3.q)},(r+u))}u+=1u;i++})}n 6(3.k==\'1r\'||4.o==\'1r\'){b i=0;$(\'.7-c\',5).E(9(){$(g).e(\'x\',\'r%\');6(i==3.h-1){$(g).A({y:\'1.0\'},(3.q*2),\'\',9(){5.18(\'7:Z\')})}n{$(g).A({y:\'1.0\'},(3.q*2))}i++})}}};$.1f.1q.2c={k:\'1t\',h:15,q:2x,1m:2w,1a:0,T:Q,2d:Q,M:Q,20:m,1Q:m,1R:\'.1O\',1P:\'2v.1O\',1M:Q,1T:Q,1i:m,1Y:0.8,1W:9(){},1U:9(){},1V:9(){}};$.1f.1e=[].1e})(2s);',62,167,'|||settings|vars|slider|if|nivo||function||var|slice|kids|css|currentSlide|this|slices||child|effect|timer|false|else|randAnim||animSpeed|100|attr|currentImage|timeBuff||width|height|opacity|class|animate|img|div|src|each|nivoRun|sliceWidth|caption|return|append|is|setTimeout|controlNav|running|0px|display|true|no|clearInterval|directionNav|totalSlides|url|background|Math|repeat|animFinished|anims|rel|sliceUpDownLeft|px|sliceDownLeft||title|sliceUpLeft|trigger|nudge|startSlide|nivoControl|childWidth|childHeight|reverse|fn|find|none|manualAdvance|length|paused|control|pauseTime|addClass|active|link|nivoSlider|fade|first|random|50|setInterval|block|fadeIn|html|call|next|eq|prev|fold|sliceUpDown|sliceUpRight|top|origWidth|click|live|sliceDownRight|event|keyboardNav|stop|jpg|controlNavThumbsReplace|controlNavThumbsFromRel|controlNavThumbsSearch|data|pauseOnHover|afterChange|slideshowEnd|beforeChange|options|captionOpacity|keyCode|controlNavThumbs|left|fadeOut|bottom|hide|hover|floor|round|alt|nextNav|prevNav|for|defaults|directionNavHide|hasClass|Prev|relative|position|extend|children|imageLink|show|Next|replace|indexOf|sliceDown|window|split|jQuery|sliceUp|sliceUpDownRight|_thumb|3000|500|undefined|trim|keypress|Array|37|39|bind|removeClass|new'.split('|'),0,{})) +(function(e){var t=function(t,n){var r=e.extend({},e.fn.nivoSlider.defaults,n);var i={currentSlide:0,currentImage:"",totalSlides:0,running:false,paused:false,stop:false,controlNavEl:false};var s=e(t);s.data("nivo:vars",i).addClass("nivoSlider");var o=s.children();o.each(function(){var t=e(this);var n="";if(!t.is("img")){if(t.is("a")){t.addClass("nivo-imageLink");n=t}t=t.find("img:first")}var r=r===0?t.attr("width"):t.width(),s=s===0?t.attr("height"):t.height();if(n!==""){n.css("display","none")}t.css("display","none");i.totalSlides++});if(r.randomStart){r.startSlide=Math.floor(Math.random()*i.totalSlides)}if(r.startSlide>0){if(r.startSlide>=i.totalSlides){r.startSlide=i.totalSlides-1}i.currentSlide=r.startSlide}if(e(o[i.currentSlide]).is("img")){i.currentImage=e(o[i.currentSlide])}else{i.currentImage=e(o[i.currentSlide]).find("img:first")}if(e(o[i.currentSlide]).is("a")){e(o[i.currentSlide]).css("display","block")}var u=e("").addClass("nivo-main-image");u.attr("src",i.currentImage.attr("src")).show();s.append(u);e(window).resize(function(){s.children("img").width(s.width());u.attr("src",i.currentImage.attr("src"));u.stop().height("auto");e(".nivo-slice").remove();e(".nivo-box").remove()});s.append(e('
            '));var a=function(t){var n=e(".nivo-caption",s);if(i.currentImage.attr("title")!=""&&i.currentImage.attr("title")!=undefined){var r=i.currentImage.attr("title");if(r.substr(0,1)=="#")r=e(r).html();if(n.css("display")=="block"){setTimeout(function(){n.html(r)},t.animSpeed)}else{n.html(r);n.stop().fadeIn(t.animSpeed)}}else{n.stop().fadeOut(t.animSpeed)}};a(r);var f=0;if(!r.manualAdvance&&o.length>1){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}if(r.directionNav){s.append('");e(s).on("click","a.nivo-prevNav",function(){if(i.running){return false}clearInterval(f);f="";i.currentSlide-=2;d(s,o,r,"prev")});e(s).on("click","a.nivo-nextNav",function(){if(i.running){return false}clearInterval(f);f="";d(s,o,r,"next")})}if(r.controlNav){i.controlNavEl=e('
            ');s.after(i.controlNavEl);for(var l=0;l')}else{i.controlNavEl.append(''+(l+1)+"")}}e("a:eq("+i.currentSlide+")",i.controlNavEl).addClass("active");e("a",i.controlNavEl).bind("click",function(){if(i.running)return false;if(e(this).hasClass("active"))return false;clearInterval(f);f="";u.attr("src",i.currentImage.attr("src"));i.currentSlide=e(this).attr("rel")-1;d(s,o,r,"control")})}if(r.pauseOnHover){s.hover(function(){i.paused=true;clearInterval(f);f=""},function(){i.paused=false;if(f===""&&!r.manualAdvance){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}})}s.bind("nivo:animFinished",function(){u.attr("src",i.currentImage.attr("src"));i.running=false;e(o).each(function(){if(e(this).is("a")){e(this).css("display","none")}});if(e(o[i.currentSlide]).is("a")){e(o[i.currentSlide]).css("display","block")}if(f===""&&!i.paused&&!r.manualAdvance){f=setInterval(function(){d(s,o,r,false)},r.pauseTime)}r.afterChange.call(this)});var h=function(t,n,r){if(e(r.currentImage).parent().is("a"))e(r.currentImage).parent().css("display","block");e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility","hidden").show();var i=e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").parent().is("a")?e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").parent().height():e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").height();for(var s=0;s
            ').css({left:o*s+"px",width:t.width()-o*s+"px",height:i+"px",opacity:"0",overflow:"hidden"}))}else{t.append(e('
            ').css({left:o*s+"px",width:o+"px",height:i+"px",opacity:"0",overflow:"hidden"}))}}e(".nivo-slice",t).height(i);u.stop().animate({height:e(r.currentImage).height()},n.animSpeed)};var p=function(t,n,r){if(e(r.currentImage).parent().is("a"))e(r.currentImage).parent().css("display","block");e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility","hidden").show();var i=Math.round(t.width()/n.boxCols),s=Math.round(e('img[src="'+r.currentImage.attr("src")+'"]',t).not(".nivo-main-image,.nivo-control img").height()/n.boxRows);for(var o=0;o
            ').css({opacity:0,left:i*a+"px",top:s*o+"px",width:t.width()-i*a+"px"}));e('.nivo-box[name="'+a+'"]',t).height(e('.nivo-box[name="'+a+'"] img',t).height()+"px")}else{t.append(e('
            ').css({opacity:0,left:i*a+"px",top:s*o+"px",width:i+"px"}));e('.nivo-box[name="'+a+'"]',t).height(e('.nivo-box[name="'+a+'"] img',t).height()+"px")}}}u.stop().animate({height:e(r.currentImage).height()},n.animSpeed)};var d=function(t,n,r,i){var s=t.data("nivo:vars");if(s&&s.currentSlide===s.totalSlides-1){r.lastSlide.call(this)}if((!s||s.stop)&&!i){return false}r.beforeChange.call(this);if(!i){u.attr("src",s.currentImage.attr("src"))}else{if(i==="prev"){u.attr("src",s.currentImage.attr("src"))}if(i==="next"){u.attr("src",s.currentImage.attr("src"))}}s.currentSlide++;if(s.currentSlide===s.totalSlides){s.currentSlide=0;r.slideshowEnd.call(this)}if(s.currentSlide<0){s.currentSlide=s.totalSlides-1}if(e(n[s.currentSlide]).is("img")){s.currentImage=e(n[s.currentSlide])}else{s.currentImage=e(n[s.currentSlide]).find("img:first")}if(r.controlNav){e("a",s.controlNavEl).removeClass("active");e("a:eq("+s.currentSlide+")",s.controlNavEl).addClass("active")}a(r);e(".nivo-slice",t).remove();e(".nivo-box",t).remove();var o=r.effect,f="";if(r.effect==="random"){f=new Array("sliceDownRight","sliceDownLeft","sliceUpRight","sliceUpLeft","sliceUpDown","sliceUpDownLeft","fold","fade","boxRandom","boxRain","boxRainReverse","boxRainGrow","boxRainGrowReverse");o=f[Math.floor(Math.random()*(f.length+1))];if(o===undefined){o="fade"}}if(r.effect.indexOf(",")!==-1){f=r.effect.split(",");o=f[Math.floor(Math.random()*f.length)];if(o===undefined){o="fade"}}if(s.currentImage.attr("data-transition")){o=s.currentImage.attr("data-transition")}s.running=true;var l=0,c=0,d="",m="",g="",y="";if(o==="sliceDown"||o==="sliceDownRight"||o==="sliceDownLeft"){h(t,r,s);l=0;c=0;d=e(".nivo-slice",t);if(o==="sliceDownLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);n.css({top:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="sliceUp"||o==="sliceUpRight"||o==="sliceUpLeft"){h(t,r,s);l=0;c=0;d=e(".nivo-slice",t);if(o==="sliceUpLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);n.css({bottom:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="sliceUpDown"||o==="sliceUpDownRight"||o==="sliceUpDownLeft"){h(t,r,s);l=0;c=0;var b=0;d=e(".nivo-slice",t);if(o==="sliceUpDownLeft"){d=e(".nivo-slice",t)._reverse()}d.each(function(){var n=e(this);if(c===0){n.css("top","0px");c++}else{n.css("bottom","0px");c=0}if(b===r.slices-1){setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1.0"},r.animSpeed)},100+l)}l+=50;b++})}else if(o==="fold"){h(t,r,s);l=0;c=0;e(".nivo-slice",t).each(function(){var n=e(this);var i=n.width();n.css({top:"0px",width:"0px"});if(c===r.slices-1){setTimeout(function(){n.animate({width:i,opacity:"1.0"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({width:i,opacity:"1.0"},r.animSpeed)},100+l)}l+=50;c++})}else if(o==="fade"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:t.width()+"px"});m.animate({opacity:"1.0"},r.animSpeed*2,"",function(){t.trigger("nivo:animFinished")})}else if(o==="slideInRight"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:"0px",opacity:"1"});m.animate({width:t.width()+"px"},r.animSpeed*2,"",function(){t.trigger("nivo:animFinished")})}else if(o==="slideInLeft"){h(t,r,s);m=e(".nivo-slice:first",t);m.css({width:"0px",opacity:"1",left:"",right:"0px"});m.animate({width:t.width()+"px"},r.animSpeed*2,"",function(){m.css({left:"0px",right:""});t.trigger("nivo:animFinished")})}else if(o==="boxRandom"){p(t,r,s);g=r.boxCols*r.boxRows;c=0;l=0;y=v(e(".nivo-box",t));y.each(function(){var n=e(this);if(c===g-1){setTimeout(function(){n.animate({opacity:"1"},r.animSpeed,"",function(){t.trigger("nivo:animFinished")})},100+l)}else{setTimeout(function(){n.animate({opacity:"1"},r.animSpeed)},100+l)}l+=20;c++})}else if(o==="boxRain"||o==="boxRainReverse"||o==="boxRainGrow"||o==="boxRainGrowReverse"){p(t,r,s);g=r.boxCols*r.boxRows;c=0;l=0;var w=0;var E=0;var S=[];S[w]=[];y=e(".nivo-box",t);if(o==="boxRainReverse"||o==="boxRainGrowReverse"){y=e(".nivo-box",t)._reverse()}y.each(function(){S[w][E]=e(this);E++;if(E===r.boxCols){w++;E=0;S[w]=[]}});for(var x=0;x=0&&T 'slider-wrapper theme-default'))."\n"; echo CHtml::openTag('div', $this->htmlOptions)."\n"; if(count($this->images)) { $this->renderImages($this->images); } +echo CHtml::closeTag('div')."\n"; echo CHtml::closeTag('div')."\n"; \ No newline at end of file diff --git a/protected/modules/core/widgets/IncludeFile/IncludeFile.php b/protected/modules/core/widgets/IncludeFile/IncludeFile.php index 962637f..5beb3e5 100644 --- a/protected/modules/core/widgets/IncludeFile/IncludeFile.php +++ b/protected/modules/core/widgets/IncludeFile/IncludeFile.php @@ -105,13 +105,14 @@ public function endAdminTool() echo CHtml::beginform(Yii::app()->createUrl('/core/admin/ajax/saveFile'),'post',array( 'id' => "form_".$this->id )); - $this->widget('ext.elrte.SElrteArea',array( - 'name' => 'FileContent', + $this->widget('application.extensions.ckeditor.ECKEditor',array( + 'name' => 'FileContent['.$this->id.']', 'value' => file_get_contents($this->filePath), 'htmlOptions' => array( 'cols' => 100, 'rows' => 15, 'id' => 'content_'.$this->id, + 'class' => 'js-incTextArea' ), )); echo CHtml::hiddenField('FileName',$this->filePath); diff --git a/protected/modules/core/widgets/IncludeFile/assets/js/includefile.js b/protected/modules/core/widgets/IncludeFile/assets/js/includefile.js index 81e3728..1008b76 100644 --- a/protected/modules/core/widgets/IncludeFile/assets/js/includefile.js +++ b/protected/modules/core/widgets/IncludeFile/assets/js/includefile.js @@ -6,6 +6,8 @@ $(function(){ var content_id = $(this).data('content-id'); var url = $(this).data('url'); + var textarea = $("#"+content_id); + CKEDITOR.instances[content_id].destroy(); $("#"+dialog_id).dialog({ width: 1000, @@ -19,10 +21,8 @@ $(function(){ }, click: function() { - $('#'+content_id).elrte('updateSource'); - var YII_CSRF_TOKEN = $("#"+dialog_id).find('input[name=YII_CSRF_TOKEN]').val(); - var FileContent = $("#"+dialog_id).find('textarea[name=FileContent]').val(); + var FileContent = CKEDITOR.instances[content_id].getData(); var FileName = $("#"+dialog_id).find('input[name=FileName]').val(); var data = { @@ -41,7 +41,10 @@ $(function(){ // resulting in the label being used as a tooltip // showText: false } - ] + ], + 'open' : function(event, ui){ + CKEDITOR.replace( $("#"+content_id).attr('name') ); + } }); }); }); diff --git a/protected/modules/pages/views/admin/category/categoryForm.php b/protected/modules/pages/views/admin/category/categoryForm.php index d1061a9..1680773 100644 --- a/protected/modules/pages/views/admin/category/categoryForm.php +++ b/protected/modules/pages/views/admin/category/categoryForm.php @@ -25,7 +25,7 @@ ) ), 'description'=>array( - 'type'=>'SRichTextarea', + 'type'=>'application.extensions.ckeditor.ECKEditor', ), ), ), diff --git a/protected/modules/pages/views/admin/default/pageForm.php b/protected/modules/pages/views/admin/default/pageForm.php index 9ba85ca..1c818e4 100644 --- a/protected/modules/pages/views/admin/default/pageForm.php +++ b/protected/modules/pages/views/admin/default/pageForm.php @@ -23,10 +23,10 @@ 'empty'=>'---', ), 'short_description'=>array( - 'type'=>'SRichTextarea', + 'type'=>'application.extensions.ckeditor.ECKEditor', ), 'full_description'=>array( - 'type'=>'SRichTextarea', + 'type'=>'application.extensions.ckeditor.ECKEditor', ), ), ), diff --git a/protected/modules/store/views/admin/products/productForm.php b/protected/modules/store/views/admin/products/productForm.php index c14d329..016c38b 100644 --- a/protected/modules/store/views/admin/products/productForm.php +++ b/protected/modules/store/views/admin/products/productForm.php @@ -37,10 +37,10 @@ 'empty'=>Yii::t('StoreModule.admin', 'Выберите производителя'), ), 'short_description'=>array( - 'type'=>'SRichTextarea', + 'type'=>'application.extensions.ckeditor.ECKEditor', ), 'full_description'=>array( - 'type'=>'SRichTextarea', + 'type'=>'application.extensions.ckeditor.ECKEditor', ), ), ), diff --git a/protected/views/layouts/main.php b/protected/views/layouts/main.php index 861571f..3b91b54 100644 --- a/protected/views/layouts/main.php +++ b/protected/views/layouts/main.php @@ -11,10 +11,6 @@ Yii::import('ext.jgrowl.Jgrowl'); Jgrowl::register(); - // Disable jquery-ui default theme - $assetsManager->scriptMap=array( - 'jquery-ui.css'=>false, - ); ?> @@ -27,7 +23,6 @@ - diff --git a/themes/default/assets/js/menu.js b/themes/default/assets/js/menu.js index 2e170ad..c51ed18 100644 --- a/themes/default/assets/js/menu.js +++ b/themes/default/assets/js/menu.js @@ -2,11 +2,8 @@ // Fix menu for Firefox due to // "The effect of 'position:relative' on ...table-cell... elements is undefined. " $(document).ready(function(){ - if($.browser.mozilla) - { - var items = $("ul.dropdown>li"); - items.css('display', 'block') - .css('float', 'left') - .css('width', 979 / items.length); - } + var items = $("ul.dropdown>li"); + items.css('display', 'block') + .css('float', 'left') + .css('width', 979 / items.length); }); \ No newline at end of file diff --git a/uploads/.htaccess b/uploads/.htaccess new file mode 100644 index 0000000..33c697e --- /dev/null +++ b/uploads/.htaccess @@ -0,0 +1,6 @@ + + php_value engine off + + + php_value engine off + diff --git a/uploads/.thumbs/images/facebook-profile-picture-1.jpg b/uploads/.thumbs/images/facebook-profile-picture-1.jpg new file mode 100644 index 0000000..f56c67f Binary files /dev/null and b/uploads/.thumbs/images/facebook-profile-picture-1.jpg differ diff --git a/uploads/.tmb/l1_LnRodW1ic1xpbWFnZXNcZmFjZWJvb2stcHJvZmlsZS1waWN0dXJlLTEuanBn1443523723.png b/uploads/.tmb/l1_LnRodW1ic1xpbWFnZXNcZmFjZWJvb2stcHJvZmlsZS1waWN0dXJlLTEuanBn1443523723.png new file mode 100644 index 0000000..4405b14 Binary files /dev/null and b/uploads/.tmb/l1_LnRodW1ic1xpbWFnZXNcZmFjZWJvb2stcHJvZmlsZS1waWN0dXJlLTEuanBn1443523723.png differ diff --git a/uploads/.tmb/l1_aW1hZ2VzXGZhY2Vib29rLXByb2ZpbGUtcGljdHVyZS0xLmpwZw1443523723.png b/uploads/.tmb/l1_aW1hZ2VzXGZhY2Vib29rLXByb2ZpbGUtcGljdHVyZS0xLmpwZw1443523723.png new file mode 100644 index 0000000..4c9171f Binary files /dev/null and b/uploads/.tmb/l1_aW1hZ2VzXGZhY2Vib29rLXByb2ZpbGUtcGljdHVyZS0xLmpwZw1443523723.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw0M18tMTQzMjEzNTExOC5qcGc1427273033.png b/uploads/.tmb/l1_cHJvZHVjdFw0M18tMTQzMjEzNTExOC5qcGc1427273033.png new file mode 100644 index 0000000..a4e5366 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw0M18tMTQzMjEzNTExOC5qcGc1427273033.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw0MF8xNTUxOTEzMzQ5LmpwZw1427273033.png b/uploads/.tmb/l1_cHJvZHVjdFw0MF8xNTUxOTEzMzQ5LmpwZw1427273033.png new file mode 100644 index 0000000..cef7f2c Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw0MF8xNTUxOTEzMzQ5LmpwZw1427273033.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw0MV8yMTE5OTg2MDEyLmpwZw1427273033.png b/uploads/.tmb/l1_cHJvZHVjdFw0MV8yMTE5OTg2MDEyLmpwZw1427273033.png new file mode 100644 index 0000000..fa059f6 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw0MV8yMTE5OTg2MDEyLmpwZw1427273033.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw0Ml8tODcyOTcxODcxLmpwZw1427273033.png b/uploads/.tmb/l1_cHJvZHVjdFw0Ml8tODcyOTcxODcxLmpwZw1427273033.png new file mode 100644 index 0000000..21daa29 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw0Ml8tODcyOTcxODcxLmpwZw1427273033.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw0NF83NzY4Njc4ODQuanBn1427273033.png b/uploads/.tmb/l1_cHJvZHVjdFw0NF83NzY4Njc4ODQuanBn1427273033.png new file mode 100644 index 0000000..fa059f6 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw0NF83NzY4Njc4ODQuanBn1427273033.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw0Xy01NDQxNzU3NTIuanBn1427273029.png b/uploads/.tmb/l1_cHJvZHVjdFw0Xy01NDQxNzU3NTIuanBn1427273029.png new file mode 100644 index 0000000..39c6e46 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw0Xy01NDQxNzU3NTIuanBn1427273029.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw1Xy04NzUzMTAyNTAuanBn1427273029.png b/uploads/.tmb/l1_cHJvZHVjdFw1Xy04NzUzMTAyNTAuanBn1427273029.png new file mode 100644 index 0000000..2ebcfac Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw1Xy04NzUzMTAyNTAuanBn1427273029.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw2Xzc3NDAyNTAwNC5qcGc1427273029.png b/uploads/.tmb/l1_cHJvZHVjdFw2Xzc3NDAyNTAwNC5qcGc1427273029.png new file mode 100644 index 0000000..3307716 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw2Xzc3NDAyNTAwNC5qcGc1427273029.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw3XzE2NzI3NTQxNTcuanBn1427273029.png b/uploads/.tmb/l1_cHJvZHVjdFw3XzE2NzI3NTQxNTcuanBn1427273029.png new file mode 100644 index 0000000..87f40db Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw3XzE2NzI3NTQxNTcuanBn1427273029.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw4Xy0yMTI3ODcxODA0LmpwZw1427273029.png b/uploads/.tmb/l1_cHJvZHVjdFw4Xy0yMTI3ODcxODA0LmpwZw1427273029.png new file mode 100644 index 0000000..f73e95e Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw4Xy0yMTI3ODcxODA0LmpwZw1427273029.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFw5Xy0yMDUzMjcyODY0LmpwZw1427273029.png b/uploads/.tmb/l1_cHJvZHVjdFw5Xy0yMDUzMjcyODY0LmpwZw1427273029.png new file mode 100644 index 0000000..3e0bb3b Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFw5Xy0yMDUzMjcyODY0LmpwZw1427273029.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxM18tMTA3MjAyNDQ2Ny5qcGc1427273030.png b/uploads/.tmb/l1_cHJvZHVjdFwxM18tMTA3MjAyNDQ2Ny5qcGc1427273030.png new file mode 100644 index 0000000..bdf9fe3 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxM18tMTA3MjAyNDQ2Ny5qcGc1427273030.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxMF8xMTU2ODI1MDc0LmpwZw1427273030.png b/uploads/.tmb/l1_cHJvZHVjdFwxMF8xMTU2ODI1MDc0LmpwZw1427273030.png new file mode 100644 index 0000000..55b9d47 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxMF8xMTU2ODI1MDc0LmpwZw1427273030.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxMV8xNzE4Njg2MjMzLmpwZw1427273030.png b/uploads/.tmb/l1_cHJvZHVjdFwxMV8xNzE4Njg2MjMzLmpwZw1427273030.png new file mode 100644 index 0000000..499bd0a Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxMV8xNzE4Njg2MjMzLmpwZw1427273030.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxMl8tMTgxNjEyOTUwOC5qcGc1427273030.png b/uploads/.tmb/l1_cHJvZHVjdFwxMl8tMTgxNjEyOTUwOC5qcGc1427273030.png new file mode 100644 index 0000000..5144a8e Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxMl8tMTgxNjEyOTUwOC5qcGc1427273030.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxN18tMTgxMTMwMTczOC5qcGc1427273030.png b/uploads/.tmb/l1_cHJvZHVjdFwxN18tMTgxMTMwMTczOC5qcGc1427273030.png new file mode 100644 index 0000000..adea86b Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxN18tMTgxMTMwMTczOC5qcGc1427273030.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxNF80MzgyODIzMTYuanBn1427273030.png b/uploads/.tmb/l1_cHJvZHVjdFwxNF80MzgyODIzMTYuanBn1427273030.png new file mode 100644 index 0000000..5a4d1b2 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxNF80MzgyODIzMTYuanBn1427273030.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxNV8xOTU5OTI2ODgzLmpwZw1427273030.png b/uploads/.tmb/l1_cHJvZHVjdFwxNV8xOTU5OTI2ODgzLmpwZw1427273030.png new file mode 100644 index 0000000..5e7173b Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxNV8xOTU5OTI2ODgzLmpwZw1427273030.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxNl8xNTk5MDQzNTM3LmpwZw1427273030.png b/uploads/.tmb/l1_cHJvZHVjdFwxNl8xNTk5MDQzNTM3LmpwZw1427273030.png new file mode 100644 index 0000000..71e7a9f Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxNl8xNTk5MDQzNTM3LmpwZw1427273030.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxOF8tMzM0MzY0ODU2LmpwZw1427273030.png b/uploads/.tmb/l1_cHJvZHVjdFwxOF8tMzM0MzY0ODU2LmpwZw1427273030.png new file mode 100644 index 0000000..b0b9b1d Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxOF8tMzM0MzY0ODU2LmpwZw1427273030.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxOV8yMTA4MzExMjA1LmpwZw1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwxOV8yMTA4MzExMjA1LmpwZw1427273031.png new file mode 100644 index 0000000..b63aa20 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxOV8yMTA4MzExMjA1LmpwZw1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwxXy05OTg0ODEzNzMuanBn1427273029.png b/uploads/.tmb/l1_cHJvZHVjdFwxXy05OTg0ODEzNzMuanBn1427273029.png new file mode 100644 index 0000000..985c9e8 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwxXy05OTg0ODEzNzMuanBn1427273029.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyM18tMjA3MzA2MDk2Ni5qcGc1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwyM18tMjA3MzA2MDk2Ni5qcGc1427273031.png new file mode 100644 index 0000000..fd36f15 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyM18tMjA3MzA2MDk2Ni5qcGc1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyMF8tMTI5NTQwMDU3OC5qcGc1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwyMF8tMTI5NTQwMDU3OC5qcGc1427273031.png new file mode 100644 index 0000000..9f4013e Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyMF8tMTI5NTQwMDU3OC5qcGc1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyMV81NTQ0NDQ5MjYuanBn1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwyMV81NTQ0NDQ5MjYuanBn1427273031.png new file mode 100644 index 0000000..37ac101 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyMV81NTQ0NDQ5MjYuanBn1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyMl8tMTE4ODQzNzk1OS5qcGc1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwyMl8tMTE4ODQzNzk1OS5qcGc1427273031.png new file mode 100644 index 0000000..37ac101 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyMl8tMTE4ODQzNzk1OS5qcGc1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyN18xNTIyMTg2MDg1LmpwZw1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwyN18xNTIyMTg2MDg1LmpwZw1427273031.png new file mode 100644 index 0000000..8c08c33 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyN18xNTIyMTg2MDg1LmpwZw1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyNF8xNzExMDIyMzQ1LmpwZw1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwyNF8xNzExMDIyMzQ1LmpwZw1427273031.png new file mode 100644 index 0000000..ab01025 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyNF8xNzExMDIyMzQ1LmpwZw1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyNV8tMTQ0Nzc5NjgxMS5qcGc1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwyNV8tMTQ0Nzc5NjgxMS5qcGc1427273031.png new file mode 100644 index 0000000..192be33 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyNV8tMTQ0Nzc5NjgxMS5qcGc1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyNl8tNjkyNTE1OTU4LmpwZw1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwyNl8tNjkyNTE1OTU4LmpwZw1427273031.png new file mode 100644 index 0000000..b174a00 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyNl8tNjkyNTE1OTU4LmpwZw1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyOF8tMTc3MjI3OTg1OC5qcGc1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwyOF8tMTc3MjI3OTg1OC5qcGc1427273031.png new file mode 100644 index 0000000..c439636 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyOF8tMTc3MjI3OTg1OC5qcGc1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyOV8yMTQ2MDQ0OTU1LmpwZw1427273031.png b/uploads/.tmb/l1_cHJvZHVjdFwyOV8yMTQ2MDQ0OTU1LmpwZw1427273031.png new file mode 100644 index 0000000..c439636 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyOV8yMTQ2MDQ0OTU1LmpwZw1427273031.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwyXy0zNTg1Nzc1MzIuanBn1427273029.png b/uploads/.tmb/l1_cHJvZHVjdFwyXy0zNTg1Nzc1MzIuanBn1427273029.png new file mode 100644 index 0000000..ab05e3c Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwyXy0zNTg1Nzc1MzIuanBn1427273029.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzM18tMTg3OTg0NTI4MC5qcGc1427273032.png b/uploads/.tmb/l1_cHJvZHVjdFwzM18tMTg3OTg0NTI4MC5qcGc1427273032.png new file mode 100644 index 0000000..f568225 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzM18tMTg3OTg0NTI4MC5qcGc1427273032.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzMF85Mjg2OTM2NDIuanBn1427273032.png b/uploads/.tmb/l1_cHJvZHVjdFwzMF85Mjg2OTM2NDIuanBn1427273032.png new file mode 100644 index 0000000..e364010 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzMF85Mjg2OTM2NDIuanBn1427273032.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzMV80ODc3MzMyODAuanBn1427273032.png b/uploads/.tmb/l1_cHJvZHVjdFwzMV80ODc3MzMyODAuanBn1427273032.png new file mode 100644 index 0000000..9a12b40 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzMV80ODc3MzMyODAuanBn1427273032.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzMl8tNTgyNTE4NzIwLmpwZw1427273032.png b/uploads/.tmb/l1_cHJvZHVjdFwzMl8tNTgyNTE4NzIwLmpwZw1427273032.png new file mode 100644 index 0000000..f0400cf Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzMl8tNTgyNTE4NzIwLmpwZw1427273032.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzN18tMTE3MTkyNjYuanBn1427273032.png b/uploads/.tmb/l1_cHJvZHVjdFwzN18tMTE3MTkyNjYuanBn1427273032.png new file mode 100644 index 0000000..f3ad665 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzN18tMTE3MTkyNjYuanBn1427273032.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzNF8xMjYyNDk1MDI3LmpwZw1427273032.png b/uploads/.tmb/l1_cHJvZHVjdFwzNF8xMjYyNDk1MDI3LmpwZw1427273032.png new file mode 100644 index 0000000..f568225 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzNF8xMjYyNDk1MDI3LmpwZw1427273032.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzNV8tMTc2NTAyNDE2My5qcGc1427273032.png b/uploads/.tmb/l1_cHJvZHVjdFwzNV8tMTc2NTAyNDE2My5qcGc1427273032.png new file mode 100644 index 0000000..f568225 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzNV8tMTc2NTAyNDE2My5qcGc1427273032.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzNl8tNjE1NDM2NzI4LmpwZw1427273032.png b/uploads/.tmb/l1_cHJvZHVjdFwzNl8tNjE1NDM2NzI4LmpwZw1427273032.png new file mode 100644 index 0000000..03a68a7 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzNl8tNjE1NDM2NzI4LmpwZw1427273032.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzOF80NTMwMzgzNzguanBn1427273032.png b/uploads/.tmb/l1_cHJvZHVjdFwzOF80NTMwMzgzNzguanBn1427273032.png new file mode 100644 index 0000000..d3ba4ca Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzOF80NTMwMzgzNzguanBn1427273032.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzOV8xOTc3NDE3MTAxLmpwZw1427273033.png b/uploads/.tmb/l1_cHJvZHVjdFwzOV8xOTc3NDE3MTAxLmpwZw1427273033.png new file mode 100644 index 0000000..c128e77 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzOV8xOTc3NDE3MTAxLmpwZw1427273033.png differ diff --git a/uploads/.tmb/l1_cHJvZHVjdFwzXy0xNTM2MjA2NjU2LmpwZw1427273029.png b/uploads/.tmb/l1_cHJvZHVjdFwzXy0xNTM2MjA2NjU2LmpwZw1427273029.png new file mode 100644 index 0000000..25e3e21 Binary files /dev/null and b/uploads/.tmb/l1_cHJvZHVjdFwzXy0xNTM2MjA2NjU2LmpwZw1427273029.png differ diff --git a/uploads/images/facebook-profile-picture-1.jpg b/uploads/images/facebook-profile-picture-1.jpg new file mode 100644 index 0000000..579811a Binary files /dev/null and b/uploads/images/facebook-profile-picture-1.jpg differ

        + CKEditor Samples » Create and Destroy Editor Instances for Ajax Applications +