564 changed files with 68295 additions and 50055 deletions
			
			
		| @ -1,7 +1,7 @@ | ||||
| The Yii framework is free software. It is released under the terms of | ||||
| the following BSD License. | ||||
| 
 | ||||
| Copyright © 2008-2012 by Yii Software LLC (http://www.yiisoft.com) | ||||
| Copyright © 2008-2013 by Yii Software LLC (http://www.yiisoft.com) | ||||
| All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| @ -0,0 +1,32 @@ | ||||
| The Yii framework is free software. It is released under the terms of | ||||
| the following BSD License. | ||||
| 
 | ||||
| Copyright © 2008-2013 by Yii Software LLC (http://www.yiisoft.com) | ||||
| All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions | ||||
| are met: | ||||
| 
 | ||||
|  * Redistributions of source code must retain the above copyright | ||||
|    notice, this list of conditions and the following disclaimer. | ||||
|  * Redistributions in binary form must reproduce the above copyright | ||||
|    notice, this list of conditions and the following disclaimer in | ||||
|    the documentation and/or other materials provided with the | ||||
|    distribution. | ||||
|  * Neither the name of Yii Software LLC nor the names of its | ||||
|    contributors may be used to endorse or promote products derived | ||||
|    from this software without specific prior written permission. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||||
| FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||||
| COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||||
| INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||||
| BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||||
| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||||
| ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
| POSSIBILITY OF SUCH DAMAGE. | ||||
| @ -0,0 +1,61 @@ | ||||
| Yii 2 Bootstrap Application | ||||
| =========================== | ||||
| 
 | ||||
| **NOTE** Yii 2 and the relevant applications and extensions are still under heavy | ||||
| development. We may make significant changes without prior notices. Please do not | ||||
| use them for production. Please consider using [Yii v1.1](https://github.com/yiisoft/yii) | ||||
| if you have a project to be deployed for production soon. | ||||
| 
 | ||||
| 
 | ||||
| Thank you for choosing Yii 2 - the new generation of high-performance PHP framework. | ||||
| 
 | ||||
| The Yii 2 Bootstrap Application is a Web application template that you can easily customize | ||||
| to fit for your needs. It is particularly suitable for small Websites which mainly contain | ||||
| a few informational pages. | ||||
| 
 | ||||
| 
 | ||||
| DIRECTORY STRUCTURE | ||||
| ------------------- | ||||
| 
 | ||||
|       commands/           contains console commands (controllers) | ||||
|       config/             contains application configurations | ||||
|       controllers/        contains Web controller classes | ||||
|       models/             contains model classes | ||||
|       runtime/            contains files generated during runtime | ||||
|       vendor/             contains dependent 3rd-party packages | ||||
|       views/              contains view files for the Web application | ||||
|       www/                contains the entry script and Web resources | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| REQUIREMENTS | ||||
| ------------ | ||||
| 
 | ||||
| The minimum requirement by Yii is that your Web server supports PHP 5.3.?. | ||||
| 
 | ||||
| 
 | ||||
| INSTALLATION | ||||
| ------------ | ||||
| 
 | ||||
| ### Install via Composer | ||||
| 
 | ||||
| If you do not have [Composer](http://getcomposer.org/), you may download it from | ||||
| [http://getcomposer.org/](http://getcomposer.org/) or run the following command on Linux/Unix/MacOS: | ||||
| 
 | ||||
| ~~~ | ||||
| curl -s http://getcomposer.org/installer | php | ||||
| ~~~ | ||||
| 
 | ||||
| You can then install the Bootstrap Application using the following command: | ||||
| 
 | ||||
| ~~~ | ||||
| php composer.phar create-project --stability=dev yiisoft/yii2-bootstrap bootstrap | ||||
| ~~~ | ||||
| 
 | ||||
| Now you should be able to access the Bootstrap Application using the URL `http://localhost/bootstrap/www/`, | ||||
| assuming `bootstrap` is directly under the document root of your Web server. | ||||
| 
 | ||||
| 
 | ||||
| ### Install from an Archive File | ||||
| 
 | ||||
| This is not currently available. We will provide it when Yii 2 is formally released. | ||||
| @ -0,0 +1,29 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @link http://www.yiiframework.com/ | ||||
|  * @copyright Copyright (c) 2008 Yii Software LLC | ||||
|  * @license http://www.yiiframework.com/license/ | ||||
|  */ | ||||
| 
 | ||||
| namespace app\commands; | ||||
| use yii\console\Controller; | ||||
| 
 | ||||
| /** | ||||
|  * This command echos what the first argument that you have entered. | ||||
|  * | ||||
|  * This command is provided as an example for you to learn how to create console commands. | ||||
|  * | ||||
|  * @author Qiang Xue <qiang.xue@gmail.com> | ||||
|  * @since 2.0 | ||||
|  */ | ||||
| class HelloController extends Controller | ||||
| { | ||||
| 	/** | ||||
| 	 * This command echos what you have entered as the message. | ||||
| 	 * @param string $message the message to be echoed. | ||||
| 	 */ | ||||
| 	public function actionIndex($message = 'hello world') | ||||
| 	{ | ||||
| 		echo $message; | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,38 @@ | ||||
| { | ||||
| 	"name": "yiisoft/yii2-bootstrap", | ||||
| 	"description": "Yii 2 Bootstrap Application", | ||||
| 	"keywords": ["yii", "framework", "bootstrap"], | ||||
| 	"homepage": "http://www.yiiframework.com/", | ||||
| 	"type": "project", | ||||
| 	"license": "BSD-3-Clause", | ||||
| 	"support": { | ||||
| 		"issues": "https://github.com/yiisoft/yii2/issues?state=open", | ||||
| 		"forum": "http://www.yiiframework.com/forum/", | ||||
| 		"wiki": "http://www.yiiframework.com/wiki/", | ||||
| 		"irc": "irc://irc.freenode.net/yii", | ||||
| 		"source": "https://github.com/yiisoft/yii2" | ||||
| 	}, | ||||
| 	"minimum-stability": "dev", | ||||
| 	"require": { | ||||
| 		"php": ">=5.3.0", | ||||
| 		"yiisoft/yii2": "dev-master", | ||||
| 		"yiisoft/yii2-composer": "dev-master" | ||||
| 	}, | ||||
| 	"scripts": { | ||||
| 		"post-install-cmd": [ | ||||
| 			"yii\\composer\\InstallHandler::setPermissions" | ||||
| 		], | ||||
| 		"post-update-cmd": [ | ||||
| 			"yii\\composer\\InstallHandler::setPermissions" | ||||
| 		] | ||||
| 	}, | ||||
| 	"extra": { | ||||
| 		"writable": [ | ||||
| 			"runtime", | ||||
| 			"www/assets" | ||||
| 		], | ||||
| 		"executable": [ | ||||
| 			"yii" | ||||
| 		] | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,26 @@ | ||||
| <?php | ||||
| 
 | ||||
| return array( | ||||
| 	'id' => 'bootstrap-console', | ||||
| 	'basePath' => dirname(__DIR__), | ||||
| 	'preload' => array('log'), | ||||
| 	'controllerPath' => dirname(__DIR__) . '/commands', | ||||
| 	'controllerNamespace' => 'app\commands', | ||||
| 	'modules' => array( | ||||
| 	), | ||||
| 	'components' => array( | ||||
| 		'cache' => array( | ||||
| 			'class' => 'yii\caching\FileCache', | ||||
| 		), | ||||
| 		'log' => array( | ||||
| 			'class' => 'yii\logging\Router', | ||||
| 			'targets' => array( | ||||
| 				array( | ||||
| 					'class' => 'yii\logging\FileTarget', | ||||
| 					'levels' => array('error', 'warning'), | ||||
| 				), | ||||
| 			), | ||||
| 		), | ||||
| 	), | ||||
| 	'params' => require(__DIR__ . '/params.php'), | ||||
| ); | ||||
| @ -0,0 +1,5 @@ | ||||
| <?php | ||||
| 
 | ||||
| return array( | ||||
| 	'adminEmail' => 'admin@example.com', | ||||
| ); | ||||
| @ -1,5 +1,8 @@ | ||||
| <?php | ||||
| 
 | ||||
| namespace app\controllers; | ||||
| 
 | ||||
| use Yii; | ||||
| use yii\web\Controller; | ||||
| use app\models\LoginForm; | ||||
| use app\models\ContactForm; | ||||
									
										
											File diff suppressed because one or more lines are too long
										
									
								
							
						| @ -1,14 +0,0 @@ | ||||
| <?php | ||||
| 
 | ||||
| // comment out the following line to disable debug mode | ||||
| defined('YII_DEBUG') or define('YII_DEBUG', true); | ||||
| 
 | ||||
| $frameworkPath = __DIR__ . '/../../yii'; | ||||
| 
 | ||||
| require($frameworkPath . '/Yii.php'); | ||||
| // Register Composer autoloader | ||||
| @include($frameworkPath . '/vendor/autoload.php'); | ||||
| 
 | ||||
| $config = require(__DIR__ . '/protected/config/main.php'); | ||||
| $application = new yii\web\Application($config); | ||||
| $application->run(); | ||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						
									
										
											File diff suppressed because one or more lines are too long
										
									
								
							
						| @ -0,0 +1,96 @@ | ||||
| <?php | ||||
| /** | ||||
|  * Application requirement checker script. | ||||
|  * | ||||
|  * In order to run this script use the following console command: | ||||
|  * php requirements.php | ||||
|  * | ||||
|  * In order to run this script from the web, you should copy it to the web root. | ||||
|  * If you are using Linux you can create a hard link instead, using the following command: | ||||
|  * ln requirements.php ../requirements.php | ||||
|  */ | ||||
| 
 | ||||
| // you may need to adjust this path to the correct Yii framework path | ||||
| $frameworkPath = dirname(__FILE__) . '/../../yii'; | ||||
| 
 | ||||
| require_once($frameworkPath . '/requirements/YiiRequirementChecker.php'); | ||||
| $requirementsChecker = new YiiRequirementChecker(); | ||||
| 
 | ||||
| /** | ||||
|  * Adjust requirements according to your application specifics. | ||||
|  */ | ||||
| $requirements = array( | ||||
| 	// Database : | ||||
| 	array( | ||||
| 		'name' => 'PDO extension', | ||||
| 		'mandatory' => true, | ||||
| 		'condition' => extension_loaded('pdo'), | ||||
| 		'by' => 'All <a href="http://www.yiiframework.com/doc/api/#system.db">DB-related classes</a>', | ||||
| 	), | ||||
| 	array( | ||||
| 		'name' => 'PDO SQLite extension', | ||||
| 		'mandatory' => false, | ||||
| 		'condition' => extension_loaded('pdo_sqlite'), | ||||
| 		'by' => 'All <a href="http://www.yiiframework.com/doc/api/#system.db">DB-related classes</a>', | ||||
| 		'memo' => 'Required for SQLite database.', | ||||
| 	), | ||||
| 	array( | ||||
| 		'name' => 'PDO MySQL extension', | ||||
| 		'mandatory' => false, | ||||
| 		'condition' => extension_loaded('pdo_mysql'), | ||||
| 		'by' => 'All <a href="http://www.yiiframework.com/doc/api/#system.db">DB-related classes</a>', | ||||
| 		'memo' => 'Required for MySQL database.', | ||||
| 	), | ||||
| 	// Cache : | ||||
| 	array( | ||||
| 		'name' => 'Memcache extension', | ||||
| 		'mandatory' => false, | ||||
| 		'condition' => extension_loaded('memcache') || extension_loaded('memcached'), | ||||
| 		'by' => '<a href="http://www.yiiframework.com/doc/api/CMemCache">CMemCache</a>', | ||||
| 		'memo' => extension_loaded('memcached') ? 'To use memcached set <a href="http://www.yiiframework.com/doc/api/CMemCache#useMemcached-detail">CMemCache::useMemcached</a> to <code>true</code>.' : '' | ||||
| 	), | ||||
| 	array( | ||||
| 		'name' => 'APC extension', | ||||
| 		'mandatory' => false, | ||||
| 		'condition' => extension_loaded('apc') || extension_loaded('apc'), | ||||
| 		'by' => '<a href="http://www.yiiframework.com/doc/api/CApcCache">CApcCache</a>', | ||||
| 	), | ||||
| 	// Additional PHP extensions : | ||||
| 	array( | ||||
| 		'name' => 'Mcrypt extension', | ||||
| 		'mandatory' => false, | ||||
| 		'condition' => extension_loaded('mcrypt'), | ||||
| 		'by' => '<a href="http://www.yiiframework.com/doc/api/CSecurityManager">CSecurityManager</a>', | ||||
| 		'memo' => 'Required by encrypt and decrypt methods.' | ||||
| 	), | ||||
| 	// PHP ini : | ||||
| 	'phpSafeMode' => array( | ||||
| 		'name' => 'PHP safe mode', | ||||
| 		'mandatory' => false, | ||||
| 		'condition' => $requirementsChecker->checkPhpIniOff("safe_mode"), | ||||
| 		'by' => 'File uploading and console command execution', | ||||
| 		'memo' => '"safe_mode" should be disabled at php.ini', | ||||
| 	), | ||||
| 	'phpExposePhp' => array( | ||||
| 		'name' => 'Expose PHP', | ||||
| 		'mandatory' => false, | ||||
| 		'condition' => $requirementsChecker->checkPhpIniOff("expose_php"), | ||||
| 		'by' => 'Security reasons', | ||||
| 		'memo' => '"expose_php" should be disabled at php.ini', | ||||
| 	), | ||||
| 	'phpAllowUrlInclude' => array( | ||||
| 		'name' => 'PHP allow url include', | ||||
| 		'mandatory' => false, | ||||
| 		'condition' => $requirementsChecker->checkPhpIniOff("allow_url_include"), | ||||
| 		'by' => 'Security reasons', | ||||
| 		'memo' => '"allow_url_include" should be disabled at php.ini', | ||||
| 	), | ||||
| 	'phpSmtp' => array( | ||||
| 		'name' => 'PHP mail SMTP', | ||||
| 		'mandatory' => false, | ||||
| 		'condition' => strlen(ini_get('SMTP'))>0, | ||||
| 		'by' => 'Email sending', | ||||
| 		'memo' => 'PHP mail SMTP server required', | ||||
| 	), | ||||
| ); | ||||
| $requirementsChecker->checkYii()->check($requirements)->render(); | ||||
| @ -0,0 +1,12 @@ | ||||
| <?php | ||||
| 
 | ||||
| // comment out the following line to disable debug mode | ||||
| defined('YII_DEBUG') or define('YII_DEBUG', true); | ||||
| 
 | ||||
| require(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php'); | ||||
| require(__DIR__ . '/../vendor/autoload.php'); | ||||
| 
 | ||||
| $config = require(__DIR__ . '/../config/main.php'); | ||||
| 
 | ||||
| $application = new yii\web\Application($config); | ||||
| $application->run(); | ||||
| @ -0,0 +1,22 @@ | ||||
| #!/usr/bin/env php | ||||
| <?php | ||||
| /** | ||||
|  * Yii console bootstrap file. | ||||
|  * | ||||
|  * @link http://www.yiiframework.com/ | ||||
|  * @copyright Copyright (c) 2008 Yii Software LLC | ||||
|  * @license http://www.yiiframework.com/license/ | ||||
|  */ | ||||
| 
 | ||||
| defined('YII_DEBUG') or define('YII_DEBUG', true); | ||||
| 
 | ||||
| // fcgi doesn't have STDIN defined by default | ||||
| defined('STDIN') or define('STDIN', fopen('php://stdin', 'r')); | ||||
| 
 | ||||
| require(__DIR__ . '/vendor/yiisoft/yii2/yii/Yii.php'); | ||||
| require(__DIR__ . '/vendor/autoload.php'); | ||||
| 
 | ||||
| $config = require(__DIR__ . '/config/console.php'); | ||||
| 
 | ||||
| $application = new yii\console\Application($config); | ||||
| $application->run(); | ||||
| @ -1,212 +0,0 @@ | ||||
| { | ||||
|     "_readme": [ | ||||
|         "This file locks the dependencies of your project to a known state", | ||||
|         "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file" | ||||
|     ], | ||||
|     "hash": "7d46ce9c4d8d5f4ecae1611ea8f0b49c", | ||||
|     "packages": [ | ||||
|         { | ||||
|             "name": "ezyang/htmlpurifier", | ||||
|             "version": "v4.5.0", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/ezyang/htmlpurifier.git", | ||||
|                 "reference": "v4.5.0" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/v4.5.0", | ||||
|                 "reference": "v4.5.0", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": ">=5.2" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "autoload": { | ||||
|                 "psr-0": { | ||||
|                     "HTMLPurifier": "library/" | ||||
|                 }, | ||||
|                 "files": [ | ||||
|                     "library/HTMLPurifier.composer.php" | ||||
|                 ] | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "LGPL" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Edward Z. Yang", | ||||
|                     "email": "admin@htmlpurifier.org", | ||||
|                     "homepage": "http://ezyang.com" | ||||
|                 } | ||||
|             ], | ||||
|             "description": "Standards compliant HTML filter written in PHP", | ||||
|             "homepage": "http://htmlpurifier.org/", | ||||
|             "keywords": [ | ||||
|                 "html" | ||||
|             ], | ||||
|             "time": "2013-02-18 00:04:08" | ||||
|         }, | ||||
|         { | ||||
|             "name": "michelf/php-markdown", | ||||
|             "version": "1.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/michelf/php-markdown.git", | ||||
|                 "reference": "1.3" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/michelf/php-markdown/zipball/1.3", | ||||
|                 "reference": "1.3", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": ">=5.3.0" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-lib": "1.3.x-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
|                 "psr-0": { | ||||
|                     "Michelf": "" | ||||
|                 } | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "BSD-3-Clause" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Michel Fortin", | ||||
|                     "email": "michel.fortin@michelf.ca", | ||||
|                     "homepage": "http://michelf.ca/", | ||||
|                     "role": "Developer" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "John Gruber", | ||||
|                     "homepage": "http://daringfireball.net/" | ||||
|                 } | ||||
|             ], | ||||
|             "description": "PHP Markdown", | ||||
|             "homepage": "http://michelf.ca/projects/php-markdown/", | ||||
|             "keywords": [ | ||||
|                 "markdown" | ||||
|             ], | ||||
|             "time": "2013-04-11 18:53:11" | ||||
|         }, | ||||
|         { | ||||
|             "name": "smarty/smarty", | ||||
|             "version": "v3.1.13", | ||||
|             "source": { | ||||
|                 "type": "svn", | ||||
|                 "url": "http://smarty-php.googlecode.com/svn", | ||||
|                 "reference": "/tags/v3.1.13/@4699" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": ">=5.2" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "autoload": { | ||||
|                 "classmap": [ | ||||
|                     "distribution/libs/Smarty.class.php", | ||||
|                     "distribution/libs/SmartyBC.class.php" | ||||
|                 ] | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "LGPL-3.0" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Monte Ohrt", | ||||
|                     "email": "monte@ohrt.com" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Uwe Tews", | ||||
|                     "email": "uwe.tews@googlemail.com" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Rodney Rehm", | ||||
|                     "email": "rodney.rehm@medialize.de" | ||||
|                 } | ||||
|             ], | ||||
|             "description": "Smarty - the compiling PHP template engine", | ||||
|             "homepage": "http://www.smarty.net", | ||||
|             "keywords": [ | ||||
|                 "templating" | ||||
|             ], | ||||
|             "time": "2013-01-26 12:03:52" | ||||
|         }, | ||||
|         { | ||||
|             "name": "twig/twig", | ||||
|             "version": "v1.12.3", | ||||
|             "source": { | ||||
|                 "type": "git", | ||||
|                 "url": "https://github.com/fabpot/Twig.git", | ||||
|                 "reference": "v1.12.3" | ||||
|             }, | ||||
|             "dist": { | ||||
|                 "type": "zip", | ||||
|                 "url": "https://api.github.com/repos/fabpot/Twig/zipball/v1.12.3", | ||||
|                 "reference": "v1.12.3", | ||||
|                 "shasum": "" | ||||
|             }, | ||||
|             "require": { | ||||
|                 "php": ">=5.2.4" | ||||
|             }, | ||||
|             "type": "library", | ||||
|             "extra": { | ||||
|                 "branch-alias": { | ||||
|                     "dev-master": "1.12-dev" | ||||
|                 } | ||||
|             }, | ||||
|             "autoload": { | ||||
|                 "psr-0": { | ||||
|                     "Twig_": "lib/" | ||||
|                 } | ||||
|             }, | ||||
|             "notification-url": "https://packagist.org/downloads/", | ||||
|             "license": [ | ||||
|                 "BSD-3" | ||||
|             ], | ||||
|             "authors": [ | ||||
|                 { | ||||
|                     "name": "Fabien Potencier", | ||||
|                     "email": "fabien@symfony.com" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "Armin Ronacher", | ||||
|                     "email": "armin.ronacher@active-4.com" | ||||
|                 } | ||||
|             ], | ||||
|             "description": "Twig, the flexible, fast, and secure template language for PHP", | ||||
|             "homepage": "http://twig.sensiolabs.org", | ||||
|             "keywords": [ | ||||
|                 "templating" | ||||
|             ], | ||||
|             "time": "2013-04-08 12:40:11" | ||||
|         } | ||||
|     ], | ||||
|     "packages-dev": [ | ||||
| 
 | ||||
|     ], | ||||
|     "aliases": [ | ||||
| 
 | ||||
|     ], | ||||
|     "minimum-stability": "stable", | ||||
|     "stability-flags": [ | ||||
| 
 | ||||
|     ], | ||||
|     "platform": { | ||||
|         "php": ">=5.3.0" | ||||
|     }, | ||||
|     "platform-dev": [ | ||||
| 
 | ||||
|     ] | ||||
| } | ||||
| @ -0,0 +1,27 @@ | ||||
| { | ||||
| 	"name": "yiisoft/yii2-composer", | ||||
| 	"description": "The composer integration for the Yii framework", | ||||
| 	"keywords": ["yii", "composer", "install", "update"], | ||||
| 	"type": "library", | ||||
| 	"license": "BSD-3-Clause", | ||||
| 	"support": { | ||||
| 		"issues": "https://github.com/yiisoft/yii2/issues?state=open", | ||||
| 		"forum": "http://www.yiiframework.com/forum/", | ||||
| 		"wiki": "http://www.yiiframework.com/wiki/", | ||||
| 		"irc": "irc://irc.freenode.net/yii", | ||||
| 		"source": "https://github.com/yiisoft/yii2" | ||||
| 	}, | ||||
| 	"authors": [ | ||||
| 		{ | ||||
| 			"name": "Qiang Xue", | ||||
| 			"email": "qiang.xue@gmail.com" | ||||
| 		} | ||||
| 	], | ||||
| 	"minimum-stability": "dev", | ||||
| 	"require": { | ||||
| 		"yiisoft/yii2": "dev-master" | ||||
| 	}, | ||||
| 	"autoload": { | ||||
| 		"psr-0": { "yii\\composer": "" } | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,53 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @link http://www.yiiframework.com/ | ||||
|  * @copyright Copyright (c) 2008 Yii Software LLC | ||||
|  * @license http://www.yiiframework.com/license/ | ||||
|  */ | ||||
| 
 | ||||
| namespace yii\composer; | ||||
| 
 | ||||
| use Composer\Script\CommandEvent; | ||||
| 
 | ||||
| /** | ||||
|  * InstallHandler is called by Composer after it installs/updates the current package. | ||||
|  * | ||||
|  * @author Qiang Xue <qiang.xue@gmail.com> | ||||
|  * @since 2.0 | ||||
|  */ | ||||
| class InstallHandler | ||||
| { | ||||
| 	/** | ||||
| 	 * Sets the correct permissions of files and directories. | ||||
| 	 * @param CommandEvent $event | ||||
| 	 */ | ||||
| 	public static function setPermissions($event) | ||||
| 	{ | ||||
| 		$options = array_merge(array( | ||||
| 			'writable' => array(), | ||||
| 			'executable' => array(), | ||||
| 		), $event->getComposer()->getPackage()->getExtra()); | ||||
| 
 | ||||
| 		foreach ((array)$options['writable'] as $path) { | ||||
| 			echo "Setting writable: $path ..."; | ||||
| 			if (is_dir($path)) { | ||||
| 				chmod($path, 0777); | ||||
| 				echo "done\n"; | ||||
| 			} else { | ||||
| 				echo "The directory was not found: " . getcwd() . DIRECTORY_SEPARATOR . $path; | ||||
| 				return; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		foreach ((array)$options['executable'] as $path) { | ||||
| 			echo "Setting executable: $path ..."; | ||||
| 			if (is_file($path)) { | ||||
| 				chmod($path, 0755); | ||||
| 				echo "done\n"; | ||||
| 			} else { | ||||
| 				echo "\n\tThe file was not found: " . getcwd() . DIRECTORY_SEPARATOR . $path . "\n"; | ||||
| 				return; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,32 @@ | ||||
| The Yii framework is free software. It is released under the terms of | ||||
| the following BSD License. | ||||
| 
 | ||||
| Copyright © 2008-2013 by Yii Software LLC (http://www.yiisoft.com) | ||||
| All rights reserved. | ||||
| 
 | ||||
| Redistribution and use in source and binary forms, with or without | ||||
| modification, are permitted provided that the following conditions | ||||
| are met: | ||||
| 
 | ||||
|  * Redistributions of source code must retain the above copyright | ||||
|    notice, this list of conditions and the following disclaimer. | ||||
|  * Redistributions in binary form must reproduce the above copyright | ||||
|    notice, this list of conditions and the following disclaimer in | ||||
|    the documentation and/or other materials provided with the | ||||
|    distribution. | ||||
|  * Neither the name of Yii Software LLC nor the names of its | ||||
|    contributors may be used to endorse or promote products derived | ||||
|    from this software without specific prior written permission. | ||||
| 
 | ||||
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||||
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||||
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | ||||
| FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE | ||||
| COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, | ||||
| INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | ||||
| BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||||
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER | ||||
| CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
| LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN | ||||
| ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||||
| POSSIBILITY OF SUCH DAMAGE. | ||||
| @ -0,0 +1,21 @@ | ||||
| Yii 2.0 Public Preview | ||||
| ====================== | ||||
| 
 | ||||
| Thank you for choosing Yii - a high-performance component-based PHP framework. | ||||
| 
 | ||||
| If you are looking for a production-ready PHP framework, please use | ||||
| [Yii v1.1](https://github.com/yiisoft/yii). | ||||
| 
 | ||||
| Yii 2.0 is still under heavy development. We may make significant changes | ||||
| without prior notices. **Yii 2.0 is not ready for production use yet.** | ||||
| 
 | ||||
| [](http://travis-ci.org/yiisoft/yii2) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| REQUIREMENTS | ||||
| ------------ | ||||
| 
 | ||||
| The minimum requirement by Yii is that your Web server supports PHP 5.3.?. | ||||
| 
 | ||||
| 
 | ||||
| @ -0,0 +1,9 @@ | ||||
| Upgrading Instructions for Yii Framework v2 | ||||
| =========================================== | ||||
| 
 | ||||
| !!!IMPORTANT!!! | ||||
| 
 | ||||
| The following upgrading instructions are cumulative. That is, | ||||
| if you want to upgrade from version A to version C and there is | ||||
| version B between A and C, you need to following the instructions | ||||
| for both A and B. | ||||
									
										
											File diff suppressed because it is too large
											Load Diff
										
									
								
							
						| @ -0,0 +1,278 @@ | ||||
|         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. | ||||
| @ -0,0 +1,20 @@ | ||||
| Copyright Mathias Bynens <http://mathiasbynens.be/> | ||||
| 
 | ||||
| Permission is hereby granted, free of charge, to any person obtaining | ||||
| a copy of this software and associated documentation files (the | ||||
| "Software"), to deal in the Software without restriction, including | ||||
| without limitation the rights to use, copy, modify, merge, publish, | ||||
| distribute, sublicense, and/or sell copies of the Software, and to | ||||
| permit persons to whom the Software is furnished to do so, subject to | ||||
| the following conditions: | ||||
| 
 | ||||
| The above copyright notice and this permission notice shall be | ||||
| included in all copies or substantial portions of the Software. | ||||
| 
 | ||||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||||
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||||
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||||
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | ||||
| LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | ||||
| OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | ||||
| WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||||
| @ -0,0 +1,502 @@ | ||||
| /*! http://mths.be/punycode v1.2.1 by @mathias */ | ||||
| ;(function(root) { | ||||
| 
 | ||||
| 	/** Detect free variables */ | ||||
| 	var freeExports = typeof exports == 'object' && exports; | ||||
| 	var freeModule = typeof module == 'object' && module && | ||||
| 		module.exports == freeExports && module; | ||||
| 	var freeGlobal = typeof global == 'object' && global; | ||||
| 	if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { | ||||
| 		root = freeGlobal; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * The `punycode` object. | ||||
| 	 * @name punycode | ||||
| 	 * @type Object | ||||
| 	 */ | ||||
| 	var punycode, | ||||
| 
 | ||||
| 	/** Highest positive signed 32-bit float value */ | ||||
| 	maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1
 | ||||
| 
 | ||||
| 	/** Bootstring parameters */ | ||||
| 	base = 36, | ||||
| 	tMin = 1, | ||||
| 	tMax = 26, | ||||
| 	skew = 38, | ||||
| 	damp = 700, | ||||
| 	initialBias = 72, | ||||
| 	initialN = 128, // 0x80
 | ||||
| 	delimiter = '-', // '\x2D'
 | ||||
| 
 | ||||
| 	/** Regular expressions */ | ||||
| 	regexPunycode = /^xn--/, | ||||
| 	regexNonASCII = /[^ -~]/, // unprintable ASCII chars + non-ASCII chars
 | ||||
| 	regexSeparators = /\x2E|\u3002|\uFF0E|\uFF61/g, // RFC 3490 separators
 | ||||
| 
 | ||||
| 	/** Error messages */ | ||||
| 	errors = { | ||||
| 		'overflow': 'Overflow: input needs wider integers to process', | ||||
| 		'not-basic': 'Illegal input >= 0x80 (not a basic code point)', | ||||
| 		'invalid-input': 'Invalid input' | ||||
| 	}, | ||||
| 
 | ||||
| 	/** Convenience shortcuts */ | ||||
| 	baseMinusTMin = base - tMin, | ||||
| 	floor = Math.floor, | ||||
| 	stringFromCharCode = String.fromCharCode, | ||||
| 
 | ||||
| 	/** Temporary variable */ | ||||
| 	key; | ||||
| 
 | ||||
| 	/*--------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| 	/** | ||||
| 	 * A generic error utility function. | ||||
| 	 * @private | ||||
| 	 * @param {String} type The error type. | ||||
| 	 * @returns {Error} Throws a `RangeError` with the applicable error message. | ||||
| 	 */ | ||||
| 	function error(type) { | ||||
| 		throw RangeError(errors[type]); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * A generic `Array#map` utility function. | ||||
| 	 * @private | ||||
| 	 * @param {Array} array The array to iterate over. | ||||
| 	 * @param {Function} callback The function that gets called for every array | ||||
| 	 * item. | ||||
| 	 * @returns {Array} A new array of values returned by the callback function. | ||||
| 	 */ | ||||
| 	function map(array, fn) { | ||||
| 		var length = array.length; | ||||
| 		while (length--) { | ||||
| 			array[length] = fn(array[length]); | ||||
| 		} | ||||
| 		return array; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * A simple `Array#map`-like wrapper to work with domain name strings. | ||||
| 	 * @private | ||||
| 	 * @param {String} domain The domain name. | ||||
| 	 * @param {Function} callback The function that gets called for every | ||||
| 	 * character. | ||||
| 	 * @returns {Array} A new string of characters returned by the callback | ||||
| 	 * function. | ||||
| 	 */ | ||||
| 	function mapDomain(string, fn) { | ||||
| 		return map(string.split(regexSeparators), fn).join('.'); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Creates an array containing the decimal code points of each Unicode | ||||
| 	 * character in the string. While JavaScript uses UCS-2 internally, | ||||
| 	 * this function will convert a pair of surrogate halves (each of which | ||||
| 	 * UCS-2 exposes as separate characters) into a single code point, | ||||
| 	 * matching UTF-16. | ||||
| 	 * @see `punycode.ucs2.encode` | ||||
| 	 * @see <http://mathiasbynens.be/notes/javascript-encoding>
 | ||||
| 	 * @memberOf punycode.ucs2 | ||||
| 	 * @name decode | ||||
| 	 * @param {String} string The Unicode input string (UCS-2). | ||||
| 	 * @returns {Array} The new array of code points. | ||||
| 	 */ | ||||
| 	function ucs2decode(string) { | ||||
| 		var output = [], | ||||
| 		    counter = 0, | ||||
| 		    length = string.length, | ||||
| 		    value, | ||||
| 		    extra; | ||||
| 		while (counter < length) { | ||||
| 			value = string.charCodeAt(counter++); | ||||
| 			if ((value & 0xF800) == 0xD800 && counter < length) { | ||||
| 				// high surrogate, and there is a next character
 | ||||
| 				extra = string.charCodeAt(counter++); | ||||
| 				if ((extra & 0xFC00) == 0xDC00) { // low surrogate
 | ||||
| 					output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); | ||||
| 				} else { | ||||
| 					output.push(value, extra); | ||||
| 				} | ||||
| 			} else { | ||||
| 				output.push(value); | ||||
| 			} | ||||
| 		} | ||||
| 		return output; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Creates a string based on an array of decimal code points. | ||||
| 	 * @see `punycode.ucs2.decode` | ||||
| 	 * @memberOf punycode.ucs2 | ||||
| 	 * @name encode | ||||
| 	 * @param {Array} codePoints The array of decimal code points. | ||||
| 	 * @returns {String} The new Unicode string (UCS-2). | ||||
| 	 */ | ||||
| 	function ucs2encode(array) { | ||||
| 		return map(array, function(value) { | ||||
| 			var output = ''; | ||||
| 			if (value > 0xFFFF) { | ||||
| 				value -= 0x10000; | ||||
| 				output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); | ||||
| 				value = 0xDC00 | value & 0x3FF; | ||||
| 			} | ||||
| 			output += stringFromCharCode(value); | ||||
| 			return output; | ||||
| 		}).join(''); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Converts a basic code point into a digit/integer. | ||||
| 	 * @see `digitToBasic()` | ||||
| 	 * @private | ||||
| 	 * @param {Number} codePoint The basic (decimal) code point. | ||||
| 	 * @returns {Number} The numeric value of a basic code point (for use in | ||||
| 	 * representing integers) in the range `0` to `base - 1`, or `base` if | ||||
| 	 * the code point does not represent a value. | ||||
| 	 */ | ||||
| 	function basicToDigit(codePoint) { | ||||
| 		return codePoint - 48 < 10 | ||||
| 			? codePoint - 22 | ||||
| 			: codePoint - 65 < 26 | ||||
| 				? codePoint - 65 | ||||
| 				: codePoint - 97 < 26 | ||||
| 					? codePoint - 97 | ||||
| 					: base; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Converts a digit/integer into a basic code point. | ||||
| 	 * @see `basicToDigit()` | ||||
| 	 * @private | ||||
| 	 * @param {Number} digit The numeric value of a basic code point. | ||||
| 	 * @returns {Number} The basic code point whose value (when used for | ||||
| 	 * representing integers) is `digit`, which needs to be in the range | ||||
| 	 * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is | ||||
| 	 * used; else, the lowercase form is used. The behavior is undefined | ||||
| 	 * if flag is non-zero and `digit` has no uppercase form. | ||||
| 	 */ | ||||
| 	function digitToBasic(digit, flag) { | ||||
| 		//  0..25 map to ASCII a..z or A..Z
 | ||||
| 		// 26..35 map to ASCII 0..9
 | ||||
| 		return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Bias adaptation function as per section 3.4 of RFC 3492. | ||||
| 	 * http://tools.ietf.org/html/rfc3492#section-3.4
 | ||||
| 	 * @private | ||||
| 	 */ | ||||
| 	function adapt(delta, numPoints, firstTime) { | ||||
| 		var k = 0; | ||||
| 		delta = firstTime ? floor(delta / damp) : delta >> 1; | ||||
| 		delta += floor(delta / numPoints); | ||||
| 		for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { | ||||
| 			delta = floor(delta / baseMinusTMin); | ||||
| 		} | ||||
| 		return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Converts a Punycode string of ASCII code points to a string of Unicode | ||||
| 	 * code points. | ||||
| 	 * @memberOf punycode | ||||
| 	 * @param {String} input The Punycode string of ASCII code points. | ||||
| 	 * @returns {String} The resulting string of Unicode code points. | ||||
| 	 */ | ||||
| 	function decode(input) { | ||||
| 		// Don't use UCS-2
 | ||||
| 		var output = [], | ||||
| 		    inputLength = input.length, | ||||
| 		    out, | ||||
| 		    i = 0, | ||||
| 		    n = initialN, | ||||
| 		    bias = initialBias, | ||||
| 		    basic, | ||||
| 		    j, | ||||
| 		    index, | ||||
| 		    oldi, | ||||
| 		    w, | ||||
| 		    k, | ||||
| 		    digit, | ||||
| 		    t, | ||||
| 		    length, | ||||
| 		    /** Cached calculation results */ | ||||
| 		    baseMinusT; | ||||
| 
 | ||||
| 		// Handle the basic code points: let `basic` be the number of input code
 | ||||
| 		// points before the last delimiter, or `0` if there is none, then copy
 | ||||
| 		// the first basic code points to the output.
 | ||||
| 
 | ||||
| 		basic = input.lastIndexOf(delimiter); | ||||
| 		if (basic < 0) { | ||||
| 			basic = 0; | ||||
| 		} | ||||
| 
 | ||||
| 		for (j = 0; j < basic; ++j) { | ||||
| 			// if it's not a basic code point
 | ||||
| 			if (input.charCodeAt(j) >= 0x80) { | ||||
| 				error('not-basic'); | ||||
| 			} | ||||
| 			output.push(input.charCodeAt(j)); | ||||
| 		} | ||||
| 
 | ||||
| 		// Main decoding loop: start just after the last delimiter if any basic code
 | ||||
| 		// points were copied; start at the beginning otherwise.
 | ||||
| 
 | ||||
| 		for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { | ||||
| 
 | ||||
| 			// `index` is the index of the next character to be consumed.
 | ||||
| 			// Decode a generalized variable-length integer into `delta`,
 | ||||
| 			// which gets added to `i`. The overflow checking is easier
 | ||||
| 			// if we increase `i` as we go, then subtract off its starting
 | ||||
| 			// value at the end to obtain `delta`.
 | ||||
| 			for (oldi = i, w = 1, k = base; /* no condition */; k += base) { | ||||
| 
 | ||||
| 				if (index >= inputLength) { | ||||
| 					error('invalid-input'); | ||||
| 				} | ||||
| 
 | ||||
| 				digit = basicToDigit(input.charCodeAt(index++)); | ||||
| 
 | ||||
| 				if (digit >= base || digit > floor((maxInt - i) / w)) { | ||||
| 					error('overflow'); | ||||
| 				} | ||||
| 
 | ||||
| 				i += digit * w; | ||||
| 				t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); | ||||
| 
 | ||||
| 				if (digit < t) { | ||||
| 					break; | ||||
| 				} | ||||
| 
 | ||||
| 				baseMinusT = base - t; | ||||
| 				if (w > floor(maxInt / baseMinusT)) { | ||||
| 					error('overflow'); | ||||
| 				} | ||||
| 
 | ||||
| 				w *= baseMinusT; | ||||
| 
 | ||||
| 			} | ||||
| 
 | ||||
| 			out = output.length + 1; | ||||
| 			bias = adapt(i - oldi, out, oldi == 0); | ||||
| 
 | ||||
| 			// `i` was supposed to wrap around from `out` to `0`,
 | ||||
| 			// incrementing `n` each time, so we'll fix that now:
 | ||||
| 			if (floor(i / out) > maxInt - n) { | ||||
| 				error('overflow'); | ||||
| 			} | ||||
| 
 | ||||
| 			n += floor(i / out); | ||||
| 			i %= out; | ||||
| 
 | ||||
| 			// Insert `n` at position `i` of the output
 | ||||
| 			output.splice(i++, 0, n); | ||||
| 
 | ||||
| 		} | ||||
| 
 | ||||
| 		return ucs2encode(output); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Converts a string of Unicode code points to a Punycode string of ASCII | ||||
| 	 * code points. | ||||
| 	 * @memberOf punycode | ||||
| 	 * @param {String} input The string of Unicode code points. | ||||
| 	 * @returns {String} The resulting Punycode string of ASCII code points. | ||||
| 	 */ | ||||
| 	function encode(input) { | ||||
| 		var n, | ||||
| 		    delta, | ||||
| 		    handledCPCount, | ||||
| 		    basicLength, | ||||
| 		    bias, | ||||
| 		    j, | ||||
| 		    m, | ||||
| 		    q, | ||||
| 		    k, | ||||
| 		    t, | ||||
| 		    currentValue, | ||||
| 		    output = [], | ||||
| 		    /** `inputLength` will hold the number of code points in `input`. */ | ||||
| 		    inputLength, | ||||
| 		    /** Cached calculation results */ | ||||
| 		    handledCPCountPlusOne, | ||||
| 		    baseMinusT, | ||||
| 		    qMinusT; | ||||
| 
 | ||||
| 		// Convert the input in UCS-2 to Unicode
 | ||||
| 		input = ucs2decode(input); | ||||
| 
 | ||||
| 		// Cache the length
 | ||||
| 		inputLength = input.length; | ||||
| 
 | ||||
| 		// Initialize the state
 | ||||
| 		n = initialN; | ||||
| 		delta = 0; | ||||
| 		bias = initialBias; | ||||
| 
 | ||||
| 		// Handle the basic code points
 | ||||
| 		for (j = 0; j < inputLength; ++j) { | ||||
| 			currentValue = input[j]; | ||||
| 			if (currentValue < 0x80) { | ||||
| 				output.push(stringFromCharCode(currentValue)); | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		handledCPCount = basicLength = output.length; | ||||
| 
 | ||||
| 		// `handledCPCount` is the number of code points that have been handled;
 | ||||
| 		// `basicLength` is the number of basic code points.
 | ||||
| 
 | ||||
| 		// Finish the basic string - if it is not empty - with a delimiter
 | ||||
| 		if (basicLength) { | ||||
| 			output.push(delimiter); | ||||
| 		} | ||||
| 
 | ||||
| 		// Main encoding loop:
 | ||||
| 		while (handledCPCount < inputLength) { | ||||
| 
 | ||||
| 			// All non-basic code points < n have been handled already. Find the next
 | ||||
| 			// larger one:
 | ||||
| 			for (m = maxInt, j = 0; j < inputLength; ++j) { | ||||
| 				currentValue = input[j]; | ||||
| 				if (currentValue >= n && currentValue < m) { | ||||
| 					m = currentValue; | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,
 | ||||
| 			// but guard against overflow
 | ||||
| 			handledCPCountPlusOne = handledCPCount + 1; | ||||
| 			if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { | ||||
| 				error('overflow'); | ||||
| 			} | ||||
| 
 | ||||
| 			delta += (m - n) * handledCPCountPlusOne; | ||||
| 			n = m; | ||||
| 
 | ||||
| 			for (j = 0; j < inputLength; ++j) { | ||||
| 				currentValue = input[j]; | ||||
| 
 | ||||
| 				if (currentValue < n && ++delta > maxInt) { | ||||
| 					error('overflow'); | ||||
| 				} | ||||
| 
 | ||||
| 				if (currentValue == n) { | ||||
| 					// Represent delta as a generalized variable-length integer
 | ||||
| 					for (q = delta, k = base; /* no condition */; k += base) { | ||||
| 						t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); | ||||
| 						if (q < t) { | ||||
| 							break; | ||||
| 						} | ||||
| 						qMinusT = q - t; | ||||
| 						baseMinusT = base - t; | ||||
| 						output.push( | ||||
| 							stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) | ||||
| 						); | ||||
| 						q = floor(qMinusT / baseMinusT); | ||||
| 					} | ||||
| 
 | ||||
| 					output.push(stringFromCharCode(digitToBasic(q, 0))); | ||||
| 					bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); | ||||
| 					delta = 0; | ||||
| 					++handledCPCount; | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			++delta; | ||||
| 			++n; | ||||
| 
 | ||||
| 		} | ||||
| 		return output.join(''); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Converts a Punycode string representing a domain name to Unicode. Only the | ||||
| 	 * Punycoded parts of the domain name will be converted, i.e. it doesn't | ||||
| 	 * matter if you call it on a string that has already been converted to | ||||
| 	 * Unicode. | ||||
| 	 * @memberOf punycode | ||||
| 	 * @param {String} domain The Punycode domain name to convert to Unicode. | ||||
| 	 * @returns {String} The Unicode representation of the given Punycode | ||||
| 	 * string. | ||||
| 	 */ | ||||
| 	function toUnicode(domain) { | ||||
| 		return mapDomain(domain, function(string) { | ||||
| 			return regexPunycode.test(string) | ||||
| 				? decode(string.slice(4).toLowerCase()) | ||||
| 				: string; | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Converts a Unicode string representing a domain name to Punycode. Only the | ||||
| 	 * non-ASCII parts of the domain name will be converted, i.e. it doesn't | ||||
| 	 * matter if you call it with a domain that's already in ASCII. | ||||
| 	 * @memberOf punycode | ||||
| 	 * @param {String} domain The domain name to convert, as a Unicode string. | ||||
| 	 * @returns {String} The Punycode representation of the given domain name. | ||||
| 	 */ | ||||
| 	function toASCII(domain) { | ||||
| 		return mapDomain(domain, function(string) { | ||||
| 			return regexNonASCII.test(string) | ||||
| 				? 'xn--' + encode(string) | ||||
| 				: string; | ||||
| 		}); | ||||
| 	} | ||||
| 
 | ||||
| 	/*--------------------------------------------------------------------------*/ | ||||
| 
 | ||||
| 	/** Define the public API */ | ||||
| 	punycode = { | ||||
| 		/** | ||||
| 		 * A string representing the current Punycode.js version number. | ||||
| 		 * @memberOf punycode | ||||
| 		 * @type String | ||||
| 		 */ | ||||
| 		'version': '1.2.1', | ||||
| 		/** | ||||
| 		 * An object of methods to convert from JavaScript's internal character | ||||
| 		 * representation (UCS-2) to decimal Unicode code points, and back. | ||||
| 		 * @see <http://mathiasbynens.be/notes/javascript-encoding>
 | ||||
| 		 * @memberOf punycode | ||||
| 		 * @type Object | ||||
| 		 */ | ||||
| 		'ucs2': { | ||||
| 			'decode': ucs2decode, | ||||
| 			'encode': ucs2encode | ||||
| 		}, | ||||
| 		'decode': decode, | ||||
| 		'encode': encode, | ||||
| 		'toASCII': toASCII, | ||||
| 		'toUnicode': toUnicode | ||||
| 	}; | ||||
| 
 | ||||
| 	/** Expose `punycode` */ | ||||
| 	// Some AMD build optimizers, like r.js, check for specific condition patterns
 | ||||
| 	// like the following:
 | ||||
| 	if ( | ||||
| 		typeof define == 'function' && | ||||
| 		typeof define.amd == 'object' && | ||||
| 		define.amd | ||||
| 	) { | ||||
| 		define(function() { | ||||
| 			return punycode; | ||||
| 		}); | ||||
| 	}	else if (freeExports && !freeExports.nodeType) { | ||||
| 		if (freeModule) { // in Node.js or RingoJS v0.8.0+
 | ||||
| 			freeModule.exports = punycode; | ||||
| 		} else { // in Narwhal or RingoJS v0.7.0-
 | ||||
| 			for (key in punycode) { | ||||
| 				punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); | ||||
| 			} | ||||
| 		} | ||||
| 	} else { // in Rhino or a web browser
 | ||||
| 		root.punycode = punycode; | ||||
| 	} | ||||
| 
 | ||||
| }(this)); | ||||
| @ -0,0 +1,2 @@ | ||||
| /*! http://mths.be/punycode v1.2.1 by @mathias */ | ||||
| (function(o){function e(o){throw RangeError(L[o])}function n(o,e){for(var n=o.length;n--;)o[n]=e(o[n]);return o}function t(o,e){return n(o.split(S),e).join(".")}function r(o){for(var e,n,t=[],r=0,u=o.length;u>r;)e=o.charCodeAt(r++),55296==(63488&e)&&u>r?(n=o.charCodeAt(r++),56320==(64512&n)?t.push(((1023&e)<<10)+(1023&n)+65536):t.push(e,n)):t.push(e);return t}function u(o){return n(o,function(o){var e="";return o>65535&&(o-=65536,e+=R(55296|1023&o>>>10),o=56320|1023&o),e+=R(o)}).join("")}function i(o){return 10>o-48?o-22:26>o-65?o-65:26>o-97?o-97:x}function f(o,e){return o+22+75*(26>o)-((0!=e)<<5)}function c(o,e,n){var t=0;for(o=n?P(o/m):o>>1,o+=P(o/e);o>M*y>>1;t+=x)o=P(o/M);return P(t+(M+1)*o/(o+j))}function l(o){var n,t,r,f,l,d,s,a,p,h,v=[],g=o.length,w=0,j=I,m=A;for(t=o.lastIndexOf(F),0>t&&(t=0),r=0;t>r;++r)o.charCodeAt(r)>=128&&e("not-basic"),v.push(o.charCodeAt(r));for(f=t>0?t+1:0;g>f;){for(l=w,d=1,s=x;f>=g&&e("invalid-input"),a=i(o.charCodeAt(f++)),(a>=x||a>P((b-w)/d))&&e("overflow"),w+=a*d,p=m>=s?C:s>=m+y?y:s-m,!(p>a);s+=x)h=x-p,d>P(b/h)&&e("overflow"),d*=h;n=v.length+1,m=c(w-l,n,0==l),P(w/n)>b-j&&e("overflow"),j+=P(w/n),w%=n,v.splice(w++,0,j)}return u(v)}function d(o){var n,t,u,i,l,d,s,a,p,h,v,g,w,j,m,E=[];for(o=r(o),g=o.length,n=I,t=0,l=A,d=0;g>d;++d)v=o[d],128>v&&E.push(R(v));for(u=i=E.length,i&&E.push(F);g>u;){for(s=b,d=0;g>d;++d)v=o[d],v>=n&&s>v&&(s=v);for(w=u+1,s-n>P((b-t)/w)&&e("overflow"),t+=(s-n)*w,n=s,d=0;g>d;++d)if(v=o[d],n>v&&++t>b&&e("overflow"),v==n){for(a=t,p=x;h=l>=p?C:p>=l+y?y:p-l,!(h>a);p+=x)m=a-h,j=x-h,E.push(R(f(h+m%j,0))),a=P(m/j);E.push(R(f(a,0))),l=c(t,w,u==i),t=0,++u}++t,++n}return E.join("")}function s(o){return t(o,function(o){return E.test(o)?l(o.slice(4).toLowerCase()):o})}function a(o){return t(o,function(o){return O.test(o)?"xn--"+d(o):o})}var p="object"==typeof exports&&exports,h="object"==typeof module&&module&&module.exports==p&&module,v="object"==typeof global&&global;(v.global===v||v.window===v)&&(o=v);var g,w,b=2147483647,x=36,C=1,y=26,j=38,m=700,A=72,I=128,F="-",E=/^xn--/,O=/[^ -~]/,S=/\x2E|\u3002|\uFF0E|\uFF61/g,L={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},M=x-C,P=Math.floor,R=String.fromCharCode;if(g={version:"1.2.1",ucs2:{decode:r,encode:u},decode:l,encode:d,toASCII:a,toUnicode:s},"function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return g});else if(p&&!p.nodeType)if(h)h.exports=g;else for(w in g)g.hasOwnProperty(w)&&(p[w]=g[w]);else o.punycode=g})(this); | ||||
| @ -0,0 +1,106 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @link http://www.yiiframework.com/ | ||||
|  * @copyright Copyright (c) 2008 Yii Software LLC | ||||
|  * @license http://www.yiiframework.com/license/ | ||||
|  */ | ||||
| 
 | ||||
| namespace yii\behaviors; | ||||
| 
 | ||||
| use yii\base\Behavior; | ||||
| use yii\db\Expression; | ||||
| use yii\db\ActiveRecord; | ||||
| 
 | ||||
| /** | ||||
|  * AutoTimestamp will automatically fill the attributes about creation time and updating time. | ||||
|  * | ||||
|  * AutoTimestamp fills the attributes when the associated AR model is being inserted or updated. | ||||
|  * You may specify an AR to use this behavior like the following: | ||||
|  * | ||||
|  * ~~~ | ||||
|  * public function behaviors() | ||||
|  * { | ||||
|  *     return array( | ||||
|  *         'timestamp' => array( | ||||
|  *             'class' => 'yii\behaviors\AutoTimestamp', | ||||
|  *         ), | ||||
|  *     ); | ||||
|  * } | ||||
|  * ~~~ | ||||
|  * | ||||
|  * By default, AutoTimestamp will fill the `create_time` attribute with the current timestamp | ||||
|  * when the associated AR object is being inserted; it will fill the `update_time` attribute | ||||
|  * with the timestamp when the AR object is being updated. | ||||
|  * | ||||
|  * @author Qiang Xue <qiang.xue@gmail.com> | ||||
|  * @since 2.0 | ||||
|  */ | ||||
| class AutoTimestamp extends Behavior | ||||
| { | ||||
| 	/** | ||||
| 	 * @var array list of attributes that are to be automatically filled with timestamps. | ||||
| 	 * The array keys are the ActiveRecord events upon which the attributes are to be filled with timestamps, | ||||
| 	 * and the array values are the corresponding attribute to be updated. You can use a string to represent | ||||
| 	 * a single attribute, or an array to represent a list of attributes. | ||||
| 	 * The default setting is to update the `create_time` attribute upon AR insertion, | ||||
| 	 * and update the `update_time` attribute upon AR updating. | ||||
| 	 */ | ||||
| 	public $attributes = array( | ||||
| 		ActiveRecord::EVENT_BEFORE_INSERT => 'create_time', | ||||
| 		ActiveRecord::EVENT_BEFORE_UPDATE => 'update_time', | ||||
| 	); | ||||
| 	/** | ||||
| 	 * @var \Closure|Expression The expression that will be used for generating the timestamp. | ||||
| 	 * This can be either an anonymous function that returns the timestamp value, | ||||
| 	 * or an [[Expression]] object representing a DB expression (e.g. `new Expression('NOW()')`). | ||||
| 	 * If not set, it will use the value of `time()` to fill the attributes. | ||||
| 	 */ | ||||
| 	public $timestamp; | ||||
| 
 | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Declares event handlers for the [[owner]]'s events. | ||||
| 	 * @return array events (array keys) and the corresponding event handler methods (array values). | ||||
| 	 */ | ||||
| 	public function events() | ||||
| 	{ | ||||
| 		$events = array(); | ||||
| 		$behavior = $this; | ||||
| 		foreach ($this->attributes as $event => $attributes) { | ||||
| 			if (!is_array($attributes)) { | ||||
| 				$attributes = array($attributes); | ||||
| 			} | ||||
| 			$events[$event] = function () use ($behavior, $attributes) { | ||||
| 				$behavior->updateTimestamp($attributes); | ||||
| 			}; | ||||
| 		} | ||||
| 		return $events; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Updates the attributes with the current timestamp. | ||||
| 	 * @param array $attributes list of attributes to be updated. | ||||
| 	 */ | ||||
| 	public function updateTimestamp($attributes) | ||||
| 	{ | ||||
| 		foreach ($attributes as $attribute) { | ||||
| 			$this->owner->$attribute = $this->evaluateTimestamp($attribute); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Gets the appropriate timestamp for the specified attribute. | ||||
| 	 * @param string $attribute attribute name | ||||
| 	 * @return mixed the timestamp value | ||||
| 	 */ | ||||
| 	protected function evaluateTimestamp($attribute) | ||||
| 	{ | ||||
| 		if ($this->timestamp instanceof Expression) { | ||||
| 			return $this->timestamp; | ||||
| 		} elseif ($this->timestamp !== null) { | ||||
| 			return call_user_func($this->timestamp); | ||||
| 		} else { | ||||
| 			return time(); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,154 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @link http://www.yiiframework.com/ | ||||
|  * @copyright Copyright (c) 2008 Yii Software LLC | ||||
|  * @license http://www.yiiframework.com/license/ | ||||
|  */ | ||||
| 
 | ||||
| namespace yii\bootstrap; | ||||
| 
 | ||||
| use Yii; | ||||
| use yii\helpers\ArrayHelper; | ||||
| use yii\helpers\Html; | ||||
| 
 | ||||
| /** | ||||
|  * Alert renders an alert bootstrap component. | ||||
|  * | ||||
|  * For example, | ||||
|  * | ||||
|  * ```php | ||||
|  * echo Alert::widget(array( | ||||
|  *     'body' => 'Say hello...', | ||||
|  *     'closeButton' => array( | ||||
|  *         'label' => '×', | ||||
|  *         'tag' => 'a', | ||||
|  *     ), | ||||
|  * )); | ||||
|  * ``` | ||||
|  * | ||||
|  * The following example will show the content enclosed between the [[begin()]] | ||||
|  * and [[end()]] calls within the alert box: | ||||
|  * | ||||
|  * ```php | ||||
|  * Alert::begin(array( | ||||
|  *     'closeButton' => array( | ||||
|  *         'label' => '×', | ||||
|  *     ), | ||||
|  * )); | ||||
|  * | ||||
|  * echo 'Say hello...'; | ||||
|  * | ||||
|  * Alert::end(); | ||||
|  * ``` | ||||
|  * | ||||
|  * @see http://twitter.github.io/bootstrap/javascript.html#alerts | ||||
|  * @author Antonio Ramirez <amigo.cobos@gmail.com> | ||||
|  * @since 2.0 | ||||
|  */ | ||||
| class Alert extends Widget | ||||
| { | ||||
| 	/** | ||||
| 	 * @var string the body content in the alert component. Note that anything between | ||||
| 	 * the [[begin()]] and [[end()]] calls of the Alert widget will also be treated | ||||
| 	 * as the body content, and will be rendered before this. | ||||
| 	 */ | ||||
| 	public $body; | ||||
| 	/** | ||||
| 	 * @var array the options for rendering the close button tag. | ||||
| 	 * The close button is displayed in the header of the modal window. Clicking | ||||
| 	 * on the button will hide the modal window. If this is null, no close button will be rendered. | ||||
| 	 * | ||||
| 	 * The following special options are supported: | ||||
| 	 * | ||||
| 	 * - tag: string, the tag name of the button. Defaults to 'button'. | ||||
| 	 * - label: string, the label of the button. Defaults to '×'. | ||||
| 	 * | ||||
| 	 * The rest of the options will be rendered as the HTML attributes of the button tag. | ||||
| 	 * Please refer to the [Alert plugin help](http://twitter.github.com/bootstrap/javascript.html#alerts) | ||||
| 	 * for the supported HTML attributes. | ||||
| 	 */ | ||||
| 	public $closeButton = array(); | ||||
| 
 | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Initializes the widget. | ||||
| 	 */ | ||||
| 	public function init() | ||||
| 	{ | ||||
| 		parent::init(); | ||||
| 
 | ||||
| 		$this->getView()->registerAssetBundle('yii/bootstrap/alert'); | ||||
| 		$this->initOptions(); | ||||
| 
 | ||||
| 		echo Html::beginTag('div', $this->options) . "\n"; | ||||
| 		echo $this->renderBodyBegin() . "\n"; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Renders the widget. | ||||
| 	 */ | ||||
| 	public function run() | ||||
| 	{ | ||||
| 		echo "\n" . $this->renderBodyEnd(); | ||||
| 		echo "\n" . Html::endTag('div'); | ||||
| 
 | ||||
| 		$this->registerPlugin('alert'); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Renders the close button if any before rendering the content. | ||||
| 	 * @return string the rendering result | ||||
| 	 */ | ||||
| 	protected function renderBodyBegin() | ||||
| 	{ | ||||
| 		return $this->renderCloseButton(); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Renders the alert body (if any). | ||||
| 	 * @return string the rendering result | ||||
| 	 */ | ||||
| 	protected function renderBodyEnd() | ||||
| 	{ | ||||
| 		return $this->body . "\n"; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Renders the close button. | ||||
| 	 * @return string the rendering result | ||||
| 	 */ | ||||
| 	protected function renderCloseButton() | ||||
| 	{ | ||||
| 		if ($this->closeButton !== null) { | ||||
| 			$tag = ArrayHelper::remove($this->closeButton, 'tag', 'button'); | ||||
| 			$label = ArrayHelper::remove($this->closeButton, 'label', '×'); | ||||
| 			if ($tag === 'button' && !isset($this->closeButton['type'])) { | ||||
| 				$this->closeButton['type'] = 'button'; | ||||
| 			} | ||||
| 			return Html::tag($tag, $label, $this->closeButton); | ||||
| 		} else { | ||||
| 			return null; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Initializes the widget options. | ||||
| 	 * This method sets the default values for various options. | ||||
| 	 */ | ||||
| 	protected function initOptions() | ||||
| 	{ | ||||
| 		$this->options = array_merge(array( | ||||
| 			'class' => 'fade in', | ||||
| 		), $this->options); | ||||
| 
 | ||||
| 		$this->addCssClass($this->options, 'alert'); | ||||
| 
 | ||||
| 		if ($this->closeButton !== null) { | ||||
| 			$this->closeButton = array_merge(array( | ||||
| 				'data-dismiss' => 'alert', | ||||
| 				'aria-hidden' => 'true', | ||||
| 				'class' => 'close', | ||||
| 			), $this->closeButton); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
					Loading…
					
					
				
		Reference in new issue