Initial Commit
37
.gitignore
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# cache directories
|
||||||
|
Thumbs.db
|
||||||
|
*.DS_Store
|
||||||
|
*.empty
|
||||||
|
|
||||||
|
#phpstorm project files
|
||||||
|
.idea
|
||||||
|
|
||||||
|
#netbeans project files
|
||||||
|
nbproject
|
||||||
|
|
||||||
|
#eclipse, zend studio, aptana or other eclipse like project files
|
||||||
|
.buildpath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
|
||||||
|
# sass cache files
|
||||||
|
*.sass-cache
|
||||||
|
|
||||||
|
# mac deployment helpers
|
||||||
|
switch
|
||||||
|
index
|
||||||
|
|
||||||
|
# runtime and cache directories
|
||||||
|
/app/runtime
|
||||||
|
/www/assets
|
||||||
|
|
||||||
|
# yiinitializr env.lock
|
||||||
|
/app/lib/Yiinitializr/config/env.lock
|
||||||
|
|
||||||
|
# env files and testdrive database
|
||||||
|
/app/config/env.php
|
||||||
|
/app/data/testdrive.db
|
||||||
|
|
||||||
|
# composer
|
||||||
|
/app/lib/vendor
|
||||||
|
composer.lock
|
90
README.md
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
YIInitializr-basic
|
||||||
|
=======
|
||||||
|
The following is a proposed project structure for basic applications that works in conjunction with YIInitializr components.
|
||||||
|
|
||||||
|
YIInitializr vanilla projects make extensive use of Composer. We found at [2amigos.us](http://2amigos.us) that is easier to your extensions bundle outside of your application scope - thanks to [Phundament](http://phundament.com) and Tobias Munk for his knowledge and shares. Composer is your dependency package best friend.
|
||||||
|
|
||||||
|
The package is cleaned from extensions, you choose what you wish to include in your composer.json files. The only ones included are Yii Framework (obviously), [YiiStrap](https://github.com/yii-twbs/yiistrap) and [YiiWheels](https://github.com/2amigos/yiiwheels), the rest is up to you. We do not want to confuse you
|
||||||
|
|
||||||
|
## Setup and first run
|
||||||
|
|
||||||
|
* Set up Git by following the instructions [here](https://help.github.com/articles/set-up-git).
|
||||||
|
* Update the configurations in `app/config/` to suit your needs. The `common/config/main.php` is configured to use **sqllite** by default. Change your `common/config/env/dev.php` to suit your database requirements.
|
||||||
|
* Composer is required The package includes already a `composer.phar` file.
|
||||||
|
* Browse through the `composer.json` and remove the dependencies you don't need also update the required versions of the extensions.
|
||||||
|
* If you have `composer` installed globally:
|
||||||
|
* Run `composer self-update` to make sure you have the latest version of composer.
|
||||||
|
* Run `composer install` to download all the dependencies.
|
||||||
|
* If you work the `composer.phar` library within the project boilerplate.
|
||||||
|
* Run `php composer.phar self-update` to make sure you have the latest version of composer.
|
||||||
|
* Run `php composer.phar install` to download all the dependencies.
|
||||||
|
* `Yiinitializr\Composer\Callback` will configure everything required on your application: `runtime` and `assets` folders and migrations.
|
||||||
|
|
||||||
|
|
||||||
|
For more information about using Composer please see its [documentation](http://getcomposer.org/doc/).
|
||||||
|
|
||||||
|
###How to configure the application
|
||||||
|
|
||||||
|
We focused to release the pain of configuring your application and combine your configuration files. `Yiinitializr\Helpers\Initializr` is very easy to use, check for example the bootstrap `index.php` file:
|
||||||
|
|
||||||
|
```
|
||||||
|
require('./../app/lib/vendor/yiisoft/yii/framework/yii.php');
|
||||||
|
|
||||||
|
Yii::setPathOfAlias('Yiinitializr', './../app/lib/Yiinitializr');
|
||||||
|
|
||||||
|
use Yiinitializr\Helpers\Initializer;
|
||||||
|
|
||||||
|
Initializer::create('./../app', 'main', array('common', 'env', 'local'))->run();
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information about Yiinitializr please check it at [its github repo](https://github.com/2amigos/yiinitializr).
|
||||||
|
|
||||||
|
## Overall Structure
|
||||||
|
|
||||||
|
Bellow the directory structure used:
|
||||||
|
|
||||||
|
```
|
||||||
|
|-app
|
||||||
|
|---cli
|
||||||
|
|-----commands
|
||||||
|
|-----migrations
|
||||||
|
|---config
|
||||||
|
|-----env
|
||||||
|
|---controllers
|
||||||
|
|---extensions
|
||||||
|
|-----behaviors
|
||||||
|
|-----components
|
||||||
|
|---helpers
|
||||||
|
|---lib #it will hold composer 'vendor' folder
|
||||||
|
|-----Yiinitializr
|
||||||
|
|-------Cli
|
||||||
|
|-------Composer
|
||||||
|
|-------Helpers
|
||||||
|
|-------config
|
||||||
|
|---messages
|
||||||
|
|---models
|
||||||
|
|---modules
|
||||||
|
|---views
|
||||||
|
|-----layouts
|
||||||
|
|-----site
|
||||||
|
|---widgets
|
||||||
|
|-www
|
||||||
|
|---css
|
||||||
|
|-----fonts
|
||||||
|
|---img
|
||||||
|
|---js
|
||||||
|
|-----libs
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Extensions
|
||||||
|
|
||||||
|
The following extensions are part of YIInitializr-basic template:
|
||||||
|
|
||||||
|
* Yiistrap [https://github.com/yii-twbs/yiistrap](https://github.com/yii-twbs/yiistrap)
|
||||||
|
* Yiiwheels [https://github.com/2amigos/yiiwheels](https://github.com/2amigos/yiiwheels)
|
||||||
|
* Yiinitializr [https://github.com/2amigos/yiinitializr](https://github.com/2amigos/yiinitializr)
|
||||||
|
|
||||||
|
> [![2amigOS!](http://www.gravatar.com/avatar/55363394d72945ff7ed312556ec041e0.png)](http://www.2amigos.us)
|
||||||
|
<i>web development has never been so fun</i>
|
||||||
|
[www.2amigos.us](http://www.2amigos.us)
|
1
app/.htaccess
Normal file
@ -0,0 +1 @@
|
|||||||
|
deny from all
|
0
app/cli/commands/.gitkeep
Normal file
0
app/cli/migrations/.gitkeep
Normal file
46
app/config/common.php
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* common.php configuration file
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
return array(
|
||||||
|
'basePath' => realPath(__DIR__ . '/..'),
|
||||||
|
'preload' => array('log'),
|
||||||
|
'aliases' => array(
|
||||||
|
'vendor' => 'application.vendor'
|
||||||
|
),
|
||||||
|
'import' => array(
|
||||||
|
'application.controllers.*',
|
||||||
|
'application.extensions.components.*',
|
||||||
|
'application.extensions.behaviors.*',
|
||||||
|
'application.helpers.*',
|
||||||
|
'application.models.*',
|
||||||
|
'vendor.2amigos.yiistrap.helpers.*',
|
||||||
|
'vendor.2amigos.yiiwheels.helpers.*',
|
||||||
|
),
|
||||||
|
'components' => array(
|
||||||
|
'errorHandler' => array(
|
||||||
|
'errorAction' => 'site/error',
|
||||||
|
),
|
||||||
|
'log' => array(
|
||||||
|
'class' => 'CLogRouter',
|
||||||
|
'routes' => array(
|
||||||
|
array(
|
||||||
|
'class' => 'CFileLogRoute',
|
||||||
|
'levels' => 'error, warning',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'params' => array(
|
||||||
|
// php configuration
|
||||||
|
'php.defaultCharset' => 'utf-8',
|
||||||
|
'php.timezone' => 'UTC',
|
||||||
|
)
|
||||||
|
);
|
20
app/config/console.php
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* console.php configuration file
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
defined('APP_CONFIG_NAME') or define('APP_CONFIG_NAME', 'console');
|
||||||
|
return array(
|
||||||
|
'commandMap' => array(
|
||||||
|
'migrate' => array(
|
||||||
|
'class' => 'system.cli.commands.MigrateCommand',
|
||||||
|
'migrationPath' => 'application.cli.migrations'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
33
app/config/env/dev.php
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
return array(
|
||||||
|
'modules' => array(
|
||||||
|
'gii' => array(
|
||||||
|
'class' => 'system.gii.GiiModule',
|
||||||
|
'password' => 'yii',
|
||||||
|
'ipFilters' => array('127.0.0.1','::1'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'components' => array(
|
||||||
|
'db' => array(
|
||||||
|
'connectionString' => 'mysql:host=localhost;dbname=db451718',
|
||||||
|
'username' => 'root',
|
||||||
|
'password' => '',
|
||||||
|
'enableProfiling' => true,
|
||||||
|
'enableParamLogging' => true,
|
||||||
|
'charset' => 'utf8',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'params' => array(
|
||||||
|
'yii.handleErrors' => true,
|
||||||
|
'yii.debug' => true,
|
||||||
|
'yii.traceLevel' => 3,
|
||||||
|
)
|
||||||
|
);
|
26
app/config/env/prod.php
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
return array(
|
||||||
|
'components' => array(
|
||||||
|
'db' => array(
|
||||||
|
'connectionString' => 'mysql:host=rdbms.strato.de;dbname=DB451718',
|
||||||
|
'username' => 'U451718',
|
||||||
|
'password' => 'Datenbank',
|
||||||
|
'enableProfiling' => YII_DEBUG,
|
||||||
|
'enableParamLogging' => YII_DEBUG,
|
||||||
|
'charset' => 'utf8',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'params' => array(
|
||||||
|
'yii.debug' => false,
|
||||||
|
'yii.traceLevel' => 0,
|
||||||
|
'yii.handleErrors' => APP_CONFIG_NAME !== 'test',
|
||||||
|
)
|
||||||
|
);
|
7
app/config/env/stage.php
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* stage.php
|
||||||
|
*/
|
||||||
|
|
||||||
|
return array(
|
||||||
|
);
|
70
app/config/main.php
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* main.php configuration file
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
defined('APP_CONFIG_NAME') or define('APP_CONFIG_NAME', 'main');
|
||||||
|
|
||||||
|
use Yiinitializr\Helpers\ArrayX;
|
||||||
|
|
||||||
|
// web application configuration
|
||||||
|
return ArrayX::merge(array(
|
||||||
|
'name' => 'Mikescher_de',
|
||||||
|
|
||||||
|
// path aliases
|
||||||
|
'aliases' => array(
|
||||||
|
'bootstrap' => dirname(__FILE__) . '/../lib/vendor/2amigos/yiistrap',
|
||||||
|
'yiiwheels' => dirname(__FILE__) . '/../lib/vendor/2amigos/yiiwheels',
|
||||||
|
),
|
||||||
|
|
||||||
|
// application behaviors
|
||||||
|
'behaviors' => array(),
|
||||||
|
|
||||||
|
// controllers mappings
|
||||||
|
'controllerMap' => array(),
|
||||||
|
|
||||||
|
// application modules
|
||||||
|
'modules' => array(),
|
||||||
|
|
||||||
|
// application components
|
||||||
|
'components' => array(
|
||||||
|
|
||||||
|
'bootstrap' => array(
|
||||||
|
'class' => 'bootstrap.components.TbApi',
|
||||||
|
),
|
||||||
|
|
||||||
|
'clientScript' => array(
|
||||||
|
'scriptMap' => array(
|
||||||
|
'bootstrap.min.css' => false,
|
||||||
|
'bootstrap.min.js' => false,
|
||||||
|
'bootstrap-yii.css' => false
|
||||||
|
)
|
||||||
|
),
|
||||||
|
'urlManager' => array(
|
||||||
|
// uncomment the following if you have enabled Apache's Rewrite module.
|
||||||
|
'urlFormat' => 'path',
|
||||||
|
'showScriptName' => false,
|
||||||
|
|
||||||
|
'rules' => array(
|
||||||
|
// default rules
|
||||||
|
'<controller:\w+>/<id:\d+>' => '<controller>/view',
|
||||||
|
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
|
||||||
|
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'user' => array(
|
||||||
|
'allowAutoLogin' => true,
|
||||||
|
),
|
||||||
|
'errorHandler' => array(
|
||||||
|
'errorAction' => 'site/error',
|
||||||
|
)
|
||||||
|
),
|
||||||
|
// application parameters
|
||||||
|
'params' => array(),
|
||||||
|
), require_once('common.php'));
|
16
app/config/test.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* test.php configuration file
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
return array(
|
||||||
|
'params' => array(
|
||||||
|
'yii.handleErrors' => false,
|
||||||
|
)
|
||||||
|
);
|
32
app/controllers/SiteController.php
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* SiteController class
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
class SiteController extends EController
|
||||||
|
{
|
||||||
|
public function actionIndex()
|
||||||
|
{
|
||||||
|
$this->render('index');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the action to handle external exceptions.
|
||||||
|
*/
|
||||||
|
public function actionError()
|
||||||
|
{
|
||||||
|
if($error=Yii::app()->errorHandler->error)
|
||||||
|
{
|
||||||
|
if(Yii::app()->request->isAjaxRequest)
|
||||||
|
echo $error['message'];
|
||||||
|
else
|
||||||
|
$this->render('error', $error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
0
app/data/.gitkeep
Normal file
0
app/extensions/behaviors/.gitkeep
Normal file
119
app/extensions/components/EActiveRecord.php
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* EActiveRecord class
|
||||||
|
*
|
||||||
|
* Some cool methods to share amount your models
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
class EActiveRecord extends CActiveRecord
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* default form ID for the current model. Defaults to get_class()+'-form'
|
||||||
|
*/
|
||||||
|
private $_formId;
|
||||||
|
|
||||||
|
public function setFormId($value)
|
||||||
|
{
|
||||||
|
$this->_formId = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getFormId()
|
||||||
|
{
|
||||||
|
if (null !== $this->_formId)
|
||||||
|
return $this->_formId;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->_formId = strtolower(get_class($this)) . '-form';
|
||||||
|
return $this->_formId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* default grid ID for the current model. Defaults to get_class()+'-grid'
|
||||||
|
*/
|
||||||
|
private $_gridId;
|
||||||
|
|
||||||
|
public function setGridId($value)
|
||||||
|
{
|
||||||
|
$this->_gridId = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getGridId()
|
||||||
|
{
|
||||||
|
if (null !== $this->_gridId)
|
||||||
|
return $this->_gridId;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->_gridId = strtolower(get_class($this)) . '-grid';
|
||||||
|
return $this->_gridId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* default list ID for the current model. Defaults to get_class()+'-list'
|
||||||
|
*/
|
||||||
|
private $_listId;
|
||||||
|
|
||||||
|
public function setListId($value)
|
||||||
|
{
|
||||||
|
$this->_listId = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getListId()
|
||||||
|
{
|
||||||
|
if (null !== $this->_listId)
|
||||||
|
return $this->_listId;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->_listId = strtolower(get_class($this)) . '-list';
|
||||||
|
return $this->_listId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs the record update information.
|
||||||
|
* Updates the four columns: create_user_id, create_date, last_update_user_id and last_update_date.
|
||||||
|
*/
|
||||||
|
protected function logUpdate()
|
||||||
|
{
|
||||||
|
$userId = php_sapi_name() === 'cli'
|
||||||
|
? -1
|
||||||
|
: Yii::app()->user->id;
|
||||||
|
|
||||||
|
foreach (array('create_user_id' => $userId, 'create_date' => time()) as $attribute => $value)
|
||||||
|
$this->updateLogAttribute($attribute, $value, (!($userId===-1 || Yii::app()->user->isGuest) && $this->isNewRecord));
|
||||||
|
|
||||||
|
foreach (array('last_update_user_id' => $userId, 'last_update_date' => time()) as $attribute => $value)
|
||||||
|
$this->updateLogAttribute($attribute, $value, (!($userId===-1 || Yii::app()->user->isGuest) && !$this->isNewRecord));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to update attributes
|
||||||
|
* @param $attribute
|
||||||
|
* @param $value
|
||||||
|
* @param $check
|
||||||
|
*/
|
||||||
|
protected function updateLogAttribute($attribute, $value, $check)
|
||||||
|
{
|
||||||
|
|
||||||
|
if ($this->hasAttribute($attribute) && $check)
|
||||||
|
$this->$attribute = $value;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* updates the log fields before saving
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
public function beforeSave()
|
||||||
|
{
|
||||||
|
$this->logUpdate();
|
||||||
|
return parent::beforeSave();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
106
app/extensions/components/EController.php
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* EController class
|
||||||
|
*
|
||||||
|
* Has some useful methods for your Controllers
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
class EController extends CController
|
||||||
|
{
|
||||||
|
public $meta_keywords = array();
|
||||||
|
public $meta_description = array();
|
||||||
|
public $breadcrumbs;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a param
|
||||||
|
* @param $name
|
||||||
|
* @param null $defaultValue
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function getActionParam($name, $defaultValue = null)
|
||||||
|
{
|
||||||
|
return Yii::app()->request->getParam($name, $defaultValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the requested data model.
|
||||||
|
* @param string the model class name
|
||||||
|
* @param integer the model ID
|
||||||
|
* @param array additional search criteria
|
||||||
|
* @param boolean whether to throw exception if the model is not found. Defaults to true.
|
||||||
|
* @return CActiveRecord the model instance.
|
||||||
|
* @throws CHttpException if the model cannot be found
|
||||||
|
*/
|
||||||
|
protected function loadModel($class, $id, $criteria = array(), $exceptionOnNull = true)
|
||||||
|
{
|
||||||
|
if (empty($criteria))
|
||||||
|
$model = CActiveRecord::model($class)->findByPk($id);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$finder = CActiveRecord::model($class);
|
||||||
|
$c = new CDbCriteria($criteria);
|
||||||
|
$c->mergeWith(array(
|
||||||
|
'condition' => $finder->tableSchema->primaryKey . '=:id',
|
||||||
|
'params' => array(':id' => $id),
|
||||||
|
));
|
||||||
|
$model = $finder->find($c);
|
||||||
|
}
|
||||||
|
if (isset($model))
|
||||||
|
return $model;
|
||||||
|
else if ($exceptionOnNull)
|
||||||
|
throw new CHttpException(404, 'Unable to find the requested object.');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the AJAX validation.
|
||||||
|
* @param CModel the model to be validated
|
||||||
|
*/
|
||||||
|
protected function performAjaxValidation($model)
|
||||||
|
{
|
||||||
|
if (isset($_POST['ajax']) && $_POST['ajax'] === $model->formId)
|
||||||
|
{
|
||||||
|
echo CActiveForm::validate($model);
|
||||||
|
Yii::app()->end();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outputs (echo) json representation of $data, prints html on debug mode.
|
||||||
|
* NOTE: json_encode exists in PHP > 5.2, so it's safe to use it directly without checking
|
||||||
|
* @param array $data the data (PHP array) to be encoded into json array
|
||||||
|
* @param int $opts Bitmask consisting of JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_FORCE_OBJECT.
|
||||||
|
*/
|
||||||
|
public function renderJson($data, $opts=null)
|
||||||
|
{
|
||||||
|
if(YII_DEBUG && isset($_GET['debug']) && is_array($data))
|
||||||
|
{
|
||||||
|
foreach($data as $type => $v)
|
||||||
|
printf('<h1>%s</h1>%s', $type, is_array($v) ? json_encode($v, $opts) : $v);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
header('Content-Type: application/json; charset=UTF-8');
|
||||||
|
echo json_encode($data, $opts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Utility function to ensure the base url.
|
||||||
|
* @param $url
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function baseUrl( $url = '' )
|
||||||
|
{
|
||||||
|
static $baseUrl;
|
||||||
|
if ($baseUrl === null)
|
||||||
|
$baseUrl = Yii::app()->request->baseUrl;
|
||||||
|
return $baseUrl . '/' . ltrim($url, '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
43
app/extensions/components/EWebApplication.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* EWebApplication class
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
class EWebApplication extends CWebApplication {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function is here because we aren't creating a locale file for every client.
|
||||||
|
* Thus we provide a fallback to "en".
|
||||||
|
*/
|
||||||
|
public function getLocale($localeID = null) {
|
||||||
|
try {
|
||||||
|
return parent::getLocale($localeID);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
return CLocale::getInstance('en');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We were getting tons of errors in the logs from OPTIONS requests for the URI "*"
|
||||||
|
* As it turns out, the requests were from localhost (::1) and are apparently a way
|
||||||
|
* that Apache polls its processes to see if they're alive. This function causes
|
||||||
|
* Yii to respond without logging errors.
|
||||||
|
*/
|
||||||
|
public function runController($route) {
|
||||||
|
try {
|
||||||
|
parent::runController($route);
|
||||||
|
} catch (CHttpException $e) {
|
||||||
|
if (@$_SERVER['REQUEST_METHOD'] == 'OPTIONS' && @$_SERVER['REQUEST_URI'] == '*') {
|
||||||
|
Yii::app()->end('Hello, amigo!');
|
||||||
|
} else
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
0
app/helpers/.gitkeep
Normal file
6
app/lib/Yiinitializr/CHANGELOG
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
Yiinitializr Change Log
|
||||||
|
========================
|
||||||
|
|
||||||
|
Thursday 28-March-2013
|
||||||
|
----------------------------
|
||||||
|
Initial release
|
487
app/lib/Yiinitializr/Cli/Console.php
Normal file
@ -0,0 +1,487 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Console class file.
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @author Nofriandi Ramenta <nramenta@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @link https://github.com/nramenta/clio
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
namespace Yiinitializr\Cli;
|
||||||
|
/**
|
||||||
|
* Console provides a set of useful functions to work on the terminal
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @package Yiinitializr.Cli
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
class Console
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Text foreground colors.
|
||||||
|
*/
|
||||||
|
protected static $FGCOLOR = array(
|
||||||
|
'black' => 30,
|
||||||
|
'red' => 31,
|
||||||
|
'green' => 32,
|
||||||
|
'brown' => 33,
|
||||||
|
'blue' => 34,
|
||||||
|
'purple' => 35,
|
||||||
|
'cyan' => 36,
|
||||||
|
'grey' => 37,
|
||||||
|
'yellow' => 33,
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text styling.
|
||||||
|
*/
|
||||||
|
protected static $STYLE = array(
|
||||||
|
'normal' => 0,
|
||||||
|
'bold' => 1,
|
||||||
|
'light' => 1,
|
||||||
|
'underscore' => 4,
|
||||||
|
'underline' => 4,
|
||||||
|
'blink' => 5,
|
||||||
|
'inverse' => 6,
|
||||||
|
'hidden' => 8,
|
||||||
|
'concealed' => 8,
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text background color.
|
||||||
|
*/
|
||||||
|
protected static $BGCOLOR = array(
|
||||||
|
'black' => 40,
|
||||||
|
'red' => 41,
|
||||||
|
'green' => 42,
|
||||||
|
'brown' => 43,
|
||||||
|
'yellow' => 43,
|
||||||
|
'blue' => 44,
|
||||||
|
'purple' => 45,
|
||||||
|
'cyan' => 46,
|
||||||
|
'grey' => 47,
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Color specifier conversion table. Taken from PEAR's Console_Color.
|
||||||
|
*/
|
||||||
|
protected static $CONVERSIONS = array(
|
||||||
|
'%y' => array('yellow', null, null),
|
||||||
|
'%g' => array('green', null, null),
|
||||||
|
'%b' => array('blue', null, null),
|
||||||
|
'%r' => array('red', null, null),
|
||||||
|
'%p' => array('purple', null, null),
|
||||||
|
'%m' => array('purple', null, null),
|
||||||
|
'%c' => array('cyan', null, null),
|
||||||
|
'%w' => array('grey', null, null),
|
||||||
|
'%k' => array('black', null, null),
|
||||||
|
'%n' => array('reset', null, null),
|
||||||
|
'%Y' => array('yellow', 'light', null),
|
||||||
|
'%G' => array('green', 'light', null),
|
||||||
|
'%B' => array('blue', 'light', null),
|
||||||
|
'%R' => array('red', 'light', null),
|
||||||
|
'%P' => array('purple', 'light', null),
|
||||||
|
'%M' => array('purple', 'light', null),
|
||||||
|
'%C' => array('cyan', 'light', null),
|
||||||
|
'%W' => array('grey', 'light', null),
|
||||||
|
'%K' => array('black', 'light', null),
|
||||||
|
'%N' => array('reset', 'light', null),
|
||||||
|
'%3' => array(null, null, 'yellow'),
|
||||||
|
'%2' => array(null, null, 'green'),
|
||||||
|
'%4' => array(null, null, 'blue'),
|
||||||
|
'%1' => array(null, null, 'red'),
|
||||||
|
'%5' => array(null, null, 'purple'),
|
||||||
|
'%6' => array(null, null, 'cyan'),
|
||||||
|
'%7' => array(null, null, 'grey'),
|
||||||
|
'%0' => array(null, null, 'black'),
|
||||||
|
'%F' => array(null, 'blink', null),
|
||||||
|
'%U' => array(null, 'underline', null),
|
||||||
|
'%8' => array(null, 'inverse', null),
|
||||||
|
'%9' => array(null, 'bold', null),
|
||||||
|
'%_' => array(null, 'bold', null),
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create ANSI-control codes for text foreground and background colors, and
|
||||||
|
* styling.
|
||||||
|
*
|
||||||
|
* @param string $fgcolor Text foreground color
|
||||||
|
* @param string $style Text style
|
||||||
|
* @param string $bgcolor Text background color
|
||||||
|
*
|
||||||
|
* @return string ANSI-control code
|
||||||
|
*/
|
||||||
|
public static function color($fgcolor, $style, $bgcolor)
|
||||||
|
{
|
||||||
|
$code = array();
|
||||||
|
if ($fgcolor == 'reset') {
|
||||||
|
return "\033[0m";
|
||||||
|
}
|
||||||
|
if (isset(static::$FGCOLOR[$fgcolor])) {
|
||||||
|
$code[] = static::$FGCOLOR[$fgcolor];
|
||||||
|
}
|
||||||
|
if (isset(static::$STYLE[$style])) {
|
||||||
|
$code[] = static::$STYLE[$style];
|
||||||
|
}
|
||||||
|
if (isset(static::$BGCOLOR[$bgcolor])) {
|
||||||
|
$code[] = static::$BGCOLOR[$bgcolor];
|
||||||
|
}
|
||||||
|
if (empty($code)) {
|
||||||
|
$code[] = 0;
|
||||||
|
}
|
||||||
|
return "\033[" . implode(';', $code) . 'm';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* aken from PEAR's Console_Color:
|
||||||
|
*
|
||||||
|
* Converts colorcodes in the format %y (for yellow) into ansi-control
|
||||||
|
* codes. The conversion table is: ('bold' meaning 'light' on some
|
||||||
|
* terminals). It's almost the same conversion table irssi uses.
|
||||||
|
* <pre>
|
||||||
|
* text text background
|
||||||
|
* ------------------------------------------------
|
||||||
|
* %k %K %0 black dark grey black
|
||||||
|
* %r %R %1 red bold red red
|
||||||
|
* %g %G %2 green bold green green
|
||||||
|
* %y %Y %3 yellow bold yellow yellow
|
||||||
|
* %b %B %4 blue bold blue blue
|
||||||
|
* %m %M %5 magenta bold magenta magenta
|
||||||
|
* %p %P magenta (think: purple)
|
||||||
|
* %c %C %6 cyan bold cyan cyan
|
||||||
|
* %w %W %7 white bold white white
|
||||||
|
*
|
||||||
|
* %F Blinking, Flashing
|
||||||
|
* %U Underline
|
||||||
|
* %8 Reverse
|
||||||
|
* %_,%9 Bold
|
||||||
|
*
|
||||||
|
* %n Resets the color
|
||||||
|
* %% A single %
|
||||||
|
* </pre>
|
||||||
|
* First param is the string to convert, second is an optional flag if
|
||||||
|
* colors should be used. It defaults to true, if set to false, the
|
||||||
|
* colorcodes will just be removed (And %% will be transformed into %)
|
||||||
|
*
|
||||||
|
* @param $text
|
||||||
|
* @param bool $color
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function colorize($text, $color = true)
|
||||||
|
{
|
||||||
|
$text = str_replace('%%', '% ', $text);
|
||||||
|
foreach (static::$CONVERSIONS as $key => $value) {
|
||||||
|
list($fgcolor, $style, $bgcolor) = $value;
|
||||||
|
$text = str_replace(
|
||||||
|
$key,
|
||||||
|
$color ? static::color($fgcolor, $style, $bgcolor) : '',
|
||||||
|
$text
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return str_replace('% ', '%', $text);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Strips a string from color specifiers.
|
||||||
|
*
|
||||||
|
* @param string $text String to strip
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function decolorize($text)
|
||||||
|
{
|
||||||
|
return static::colorize($text, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Strips a string of ansi-control codes.
|
||||||
|
*
|
||||||
|
* @param string $text String to strip
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function strip($text)
|
||||||
|
{
|
||||||
|
return preg_replace('/\033\[(\d+)(;\d+)*m/', '', $text);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets input from STDIN and returns a string right-trimmed for EOLs.
|
||||||
|
*
|
||||||
|
* @param bool $raw If set to true, returns the raw string without trimming
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function stdin($raw = false)
|
||||||
|
{
|
||||||
|
return $raw ? fgets(STDIN) : rtrim(fgets(STDIN), PHP_EOL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints text to STDOUT.
|
||||||
|
*
|
||||||
|
* @param string $text
|
||||||
|
* @param bool $raw
|
||||||
|
*
|
||||||
|
* @return int|false Number of bytes printed or false on error
|
||||||
|
*/
|
||||||
|
public static function stdout($text, $raw = false)
|
||||||
|
{
|
||||||
|
if ($raw) {
|
||||||
|
return fwrite(STDOUT, $text);
|
||||||
|
} elseif (extension_loaded('posix') && posix_isatty(STDOUT)) {
|
||||||
|
return fwrite(STDOUT, static::colorize($text));
|
||||||
|
} else {
|
||||||
|
return fwrite(STDOUT, static::decolorize($text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints text to STDERR.
|
||||||
|
*
|
||||||
|
* @param string $text
|
||||||
|
* @param bool $raw
|
||||||
|
*
|
||||||
|
* @return int|false Number of bytes printed or false on error
|
||||||
|
*/
|
||||||
|
public static function stderr($text, $raw = false)
|
||||||
|
{
|
||||||
|
if ($raw) {
|
||||||
|
return fwrite(STDERR, $text);
|
||||||
|
} elseif (extension_loaded('posix') && posix_isatty(STDERR)) {
|
||||||
|
return fwrite(STDERR, static::colorize($text));
|
||||||
|
} else {
|
||||||
|
return fwrite(STDERR, static::decolorize($text));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints text to STDERR appended with a PHP_EOL.
|
||||||
|
*
|
||||||
|
* @param string $text
|
||||||
|
* @param bool $raw
|
||||||
|
*
|
||||||
|
* @return int|false Number of bytes printed or false on error
|
||||||
|
*/
|
||||||
|
public static function error($text = null, $raw = false)
|
||||||
|
{
|
||||||
|
return static::stderr($text . PHP_EOL, $raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asks the user for input. Ends when the user types a PHP_EOL. Optionally
|
||||||
|
* provide a prompt.
|
||||||
|
*
|
||||||
|
* @param string $prompt String prompt (optional)
|
||||||
|
*
|
||||||
|
* @return string User input
|
||||||
|
*/
|
||||||
|
public static function input($prompt = null)
|
||||||
|
{
|
||||||
|
if (isset($prompt)) {
|
||||||
|
static::stdout($prompt);
|
||||||
|
}
|
||||||
|
return static::stdin();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints text to STDOUT appended with a PHP_EOL.
|
||||||
|
*
|
||||||
|
* @param string $text
|
||||||
|
* @param bool $raw
|
||||||
|
*
|
||||||
|
* @return int|false Number of bytes printed or false on error
|
||||||
|
*/
|
||||||
|
public static function output($text = null, $raw = false)
|
||||||
|
{
|
||||||
|
return static::stdout($text . PHP_EOL, $raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prompts the user for input
|
||||||
|
*
|
||||||
|
* @param string $text Prompt string
|
||||||
|
* @param array $options Set of options
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function prompt($text, $options = array())
|
||||||
|
{
|
||||||
|
$options = $options + array(
|
||||||
|
'required' => false,
|
||||||
|
'default' => null,
|
||||||
|
'pattern' => null,
|
||||||
|
'validator' => null,
|
||||||
|
'error' => 'Input unacceptable.',
|
||||||
|
);
|
||||||
|
|
||||||
|
top:
|
||||||
|
if ($options['default']) {
|
||||||
|
$input = static::input("$text [" . $options['default'] . ']: ');
|
||||||
|
} else {
|
||||||
|
$input = static::input("$text: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strlen($input)) {
|
||||||
|
if (isset($options['default'])) {
|
||||||
|
$input = $options['default'];
|
||||||
|
} elseif ($options['required']) {
|
||||||
|
static::output($options['error']);
|
||||||
|
goto top;
|
||||||
|
}
|
||||||
|
} elseif ($options['pattern'] && !preg_match($options['pattern'], $input)) {
|
||||||
|
static::output($options['error']);
|
||||||
|
goto top;
|
||||||
|
} elseif ($options['validator'] &&
|
||||||
|
!call_user_func_array($options['validator'], array($input, &$error))) {
|
||||||
|
static::output(isset($error) ? $error : $options['error']);
|
||||||
|
goto top;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asks the user for a simple yes/no confirmation.
|
||||||
|
*
|
||||||
|
* @param string $text Prompt string
|
||||||
|
*
|
||||||
|
* @return bool Either true or false
|
||||||
|
*/
|
||||||
|
public static function confirm($text)
|
||||||
|
{
|
||||||
|
top:
|
||||||
|
$input = strtolower(static::input("$text [y/n]: "));
|
||||||
|
if (!in_array($input, array('y', 'n'))) goto top;
|
||||||
|
return $input === 'y' ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gives the user an option to choose from. Giving '?' as an input will show
|
||||||
|
* a list of options to choose from and their explanations.
|
||||||
|
*
|
||||||
|
* @param string $text Prompt string
|
||||||
|
* @param array $options Key-value array of options to choose from
|
||||||
|
*
|
||||||
|
* @return string An option character the user chose
|
||||||
|
*/
|
||||||
|
public static function select($text, $options = array())
|
||||||
|
{
|
||||||
|
top:
|
||||||
|
static::stdout("$text [" . implode(',', array_keys($options)) . ",?]: ");
|
||||||
|
$input = static::stdin();
|
||||||
|
if ($input === '?') {
|
||||||
|
foreach ($options as $key => $value) {
|
||||||
|
echo " $key - $value\n";
|
||||||
|
}
|
||||||
|
echo " ? - Show help\n";
|
||||||
|
goto top;
|
||||||
|
} elseif (!in_array($input, array_keys($options))) goto top;
|
||||||
|
return $input;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a Closure as another process in the background while showing a
|
||||||
|
* status update. The status update can be an indefinite spinner or a string
|
||||||
|
* periodically sent from the background process, depending on whether the
|
||||||
|
* provided Closure object has a $socket parameter or not. Messaging to the
|
||||||
|
* main process is done by socket_* functions. The return value is either
|
||||||
|
* the return value of the background process, or false if the process fork
|
||||||
|
* failed.
|
||||||
|
*
|
||||||
|
* @param callable $callable Closure object
|
||||||
|
* @return bool|int
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function work(\Closure $callable)
|
||||||
|
{
|
||||||
|
if (!extension_loaded('pcntl')) {
|
||||||
|
throw new \Exception('pcntl extension required');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!extension_loaded('sockets')) {
|
||||||
|
throw new \Exception('sockets extension required');
|
||||||
|
}
|
||||||
|
|
||||||
|
$spinner = array('|', '/', '-', '\\');
|
||||||
|
$i = 0; $l = count($spinner);
|
||||||
|
$delay = 100000;
|
||||||
|
|
||||||
|
$func = new \ReflectionFunction($callable);
|
||||||
|
|
||||||
|
$socket = (bool)$func->getNumberOfParameters();
|
||||||
|
|
||||||
|
if ($socket) {
|
||||||
|
$sockets = array();
|
||||||
|
if (socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $sockets) === false) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$pid = pcntl_fork();
|
||||||
|
|
||||||
|
if ($pid > 0) {
|
||||||
|
$done = false;
|
||||||
|
$retval = 0;
|
||||||
|
pcntl_signal(SIGCHLD, function() use ($pid, &$done, &$retval) {
|
||||||
|
$child_pid = pcntl_waitpid($pid, $status);
|
||||||
|
if (pcntl_wifexited($status)) {
|
||||||
|
$retval = pcntl_wexitstatus($status);
|
||||||
|
}
|
||||||
|
$done = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
if ($socket) {
|
||||||
|
$text = '';
|
||||||
|
while (!$done) {
|
||||||
|
$r = array($sockets[1]);
|
||||||
|
$w = null;
|
||||||
|
$e = null;
|
||||||
|
if ($status = socket_select($r, $w, $e, 0)) {
|
||||||
|
$data = socket_read($sockets[1], 4096, PHP_NORMAL_READ);
|
||||||
|
if ($data === false) {
|
||||||
|
throw new \Exception(
|
||||||
|
sprintf(
|
||||||
|
'socket write error %s',
|
||||||
|
socket_strerror(socket_last_error($sockets[1]))
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
echo str_repeat(chr(8), strlen($text));
|
||||||
|
$text = rtrim($data, "\n");
|
||||||
|
Console::stdout($text);
|
||||||
|
} else {
|
||||||
|
pcntl_signal_dispatch();
|
||||||
|
}
|
||||||
|
usleep($delay);
|
||||||
|
}
|
||||||
|
echo str_repeat(chr(8), strlen($text));
|
||||||
|
socket_close($sockets[0]);
|
||||||
|
socket_close($sockets[1]);
|
||||||
|
} else {
|
||||||
|
while (!$done) {
|
||||||
|
pcntl_signal_dispatch();
|
||||||
|
echo $spinner[$i];
|
||||||
|
usleep($delay);
|
||||||
|
echo chr(8);
|
||||||
|
$i = $i === $l - 1 ? 0 : $i + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $retval;
|
||||||
|
} elseif ($pid === 0) {
|
||||||
|
if ($socket) {
|
||||||
|
call_user_func($callable, $sockets[0]);
|
||||||
|
} else {
|
||||||
|
call_user_func($callable);
|
||||||
|
}
|
||||||
|
exit;
|
||||||
|
} else {
|
||||||
|
// Unable to fork process.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
163
app/lib/Yiinitializr/Cli/Daemon.php
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Daemon class file.
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @author Nofriandi Ramenta <nramenta@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @link https://github.com/nramenta/clio
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
namespace Yiinitializr\Cli;
|
||||||
|
/**
|
||||||
|
* Daemon provides helpers for starting and killing daemonized processes
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <ramirez.cobos@gmail.com>
|
||||||
|
* @package Yiinitializr.Cli
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
class Daemon
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Daemonize a Closure object.
|
||||||
|
* @param array $options Set of options
|
||||||
|
* @param callable $callable Closure object to daemonize
|
||||||
|
* @return bool True on success
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function work(array $options, \Closure $callable)
|
||||||
|
{
|
||||||
|
if (!extension_loaded('pcntl')) {
|
||||||
|
throw new \Exception('pcntl extension required');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!extension_loaded('posix')) {
|
||||||
|
throw new \Exception('posix extension required');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($options['pid'])) {
|
||||||
|
throw new \Exception('pid not specified');
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = $options + array(
|
||||||
|
'stdin' => '/dev/null',
|
||||||
|
'stdout' => '/dev/null',
|
||||||
|
'stderr' => 'php://stdout',
|
||||||
|
);
|
||||||
|
|
||||||
|
if (($lock = @fopen($options['pid'], 'c+')) === false) {
|
||||||
|
throw new \Exception('unable to open pid file ' . $options['pid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!flock($lock, LOCK_EX | LOCK_NB)) {
|
||||||
|
throw new \Exception('could not acquire lock for ' . $options['pid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($pid = pcntl_fork()) {
|
||||||
|
case -1:
|
||||||
|
throw new \Exception('unable to fork');
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
fseek($lock, 0);
|
||||||
|
ftruncate($lock, 0);
|
||||||
|
fwrite($lock ,$pid);
|
||||||
|
fflush($lock);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (posix_setsid() === -1) {
|
||||||
|
throw new \Exception('failed to setsid');
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(STDIN);
|
||||||
|
fclose(STDOUT);
|
||||||
|
fclose(STDERR);
|
||||||
|
|
||||||
|
if (!($stdin = fopen($options['stdin'], 'r'))) {
|
||||||
|
throw new \Exception('failed to open STDIN ' . $options['stdin']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!($stdout = fopen($options['stdout'], 'w'))) {
|
||||||
|
throw new \Exception('failed to open STDOUT ' . $options['stdout']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!($stderr = fopen($options['stderr'], 'w'))) {
|
||||||
|
throw new \Exception('failed to open STDERR ' . $options['stderr']);
|
||||||
|
}
|
||||||
|
|
||||||
|
pcntl_signal(SIGTSTP, SIG_IGN);
|
||||||
|
pcntl_signal(SIGTTOU, SIG_IGN);
|
||||||
|
pcntl_signal(SIGTTIN, SIG_IGN);
|
||||||
|
pcntl_signal(SIGHUP, SIG_IGN);
|
||||||
|
|
||||||
|
call_user_func($callable, $stdin, $stdout, $stderr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether a process is running or not
|
||||||
|
* @param $file
|
||||||
|
* @return bool
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function isRunning($file)
|
||||||
|
{
|
||||||
|
if (!extension_loaded('posix')) {
|
||||||
|
throw new \Exception('posix extension required');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_readable($file)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($lock = @fopen($file, 'c+')) === false) {
|
||||||
|
throw new \Exception('unable to open pid file ' . $file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flock($lock, LOCK_EX | LOCK_NB)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
flock($lock, LOCK_UN);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kills a daemon process specified by its PID file.
|
||||||
|
*
|
||||||
|
* @param $file Daemon PID file
|
||||||
|
* @param bool $delete Flag to delete PID file after killing
|
||||||
|
* @return bool True on success, false otherwise
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function kill($file, $delete = false)
|
||||||
|
{
|
||||||
|
if (!extension_loaded('posix')) {
|
||||||
|
throw new \Exception('posix extension required');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_readable($file)) {
|
||||||
|
throw new \Exception('unreadable pid file ' . $file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (($lock = @fopen($file, 'c+')) === false) {
|
||||||
|
throw new \Exception('unable to open pid file ' . $file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (flock($lock, LOCK_EX | LOCK_NB)) {
|
||||||
|
flock($lock, LOCK_UN);
|
||||||
|
throw new \Exception('process not running');
|
||||||
|
}
|
||||||
|
|
||||||
|
$pid = fgets($lock);
|
||||||
|
|
||||||
|
if (posix_kill($pid, SIGTERM)) {
|
||||||
|
if ($delete) unlink($file);
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
201
app/lib/Yiinitializr/Composer/Callback.php
Normal file
@ -0,0 +1,201 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Yiinitialzr\Composer\Callback provides composer hooks
|
||||||
|
*
|
||||||
|
* Totally inspired by the ComposerCallback of Phundament3 and adapted for its use with Yiinitialzr
|
||||||
|
*
|
||||||
|
* This setup class triggers `./yiic migrate` at post-install and post-update.
|
||||||
|
* For a package the class triggers `./yiic <vendor/<packageName>-<action>` at post-package-install and
|
||||||
|
* post-package-update.
|
||||||
|
*
|
||||||
|
* You can also create new commands to be called within your boilerplate configuration.
|
||||||
|
*
|
||||||
|
* See composer manual (http://getcomposer.org/doc/articles/scripts.md)
|
||||||
|
*
|
||||||
|
* Usage example
|
||||||
|
*
|
||||||
|
* config.php
|
||||||
|
* 'params' => array(
|
||||||
|
* 'composer.callbacks' => array(
|
||||||
|
* 'post-update' => array('yiic', 'migrate'),
|
||||||
|
* 'post-install' => array('yiic', 'migrate'),
|
||||||
|
* 'yiisoft/yii-install' => array('yiic', 'webapp', realpath(dirname(__FILE__))),
|
||||||
|
* ),
|
||||||
|
* ))
|
||||||
|
*
|
||||||
|
* composer.json
|
||||||
|
* "scripts": {
|
||||||
|
* "pre-install-cmd": "Yiinitialzr\\Composer\\Callback::preInstall",
|
||||||
|
* "post-install-cmd": "Yiinitialzr\\Composer\\Callback::postInstall",
|
||||||
|
* "pre-update-cmd": "Yiinitialzr\\Composer\\Callback::preUpdate",
|
||||||
|
* "post-update-cmd": "Yiinitialzr\\Composer\\Callback::postUpdate",
|
||||||
|
* "post-package-install": [
|
||||||
|
* "Yiinitialzr\\Composer\\Callback::postPackageInstall"
|
||||||
|
* ],
|
||||||
|
* "post-package-update": [
|
||||||
|
* "Yiinitialzr\\Composer\\Callback::postPackageUpdate"
|
||||||
|
* ]
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://2amigos.us
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*
|
||||||
|
* Credits to Phundament... Tobias, thanks for introducing me the wonders of composer
|
||||||
|
*
|
||||||
|
* @author Tobias Munk <schmunk@usrbin.de>
|
||||||
|
* @link http://www.phundament.com/
|
||||||
|
* @copyright Copyright © 2012 diemeisterei GmbH
|
||||||
|
* @license http://www.phundament.com/license
|
||||||
|
*/
|
||||||
|
namespace Yiinitializr\Composer;
|
||||||
|
|
||||||
|
use Composer\Script\Event;
|
||||||
|
use Yiinitializr\Helpers\Initializer;
|
||||||
|
use Yiinitializr\Helpers\Config;
|
||||||
|
use Yiinitializr\Cli\Console;
|
||||||
|
|
||||||
|
class Callback
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Displays welcome message
|
||||||
|
* @static
|
||||||
|
* @param \Composer\Script\Event $event
|
||||||
|
*/
|
||||||
|
public static function preInstall(Event $event)
|
||||||
|
{
|
||||||
|
Console::output("\n%BYiinitialzr 1.0.1%n\n");
|
||||||
|
Console::output("* download packages specified in composer.json");
|
||||||
|
Console::output("* configures your runtime folders");
|
||||||
|
Console::output("* triggers composer callbacks (yiic commands)\n");
|
||||||
|
|
||||||
|
if (Console::confirm("Start Installation?"))
|
||||||
|
self::runHook('pre-install');
|
||||||
|
else
|
||||||
|
exit("\n%RInstallation aborted%n.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes a post-install callback
|
||||||
|
* @static
|
||||||
|
* @param \Composer\Script\Event $event
|
||||||
|
*/
|
||||||
|
public static function postInstall(Event $event)
|
||||||
|
{
|
||||||
|
self::runHook('post-install');
|
||||||
|
Console::output("\n%GInstallation completed!%n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays updating message
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @param \Composer\Script\Event $event
|
||||||
|
*/
|
||||||
|
public static function preUpdate(Event $event)
|
||||||
|
{
|
||||||
|
Console::output("Updating your application to the latest available packages...");
|
||||||
|
self::runHook('pre-update');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes post-update message
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @param \Composer\Script\Event $event
|
||||||
|
*/
|
||||||
|
public static function postUpdate(Event $event)
|
||||||
|
{
|
||||||
|
self::runHook('post-update');
|
||||||
|
Console::output("%GUpdate completed.%n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes ./yiic <vendor/<packageName>-<action>
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @param \Composer\Script\Event $event
|
||||||
|
*/
|
||||||
|
public static function postPackageInstall(Event $event)
|
||||||
|
{
|
||||||
|
$installedPackage = $event->getOperation()->getPackage();
|
||||||
|
$hookName = $installedPackage->getPrettyName() . '-install';
|
||||||
|
self::runHook($hookName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes ./yiic <vendor/<packageName>-<action>
|
||||||
|
*
|
||||||
|
* @static
|
||||||
|
* @param \Composer\Script\Event $event
|
||||||
|
*/
|
||||||
|
public static function postPackageUpdate(Event $event)
|
||||||
|
{
|
||||||
|
$installedPackage = $event->getOperation()->getTargetPackage();
|
||||||
|
$commandName = $installedPackage->getPrettyName() . '-update';
|
||||||
|
self::runHook($commandName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runs Yii command, if available (defined in config.php)
|
||||||
|
*/
|
||||||
|
private static function runHook($name)
|
||||||
|
{
|
||||||
|
$app = self::getYiiApplication();
|
||||||
|
if ($app === null) return;
|
||||||
|
|
||||||
|
if (isset($app->params['composer.callbacks'][$name]))
|
||||||
|
{
|
||||||
|
$args = $app->params['composer.callbacks'][$name];
|
||||||
|
$app->commandRunner->addCommands(\Yii::getPathOfAlias('system.cli.commands'));
|
||||||
|
$app->commandRunner->run($args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates console application, if Yii is available
|
||||||
|
*/
|
||||||
|
private static function getYiiApplication()
|
||||||
|
{
|
||||||
|
if (!is_file(Config::value('yii.path') . '/yii.php'))
|
||||||
|
{
|
||||||
|
// nothing yet installed, return
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
require_once(Config::value('yii.path') . '/yii.php');
|
||||||
|
|
||||||
|
spl_autoload_register(array('YiiBase', 'autoload'));
|
||||||
|
|
||||||
|
if (\Yii::app() === null)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (!Config::value('envlock'))
|
||||||
|
{
|
||||||
|
$env = Console::prompt('Please, enter your environment -ie. "dev | prod | stage": ', array('default' => 'dev'));
|
||||||
|
Initializer::buildEnvironmentFiles($env);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
Console::output("\n%Benv.lock%n file found. No environment request required.\n");
|
||||||
|
Console::output("Note: if you wish to re-do enviroment setting merging, please remove the %Benv.lock%n file " .
|
||||||
|
"from the Yiinitializr %Bconfig%n folder.");
|
||||||
|
}
|
||||||
|
|
||||||
|
Initializer::createRuntimeFolders();
|
||||||
|
|
||||||
|
Initializer::createRuntimeFolders('assets');
|
||||||
|
|
||||||
|
if (is_file(Config::value('yiinitializr.config.console')))
|
||||||
|
$app = \Yii::createConsoleApplication(Config::value('yiinitializr.config.console'));
|
||||||
|
else
|
||||||
|
throw new \Exception("'yiinitializr.config.console' setting not found");
|
||||||
|
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
$app = \Yii::app();
|
||||||
|
}
|
||||||
|
return $app;
|
||||||
|
}
|
||||||
|
}
|
416
app/lib/Yiinitializr/Helpers/ArrayX.php
Normal file
@ -0,0 +1,416 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* ArrayX class file.
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
namespace Yiinitializr\Helpers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ArrayX provides a set of useful functions
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <ramirez.cobos@gmail.com>
|
||||||
|
* @package Yiinitializr.helpers
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
class ArrayX
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Get an item from an array using "dot" notation.
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* // Get the $array['user']['name'] value from the array
|
||||||
|
* $name = ArrayX::get($array, 'user.name');
|
||||||
|
*
|
||||||
|
* // Return a default from if the specified item doesn't exist
|
||||||
|
* $name = ArrayX::get($array, 'user.name', 'Taylor');
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @param string $key
|
||||||
|
* @param mixed $default
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function get($array, $key, $default = null)
|
||||||
|
{
|
||||||
|
if (is_null($key)) return $array;
|
||||||
|
|
||||||
|
// To retrieve the array item using dot syntax, we'll iterate through
|
||||||
|
// each segment in the key and look for that value. If it exists, we
|
||||||
|
// will return it, otherwise we will set the depth of the array and
|
||||||
|
// look for the next segment.
|
||||||
|
foreach (explode('.', $key) as $segment)
|
||||||
|
{
|
||||||
|
if (!is_array($array) || !array_key_exists($segment, $array))
|
||||||
|
{
|
||||||
|
return self::value($default);
|
||||||
|
}
|
||||||
|
|
||||||
|
$array = $array[$segment];
|
||||||
|
}
|
||||||
|
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes an item from the given options and returns the value.
|
||||||
|
*
|
||||||
|
* If no key is found, then default value will be returned.
|
||||||
|
*
|
||||||
|
* @param $array
|
||||||
|
* @param $key
|
||||||
|
* @param null $default
|
||||||
|
* @return mixed|null
|
||||||
|
*/
|
||||||
|
public static function pop(&$array, $key, $default = null)
|
||||||
|
{
|
||||||
|
if (is_array($array))
|
||||||
|
{
|
||||||
|
$value = self::get($array, $key, $default);
|
||||||
|
unset($array[$key]);
|
||||||
|
return $value;
|
||||||
|
} else
|
||||||
|
return $default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set an array item to a given value using "dot" notation.
|
||||||
|
*
|
||||||
|
* If no key is given to the method, the entire array will be replaced.
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* // Set the $array['user']['name'] value on the array
|
||||||
|
* ArrayX::set($array, 'user.name', 'Taylor');
|
||||||
|
*
|
||||||
|
* // Set the $array['user']['name']['first'] value on the array
|
||||||
|
* ArrayX::set($array, 'user.name.first', 'Michael');
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @param string $key
|
||||||
|
* @param mixed $value
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function set(&$array, $key, $value)
|
||||||
|
{
|
||||||
|
if (is_null($key)) return $array = $value;
|
||||||
|
|
||||||
|
$keys = explode('.', $key);
|
||||||
|
|
||||||
|
// This loop allows us to dig down into the array to a dynamic depth by
|
||||||
|
// setting the array value for each level that we dig into. Once there
|
||||||
|
// is one key left, we can fall out of the loop and set the value as
|
||||||
|
// we should be at the proper depth.
|
||||||
|
while (count($keys) > 1)
|
||||||
|
{
|
||||||
|
$key = array_shift($keys);
|
||||||
|
|
||||||
|
// If the key doesn't exist at this depth, we will just create an
|
||||||
|
// empty array to hold the next value, allowing us to create the
|
||||||
|
// arrays to hold the final value.
|
||||||
|
if (!isset($array[$key]) || !is_array($array[$key]))
|
||||||
|
$array[$key] = array();
|
||||||
|
|
||||||
|
$array =& $array[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
$array[array_shift($keys)] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove an array item from a given array using "dot" notation.
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* // Remove the $array['user']['name'] item from the array
|
||||||
|
* ArrayX::forget($array, 'user.name');
|
||||||
|
*
|
||||||
|
* // Remove the $array['user']['name']['first'] item from the array
|
||||||
|
* ArrayX::forget($array, 'user.name.first');
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @param string $key
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public static function forget(&$array, $key)
|
||||||
|
{
|
||||||
|
$keys = explode('.', $key);
|
||||||
|
|
||||||
|
// This loop functions very similarly to the loop in the "set" method.
|
||||||
|
// We will iterate over the keys, setting the array value to the new
|
||||||
|
// depth at each iteration. Once there is only one key left, we will
|
||||||
|
// be at the proper depth in the array.
|
||||||
|
while (count($keys) > 1)
|
||||||
|
{
|
||||||
|
$key = array_shift($keys);
|
||||||
|
|
||||||
|
// Since this method is supposed to remove a value from the array,
|
||||||
|
// if a value higher up in the chain doesn't exist, there is no
|
||||||
|
// need to keep digging into the array, since it is impossible
|
||||||
|
// for the final value to even exist.
|
||||||
|
if (!isset($array[$key]) || !is_array($array[$key]))
|
||||||
|
return;
|
||||||
|
|
||||||
|
$array =& $array[$key];
|
||||||
|
}
|
||||||
|
|
||||||
|
unset($array[array_shift($keys)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the first element in an array which passes a given truth test.
|
||||||
|
*
|
||||||
|
* <code>
|
||||||
|
* // Return the first array element that equals "Taylor"
|
||||||
|
* $value = ArrayX::first($array, function($k, $v) {return $v == 'Taylor';});
|
||||||
|
*
|
||||||
|
* // Return a default value if no matching element is found
|
||||||
|
* $value = ArrayX::first($array, function($k, $v) {return $v == 'Taylor'}, 'Default');
|
||||||
|
* </code>
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @param Closure $callback
|
||||||
|
* @param mixed $default
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function first($array, $callback, $default = null)
|
||||||
|
{
|
||||||
|
foreach ($array as $key => $value)
|
||||||
|
{
|
||||||
|
if (call_user_func($callback, $key, $value)) return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
return value($default);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recursively remove slashes from array keys and values.
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function stripSlashes($array)
|
||||||
|
{
|
||||||
|
$result = array();
|
||||||
|
|
||||||
|
foreach ($array as $key => $value)
|
||||||
|
{
|
||||||
|
$key = stripslashes($key);
|
||||||
|
|
||||||
|
// If the value is an array, we will just recurse back into the
|
||||||
|
// function to keep stripping the slashes out of the array,
|
||||||
|
// otherwise we will set the stripped value.
|
||||||
|
if (is_array($value))
|
||||||
|
{
|
||||||
|
$result[$key] = array_strip_slashes($value);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
$result[$key] = stripslashes($value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Divide an array into two arrays. One with keys and the other with values.
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function divide($array)
|
||||||
|
{
|
||||||
|
return array(array_keys($array), array_values($array));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pluck an array of values from an array.
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @param string $key
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function pluck($array, $key)
|
||||||
|
{
|
||||||
|
return array_map(function ($v) use ($key)
|
||||||
|
{
|
||||||
|
return is_object($v) ? $v->$key : $v[$key];
|
||||||
|
|
||||||
|
}, $array);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a subset of the items from the given array.
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @param array $keys
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function only($array, $keys)
|
||||||
|
{
|
||||||
|
return array_intersect_key($array, array_flip((array)$keys));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all of the given array except for a specified array of items.
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @param array $keys
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function except($array, $keys)
|
||||||
|
{
|
||||||
|
return array_diff_key($array, array_flip((array)$keys));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the first element of an array.
|
||||||
|
*
|
||||||
|
* This is simply a convenient wrapper around the "reset" method.
|
||||||
|
*
|
||||||
|
* @param array $array
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function head($array)
|
||||||
|
{
|
||||||
|
return reset($array);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merges two or more arrays into one recursively.
|
||||||
|
* If each array has an element with the same string key value, the latter
|
||||||
|
* will overwrite the former (different from array_merge_recursive).
|
||||||
|
* Recursive merging will be conducted if both arrays have an element of array
|
||||||
|
* type and are having the same key.
|
||||||
|
* For integer-keyed elements, the elements from the latter array will
|
||||||
|
* be appended to the former array.
|
||||||
|
* @param array $a array to be merged to
|
||||||
|
* @param array $b array to be merged from. You can specifiy additional
|
||||||
|
* arrays via third argument, fourth argument etc.
|
||||||
|
* @return array the merged array (the original arrays are not changed.)
|
||||||
|
*/
|
||||||
|
public static function merge($a, $b)
|
||||||
|
{
|
||||||
|
$args = func_get_args();
|
||||||
|
$res = array_shift($args);
|
||||||
|
while (!empty($args))
|
||||||
|
{
|
||||||
|
$next = array_shift($args);
|
||||||
|
foreach ($next as $k => $v)
|
||||||
|
{
|
||||||
|
if (is_integer($k))
|
||||||
|
isset($res[$k]) ? $res[] = $v : $res[$k] = $v;
|
||||||
|
elseif (is_array($v) && isset($res[$k]) && is_array($res[$k]))
|
||||||
|
$res[$k] = self::merge($res[$k], $v); else
|
||||||
|
$res[$k] = $v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searches for a given value in an array of arrays, objects and scalar
|
||||||
|
* values. You can optionally specify a field of the nested arrays and
|
||||||
|
* objects to search in.
|
||||||
|
*
|
||||||
|
* Credits to Util.php
|
||||||
|
*
|
||||||
|
* @param array $array The array to search
|
||||||
|
* @param string $search The value to search for
|
||||||
|
* @param bool $field The field to search in, if not specified all fields will be searched
|
||||||
|
* @return bool|mixed|string False on failure or the array key on
|
||||||
|
* @link https://github.com/brandonwamboldt/utilphp/blob/master/util.php
|
||||||
|
*/
|
||||||
|
public static function deepSearch(array $array, $search, $field = FALSE)
|
||||||
|
{
|
||||||
|
// *grumbles* stupid PHP type system
|
||||||
|
$search = (string)$search;
|
||||||
|
|
||||||
|
foreach ($array as $key => $elem)
|
||||||
|
{
|
||||||
|
|
||||||
|
// *grumbles* stupid PHP type system
|
||||||
|
$key = (string)$key;
|
||||||
|
|
||||||
|
if ($field)
|
||||||
|
{
|
||||||
|
if (is_object($elem) && $elem->{$field} === $search)
|
||||||
|
{
|
||||||
|
return $key;
|
||||||
|
} else if (is_array($elem) && $elem[$field] === $search)
|
||||||
|
{
|
||||||
|
return $key;
|
||||||
|
} else if (is_scalar($elem) && $elem === $search)
|
||||||
|
{
|
||||||
|
return $key;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
if (is_object($elem))
|
||||||
|
{
|
||||||
|
$elem = (array)$elem;
|
||||||
|
|
||||||
|
if (in_array($search, $elem))
|
||||||
|
{
|
||||||
|
return $key;
|
||||||
|
}
|
||||||
|
} else if (is_array($elem) && in_array($search, $elem))
|
||||||
|
{
|
||||||
|
return array_search($search, $elem);
|
||||||
|
} else if (is_scalar($elem) && $elem === $search)
|
||||||
|
{
|
||||||
|
return $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array containing all the elements of arr1 after applying
|
||||||
|
* the callback function to each one.
|
||||||
|
*
|
||||||
|
* Credits to Util.php
|
||||||
|
*
|
||||||
|
* @param array $array an array to run through the callback function
|
||||||
|
* @param $callback Callback function to run for each element in each array
|
||||||
|
* @param bool $on_nonscalar whether or not to call the callback function on nonscalar values (objects, resr, etc)
|
||||||
|
* @return array
|
||||||
|
* @link https://github.com/brandonwamboldt/utilphp/blob/master/util.php
|
||||||
|
*/
|
||||||
|
public static function deepMap(array $array, $callback, $on_nonscalar = FALSE)
|
||||||
|
{
|
||||||
|
foreach ($array as $key => $value)
|
||||||
|
{
|
||||||
|
if (is_array($value))
|
||||||
|
{
|
||||||
|
$args = array($value, $callback, $on_nonscalar);
|
||||||
|
$array[$key] = call_user_func_array(array(__CLASS__, __FUNCTION__), $args);
|
||||||
|
} else if (is_scalar($value) || $on_nonscalar)
|
||||||
|
{
|
||||||
|
$array[$key] = call_user_func($callback, $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the value of the given item.
|
||||||
|
*
|
||||||
|
* If the given item is a Closure the result of the Closure will be returned.
|
||||||
|
*
|
||||||
|
* @param mixed $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function value($value)
|
||||||
|
{
|
||||||
|
return (is_callable($value) and !is_string($value)) ? call_user_func($value) : $value;
|
||||||
|
}
|
||||||
|
}
|
94
app/lib/Yiinitializr/Helpers/Config.php
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Config class file.
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
namespace Yiinitializr\Helpers;
|
||||||
|
|
||||||
|
use Yiinitializr\Helpers\ArrayX;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Config provides easy access to Yiinitializr configuration file
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @package Yiinitializr.helpers
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
class Config
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array the configuration settings
|
||||||
|
*/
|
||||||
|
private static $_settings;
|
||||||
|
|
||||||
|
private static $_config_dir_path;
|
||||||
|
private static $_envlock_file_path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a value of the array
|
||||||
|
* @param $value
|
||||||
|
* @return mixed | null if no key is found
|
||||||
|
*/
|
||||||
|
public static function value($value)
|
||||||
|
{
|
||||||
|
return ArrayX::get(self::settings(), $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reads the configuration settings from the file
|
||||||
|
* @return array|mixed
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function settings()
|
||||||
|
{
|
||||||
|
if (null === self::$_settings)
|
||||||
|
{
|
||||||
|
self::$_settings = file_exists(self::getConfigurationDirectoryPath() . '/settings.php')
|
||||||
|
? require_once(self::getConfigurationDirectoryPath() . '/settings.php')
|
||||||
|
: array();
|
||||||
|
self::$_settings['envlock'] = file_exists(self::getEnvironmentLockFilePath());
|
||||||
|
|
||||||
|
}
|
||||||
|
if (empty(self::$_settings))
|
||||||
|
throw new \Exception('Unable to find Yiinitialzr settings file!');
|
||||||
|
|
||||||
|
return self::$_settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $content
|
||||||
|
*/
|
||||||
|
public static function createEnvironmentLockFile($content = '')
|
||||||
|
{
|
||||||
|
umask(0);
|
||||||
|
file_put_contents(self::getEnvironmentLockFilePath(), $content);
|
||||||
|
@chmod(self::getEnvironmentLockFilePath(), 0644);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the configuration directory path
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getConfigurationDirectoryPath()
|
||||||
|
{
|
||||||
|
if (null === self::$_config_dir_path)
|
||||||
|
self::$_config_dir_path = dirname(__FILE__) . '/../config';
|
||||||
|
return self::$_config_dir_path;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the environment lock file path
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getEnvironmentLockFilePath()
|
||||||
|
{
|
||||||
|
if (null === self::$_envlock_file_path)
|
||||||
|
self::$_envlock_file_path = self::getConfigurationDirectoryPath() . '/env.lock';
|
||||||
|
return self::$_envlock_file_path;
|
||||||
|
}
|
||||||
|
}
|
251
app/lib/Yiinitializr/Helpers/Initializer.php
Normal file
@ -0,0 +1,251 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Initializer class file.
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
namespace Yiinitializr\Helpers;
|
||||||
|
|
||||||
|
use Yiinitializr\Helpers\Config;
|
||||||
|
use Yiinitializr\Helpers\ArrayX;
|
||||||
|
use Yiinitializr\Cli\Console;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializer provides a set of useful functions to initialize a Yii Application development.
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @package Yiinitializr.helpers
|
||||||
|
* @since 1.0
|
||||||
|
*/
|
||||||
|
class Initializer
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $root
|
||||||
|
* @param string $configName
|
||||||
|
* @param mixed $mergeWith
|
||||||
|
* @return mixed
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static function create($root, $configName = 'main', $mergeWith = array('common', 'env'))
|
||||||
|
{
|
||||||
|
if (($root = realpath($root)) === false)
|
||||||
|
throw new Exception('could not initialize framework.');
|
||||||
|
|
||||||
|
$config = self::config($configName, $mergeWith);
|
||||||
|
|
||||||
|
if (php_sapi_name() !== 'cli') // aren't we in console?
|
||||||
|
$app = \Yii::createWebApplication($config); // create web
|
||||||
|
else
|
||||||
|
{
|
||||||
|
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
|
||||||
|
$app = \Yii::createConsoleApplication($config);
|
||||||
|
$app->commandRunner->addCommands($root . '/cli/commands');
|
||||||
|
$env = @getenv('YII_CONSOLE_COMMANDS');
|
||||||
|
if (!empty($env))
|
||||||
|
$app->commandRunner->addCommands($env);
|
||||||
|
}
|
||||||
|
// return an app
|
||||||
|
return $app;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $configName config name to load (main, test, etc)
|
||||||
|
* @param null|string $mergeWith
|
||||||
|
* @return array
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function config($configName = 'main', $mergeWith = null)
|
||||||
|
{
|
||||||
|
|
||||||
|
$files = array($configName);
|
||||||
|
$directory = Config::value('yiinitializr.app.directories.config.' . $configName);
|
||||||
|
if (null === $directory)
|
||||||
|
throw new \Exception("Unable to find 'yiinitializr.app.directories.config.'{$configName} on the settings.");
|
||||||
|
|
||||||
|
if (null !== $mergeWith)
|
||||||
|
{
|
||||||
|
if (is_array($mergeWith))
|
||||||
|
{
|
||||||
|
foreach($mergeWith as $file)
|
||||||
|
$files[] = $file;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$files[] = $mergeWith;
|
||||||
|
}
|
||||||
|
|
||||||
|
// do we have any other configuration files to merge with?
|
||||||
|
$mergedSettingFiles = Config::value('yiinitializr.app.files.config.' . $configName);
|
||||||
|
if (null !== $mergedSettingFiles)
|
||||||
|
{
|
||||||
|
if (is_array($mergedSettingFiles))
|
||||||
|
{
|
||||||
|
foreach($mergedSettingFiles as $file)
|
||||||
|
$files[] = $file;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
$files[] = $mergedSettingFiles;
|
||||||
|
}
|
||||||
|
|
||||||
|
$config = self::build($directory, $files);
|
||||||
|
|
||||||
|
$params = isset($config['params'])
|
||||||
|
? $config['params']
|
||||||
|
: array();
|
||||||
|
|
||||||
|
self::setOptions($params);
|
||||||
|
|
||||||
|
return $config;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $directory
|
||||||
|
* @param $files array of configuration files to merge
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public static function build($directory, $files)
|
||||||
|
{
|
||||||
|
$result = array();
|
||||||
|
if (!is_array($files))
|
||||||
|
$files = array($files);
|
||||||
|
|
||||||
|
foreach ($files as $file)
|
||||||
|
{
|
||||||
|
$config = file_exists($file) && is_file($file)
|
||||||
|
? require($file)
|
||||||
|
: (is_string($file) && file_exists($directory . '/' . $file . '.php')
|
||||||
|
? require($directory . '/' . $file . '.php')
|
||||||
|
: array());
|
||||||
|
|
||||||
|
if (is_array($config))
|
||||||
|
$result = ArrayX::merge($result, $config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set php and yii options - some based on the loaded config params
|
||||||
|
* @param array $params The config params being used for the app
|
||||||
|
*/
|
||||||
|
protected static function setOptions(array $params)
|
||||||
|
{
|
||||||
|
// yii config
|
||||||
|
defined('YII_DEBUG') or define('YII_DEBUG', isset($params['yii.debug']) ? $params['yii.debug'] : false);
|
||||||
|
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL', isset($params['yii.traceLevel']) ? $params['yii.traceLevel'] : 0);
|
||||||
|
defined('YII_ENABLE_ERROR_HANDLER') or define('YII_ENABLE_ERROR_HANDLER', isset($params['yii.handleErrors']) ? $params['yii.handleErrors'] : true);
|
||||||
|
defined('YII_ENABLE_EXCEPTION_HANDLER') or define('YII_ENABLE_EXCEPTION_HANDLER', YII_ENABLE_ERROR_HANDLER);
|
||||||
|
|
||||||
|
// php config
|
||||||
|
error_reporting(-1);
|
||||||
|
if(isset($params['php.defaultCharset']))
|
||||||
|
ini_set('default_charset', $params['php.defaultCharset']);
|
||||||
|
if(isset($params['php.timezone']))
|
||||||
|
date_default_timezone_set($params['php.timezone']);
|
||||||
|
|
||||||
|
|
||||||
|
date_default_timezone_set($params['php.timezone']);
|
||||||
|
|
||||||
|
if(!class_exists('YiiBase'))
|
||||||
|
require(Config::value('yii.path').'/yii.php');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to build environment files
|
||||||
|
* @param $environment
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function buildEnvironmentFiles($environment = 'dev')
|
||||||
|
{
|
||||||
|
self::output("\n%gBuilding environment files.%n");
|
||||||
|
|
||||||
|
umask(0);
|
||||||
|
$directories = Config::value('yiinitializr.app.directories.config');
|
||||||
|
if (null === $directories)
|
||||||
|
throw new \Exception("Unable to find 'yiinitializr.app.directories.config' on the settings.");
|
||||||
|
|
||||||
|
if (!is_array($directories))
|
||||||
|
$directories = array($directories);
|
||||||
|
|
||||||
|
$environment = strlen($environment)
|
||||||
|
? $environment
|
||||||
|
: 'dev';
|
||||||
|
|
||||||
|
foreach ($directories as $directory)
|
||||||
|
{
|
||||||
|
if (file_exists($directory))
|
||||||
|
{
|
||||||
|
$environment_directory = $directory . '/env';
|
||||||
|
if (!file_exists($environment_directory))
|
||||||
|
{
|
||||||
|
mkdir($environment_directory);
|
||||||
|
|
||||||
|
self::output("Your environment directory has been created: %r{$environment_directory}%n.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
$environment_file = $environment_directory . '/' . $environment . '.php';
|
||||||
|
|
||||||
|
if (!file_exists($environment_file))
|
||||||
|
{
|
||||||
|
file_put_contents($environment_file, "<?php\n/**\n * {$environment}.php\n */\n\nreturn array(\n);");
|
||||||
|
@chmod($environment_file, 0644);
|
||||||
|
|
||||||
|
self::output("%gEnvironment configuration file has been created: %r{$environment_file}%n.\n");
|
||||||
|
}
|
||||||
|
if (!file_exists($directory . '/env.php'))
|
||||||
|
{
|
||||||
|
@copy($environment_file, $directory . '/env.php');
|
||||||
|
|
||||||
|
self::output("Your environment configuration file has been created on {$directory}.\n");
|
||||||
|
} else
|
||||||
|
self::output("'{$directory}/env.php'\n%pfile already exists. No action has been executed.%n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Config::createEnvironmentLockFile($environment);
|
||||||
|
self::output("%gEnvironment files creation process finished.%n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $name the name of the runtime folder,
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function createRuntimeFolders($name = 'runtime')
|
||||||
|
{
|
||||||
|
self::output("\n%gBuilding runtime '{$name}' folders.%n");
|
||||||
|
umask(0);
|
||||||
|
$directories = Config::value('yiinitializr.app.directories.' . $name);
|
||||||
|
|
||||||
|
if (null === $directories)
|
||||||
|
throw new \Exception("Unable to find 'yiinitializr.app.directories.{$name}' on the settings.");
|
||||||
|
|
||||||
|
if (!is_array($directories))
|
||||||
|
$directories = array($directories);
|
||||||
|
|
||||||
|
foreach ($directories as $directory)
|
||||||
|
{
|
||||||
|
$runtime = $directory . '/' . $name;
|
||||||
|
if (!file_exists($runtime))
|
||||||
|
{
|
||||||
|
@mkdir($runtime, 02777);
|
||||||
|
self::output("Your {$name} folder has been created on {$directory}.");
|
||||||
|
} else
|
||||||
|
self::output("'{$name}' %pfolder already exists. No action has been executed.%n");
|
||||||
|
}
|
||||||
|
self::output("%gRuntime '{$name}' folders creation process finished.%n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Outputs text only to console
|
||||||
|
* @param $message
|
||||||
|
*/
|
||||||
|
protected static function output($message)
|
||||||
|
{
|
||||||
|
if (php_sapi_name() === 'cli')
|
||||||
|
Console::output($message);
|
||||||
|
}
|
||||||
|
}
|
31
app/lib/Yiinitializr/LICENSE
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
The Yiinitializr is free software. It is released under the terms of
|
||||||
|
the following BSD License.
|
||||||
|
|
||||||
|
Copyright (c) 2013 by 2amigOS! Consultation Group LLC (http://www.2amigos.us)
|
||||||
|
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 2amigOS! Consultation Group 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.
|
128
app/lib/Yiinitializr/README.md
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
Yiinitializr
|
||||||
|
============
|
||||||
|
|
||||||
|
Library that will help boost your application installation with ease and also to run Yii applications from its
|
||||||
|
bootstrap files on a much cleaner way that the framework currently proposes. For example:
|
||||||
|
|
||||||
|
```
|
||||||
|
// yii has been installed via composer
|
||||||
|
require('./../app/lib/vendor/yiisoft/yii/framework/yii.php');
|
||||||
|
|
||||||
|
// set alias for namespacing
|
||||||
|
// make sure the path is correct as it can also be installed via composer (see above)
|
||||||
|
Yii::setPathOfAlias('Yiinitializr', './../app/lib/Yiinitializr');
|
||||||
|
|
||||||
|
// use its initializr
|
||||||
|
use Yiinitializr\Helpers\Initializer;
|
||||||
|
|
||||||
|
// tell the Initializer class providing the root, the application config name,
|
||||||
|
// and the files to merge -very useful when working with advanced boilerplates
|
||||||
|
// and different environments
|
||||||
|
Initializer::create('./../app', 'main', array('common', 'env', 'local'))->run();
|
||||||
|
```
|
||||||
|
|
||||||
|
INSTALLATION
|
||||||
|
------------
|
||||||
|
If you are going to use Yiinitializr to make use of `Yiinitializr\Helpers\Initializr` you can easily install it via
|
||||||
|
`composer`, but if you are going to use it within your application structure in order to configure your application
|
||||||
|
according to your custom needs, then the recommended use is that you [download](https://github.com/2amigos/yiinitializr/archive/master.zip)
|
||||||
|
its source files and place them on a top level folder.
|
||||||
|
|
||||||
|
###Configuration Settings
|
||||||
|
As with Yii, you need to go through a bit of configuration settings if you wish to handle your project structure setup
|
||||||
|
with `composer`. Don't worry, is not going to be too hard, the following is an example configuration file:
|
||||||
|
|
||||||
|
```
|
||||||
|
\\ where am i?
|
||||||
|
$dirname = dirname(__FILE__);
|
||||||
|
\\ where is the application folder?
|
||||||
|
$app = $dirname . '/../../..';
|
||||||
|
\\ where is the root?
|
||||||
|
$root = $app . '/..';
|
||||||
|
|
||||||
|
return array(
|
||||||
|
// yii configurations
|
||||||
|
'yii' => array(
|
||||||
|
// where is the path of the yii framework?
|
||||||
|
// On this example we have installed yii with composer
|
||||||
|
// and as it is used after composer installation, we
|
||||||
|
// can safely point to the vendor folder.
|
||||||
|
'path' => $app . '/lib/vendor/yiisoft/yii/framework'
|
||||||
|
),
|
||||||
|
// yiinitializr specific settings
|
||||||
|
'yiinitializr' => array(
|
||||||
|
// config folders
|
||||||
|
'config' => array(
|
||||||
|
// we just need the console settings
|
||||||
|
// On this example, and due that I used environments
|
||||||
|
// i created a custom console.php app for
|
||||||
|
// Yiinitializr\Composer\Callbak class (see below example)
|
||||||
|
'console' => $dirname . '/console.php'
|
||||||
|
),
|
||||||
|
// application structure settings
|
||||||
|
'app' => array(
|
||||||
|
// where is the root?
|
||||||
|
'root' => $root,
|
||||||
|
// directories setup
|
||||||
|
'directories' => array(
|
||||||
|
// where are the different configuration files settings?
|
||||||
|
'config' => array(
|
||||||
|
// 'key' is the configuration name (see above init example)
|
||||||
|
'main' => $app . '/config',
|
||||||
|
'console' => $app . '/config',
|
||||||
|
'test' => $app . '/config'
|
||||||
|
),
|
||||||
|
// where are my runtime folders?
|
||||||
|
'runtime' => array(
|
||||||
|
// heads up! only the folder location as "/config" will be
|
||||||
|
// appended
|
||||||
|
$app
|
||||||
|
),
|
||||||
|
'assets' => array(
|
||||||
|
// where to write the "assets folders"?
|
||||||
|
$root . '/www'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
Here is an example of a custom `console.php` settings file when working with environments. As you saw on the previous
|
||||||
|
code, this file on the example was located on the same `Yiinitializr\config` folder:
|
||||||
|
|
||||||
|
```
|
||||||
|
require_once dirname(__FILE__) . '/../Helpers/Initializer.php';
|
||||||
|
require_once dirname(__FILE__) . '/../Helpers/ArrayX.php';
|
||||||
|
|
||||||
|
return Yiinitializr\Helpers\ArrayX::merge(
|
||||||
|
Yiinitializr\Helpers\Initializer::config('console', array('common', 'env', 'local')),
|
||||||
|
array(
|
||||||
|
'params' => array(
|
||||||
|
// here is where the composer magic start.
|
||||||
|
// Thanks! mr Tobias a.k.a Phundament man!
|
||||||
|
'composer.callbacks' => array(
|
||||||
|
'post-update' => array('yiic', 'migrate'),
|
||||||
|
'post-install' => array('yiic', 'migrate'),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
REQUIREMENTS
|
||||||
|
------------
|
||||||
|
It works in conjunction with `composer` to install the boilerplate but
|
||||||
|
The minimum requirements by Yiinitializr that you have installed `composer` or have a `composer.phar` on your application
|
||||||
|
root in order to run and ** PHP 5.3+**
|
||||||
|
|
||||||
|
|
||||||
|
###Resources
|
||||||
|
- [Composer](http://getcomposer.org)
|
||||||
|
- [Phundament](http://phundament.com/)
|
||||||
|
- [Download latest ZIPball](https://github.com/2amigos/yiinitializr/archive/master.zip)
|
||||||
|
- [2amigOS Packagist Profile](https://packagist.org/packages/2amigos/)
|
||||||
|
|
||||||
|
> [![2amigOS!](http://www.gravatar.com/avatar/55363394d72945ff7ed312556ec041e0.png)](http://www.2amigos.us)
|
||||||
|
<i>web development has never been so fun</i>
|
||||||
|
[www.2amigos.us](http://www.2amigos.us)
|
30
app/lib/Yiinitializr/composer.json
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"name": "2amigos/yiinitializr",
|
||||||
|
"description": "Yii Web Programming Framework Application initializing library.",
|
||||||
|
"keywords": ["yii", "framework", "application", "boilerplate"],
|
||||||
|
"homepage": "http://yiinitializr.2amigos.us/",
|
||||||
|
"type": "library",
|
||||||
|
"license": "BSD-3-Clause",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Antonio Ramirez",
|
||||||
|
"email": "amigo.cobos@gmail.com",
|
||||||
|
"homepage": "http://www.2amigos.us/",
|
||||||
|
"role": "Founder and development"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Matt Tabin",
|
||||||
|
"email": "amigo.tabin@gmail.com",
|
||||||
|
"homepage": "http://www.2amigos.us/",
|
||||||
|
"role": "Founder and development"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/2amigos/yiinitializr/issues?state=open",
|
||||||
|
"wiki": "https://github.com/2amigos/yiinitializr",
|
||||||
|
"source": "https://github.com/2amigos/yiinitializr"
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.0"
|
||||||
|
}
|
||||||
|
}
|
30
app/lib/Yiinitializr/config/console.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Custom console.php config file.
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* Include required classes
|
||||||
|
*/
|
||||||
|
require_once dirname(__FILE__) . '/../Helpers/Initializer.php';
|
||||||
|
require_once dirname(__FILE__) . '/../Helpers/ArrayX.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the configuration array appending composer callback methods
|
||||||
|
*/
|
||||||
|
return Yiinitializr\Helpers\ArrayX::merge(
|
||||||
|
Yiinitializr\Helpers\Initializer::config('console', array('common', 'env', 'local')),
|
||||||
|
array(
|
||||||
|
'params' => array(
|
||||||
|
'composer.callbacks' => array(
|
||||||
|
'post-update' => array('yiic', 'migrate'),
|
||||||
|
'post-install' => array('yiic', 'migrate'),
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
40
app/lib/Yiinitializr/config/settings.php
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Yiinitializr configuration file.
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
$dirname = dirname(__FILE__);
|
||||||
|
$app = $dirname . '/../../..';
|
||||||
|
$root = $app . '/..';
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'yii' => array(
|
||||||
|
'path' => $app . '/lib/vendor/yiisoft/yii/framework'
|
||||||
|
),
|
||||||
|
'yiinitializr' => array(
|
||||||
|
'config' => array(
|
||||||
|
'console' => $dirname . '/console.php'
|
||||||
|
),
|
||||||
|
'app' => array(
|
||||||
|
'root' => $root,
|
||||||
|
'directories' => array(
|
||||||
|
'config' => array(
|
||||||
|
'main' => $app . '/config',
|
||||||
|
'console' => $app . '/config',
|
||||||
|
'test' => $app . '/config'
|
||||||
|
),
|
||||||
|
'runtime' => array(
|
||||||
|
$app
|
||||||
|
),
|
||||||
|
'assets' => array(
|
||||||
|
$root . '/www'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
0
app/messages/.gitkeep
Normal file
0
app/models/.gitkeep
Normal file
0
app/modules/.gitkeep
Normal file
106
app/views/layouts/main.php
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* main.php layout file
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!--[if lt IE 7]>
|
||||||
|
<html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
|
||||||
|
<!--[if IE 7]>
|
||||||
|
<html class="no-js lt-ie9 lt-ie8"> <![endif]-->
|
||||||
|
<!--[if IE 8]>
|
||||||
|
<html class="no-js lt-ie9"> <![endif]-->
|
||||||
|
<!--[if gt IE 8]><!-->
|
||||||
|
<html class="no-js"> <!--<![endif]-->
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<title></title>
|
||||||
|
<meta name="description" content="">
|
||||||
|
<meta name="viewport" content="width=device-width">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="css/bootstrap.min.css">
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
padding-top: 60px;
|
||||||
|
padding-bottom: 40px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="css/main.css">
|
||||||
|
|
||||||
|
<script src="js/libs/modernizr-2.6.2-respond-1.1.0.min.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<!--[if lt IE 7]>
|
||||||
|
<p class="chromeframe">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade
|
||||||
|
your browser</a> or <a href="http://www.google.com/chromeframe/?redirect=true">activate Google Chrome Frame</a> to
|
||||||
|
improve your experience.</p>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<!-- This code is taken from http://twitter.github.com/bootstrap/examples/hero.html -->
|
||||||
|
|
||||||
|
<div class="navbar navbar-inverse navbar-fixed-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<div class="container">
|
||||||
|
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</a>
|
||||||
|
<a class="brand" href="#">Project name</a>
|
||||||
|
|
||||||
|
<div class="nav-collapse collapse">
|
||||||
|
<ul class="nav">
|
||||||
|
<li class="active"><a href="#">Home</a></li>
|
||||||
|
<li><a href="#about">About</a></li>
|
||||||
|
<li><a href="#contact">Contact</a></li>
|
||||||
|
<li class="dropdown">
|
||||||
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
<li><a href="#">Action</a></li>
|
||||||
|
<li><a href="#">Another action</a></li>
|
||||||
|
<li><a href="#">Something else here</a></li>
|
||||||
|
<li class="divider"></li>
|
||||||
|
<li class="nav-header">Nav header</li>
|
||||||
|
<li><a href="#">Separated link</a></li>
|
||||||
|
<li><a href="#">One more separated link</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<form class="navbar-form pull-right">
|
||||||
|
<input class="span2" type="text" placeholder="Email">
|
||||||
|
<input class="span2" type="password" placeholder="Password">
|
||||||
|
<button type="submit" class="btn">Sign in</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<!--/.nav-collapse -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php echo $content; ?>
|
||||||
|
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
|
||||||
|
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.9.1.min.js"><\/script>')</script>
|
||||||
|
<script src="js/libs/bootstrap.min.js"></script>
|
||||||
|
<script src="js/plugins.js"></script>
|
||||||
|
<script src="js/main.js"></script><script>
|
||||||
|
var _gaq = [
|
||||||
|
['_setAccount', 'UA-XXXXX-X'],
|
||||||
|
['_trackPageview']
|
||||||
|
];
|
||||||
|
(function (d, t) {
|
||||||
|
var g = d.createElement(t), s = d.getElementsByTagName(t)[0];
|
||||||
|
g.src = ('https:' == location.protocol ? '//ssl' : '//www') + '.google-analytics.com/ga.js';
|
||||||
|
s.parentNode.insertBefore(g, s)
|
||||||
|
}(document, 'script'));
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
50
app/views/site/index.php
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<div class="container">
|
||||||
|
|
||||||
|
<!-- Main hero unit for a primary marketing message or call to action -->
|
||||||
|
<div class="hero-unit">
|
||||||
|
<h1>Hello, world!</h1>
|
||||||
|
|
||||||
|
<p>This is a template for a simple marketing or informational website. It includes a large callout called the
|
||||||
|
hero unit and three supporting pieces of content. Use it as a starting point to create something more
|
||||||
|
unique.</p>
|
||||||
|
|
||||||
|
<p><a class="btn btn-primary btn-large">Learn more »</a></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Example row of columns -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="span4">
|
||||||
|
<h2>Heading</h2>
|
||||||
|
|
||||||
|
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris
|
||||||
|
condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis
|
||||||
|
euismod. Donec sed odio dui. </p>
|
||||||
|
|
||||||
|
<p><a class="btn" href="#">View details »</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="span4">
|
||||||
|
<h2>Heading</h2>
|
||||||
|
|
||||||
|
<p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris
|
||||||
|
condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis
|
||||||
|
euismod. Donec sed odio dui. </p>
|
||||||
|
|
||||||
|
<p><a class="btn" href="#">View details »</a></p>
|
||||||
|
</div>
|
||||||
|
<div class="span4">
|
||||||
|
<h2>Heading</h2>
|
||||||
|
|
||||||
|
<p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula
|
||||||
|
porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut
|
||||||
|
fermentum massa justo sit amet risus.</p>
|
||||||
|
|
||||||
|
<p><a class="btn" href="#">View details »</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<p>© Company 2012</p>
|
||||||
|
</footer>
|
||||||
|
</div>
|
0
app/widgets/.gitkeep
Normal file
58
composer.json
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
"name":"yiinitializr/basic",
|
||||||
|
"description":"description_text",
|
||||||
|
"keywords":[
|
||||||
|
"yii",
|
||||||
|
"application",
|
||||||
|
"web",
|
||||||
|
"boilerplate",
|
||||||
|
"template"
|
||||||
|
],
|
||||||
|
"homepage":"http://2amigos.us",
|
||||||
|
"type":"yii-application",
|
||||||
|
"license":"BSD-3-Clause",
|
||||||
|
"minimum-stability":"dev",
|
||||||
|
"config":{
|
||||||
|
"vendor-dir":"app/lib/vendor"
|
||||||
|
},
|
||||||
|
"authors":[
|
||||||
|
{
|
||||||
|
"name":"Antonio Ramirez Cobos",
|
||||||
|
"email":"amigo.cobos@gmail.com",
|
||||||
|
"homepage":"http://www.ramirezcobos.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name":"Matt Tabin",
|
||||||
|
"email":"amigo.tabin@gmail.com",
|
||||||
|
"homepage":"http://2amigos.us"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"repositories":[
|
||||||
|
{
|
||||||
|
"type":"composer",
|
||||||
|
"url":"http://packages.phundament.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require":{
|
||||||
|
"yiisoft/yii":"1.1.14",
|
||||||
|
"2amigos/yiiwheels":"1.0.3",
|
||||||
|
"crisu83/yiistrap":"dev-master"
|
||||||
|
},
|
||||||
|
"autoload":{
|
||||||
|
"psr-0":{
|
||||||
|
"Yiinitializr":"app/lib/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"scripts":{
|
||||||
|
"pre-install-cmd":"Yiinitializr\\Composer\\Callback::preInstall",
|
||||||
|
"post-install-cmd":"Yiinitializr\\Composer\\Callback::postInstall",
|
||||||
|
"pre-update-cmd":"Yiinitializr\\Composer\\Callback::preUpdate",
|
||||||
|
"post-update-cmd":"Yiinitializr\\Composer\\Callback::postUpdate",
|
||||||
|
"post-package-install":[
|
||||||
|
"Yiinitializr\\Composer\\Callback::postPackageInstall"
|
||||||
|
],
|
||||||
|
"post-package-update":[
|
||||||
|
"Yiinitializr\\Composer\\Callback::postPackageUpdate"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
BIN
composer.phar
Normal file
550
www/.htaccess
Normal file
@ -0,0 +1,550 @@
|
|||||||
|
# Apache configuration file
|
||||||
|
# httpd.apache.org/docs/2.2/mod/quickreference.html
|
||||||
|
|
||||||
|
# Note .htaccess files are an overhead, this logic should be in your Apache
|
||||||
|
# config if possible: httpd.apache.org/docs/2.2/howto/htaccess.html
|
||||||
|
|
||||||
|
# Techniques in here adapted from all over, including:
|
||||||
|
# Kroc Camen: camendesign.com/.htaccess
|
||||||
|
# perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/
|
||||||
|
# Sample .htaccess file of CMS MODx: modxcms.com
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Better website experience for IE users
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Force the latest IE version, in various cases when it may fall back to IE7 mode
|
||||||
|
# github.com/rails/rails/commit/123eb25#commitcomment-118920
|
||||||
|
# Use ChromeFrame if it's installed for a better experience for the poor IE folk
|
||||||
|
|
||||||
|
<IfModule mod_headers.c>
|
||||||
|
Header set X-UA-Compatible "IE=Edge,chrome=1"
|
||||||
|
# mod_headers can't match by content-type, but we don't want to send this header on *everything*...
|
||||||
|
<FilesMatch "\.(js|css|gif|png|jpe?g|pdf|xml|oga|ogg|m4a|ogv|mp4|m4v|webm|svg|svgz|eot|ttf|otf|woff|ico|webp|appcache|manifest|htc|crx|oex|xpi|safariextz|vcf)$" >
|
||||||
|
Header unset X-UA-Compatible
|
||||||
|
</FilesMatch>
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Cross-domain AJAX requests
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Serve cross-domain Ajax requests, disabled by default.
|
||||||
|
# enable-cors.org
|
||||||
|
# code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
|
||||||
|
|
||||||
|
# <IfModule mod_headers.c>
|
||||||
|
# Header set Access-Control-Allow-Origin "*"
|
||||||
|
# </IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# CORS-enabled images (@crossorigin)
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Send CORS headers if browsers request them; enabled by default for images.
|
||||||
|
# developer.mozilla.org/en/CORS_Enabled_Image
|
||||||
|
# blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html
|
||||||
|
# hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/
|
||||||
|
# wiki.mozilla.org/Security/Reviews/crossoriginAttribute
|
||||||
|
|
||||||
|
<IfModule mod_setenvif.c>
|
||||||
|
<IfModule mod_headers.c>
|
||||||
|
# mod_headers, y u no match by Content-Type?!
|
||||||
|
<FilesMatch "\.(gif|png|jpe?g|svg|svgz|ico|webp)$">
|
||||||
|
SetEnvIf Origin ":" IS_CORS
|
||||||
|
Header set Access-Control-Allow-Origin "*" env=IS_CORS
|
||||||
|
</FilesMatch>
|
||||||
|
</IfModule>
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Webfont access
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Allow access from all domains for webfonts.
|
||||||
|
# Alternatively you could only whitelist your
|
||||||
|
# subdomains like "subdomain.example.com".
|
||||||
|
|
||||||
|
<IfModule mod_headers.c>
|
||||||
|
<FilesMatch "\.(ttf|ttc|otf|eot|woff|font.css)$">
|
||||||
|
Header set Access-Control-Allow-Origin "*"
|
||||||
|
</FilesMatch>
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Proper MIME type for all files
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# JavaScript
|
||||||
|
# Normalize to standard type (it's sniffed in IE anyways)
|
||||||
|
# tools.ietf.org/html/rfc4329#section-7.2
|
||||||
|
AddType application/javascript js jsonp
|
||||||
|
AddType application/json json
|
||||||
|
|
||||||
|
# Audio
|
||||||
|
AddType audio/ogg oga ogg
|
||||||
|
AddType audio/mp4 m4a f4a f4b
|
||||||
|
|
||||||
|
# Video
|
||||||
|
AddType video/ogg ogv
|
||||||
|
AddType video/mp4 mp4 m4v f4v f4p
|
||||||
|
AddType video/webm webm
|
||||||
|
AddType video/x-flv flv
|
||||||
|
|
||||||
|
# SVG
|
||||||
|
# Required for svg webfonts on iPad
|
||||||
|
# twitter.com/FontSquirrel/status/14855840545
|
||||||
|
AddType image/svg+xml svg svgz
|
||||||
|
AddEncoding gzip svgz
|
||||||
|
|
||||||
|
# Webfonts
|
||||||
|
AddType application/vnd.ms-fontobject eot
|
||||||
|
AddType application/x-font-ttf ttf ttc
|
||||||
|
AddType font/opentype otf
|
||||||
|
AddType application/x-font-woff woff
|
||||||
|
|
||||||
|
# Assorted types
|
||||||
|
AddType image/x-icon ico
|
||||||
|
AddType image/webp webp
|
||||||
|
AddType text/cache-manifest appcache manifest
|
||||||
|
AddType text/x-component htc
|
||||||
|
AddType application/xml rss atom xml rdf
|
||||||
|
AddType application/x-chrome-extension crx
|
||||||
|
AddType application/x-opera-extension oex
|
||||||
|
AddType application/x-xpinstall xpi
|
||||||
|
AddType application/octet-stream safariextz
|
||||||
|
AddType application/x-web-app-manifest+json webapp
|
||||||
|
AddType text/x-vcard vcf
|
||||||
|
AddType application/x-shockwave-flash swf
|
||||||
|
AddType text/vtt vtt
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Allow concatenation from within specific js and css files
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# e.g. Inside of script.combined.js you could have
|
||||||
|
# <!--#include file="libs/jquery-1.5.0.min.js" -->
|
||||||
|
# <!--#include file="plugins/jquery.idletimer.js" -->
|
||||||
|
# and they would be included into this single file.
|
||||||
|
|
||||||
|
# This is not in use in the boilerplate as it stands. You may
|
||||||
|
# choose to use this technique if you do not have a build process.
|
||||||
|
|
||||||
|
#<FilesMatch "\.combined\.js$">
|
||||||
|
# Options +Includes
|
||||||
|
# AddOutputFilterByType INCLUDES application/javascript application/json
|
||||||
|
# SetOutputFilter INCLUDES
|
||||||
|
#</FilesMatch>
|
||||||
|
|
||||||
|
#<FilesMatch "\.combined\.css$">
|
||||||
|
# Options +Includes
|
||||||
|
# AddOutputFilterByType INCLUDES text/css
|
||||||
|
# SetOutputFilter INCLUDES
|
||||||
|
#</FilesMatch>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Gzip compression
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
<IfModule mod_deflate.c>
|
||||||
|
|
||||||
|
# Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
|
||||||
|
<IfModule mod_setenvif.c>
|
||||||
|
<IfModule mod_headers.c>
|
||||||
|
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
|
||||||
|
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
|
||||||
|
</IfModule>
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Compress all output labeled with one of the following MIME-types
|
||||||
|
<IfModule mod_filter.c>
|
||||||
|
AddOutputFilterByType DEFLATE application/atom+xml \
|
||||||
|
application/javascript \
|
||||||
|
application/json \
|
||||||
|
application/rss+xml \
|
||||||
|
application/vnd.ms-fontobject \
|
||||||
|
application/x-font-ttf \
|
||||||
|
application/xhtml+xml \
|
||||||
|
application/xml \
|
||||||
|
font/opentype \
|
||||||
|
image/svg+xml \
|
||||||
|
image/x-icon \
|
||||||
|
text/css \
|
||||||
|
text/html \
|
||||||
|
text/plain \
|
||||||
|
text/x-component \
|
||||||
|
text/xml
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Expires headers (for better cache control)
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# These are pretty far-future expires headers.
|
||||||
|
# They assume you control versioning with filename-based cache busting
|
||||||
|
# Additionally, consider that outdated proxies may miscache
|
||||||
|
# www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
|
||||||
|
|
||||||
|
# If you don't use filenames to version, lower the CSS and JS to something like
|
||||||
|
# "access plus 1 week".
|
||||||
|
|
||||||
|
<IfModule mod_expires.c>
|
||||||
|
ExpiresActive on
|
||||||
|
|
||||||
|
# Perhaps better to whitelist expires rules? Perhaps.
|
||||||
|
ExpiresDefault "access plus 1 month"
|
||||||
|
|
||||||
|
# cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
|
||||||
|
ExpiresByType text/cache-manifest "access plus 0 seconds"
|
||||||
|
|
||||||
|
# Your document html
|
||||||
|
ExpiresByType text/html "access plus 0 seconds"
|
||||||
|
|
||||||
|
# Data
|
||||||
|
ExpiresByType text/xml "access plus 0 seconds"
|
||||||
|
ExpiresByType application/xml "access plus 0 seconds"
|
||||||
|
ExpiresByType application/json "access plus 0 seconds"
|
||||||
|
|
||||||
|
# Feed
|
||||||
|
ExpiresByType application/rss+xml "access plus 1 hour"
|
||||||
|
ExpiresByType application/atom+xml "access plus 1 hour"
|
||||||
|
|
||||||
|
# Favicon (cannot be renamed)
|
||||||
|
ExpiresByType image/x-icon "access plus 1 week"
|
||||||
|
|
||||||
|
# Media: images, video, audio
|
||||||
|
ExpiresByType image/gif "access plus 1 month"
|
||||||
|
ExpiresByType image/png "access plus 1 month"
|
||||||
|
ExpiresByType image/jpeg "access plus 1 month"
|
||||||
|
ExpiresByType video/ogg "access plus 1 month"
|
||||||
|
ExpiresByType audio/ogg "access plus 1 month"
|
||||||
|
ExpiresByType video/mp4 "access plus 1 month"
|
||||||
|
ExpiresByType video/webm "access plus 1 month"
|
||||||
|
|
||||||
|
# HTC files (css3pie)
|
||||||
|
ExpiresByType text/x-component "access plus 1 month"
|
||||||
|
|
||||||
|
# Webfonts
|
||||||
|
ExpiresByType application/x-font-ttf "access plus 1 month"
|
||||||
|
ExpiresByType font/opentype "access plus 1 month"
|
||||||
|
ExpiresByType application/x-font-woff "access plus 1 month"
|
||||||
|
ExpiresByType image/svg+xml "access plus 1 month"
|
||||||
|
ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
|
||||||
|
|
||||||
|
# CSS and JavaScript
|
||||||
|
ExpiresByType text/css "access plus 1 year"
|
||||||
|
ExpiresByType application/javascript "access plus 1 year"
|
||||||
|
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Prevent mobile network providers from modifying your site
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# The following header prevents modification of your code over 3G on some
|
||||||
|
# European providers.
|
||||||
|
# This is the official 'bypass' suggested by O2 in the UK.
|
||||||
|
|
||||||
|
# <IfModule mod_headers.c>
|
||||||
|
# Header set Cache-Control "no-transform"
|
||||||
|
# </IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# ETag removal
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# FileETag None is not enough for every server.
|
||||||
|
<IfModule mod_headers.c>
|
||||||
|
Header unset ETag
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Since we're sending far-future expires, we don't need ETags for
|
||||||
|
# static content.
|
||||||
|
# developer.yahoo.com/performance/rules.html#etags
|
||||||
|
FileETag None
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Stop screen flicker in IE on CSS rollovers
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# The following directives stop screen flicker in IE on CSS rollovers - in
|
||||||
|
# combination with the "ExpiresByType" rules for images (see above).
|
||||||
|
|
||||||
|
# BrowserMatch "MSIE" brokenvary=1
|
||||||
|
# BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
|
||||||
|
# BrowserMatch "Opera" !brokenvary
|
||||||
|
# SetEnvIf brokenvary 1 force-no-vary
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Set Keep-Alive Header
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Keep-Alive allows the server to send multiple requests through one
|
||||||
|
# TCP-connection. Be aware of possible disadvantages of this setting. Turn on
|
||||||
|
# if you serve a lot of static content.
|
||||||
|
|
||||||
|
# <IfModule mod_headers.c>
|
||||||
|
# Header set Connection Keep-Alive
|
||||||
|
# </IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Cookie setting from iframes
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Allow cookies to be set from iframes (for IE only)
|
||||||
|
# If needed, specify a path or regex in the Location directive.
|
||||||
|
|
||||||
|
# <IfModule mod_headers.c>
|
||||||
|
# Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""
|
||||||
|
# </IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Start rewrite engine
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Turning on the rewrite engine is necessary for the following rules and
|
||||||
|
# features. FollowSymLinks must be enabled for this to work.
|
||||||
|
|
||||||
|
# Some cloud hosting services require RewriteBase to be set: goo.gl/HOcPN
|
||||||
|
# If using the h5bp in a subdirectory, use `RewriteBase /foo` instead where
|
||||||
|
# 'foo' is your directory.
|
||||||
|
|
||||||
|
# If your web host doesn't allow the FollowSymlinks option, you may need to
|
||||||
|
# comment it out and use `Options +SymLinksIfOwnerMatch`, but be aware of the
|
||||||
|
# performance impact: http://goo.gl/Mluzd
|
||||||
|
|
||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
Options +FollowSymlinks
|
||||||
|
# Options +SymLinksIfOwnerMatch
|
||||||
|
RewriteEngine On
|
||||||
|
# RewriteBase /
|
||||||
|
# If you are in a sub folder of your web root you
|
||||||
|
# might have to enable something like this:
|
||||||
|
#
|
||||||
|
# RewriteBase /~antonio/app/frontend/www
|
||||||
|
|
||||||
|
# Yii rewrite
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
|
||||||
|
RewriteRule . index.php
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Suppress or force the "www." at the beginning of URLs
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# The same content should never be available under two different URLs -
|
||||||
|
# especially not with and without "www." at the beginning, since this can cause
|
||||||
|
# SEO problems (duplicate content). That's why you should choose one of the
|
||||||
|
# alternatives and redirect the other one.
|
||||||
|
|
||||||
|
# By default option 1 (no "www.") is activated.
|
||||||
|
# no-www.org/faq.php?q=class_b
|
||||||
|
|
||||||
|
# If you'd prefer to use option 2, just comment out all option 1 lines
|
||||||
|
# and uncomment option 2.
|
||||||
|
|
||||||
|
# IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME!
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Option 1:
|
||||||
|
# Rewrite "www.example.com -> example.com".
|
||||||
|
|
||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
RewriteCond %{HTTPS} !=on
|
||||||
|
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
|
||||||
|
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Option 2:
|
||||||
|
# Rewrite "example.com -> www.example.com".
|
||||||
|
# Be aware that the following rule might not be a good idea if you use "real"
|
||||||
|
# subdomains for certain parts of your website.
|
||||||
|
|
||||||
|
# <IfModule mod_rewrite.c>
|
||||||
|
# RewriteCond %{HTTPS} !=on
|
||||||
|
# RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
|
||||||
|
# RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
|
||||||
|
# </IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Built-in filename-based cache busting
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# If you're not using the build script to manage your filename version revving,
|
||||||
|
# you might want to consider enabling this, which will route requests for
|
||||||
|
# `/css/style.20110203.css` to `/css/style.css`.
|
||||||
|
|
||||||
|
# To understand why this is important and a better idea than all.css?v1231,
|
||||||
|
# please refer to the bundled documentation about `.htaccess`.
|
||||||
|
|
||||||
|
# <IfModule mod_rewrite.c>
|
||||||
|
# RewriteCond %{REQUEST_FILENAME} !-f
|
||||||
|
# RewriteCond %{REQUEST_FILENAME} !-d
|
||||||
|
# RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L]
|
||||||
|
# </IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Prevent SSL cert warnings
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
|
||||||
|
# https://www.example.com when your cert only allows https://secure.example.com
|
||||||
|
|
||||||
|
# <IfModule mod_rewrite.c>
|
||||||
|
# RewriteCond %{SERVER_PORT} !^443
|
||||||
|
# RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L]
|
||||||
|
# </IfModule>
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Prevent 404 errors for non-existing redirected folders
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# without -MultiViews, Apache will give a 404 for a rewrite if a folder of the
|
||||||
|
# same name does not exist.
|
||||||
|
# webmasterworld.com/apache/3808792.htm
|
||||||
|
|
||||||
|
Options -MultiViews
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# Custom 404 page
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# You can add custom pages to handle 500 or 403 pretty easily, if you like.
|
||||||
|
# If you are hosting your site in subdirectory, adjust this accordingly
|
||||||
|
# e.g. ErrorDocument 404 /subdir/404.html
|
||||||
|
# ErrorDocument 404 /404.html
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# UTF-8 encoding
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Use UTF-8 encoding for anything served text/plain or text/html
|
||||||
|
AddDefaultCharset utf-8
|
||||||
|
|
||||||
|
# Force UTF-8 for a number of file formats
|
||||||
|
AddCharset utf-8 .atom .css .js .json .rss .vtt .xml
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# A little more security
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# To avoid displaying the exact version number of Apache being used, add the
|
||||||
|
# following to httpd.conf (it will not work in .htaccess):
|
||||||
|
# ServerTokens Prod
|
||||||
|
|
||||||
|
# "-Indexes" will have Apache block users from browsing folders without a
|
||||||
|
# default document Usually you should leave this activated, because you
|
||||||
|
# shouldn't allow everybody to surf through every folder on your server (which
|
||||||
|
# includes rather private places like CMS system folders).
|
||||||
|
<IfModule mod_autoindex.c>
|
||||||
|
Options -Indexes
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Block access to "hidden" directories or files whose names begin with a
|
||||||
|
# period. This includes directories used by version control systems such as
|
||||||
|
# Subversion or Git.
|
||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
RewriteCond %{SCRIPT_FILENAME} -d [OR]
|
||||||
|
RewriteCond %{SCRIPT_FILENAME} -f
|
||||||
|
RewriteRule "(^|/)\." - [F]
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# Block access to backup and source files. These files may be left by some
|
||||||
|
# text/html editors and pose a great security danger, when anyone can access
|
||||||
|
# them.
|
||||||
|
<FilesMatch "(\.(bak|config|sql|fla|psd|ini|log|sh|inc|swp|dist)|~)$">
|
||||||
|
Order allow,deny
|
||||||
|
Deny from all
|
||||||
|
Satisfy All
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
# If your server is not already configured as such, the following directive
|
||||||
|
# should be uncommented in order to set PHP's register_globals option to OFF.
|
||||||
|
# This closes a major security hole that is abused by most XSS (cross-site
|
||||||
|
# scripting) attacks. For more information: http://php.net/register_globals
|
||||||
|
#
|
||||||
|
# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS:
|
||||||
|
#
|
||||||
|
# Your server does not allow PHP directives to be set via .htaccess. In that
|
||||||
|
# case you must make this change in your php.ini file instead. If you are
|
||||||
|
# using a commercial web host, contact the administrators for assistance in
|
||||||
|
# doing this. Not all servers allow local php.ini files, and they should
|
||||||
|
# include all PHP configurations (not just this one), or you will effectively
|
||||||
|
# reset everything to PHP defaults. Consult www.php.net for more detailed
|
||||||
|
# information about setting PHP directives.
|
||||||
|
|
||||||
|
# php_flag register_globals Off
|
||||||
|
|
||||||
|
# Rename session cookie to something else, than PHPSESSID
|
||||||
|
# php_value session.name sid
|
||||||
|
|
||||||
|
# Disable magic quotes (This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.)
|
||||||
|
# php_flag magic_quotes_gpc Off
|
||||||
|
|
||||||
|
# Do not show you are using PHP
|
||||||
|
# Note: Move this line to php.ini since it won't work in .htaccess
|
||||||
|
# php_flag expose_php Off
|
||||||
|
|
||||||
|
# Level of log detail - log all errors
|
||||||
|
# php_value error_reporting -1
|
||||||
|
|
||||||
|
# Write errors to log file
|
||||||
|
# php_flag log_errors On
|
||||||
|
|
||||||
|
# Do not display errors in browser (production - Off, development - On)
|
||||||
|
# php_flag display_errors Off
|
||||||
|
|
||||||
|
# Do not display startup errors (production - Off, development - On)
|
||||||
|
# php_flag display_startup_errors Off
|
||||||
|
|
||||||
|
# Format errors in plain text
|
||||||
|
# Note: Leave this setting 'On' for xdebug's var_dump() output
|
||||||
|
# php_flag html_errors Off
|
||||||
|
|
||||||
|
# Show multiple occurrence of error
|
||||||
|
# php_flag ignore_repeated_errors Off
|
||||||
|
|
||||||
|
# Show same errors from different sources
|
||||||
|
# php_flag ignore_repeated_source Off
|
||||||
|
|
||||||
|
# Size limit for error messages
|
||||||
|
# php_value log_errors_max_len 1024
|
||||||
|
|
||||||
|
# Don't precede error with string (doesn't accept empty string, use whitespace if you need)
|
||||||
|
# php_value error_prepend_string " "
|
||||||
|
|
||||||
|
# Don't prepend to error (doesn't accept empty string, use whitespace if you need)
|
||||||
|
# php_value error_append_string " "
|
||||||
|
|
||||||
|
# Increase cookie security
|
||||||
|
<IfModule php5_module>
|
||||||
|
php_value session.cookie_httponly true
|
||||||
|
</IfModule>
|
BIN
www/apple-touch-icon-114x114-precomposed.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
www/apple-touch-icon-57x57-precomposed.png
Normal file
After Width: | Height: | Size: 640 B |
BIN
www/apple-touch-icon-72x72-precomposed.png
Normal file
After Width: | Height: | Size: 747 B |
BIN
www/apple-touch-icon-precomposed.png
Normal file
After Width: | Height: | Size: 640 B |
BIN
www/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 640 B |
1109
www/css/bootstrap-responsive.css
vendored
Normal file
9
www/css/bootstrap-responsive.min.css
vendored
Normal file
6158
www/css/bootstrap.css
vendored
Normal file
9
www/css/bootstrap.min.css
vendored
Normal file
BIN
www/css/fonts/Chunkfive-webfont.eot
Normal file
121
www/css/fonts/Chunkfive-webfont.svg
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata>
|
||||||
|
This is a custom SVG webfont generated by Font Squirrel.
|
||||||
|
Copyright : Generated in 2009 by FontLab Studio Copyright info pending
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="webfont90E2uSjN" horiz-adv-x="790" >
|
||||||
|
<font-face units-per-em="2048" ascent="1536" descent="-512" />
|
||||||
|
<missing-glyph horiz-adv-x="512" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="512" />
|
||||||
|
<glyph unicode="	" horiz-adv-x="512" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="512" />
|
||||||
|
<glyph unicode="!" horiz-adv-x="630" d="M57 209q0 84 64.5 150.5t169.5 66.5q106 0 175 -63.5t69 -153.5q0 -88 -68 -149.5t-176 -61.5q-98 0 -166 64.5t-68 146.5zM66 1042v390h489v-390l-109 -516h-270z" />
|
||||||
|
<glyph unicode="'" horiz-adv-x="559" d="M74 1436h405l-73 -613h-256z" />
|
||||||
|
<glyph unicode="(" horiz-adv-x="794" d="M51 639q0 170 50.5 341t128 303t154.5 227.5t148 158.5l211 -217q-59 -74 -94 -122t-96 -156.5t-93 -243.5t-32 -291q0 -162 29.5 -301t85 -245.5t97.5 -168t103 -133.5l-211 -219q-193 174 -337 459.5t-144 607.5z" />
|
||||||
|
<glyph unicode=")" horiz-adv-x="794" d="M51 -211q61 72 103.5 133.5t97.5 168t85 245.5t30 301q0 156 -32 291t-93.5 243.5t-96 156.5t-94.5 122l211 217q72 -63 148.5 -158.5t154.5 -227.5t128 -303t50 -341q0 -322 -144 -607.5t-337 -459.5z" />
|
||||||
|
<glyph unicode="," horiz-adv-x="557" d="M-12 -264q115 145 162 294.5t32 370.5l373 -98q6 -195 -82 -376t-250 -324z" />
|
||||||
|
<glyph unicode="-" d="M96 352v273h594v-273h-594z" />
|
||||||
|
<glyph unicode="." horiz-adv-x="528" d="M31 213q0 86 63.5 159.5t168 73.5t170 -73.5t65.5 -159.5q0 -96 -62.5 -158.5t-173.5 -62.5q-98 0 -164.5 67.5t-66.5 153.5z" />
|
||||||
|
<glyph unicode="0" horiz-adv-x="1226" d="M31 723q0 326 160.5 530.5t416.5 204.5q293 0 440.5 -199.5t147.5 -549.5q0 -344 -150.5 -539t-427.5 -195q-266 0 -426.5 190.5t-160.5 557.5zM436 723q0 -186 57.5 -308t124.5 -122q72 0 119 115.5t47 300.5q0 182 -51 300.5t-127 118.5q-61 2 -115.5 -113.5 t-54.5 -291.5z" />
|
||||||
|
<glyph unicode="1" horiz-adv-x="1015" d="M51 1163l42 21l44 21l39 21q29 15 43 26l41 31q27 19 47 40l48 48q28 28 55 61h364v-1160h191v-272h-820v272h205v760l-205 -96z" />
|
||||||
|
<glyph unicode="2" horiz-adv-x="1208" d="M51 0v297q82 135 140.5 201.5t158.5 146.5q47 43 150.5 111.5t158 121t54.5 109.5q0 135 -172 135q-51 0 -103.5 -29.5t-77 -53t-71.5 -72.5l-221 233q219 254 532 254q209 0 348 -123t139 -325q0 -164 -70.5 -251t-256.5 -208q-86 -55 -180.5 -136t-126.5 -139h360v164 h344v-436h-1106z" />
|
||||||
|
<glyph unicode="3" horiz-adv-x="1105" d="M31 205l209 217q133 -133 270 -133q86 0 135 41t49 116q0 150 -170 150h-153v244h149q76 0 125 36.5t49 104.5q0 78 -54 120t-126 42q-123 0 -240 -123l-198 240q66 72 188.5 133t249.5 61q248 0 385 -117.5t137 -316.5q0 -143 -151 -260q190 -137 190 -336 q0 -213 -170 -332t-397 -119q-141 0 -278.5 70t-198.5 162z" />
|
||||||
|
<glyph unicode="4" horiz-adv-x="1196" d="M20 403v293l590 736h424v-807h109v-222h-109v-133h111v-270h-664v270h129v133h-590zM307 625h303v379z" />
|
||||||
|
<glyph unicode="5" horiz-adv-x="1181" d="M31 221l223 232q147 -152 287 -152q102 0 163.5 57.5t61.5 147.5q0 82 -60.5 140.5t-148.5 58.5q-102 0 -192 -95l-263 117l125 705h811v-306h-551l-34 -198q76 49 221 49q193 0 335 -130t142 -355q0 -125 -53.5 -225.5t-141.5 -163t-195.5 -96.5t-221.5 -34 q-150 0 -296 75t-212 173z" />
|
||||||
|
<glyph unicode="6" horiz-adv-x="1189" d="M33 623q-2 96 8 191t47 213t99.5 207t178 152.5t269.5 67.5q109 4 253 -42t230 -120l-139 -266q-178 104 -299 104q-111 -2 -181.5 -80.5t-86.5 -197.5q41 41 115.5 71.5t152.5 32.5q201 8 340 -121.5t139 -334.5q0 -213 -143.5 -361.5t-386.5 -156.5q-256 -8 -422 165 t-174 476zM416 545q0 -88 50 -165t140 -77q78 0 133.5 51.5t53.5 124.5q-2 72 -42 128.5t-124 54.5q-121 -6 -211 -117z" />
|
||||||
|
<glyph unicode="7" horiz-adv-x="1159" d="M31 1026v406h1108v-273l-551 -1159h-443l549 1159h-336v-133h-327z" />
|
||||||
|
<glyph unicode="8" horiz-adv-x="1144" d="M31 420q0 102 61.5 206.5t159.5 153.5q-74 45 -114 120t-40 153q0 176 131 289.5t357 113.5q231 0 360 -113.5t129 -289.5q0 -96 -49 -170t-123 -109q100 -49 155.5 -147.5t55.5 -206.5q0 -193 -148.5 -320t-392.5 -127q-250 0 -396 126t-146 321zM385 432 q0 -72 56.5 -120t133.5 -48q80 0 133.5 44t55.5 124q0 94 -81 136t-179 46q-49 -29 -84 -79t-35 -103zM434 1069q0 -51 39 -84t79 -41t85 -10q98 47 98 135q0 55 -46 92t-107 37q-59 0 -103.5 -39t-44.5 -90z" />
|
||||||
|
<glyph unicode="9" horiz-adv-x="1202" d="M31 936q0 213 143 361.5t387 156.5q258 8 429 -166t179 -475q2 -106 -8 -205.5t-50 -215.5t-104.5 -202t-181 -145t-270.5 -63q-109 -4 -253 42t-230 119l139 267q178 -104 299 -105q117 4 184.5 76t65.5 203q-98 -98 -250 -105q-201 -8 -340 122t-139 335zM397 956 q2 -72 42 -128t124 -54q102 4 193 117q0 94 -42 168t-130 74q-78 0 -133.5 -51.5t-53.5 -125.5z" />
|
||||||
|
<glyph unicode=":" horiz-adv-x="520" d="M31 201q0 86 62.5 157.5t164.5 71.5q104 0 167.5 -72.5t63.5 -156.5q0 -92 -64.5 -154.5t-166.5 -62.5q-96 0 -161.5 66.5t-65.5 150.5zM31 823q0 86 62.5 158t164.5 72q104 0 167.5 -73t63.5 -157q0 -94 -62 -155.5t-169 -61.5q-92 0 -159.5 67.5t-67.5 149.5z" />
|
||||||
|
<glyph unicode=";" horiz-adv-x="618" d="M10 -264l236 -133q162 143 250 324.5t82 375.5l-373 98q14 -221 -33 -370.5t-162 -294.5zM121 788q0 86 63.5 160t168 74t170 -74t65.5 -160q0 -94 -63.5 -157.5t-172.5 -63.5q-94 0 -162.5 68.5t-68.5 152.5z" />
|
||||||
|
<glyph unicode="=" horiz-adv-x="1028" d="M90 352v273h844v-273h-844zM90 805v272h844v-272h-844z" />
|
||||||
|
<glyph unicode="?" horiz-adv-x="1064" d="M4 1200q227 264 533 264q213 0 350 -109.5t137 -310.5q0 -74 -34 -136t-82 -104t-95 -77t-81 -69.5t-34 -67.5v-113h-379l-2 164q0 63 51.5 126.5t112 105.5t111.5 90.5t51 85.5q0 96 -151 96q-61 0 -134 -49t-133 -119zM264 209q0 84 64.5 150.5t169.5 66.5 q106 0 174.5 -63.5t68.5 -153.5q0 -88 -67.5 -149.5t-175.5 -61.5q-98 0 -166 64.5t-68 146.5z" />
|
||||||
|
<glyph unicode="@" horiz-adv-x="1705" />
|
||||||
|
<glyph unicode="A" horiz-adv-x="1685" d="M31 0v268h139l276 899h-84v265h787l362 -1164h144v-268h-821v268h194l-43 140h-420l-43 -140h160v-268h-651zM641 653h268l-135 443z" />
|
||||||
|
<glyph unicode="B" horiz-adv-x="1406" d="M51 0v266h119v901h-119v265h764q502 0 502 -351q0 -131 -44 -201.5t-157 -115.5q121 -33 195.5 -120t74.5 -228q0 -217 -131 -316.5t-426 -99.5h-778zM594 266h164q68 0 117 48t49 128t-45 130.5t-127 50.5h-158v-357zM594 854h125q78 0 108.5 40t30.5 118 q0 70 -38 109.5t-97 39.5h-129v-307z" />
|
||||||
|
<glyph unicode="C" horiz-adv-x="1404" d="M31 702q0 168 59.5 314.5t151.5 240t200.5 146.5t210.5 53q211 0 316 -139l47 115h321v-582h-366q-4 109 -59.5 183.5t-157.5 74.5q-109 0 -176.5 -117t-67.5 -289q0 -162 80 -273.5t219 -111.5q31 0 62.5 8.5t58 20.5t53.5 29.5t46.5 34t40 36t30.5 31.5l22 27l13 14 l239 -262q-262 -289 -620 -289q-328 0 -525.5 197.5t-197.5 537.5z" />
|
||||||
|
<glyph unicode="D" horiz-adv-x="1474" d="M51 0v272h127v889h-127v271h625q362 0 570 -197t208 -500q0 -350 -205 -542.5t-581 -192.5h-617zM598 272h78q156 2 231.5 130t75.5 333q0 180 -77 303t-230 123h-78v-889z" />
|
||||||
|
<glyph unicode="E" horiz-adv-x="1337" d="M51 0v272h129v889h-129v271h1235v-453h-354v182h-328v-282h389v-273h-389v-334h328v191h354v-463h-1235z" />
|
||||||
|
<glyph unicode="F" horiz-adv-x="1306" d="M51 0v272h127v889h-127v271h1225v-453h-363v182h-309v-356h389v-273h-389v-260h209v-272h-762z" />
|
||||||
|
<glyph unicode="G" horiz-adv-x="1589" d="M31 702q0 324 189.5 539t438.5 215q70 0 130.5 -11t98.5 -25.5t70.5 -37t48 -38t32 -36t20.5 -24.5l43 148h305v-605h-367q-4 121 -71.5 190.5t-161.5 69.5q-121 0 -201 -113.5t-80 -271.5q0 -162 76 -269t205 -107q139 0 197 100v86h-125v219h680v-219h-82v-512h-410 l-63 129q-37 -61 -127.5 -104t-202.5 -43q-274 0 -458.5 197t-184.5 523z" />
|
||||||
|
<glyph unicode="H" horiz-adv-x="1572" d="M51 0v270h113v891h-113v271h664v-271h-127v-309h389v309h-121v271h666v-271h-119v-891h119v-270h-666v270h121v310h-389v-310h127v-270h-664z" />
|
||||||
|
<glyph unicode="I" horiz-adv-x="782" d="M51 0v272h129v889h-129v271h680v-271h-127v-889h127v-272h-680z" />
|
||||||
|
<glyph unicode="J" horiz-adv-x="948" d="M41 -125q41 -18 92 -18q170 0 170 295v1011h-176v269h770v-269h-170v-1011q0 -283 -135 -426.5t-442 -143.5q-51 0 -107 23z" />
|
||||||
|
<glyph unicode="K" horiz-adv-x="1669" d="M51 0v266h111v901h-111v265h645v-265h-110v-333l381 333h-148v265h682v-265h-119l-297 -256l414 -645h119v-266h-799v266h139l-221 348l-151 -129v-219h110v-266h-645z" />
|
||||||
|
<glyph unicode="L" horiz-adv-x="1249" d="M51 0v272h113v889h-113v271h647v-271h-108v-889h264v260h344v-532h-1147z" />
|
||||||
|
<glyph unicode="M" horiz-adv-x="2064" d="M51 0v264h111v903h-109v265h776l207 -766l197 766h780v-265h-112v-901h112v-266h-647v266h117l-2 684v121h-8q-35 -190 -60 -274l-215 -797h-428l-229 817q-35 119 -43 254h-9v-807h117v-264h-555z" />
|
||||||
|
<glyph unicode="N" horiz-adv-x="1671" d="M51 0v264h121v903h-119v265h588l504 -752l-2 487h-139v265h616v-265h-135v-1167h-441l-522 780v-516h158v-264h-629z" />
|
||||||
|
<glyph unicode="O" horiz-adv-x="1515" d="M31 723q0 332 200.5 539.5t518.5 207.5q367 0 551 -202.5t184 -558.5q0 -350 -188.5 -548t-532.5 -198q-334 0 -533.5 193.5t-199.5 566.5zM537 723q0 -199 63.5 -318.5t163.5 -119.5q96 0 152.5 115.5t56.5 308.5q0 199 -56.5 322.5t-168.5 123.5h-4q-92 0 -149 -120 q-58 -122 -58 -312z" />
|
||||||
|
<glyph unicode="P" horiz-adv-x="1310" d="M51 0v270h115v893h-115v269h664q172 0 287.5 -34t174 -99.5t81 -137t22.5 -168.5q0 -195 -153.5 -300t-385.5 -105h-155v-318h125v-270h-660zM586 809h92q90 0 145.5 45t55.5 125q0 90 -50.5 138t-140.5 48h-102v-356z" />
|
||||||
|
<glyph unicode="Q" horiz-adv-x="1546" d="M31 725q0 315 190.5 514t497.5 199q350 0 525 -193.5t175 -533.5q0 -326 -170 -512q35 -133 90 -133q41 0 41 92v59h136v-104q0 -143 -80 -235.5t-228 -92.5q-119 0 -199.5 64.5t-117.5 162.5q-74 -12 -160 -12q-319 0 -509.5 186.5t-190.5 538.5zM481 725q0 -66 8 -113 q94 98 242 99q119 0 230 -80q4 49 4 80q0 182 -69 305t-179 123h-3q-92 0 -162 -118q-71 -120 -71 -296zM594 375q61 -68 137 -68q57 0 109 45q-12 86 -36 129t-73 43q-84 1 -137 -149z" />
|
||||||
|
<glyph unicode="R" horiz-adv-x="1509" d="M51 0v270h115v893h-115v269h666q172 0 287.5 -32t175 -93.5t82 -131t22.5 -165.5q0 -117 -83 -198t-214 -99q109 -16 188.5 -99.5t79.5 -191.5q0 -139 50 -139q47 0 47 65v68h137v-113q0 -143 -70.5 -235.5t-228.5 -92.5q-199 0 -298 99.5t-99 281.5q0 143 -36 187.5 t-169 44.5v-318h125v-270h-662zM588 817h92q90 0 143.5 43t53.5 123q0 182 -187 182h-102v-348z" />
|
||||||
|
<glyph unicode="S" horiz-adv-x="1454" d="M51 0v516h381q0 -61 26.5 -103t71.5 -62.5t82 -29t78 -10.5q174 0 174 103q0 37 -58 65.5t-145.5 48t-189.5 57.5t-189 87t-145.5 141t-58.5 215q0 109 47 196t122 139t156.5 78.5t161.5 26.5q317 0 428 -208l21 172h352v-514h-371q0 111 -74.5 174t-187.5 63 q-51 0 -96 -29.5t-45 -78.5q0 -57 84 -100.5t202.5 -81.5t237.5 -87t203 -145t84 -230q0 -115 -49 -201.5t-131 -136t-174.5 -73t-188.5 -23.5q-268 0 -428 189l-22 -158h-359z" />
|
||||||
|
<glyph unicode="T" horiz-adv-x="1435" d="M31 899v533h1374v-533h-301v262h-172v-889h170v-272h-762v272h168v889h-176v-262h-301z" />
|
||||||
|
<glyph unicode="U" horiz-adv-x="1509" d="M31 1165v267h651v-265h-111v-442q0 -233 49.5 -316t155.5 -83q70 0 111 25.5t68.5 116.5t27.5 259v434h-111v271h607v-265h-111v-497q0 -705 -588 -705q-635 18 -635 694v506h-114z" />
|
||||||
|
<glyph unicode="V" horiz-adv-x="1583" d="M-20 1165v267h755l-2 -267h-110l174 -458q59 -180 63 -248h10q6 92 74 260l186 446h-106l-2 267h582v-267h-101l-491 -1165h-377l-543 1165h-112z" />
|
||||||
|
<glyph unicode="W" horiz-adv-x="2078" d="M-20 1165v267h675v-267h-118l53 -299q29 -123 65 -403h11q4 47 100 508l102 461h426l129 -566q39 -182 62 -403h10q16 178 61 391l70 311h-113v267h586v-267h-112l-306 -1165h-485l-123 487q-27 98 -51 254h-8q-14 -102 -49 -249l-125 -492h-475l-271 1165h-114z" />
|
||||||
|
<glyph unicode="X" horiz-adv-x="1710" d="M51 0v264h178l301 391l-370 510h-107v267h811v-267h-119l201 -272l209 272h-180v267h680v-267h-174l-310 -395l369 -504h119v-266h-817v266h116l-155 209l-43 57l-211 -268h182v-264h-680z" />
|
||||||
|
<glyph unicode="Y" horiz-adv-x="1370" d="M-20 1169v263h700v-263h-107l119 -217q6 -16 33 -81.5t31 -84.5h8q4 18 76 177l112 206h-112v263h551v-263h-111l-379 -665v-238h115v-266h-656v266h117v242l-397 661h-100z" />
|
||||||
|
<glyph unicode="Z" horiz-adv-x="1462" d="M51 0v266l746 895l-387 -2l2 -266h-349v539h1344l4 -273l-749 -889h378l2 262h363v-532h-1354z" />
|
||||||
|
<glyph unicode="[" horiz-adv-x="1474" d="M59 0v270h115v893h-115v271h664q170 0 286.5 -39t175 -108.5t81 -145.5t22.5 -174q0 -215 -221 -338l229 -363h119v-266h-393l-340 549h-88v-279h125v-270h-660zM594 809h92q90 0 145.5 45t55.5 125q0 90 -50.5 138t-140.5 48h-102v-356z" />
|
||||||
|
<glyph unicode="\" horiz-adv-x="1337" />
|
||||||
|
<glyph unicode="]" horiz-adv-x="1325" d="M61 0v266h84v1002h-84v268h474v-926l237 142h-147v272h573v-272h-158l-129 -76l285 -408h84v-268h-332l-344 489l-72 -49v-172h146v-268h-617z" />
|
||||||
|
<glyph unicode="a" horiz-adv-x="1228" d="M31 303q0 170 124 273.5t302 103.5q55 0 103 -16.5t69.5 -31t29.5 -24.5v72q0 115 -194 115q-135 0 -305 -95l-86 238q242 145 446 145q100 0 191.5 -20.5t176.5 -65.5t136 -132t51 -203v-400h123v-262h-438l-49 92q-51 -70 -129 -100.5t-148 -30.5q-162 0 -282.5 88 t-120.5 254zM420 324q0 -43 30.5 -70t77.5 -27q43 0 79 20.5t52 47.5v78q-35 59 -120 59q-119 1 -119 -108z" />
|
||||||
|
<glyph unicode="b" horiz-adv-x="1343" d="M63 0v266h87v1002h-87v268h496v-592q33 39 113 67.5t155 28.5q223 0 350 -158q122 -154 122 -364q0 -7 -1 -14q-4 -240 -131 -383.5t-342 -143.5q-74 0 -128 14.5t-80.5 31t-61.5 47.5l-31 -70h-461zM555 489q0 -102 44 -173.5t103 -71.5q66 0 106 69.5t40 186.5 q0 98 -41 175t-107 77q-63 0 -107 -73q-39 -64 -39 -162q0 -14 1 -28z" />
|
||||||
|
<glyph unicode="c" horiz-adv-x="1087" d="M2 518q0 256 145.5 390t358.5 134q158 0 256 -116l35 98h241v-463h-301q-4 88 -34.5 151.5t-94.5 63.5q-86 0 -133 -76.5t-47 -185.5q0 -102 57.5 -171t153.5 -71h5q136 0 243 117l180 -209q-80 -88 -213 -148.5t-289 -60.5q-240 0 -401.5 143.5t-161.5 403.5z" />
|
||||||
|
<glyph unicode="d" horiz-adv-x="1298" d="M20 522q0 231 139.5 376.5t336.5 145.5q135 0 258 -77v303h-95v266h510v-1270h99v-266h-480l-34 76q-102 -94 -258 -94q-211 0 -343.5 159.5t-132.5 380.5zM461 522q0 -98 41 -175t106 -77q63 0 108 73q39 64 38 162v27q0 102 -44 174t-104 72q-66 0 -105.5 -69.5 t-39.5 -186.5z" />
|
||||||
|
<glyph unicode="e" horiz-adv-x="1110" d="M10 518q0 246 156 390.5t395 144.5q180 0 312.5 -83t177.5 -214q23 -66 27 -156q1 -14 1 -27q0 -78 -24 -163h-645q6 -31 14 -51.5t29.5 -52.5t64.5 -48t103 -16q168 0 286 98l172 -199q-207 -178 -528 -178q-215 0 -378 141.5t-163 413.5zM416 612h309q-2 74 -32.5 119 t-119.5 45q-82 0 -117.5 -53.5t-39.5 -110.5z" />
|
||||||
|
<glyph unicode="f" d="M51 758v266h84v174q0 43 6 84t31 97.5t66 96.5t119.5 68.5t183.5 28.5q80 0 170 -15.5t131 -35.5l-123 -236q-45 20 -113 21q-66 0 -65 -109v-174h186v-266h-186v-490h123v-268h-611v268h82v490h-84z" />
|
||||||
|
<glyph unicode="g" horiz-adv-x="1310" d="M20 518q0 244 133.5 385t381.5 141q63 0 123.5 -25.5t93.5 -57.5l41 63h487v-268h-123v-613q0 -262 -161.5 -411.5t-477.5 -151.5q-152 2 -272.5 56.5t-196.5 123.5l109 228q49 -43 151.5 -87t204.5 -44q125 0 181.5 57t56.5 135v70q-88 -113 -240 -113 q-246 0 -369 148.5t-123 363.5zM457 522q0 -98 41 -175t106 -77q63 0 108 73q39 64 38 162v27q0 102 -44 174t-104 72q-66 0 -105.5 -69.5t-39.5 -186.5z" />
|
||||||
|
<glyph unicode="h" horiz-adv-x="1353" d="M51 0v268h86v1002h-86v266h496v-639q25 41 124 102.5t197 61.5q113 0 189 -38t110.5 -108.5t47 -140t12.5 -164.5v-342h96v-268h-526v557q0 39 -2 61.5t-12.5 57.5t-37 53.5t-69.5 18.5q-129 0 -129 -191v-289h147v-268h-643z" />
|
||||||
|
<glyph unicode="i" horiz-adv-x="675" d="M51 0v268h86v490h-86v266h475v-756h99v-268h-574zM109 1323q0 78 60 143.5t160.5 65.5t163 -65.5t62.5 -143.5q0 -88 -60.5 -147.5t-164.5 -59.5q-92 0 -156.5 64.5t-64.5 142.5z" />
|
||||||
|
<glyph unicode="j" horiz-adv-x="737" d="M29 -154q68 0 114.5 24t69.5 51.5t35 77.5t13 74.5t1 69.5v615h-86v266h475v-881q0 -86 -12 -157.5t-51 -151.5t-104.5 -135t-181.5 -91t-273 -36v274zM233 1323q0 78 60.5 143.5t161 65.5t163 -65.5t62.5 -143.5q0 -88 -60.5 -147.5t-164.5 -59.5q-92 0 -157 64.5 t-65 142.5z" />
|
||||||
|
<glyph unicode="k" horiz-adv-x="1339" d="M78 0v266h84v1002h-84v268h473v-926l237 142h-147v270h573v-270h-157l-139 -88l276 -396h102v-268h-606v268h86l-155 221l-72 -49v-172h76v-268h-547z" />
|
||||||
|
<glyph unicode="l" horiz-adv-x="679" d="M51 0v268h88v1004h-86v264h475v-1268h121v-268h-598z" />
|
||||||
|
<glyph unicode="m" horiz-adv-x="1859" d="M51 0v268h86v484h-86v270h387l45 -121q125 150 256 150q72 0 128.5 -14.5t92 -42t51 -46t33.5 -45.5q131 147 302 148q119 0 198.5 -40t117.5 -115t52.5 -152.5t14.5 -184.5v-283h100v-276h-520v502q0 12 1 44t1 50t-2 46t-7.5 45.5t-13.5 34.5t-22.5 25.5t-34.5 8.5 q-61 0 -85 -38t-24 -112v-332h123v-274h-530v522q0 137 -14.5 185.5t-71.5 48.5q-92 0 -92 -123v-365h122v-268h-608z" />
|
||||||
|
<glyph unicode="n" horiz-adv-x="1325" d="M51 0v268h86v490h-86v266h436l48 -127q119 164 292 164q92 0 161 -26.5t108 -68.5t62.5 -104.5t31.5 -121t8 -130.5v-342h96v-268h-516v559v48q0 11 -5 47t-16.5 50.5t-35 30t-57.5 15.5q-129 0 -129 -191v-291h147v-268h-631z" />
|
||||||
|
<glyph unicode="o" horiz-adv-x="1175" d="M191 904q167 144 393 145q250 -4 407.5 -147.5t161.5 -393.5v-6q0 -243 -158 -385q-160 -143 -401 -144q-238 0 -406 143q-166 141 -165 394q-1 248 168 394zM442 514q0 -125 43 -201.5t109 -76.5q63 0 101 76.5t38 195.5t-40 195.5t-109 78.5q-59 0 -100.5 -77.5 t-41.5 -190.5z" />
|
||||||
|
<glyph unicode="p" horiz-adv-x="1306" d="M51 -150h86v902h-86v272h469l35 -72q119 88 248 88q229 0 356 -153.5t127 -382.5q0 -240 -132 -383.5t-335 -143.5q-172 0 -266 80v-207h111v-268h-613v268zM553 489q0 -102 44 -173.5t103 -71.5q66 0 106 69.5t40 186.5q0 98 -41 175t-107 77q-63 0 -107 -73 q-39 -64 -39 -162q0 -14 1 -28z" />
|
||||||
|
<glyph unicode="q" horiz-adv-x="1351" d="M51 518q0 256 137.5 391t352.5 135q88 0 155.5 -27.5t87.5 -53.5l39 61h477v-266h-100v-955h100v-274h-649v268h133v271q-104 -86 -262 -86q-201 0 -336 147t-135 389zM492 516q0 -102 44 -174t103 -72q66 0 105.5 70t39.5 186q0 98 -41 175t-106 77q-63 0 -108 -72 q-39 -64 -38 -162q0 -14 1 -28z" />
|
||||||
|
<glyph unicode="r" horiz-adv-x="847" d="M51 0v268h90v490h-88v266h385l62 -131q25 45 44 70.5t54 55.5t89 43t130 13v-368q-147 0 -218 -49.5t-71 -178.5v-211h103v-268h-580z" />
|
||||||
|
<glyph unicode="s" horiz-adv-x="1040" d="M31 0v369h274q0 -49 44 -83t89 -44.5t84 -10.5q90 0 90 70q0 18 -16 31.5t-48 24t-66 19.5l-84 22q-50 13 -87 26q-272 96 -272 328q0 143 115.5 220t244.5 77q102 0 187.5 -46.5t118.5 -113.5l16 135h252v-369h-266q0 63 -64.5 109.5t-144.5 46.5t-80 -74 q0 -16 12 -29.5t41 -26.5t51.5 -21.5t72.5 -24.5l75 -25q80 -27 120.5 -45t98 -56t84 -94.5t26.5 -131.5q0 -139 -112.5 -223.5t-268.5 -84.5q-104 0 -189 43t-124 107l-18 -125h-256z" />
|
||||||
|
<glyph unicode="t" horiz-adv-x="743" d="M31 758v266h110v188l377 121v-309h195v-266h-195v-365q0 -8 -1 -29.5t0 -34t2 -29.5t5 -27.5t11.5 -21.5t19.5 -16.5t29 -5.5q47 0 129 35v-262q-41 -16 -122 -27.5t-126 -11.5q-90 0 -150.5 21.5t-94.5 52.5t-51 94.5t-21.5 114.5t-6.5 147v365h-110z" />
|
||||||
|
<glyph unicode="u" horiz-adv-x="1292" d="M31 754v270h495v-494q0 -135 24.5 -196.5t86.5 -61.5q55 0 92 44t37 112v326h-135v270h530v-752h101v-272h-388l-55 129l-20 -23q-20 -25 -28 -31l-30 -29q-23 -22 -41 -30t-44.5 -21t-58.5 -18.5t-69 -5.5q-227 0 -319 119t-92 381v283h-86z" />
|
||||||
|
<glyph unicode="v" horiz-adv-x="1255" d="M0 764v260h623v-260h-103l94 -217q45 -133 54 -215h8q4 94 61 225l99 207h-109v260h528v-260h-106l-354 -764h-318l-381 764h-96z" />
|
||||||
|
<glyph unicode="w" horiz-adv-x="1785" d="M0 758v266h551v-266h-70l45 -150q41 -139 52 -295h4q20 268 84 482l65 229h379l78 -266q59 -188 88 -445h4q18 193 55 324l35 121h-84v266h500v-266h-84l-240 -758h-432l-141 463l-148 -463h-422l-231 758h-88z" />
|
||||||
|
<glyph unicode="x" horiz-adv-x="1329" d="M41 0v254h137l209 235l-254 279h-92v256h664v-256h-97l144 -156l153 156h-137v256h522v-256h-135l-217 -219l258 -295h96v-254h-653v254h96l-155 166l-148 -166h133v-254h-524z" />
|
||||||
|
<glyph unicode="y" horiz-adv-x="1187" d="M-18 762v262h630v-260h-96l133 -320l133 320h-94v260h520v-254h-98l-389 -946q-23 -49 -40 -80t-54 -76t-80 -70.5t-111.5 -44t-154.5 -18.5q-139 8 -248 103l153 241q68 -59 119 -69q9 -2 18 -2q34 0 62 26q35 33 51 84l29 86l-399 758h-84z" />
|
||||||
|
<glyph unicode="z" horiz-adv-x="1132" d="M51 0v268l494 492h-228v-146h-266v410h1014v-264l-487 -492h215v140h288v-408h-1030z" />
|
||||||
|
<glyph unicode="­" d="M96 352v273h594v-273h-594z" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="833" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="1669" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="833" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="1669" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="555" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="415" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="276" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="276" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="206" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="333" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="92" />
|
||||||
|
<glyph unicode="‐" d="M96 352v273h594v-273h-594z" />
|
||||||
|
<glyph unicode="‑" d="M96 352v273h594v-273h-594z" />
|
||||||
|
<glyph unicode="‒" d="M96 352v273h594v-273h-594z" />
|
||||||
|
<glyph unicode="–" horiz-adv-x="915" d="M66 352v273h772v-273h-772z" />
|
||||||
|
<glyph unicode="—" horiz-adv-x="1292" d="M86 352v273h1104v-273h-1104z" />
|
||||||
|
<glyph unicode="’" horiz-adv-x="559" d="M74 1436h405l-73 -613h-256z" />
|
||||||
|
<glyph unicode="•" horiz-adv-x="712" d="M123 659q0 86 63.5 160t168 74t170 -74t65.5 -160q0 -96 -62.5 -158.5t-173.5 -62.5q-98 0 -164.5 67.5t-66.5 153.5z" />
|
||||||
|
<glyph unicode="…" horiz-adv-x="1585" d="M1088 213q0 86 63.5 159.5t168 73.5t170 -73.5t65.5 -159.5q0 -96 -62.5 -158.5t-173.5 -62.5q-98 0 -164.5 67.5t-66.5 153.5zM559 213q0 86 63.5 159.5t168 73.5t170 -73.5t65.5 -159.5q0 -96 -62.5 -158.5t-173.5 -62.5q-98 0 -164.5 67.5t-66.5 153.5zM31 213 q0 86 63.5 159.5t168 73.5t170 -73.5t65.5 -159.5q0 -96 -62.5 -158.5t-173.5 -62.5q-98 0 -164.5 67.5t-66.5 153.5z" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="333" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="415" />
|
||||||
|
<glyph unicode="™" horiz-adv-x="3500" d="M1487 0v264h111v903h-109v265h776l207 -766l197 766h780v-265h-112v-901h112v-266h-647v266h117l-2 684v121h-8q-35 -190 -60 -274l-215 -797h-428l-229 817q-35 119 -43 254h-9v-807h117v-264h-555zM31 899v533h1374v-533h-301v262h-172v-889h170v-272h-762v272h168v889 h-176v-262h-301z" />
|
||||||
|
<glyph unicode="" horiz-adv-x="1025" d="M0 1025h1025v-1025h-1025v1025z" />
|
||||||
|
<glyph unicode="fi" horiz-adv-x="1466" d="M842 0v268h86v490h-86v266h475v-756h99v-268h-574zM900 1323q0 78 60 143.5t160.5 65.5t163 -65.5t62.5 -143.5q0 -88 -60.5 -147.5t-164.5 -59.5q-92 0 -156.5 64.5t-64.5 142.5zM51 758v266h84v174q0 43 6 84t31 97.5t66 96.5t119.5 68.5t183.5 28.5q80 0 170 -15.5 t131 -35.5l-123 -236q-45 20 -113 21q-66 0 -65 -109v-174h186v-266h-186v-490h123v-268h-611v268h82v490h-84z" />
|
||||||
|
<glyph unicode="fl" horiz-adv-x="1470" d="M842 0v268h88v1004h-86v264h475v-1268h121v-268h-598zM51 758v266h84v174q0 43 6 84t31 97.5t66 96.5t119.5 68.5t183.5 28.5q80 0 170 -15.5t131 -35.5l-123 -236q-45 20 -113 21q-66 0 -65 -109v-174h186v-266h-186v-490h123v-268h-611v268h82v490h-84z" />
|
||||||
|
<glyph unicode="ffi" horiz-adv-x="2256" d="M1632 0v268h86v490h-86v266h475v-756h99v-268h-574zM1690 1323q0 78 60 143.5t160.5 65.5t163 -65.5t62.5 -143.5q0 -88 -60.5 -147.5t-164.5 -59.5q-92 0 -156.5 64.5t-64.5 142.5zM842 758v266h84v174q0 43 6 84t31 97.5t66 96.5t119.5 68.5t183.5 28.5q80 0 170 -15.5 t131 -35.5l-123 -236q-45 20 -113 21q-66 0 -65 -109v-174h186v-266h-186v-490h123v-268h-611v268h82v490h-84zM51 758v266h84v174q0 43 6 84t31 97.5t66 96.5t119.5 68.5t183.5 28.5q80 0 170 -15.5t131 -35.5l-123 -236q-45 20 -113 21q-66 0 -65 -109v-174h186v-266h-186 v-490h123v-268h-611v268h82v490h-84z" />
|
||||||
|
<glyph unicode="ffl" horiz-adv-x="2260" d="M1632 0v268h88v1004h-86v264h475v-1268h121v-268h-598zM842 758v266h84v174q0 43 6 84t31 97.5t66 96.5t119.5 68.5t183.5 28.5q80 0 170 -15.5t131 -35.5l-123 -236q-45 20 -113 21q-66 0 -65 -109v-174h186v-266h-186v-490h123v-268h-611v268h82v490h-84zM51 758v266 h84v174q0 43 6 84t31 97.5t66 96.5t119.5 68.5t183.5 28.5q80 0 170 -15.5t131 -35.5l-123 -236q-45 20 -113 21q-66 0 -65 -109v-174h186v-266h-186v-490h123v-268h-611v268h82v490h-84z" />
|
||||||
|
</font>
|
||||||
|
</defs></svg>
|
After Width: | Height: | Size: 23 KiB |
BIN
www/css/fonts/Chunkfive-webfont.ttf
Normal file
BIN
www/css/fonts/Chunkfive-webfont.woff
Normal file
BIN
www/css/fonts/League_Gothic-webfont.eot
Normal file
148
www/css/fonts/League_Gothic-webfont.svg
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata>
|
||||||
|
This is a custom SVG webfont generated by Font Squirrel.
|
||||||
|
Copyright : Generated in 2009 by FontLab Studio Copyright info pending
|
||||||
|
</metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="webfontFHzvtkso" horiz-adv-x="686" >
|
||||||
|
<font-face units-per-em="2048" ascent="1505" descent="-543" />
|
||||||
|
<missing-glyph horiz-adv-x="315" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="315" />
|
||||||
|
<glyph unicode="	" horiz-adv-x="315" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="315" />
|
||||||
|
<glyph unicode="!" horiz-adv-x="387" d="M74 1505h239l-55 -1099h-129zM86 0v227h215v-227h-215z" />
|
||||||
|
<glyph unicode=""" horiz-adv-x="329" d="M57 1505h215l-30 -551h-154z" />
|
||||||
|
<glyph unicode="#" horiz-adv-x="1232" d="M49 438l27 195h198l37 258h-196l26 194h197l57 420h197l-57 -420h260l57 420h197l-58 -420h193l-27 -194h-192l-37 -258h190l-26 -195h-191l-59 -438h-197l60 438h-261l-59 -438h-197l60 438h-199zM471 633h260l37 258h-260z" />
|
||||||
|
<glyph unicode="$" horiz-adv-x="692" d="M37 358l192 13q12 -186 129 -187q88 0 93 185q0 29 -8.5 59.5t-19.5 55t-32.5 60.5t-34.5 53l-40 55q-28 38 -35 50q-68 92 -101 141.5t-70.5 141.5t-37.5 170q4 293 215 342v131h123v-125q201 -23 235 -282l-192 -25q-6 57 -28 92t-65 33q-80 -2 -84 -162 q0 -29 8.5 -60.5t18.5 -54t32.5 -59.5t34.5 -53l41 -59q30 -42 38 -52q6 -10 32 -48l37 -52q10 -14 33.5 -51t34.5 -58l26 -55q16 -35 23.5 -61.5t13.5 -60.5t6 -64q-4 -338 -245 -369v-217h-123v221q-236 41 -250 352z" />
|
||||||
|
<glyph unicode="%" horiz-adv-x="1001" d="M55 911v437q0 6 1 18t9.5 42t23.5 53.5t48 42t78 18.5q70 0 110 -44t44 -87l4 -43v-437q0 -6 -1 -18t-9.5 -43t-23.5 -53.5t-47 -42t-77 -19.5q-72 0 -112 44t-44 89zM158 0l553 1505h131l-547 -1505h-137zM178 911q-4 -55 37 -55q16 0 25.5 14.5t9.5 26.5v14v437 q2 55 -35 55q-18 0 -27.5 -13.5t-9.5 -27.5v-14v-437zM631 158v436q0 6 1 18.5t9 43t23.5 53t48 42t78.5 19.5q70 0 109.5 -44t43.5 -87l4 -45v-436q0 -6 -1 -18.5t-9 -42t-23.5 -53.5t-47 -42t-76.5 -18q-72 0 -112 43t-44 88zM754 158q-4 -57 37 -58q16 0 24 14.5t8 28.5 l2 15v436q2 55 -34 55q-18 0 -27.5 -13t-9.5 -28v-14v-436z" />
|
||||||
|
<glyph unicode="&" horiz-adv-x="854" d="M49 315q0 115 44 214.5t126 222.5q-106 225 -106 442v18q0 12 5 46t13 65t28.5 69t48.5 65.5t73 46t102 18.5q78 0 134 -34t80 -82t37 -96t13 -81v-35q0 -162 -205 -434q76 -174 148 -285q33 96 47 211l176 -33q-16 -213 -92 -358q55 -63 92 -76v-235q-23 0 -86 37.5 t-123 101.5q-123 -139 -252 -139t-216 97t-87 234zM262 326q2 -66 29.5 -108t70.5 -42q59 0 125 86q-88 139 -174 295q-6 -10 -14 -28.5t-22.5 -77.5t-14.5 -125zM305 1194q0 -111 55 -246q100 156 101 252q-2 2 0 15.5t-2 36t-11.5 43t-23.5 36t-41 15.5q-39 0 -58.5 -38 t-19.5 -75v-39z" />
|
||||||
|
<glyph unicode="'" horiz-adv-x="309" d="M45 1012l72 266h-72v227h215v-227l-113 -266h-102z" />
|
||||||
|
<glyph unicode="(" horiz-adv-x="561" d="M66 645q0 143 29.5 292.5t72.5 261.5t87 204t73 139l30 47l162 -84l-27.5 -40.5t-62.5 -114.5t-79 -182.5t-61.5 -238t-27.5 -284.5t26.5 -282.5t64.5 -240.5t76 -178t65 -118l26 -39l-162 -84q-12 18 -31.5 50t-69.5 133.5t-89 207t-70.5 257t-31.5 294.5z" />
|
||||||
|
<glyph unicode=")" horiz-adv-x="561" d="M41 -213q10 14 27.5 41t62.5 115t79 181t61.5 236.5t27.5 284.5t-26.5 282.5t-64.5 241t-76 179t-64 118.5l-27 39l162 84q12 -18 31.5 -50t69.5 -134t89 -206.5t71 -257.5t32 -296t-30 -292.5t-74 -261t-87 -203t-72 -138.5l-30 -47z" />
|
||||||
|
<glyph unicode="*" horiz-adv-x="677" d="M74 1251l43 148l164 -70l-19 176h154l-19 -176l164 70l43 -148l-172 -34l115 -138l-131 -80l-78 152l-76 -152l-131 80l115 138z" />
|
||||||
|
<glyph unicode="+" horiz-adv-x="1060" d="M74 649v172h370v346h172v-346h371v-172h-371v-346h-172v346h-370z" />
|
||||||
|
<glyph unicode="," horiz-adv-x="309" d="M45 0v227h215v-227l-113 -266h-102l72 266h-72z" />
|
||||||
|
<glyph unicode="-" horiz-adv-x="444" d="M74 455v194h297v-194h-297z" />
|
||||||
|
<glyph unicode="." horiz-adv-x="321" d="M53 0v227h215v-227h-215z" />
|
||||||
|
<glyph unicode="/" horiz-adv-x="720" d="M8 -147l543 1652h162l-537 -1652h-168z" />
|
||||||
|
<glyph unicode="0" horiz-adv-x="724" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 80.5t-43 95.5t-17 80.5zM289 309q0 -12 1 -30.5t19.5 -49t53 -30.5t53 27.5t18.5 56.5 l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887z" />
|
||||||
|
<glyph unicode="1" horiz-adv-x="475" d="M25 1180v141q82 16 140 62.5t77 82.5l18 39h133v-1505h-221v1180h-147z" />
|
||||||
|
<glyph unicode="2" horiz-adv-x="731" d="M55 0v219l39 62q25 39 88.5 152.5t112.5 220t91 241.5t44 238q0 184 -73.5 184t-73.5 -184v-105h-222v105q0 389 295 389t295 -375q0 -336 -346 -928h350v-219h-600z" />
|
||||||
|
<glyph unicode="3" d="M45 1071q0 70 2 115t17.5 115.5t44 112.5t84 75t135.5 33q78 0 135 -31t84.5 -71t44 -92t19.5 -79.5t3 -50.5q0 -291 -106 -397l-2 -2q127 -100 127 -414q0 -25 -3 -58.5t-19.5 -99t-44 -116t-85 -89t-135.5 -38.5q-80 0 -136 31.5t-86 75.5t-47.5 112.5t-20.5 118 t-3 112.5h217q2 -150 17.5 -203t58.5 -53q45 0 57.5 50.5t12.5 140.5q0 18 1 66t0 62.5t-4 49.5t-10 46l-18 33q-12 22 -29.5 29t-45 15t-62.5 10h-19v184q37 2 62.5 7.5t45 14.5t31 21.5t17.5 29.5t9 39.5t3 51.5v62v43q0 45 -1 68.5t-7 58t-21.5 51t-39.5 16.5 q-41 0 -52.5 -49t-13.5 -207h-217z" />
|
||||||
|
<glyph unicode="4" horiz-adv-x="684" d="M25 328v194l323 983h221v-983h103v-194h-103v-328h-202v328h-342zM213 522h154v471v45h-13l-12 -45z" />
|
||||||
|
<glyph unicode="5" horiz-adv-x="704" d="M74 438h221v-59q0 -115 14.5 -159t52.5 -44q37 0 52.5 45t15.5 156v336q0 111 -70 110q-33 0 -59.5 -40t-26.5 -70h-186v792h535v-219h-344v-313q8 6 21 15t47 23.5t59 12.5q78 0 133 -40t76.5 -99.5t28.5 -100.5t7 -71v-336q0 -393 -289 -393q-78 0 -133 29.5 t-84.5 71.5t-46 108.5t-20.5 118.5t-4 126z" />
|
||||||
|
<glyph unicode="6" horiz-adv-x="700" d="M66 309v856q0 356 288.5 356.5t288.5 -356.5v-94h-221q0 162 -11.5 210t-56.5 48q-39 0 -53 -37t-14 -127v-268q59 37 110 37q80 0 133.5 -36t76 -93t29.5 -101.5t7 -87.5v-307q0 -41 -8 -84t-34 -103.5t-89 -99t-157.5 -38.5t-158 38.5t-89 99t-33.5 103.5t-8 84z M287 244q0 -20 17.5 -44t49.5 -24q31 0 49.5 24.5t18.5 43.5v450q0 18 -18.5 43t-49 25t-48 -20.5t-19.5 -41.5v-456z" />
|
||||||
|
<glyph unicode="7" horiz-adv-x="589" d="M8 1286v219h557v-221l-221 -1284h-229l225 1286h-332z" />
|
||||||
|
<glyph unicode="8" horiz-adv-x="696" d="M53 322v176q0 188 115 297q-102 102 -102 276v127q0 23 2 49.5t18 79.5t43 93t84 71t135 31t135.5 -31t84 -71t43 -93t18.5 -79.5t2 -49.5v-127q0 -174 -103 -276q115 -109 115 -297v-176q0 -25 -2 -52.5t-18.5 -83t-45 -96.5t-88 -73.5t-141.5 -32.5t-141.5 32.5 t-88 73.5t-45 96.5t-18.5 83t-2 52.5zM268 410q2 -127 17.5 -175.5t62.5 -48.5q37 0 54.5 30t21.5 71t4 123q0 152 -13.5 209t-66.5 57t-66.5 -57t-13.5 -209zM283 1120q0 -127 12 -177t53 -50t53.5 50t12.5 177q0 113 -12.5 160t-53.5 47q-37 0 -50 -44t-15 -163z" />
|
||||||
|
<glyph unicode="9" horiz-adv-x="700" d="M57 340v94h222q0 -162 11 -210t56 -48q39 0 53.5 37t14.5 127v283q-59 -37 -111 -37q-80 0 -133 35.5t-75.5 93t-30 101.5t-7.5 87v293q0 41 8.5 84t34 103.5t89 99.5t157.5 39t157.5 -39t89 -99.5t34 -103.5t8.5 -84v-856q0 -356 -289 -356t-289 356zM279 825 q0 -18 18 -42.5t49 -24.5t48.5 20.5t19.5 40.5v443q0 20 -17.5 43.5t-50.5 23.5q-31 0 -49 -24.5t-18 -42.5v-437z" />
|
||||||
|
<glyph unicode=":" horiz-adv-x="362" d="M74 0v227h215v-227h-215zM74 893v227h215v-227h-215z" />
|
||||||
|
<glyph unicode=";" horiz-adv-x="362" d="M74 0v227h215v-227l-113 -266h-102l71 266h-71zM74 893v227h215v-227h-215z" />
|
||||||
|
<glyph unicode="<" horiz-adv-x="1058" d="M74 649v160l911 475v-199l-698 -356l698 -356v-199z" />
|
||||||
|
<glyph unicode="=" horiz-adv-x="1058" d="M74 477v172h911v-172h-911zM74 864v172h911v-172h-911z" />
|
||||||
|
<glyph unicode=">" horiz-adv-x="1058" d="M74 174v199l698 356l-698 356v199l911 -475v-160z" />
|
||||||
|
<glyph unicode="?" horiz-adv-x="645" d="M25 1260q12 33 33.5 68.5t59.5 81.5t96 76t124 27q82 -2 138 -33.5t82 -81.5t36 -91t10 -80q0 -82 -80 -219l-57 -96q-18 -32 -42 -106.5t-24 -143.5v-256h-190v256q0 102 24.5 195t48 140t64.5 117q43 72 53 113q6 27 -11 60.5t-56 33.5q-47 2 -82 -47t-49 -98zM199 0 h215v227h-215v-227z" />
|
||||||
|
<glyph unicode="@" horiz-adv-x="872" d="M66 303v889q0 43 17 94t56 106.5t117 92.5t184.5 37t184 -37t116.5 -92.5t56.5 -106.5t17.5 -94v-793h-164l-20 56q-4 -8 -11.5 -19.5t-37 -30t-64.5 -18.5q-145 0 -145 172v485q0 170 145 170q35 0 63.5 -17t39.5 -34l10 -16v45q0 51 -45 104.5t-145.5 53.5 t-145.5 -53.5t-45 -104.5v-889q0 -53 44 -103t146 -50q117 0 168 63l152 -86q-109 -143 -320 -143q-106 0 -184 35.5t-117 90t-56 103.5t-17 90zM535 573q0 -53 47 -53q49 0 49 53v455q0 53 -49 53q-47 0 -47 -53v-455z" />
|
||||||
|
<glyph unicode="A" horiz-adv-x="765" d="M20 0l228 1505h270l227 -1505h-215l-41 307h-213l-40 -307h-216zM307 541h152l-64 475l-6 39h-12l-6 -39z" />
|
||||||
|
<glyph unicode="B" horiz-adv-x="745" d="M82 0v1505h194q205 0 304.5 -91t99.5 -308q0 -106 -29.5 -175t-107.5 -136q6 -2 16 -9.5t37 -35t47.5 -65.5t36.5 -106.5t16 -152.5q0 -414 -342 -426h-272zM303 219q74 0 109 31q55 55 55 201q0 82 -16.5 134t-46 70.5t-48 22.5t-45.5 4h-8v-463zM303 885q23 0 34 1 t40 10t45 28.5t30.5 60.5t14.5 100.5t-14.5 100.5t-30.5 60.5t-45 28.5t-40 10t-34 1v-401z" />
|
||||||
|
<glyph unicode="C" horiz-adv-x="708" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-207h-206v207q-2 0 0 11.5t-3.5 27.5t-12.5 32.5t-24.5 28t-43.5 11.5q-35 0 -54.5 -28t-21.5 -54l-2 -29v-887q0 -12 2 -30.5t21.5 -49t54.5 -30.5q41 0 62.5 27.5 t21.5 56.5v26v207h206v-207q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 80.5t-43 95.5t-17 80.5z" />
|
||||||
|
<glyph unicode="D" horiz-adv-x="761" d="M82 0v1505h174q90 0 153.5 -12t112.5 -33.5t80 -67.5t50.5 -95.5t28.5 -139.5t12 -177t3 -228.5t-3 -228.5t-12 -176t-28.5 -138t-50.5 -95t-80 -67.5t-112.5 -34t-153.5 -12.5h-174zM303 221q94 0 123 41q39 55 41 320v172v52q0 330 -25 402q-23 66 -92 74q-18 2 -47 2 v-1063z" />
|
||||||
|
<glyph unicode="E" horiz-adv-x="628" d="M82 0v1505h506v-227h-285v-395h205v-242h-205v-414h285v-227h-506z" />
|
||||||
|
<glyph unicode="F" horiz-adv-x="616" d="M82 0v1505h526v-227h-305v-395h205v-228h-205v-655h-221z" />
|
||||||
|
<glyph unicode="G" horiz-adv-x="737" d="M68 274v35v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-231h-221v231q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-905q0 -12 1 -30.5t19.5 -49.5t53 -31t53 28t18.5 54l2 29v272h-88v187h309v-750h-131l-26 72 q-70 -88 -172 -88q-78 0 -134.5 33.5t-80 80.5t-34.5 95t-11 81z" />
|
||||||
|
<glyph unicode="H" horiz-adv-x="778" d="M82 0v1505h221v-622h172v622h221v-1505h-221v655h-172v-655h-221z" />
|
||||||
|
<glyph unicode="I" horiz-adv-x="385" d="M82 0v1505h221v-1505h-221z" />
|
||||||
|
<glyph unicode="J" horiz-adv-x="423" d="M12 -14v217q4 0 12.5 -1t29 2t35.5 12t28.5 34.5t13.5 62.5v1192h221v-1226q0 -137 -79 -221q-70 -74 -222 -73q-19 0 -39 1z" />
|
||||||
|
<glyph unicode="K" horiz-adv-x="768" d="M82 0v1505h221v-501v-25h8l11 25l184 501h215l-203 -495l230 -1010h-216l-153 655l-6 31h-6l-13 -31l-51 -123v-532h-221z" />
|
||||||
|
<glyph unicode="L" horiz-adv-x="604" d="M82 0v1505h221v-1300h293v-205h-514z" />
|
||||||
|
<glyph unicode="M" horiz-adv-x="991" d="M82 0v1505h270l131 -688l11 -80h4l10 80l131 688h270v-1505h-204v946v64h-13l-8 -64l-141 -946h-94l-142 946l-8 64h-12v-64v-946h-205z" />
|
||||||
|
<glyph unicode="N" horiz-adv-x="808" d="M82 0v1505h197l215 -784l18 -70h12v70v784h203v-1505h-197l-215 784l-18 70h-12v-70v-784h-203z" />
|
||||||
|
<glyph unicode="O" horiz-adv-x="724" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -12 -2 -34.5t-17 -79t-43 -99.5t-88.5 -77.5t-144 -34.5t-144 33.5t-88.5 80.5t-43 95.5t-17 80.5zM289 309q0 -12 1 -30.5t19.5 -49t53 -30.5t53 27.5t18.5 56.5 l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887z" />
|
||||||
|
<glyph unicode="P" horiz-adv-x="720" d="M82 0v1505h221q166 0 277.5 -105.5t111.5 -345t-111.5 -346t-277.5 -106.5v-602h-221zM303 827q102 0 134 45.5t32 174.5q0 131 -33 182t-133 51v-453z" />
|
||||||
|
<glyph unicode="Q" horiz-adv-x="729" d="M68 309v887q0 12 2 34.5t17 79t43 99.5t88.5 78t144 35t144 -34t88.5 -81t43 -95t17 -83l2 -33v-887q0 -94 -45 -182q33 -43 88 -53v-189q-160 0 -227 117q-55 -18 -111 -18q-84 0 -144 33.5t-88 80.5t-43 95.5t-17 80.5zM289 309q0 -12 1 -30.5t19.5 -49t53 -30.5 t53 27.5t18.5 56.5l2 26v887q0 12 -1 30.5t-19.5 49.5t-53 31t-53 -28t-18.5 -54l-2 -29v-887z" />
|
||||||
|
<glyph unicode="R" horiz-adv-x="739" d="M82 0v1505h221q377 0 377 -434q0 -258 -123 -342l141 -729h-221l-115 635h-59v-635h-221zM303 840q31 0 52.5 5t51 24.5t45 68.5t15.5 125t-15.5 125t-45 68.5t-51 24.5t-52.5 5v-446z" />
|
||||||
|
<glyph unicode="S" horiz-adv-x="702" d="M37 422l217 20q0 -256 104 -256q90 0 91 166q0 29 -8.5 59.5t-32 73.5t-36.5 64l-54 79q-40 58 -48 72q-66 96 -102.5 158t-68 149t-31.5 162q0 139 71.5 245t216.5 108h10q88 0 150 -35q66 -37 95.5 -101.5t42 -127t12.5 -136.5l-217 -20q0 217 -89 217q-76 -2 -75 -150 q0 -18 4 -39.5t10 -39t18.5 -43t20.5 -40t28 -43.5l28 -43l33 -48l32 -46l104 -159q31 -49 67 -139.5t36 -166.5q0 -379 -308 -378q-82 0 -142 25.5t-94 63.5t-53.5 99t-25.5 117.5t-6 132.5z" />
|
||||||
|
<glyph unicode="T" horiz-adv-x="647" d="M4 1278v227h639v-227h-209v-1278h-221v1278h-209z" />
|
||||||
|
<glyph unicode="U" horiz-adv-x="749" d="M80 309v1196h221v-1196q0 -12 1 -30.5t19.5 -49t53.5 -30.5t53 27.5t18 56.5l3 26v1196h221v-1196q0 -12 -2 -34.5t-17.5 -79t-43 -99.5t-88 -77.5t-144.5 -34.5t-144.5 33.5t-88 80.5t-43 95.5t-17.5 80.5z" />
|
||||||
|
<glyph unicode="V" horiz-adv-x="716" d="M18 1505h215l111 -827l8 -64h13l8 64l110 827h215l-229 -1505h-221z" />
|
||||||
|
<glyph unicode="W" horiz-adv-x="1036" d="M25 1505h204l88 -782l5 -49h16l6 49l94 782h160l94 -782l6 -49h17l4 49l88 782h205l-203 -1505h-172l-102 713l-13 88h-8l-12 -88l-103 -713h-172z" />
|
||||||
|
<glyph unicode="X" horiz-adv-x="737" d="M16 0l244 791l-240 714h218l120 -381l7 -18h8l6 18l121 381h217l-240 -714l244 -791h-217l-127 449l-4 18h-8l-5 -18l-127 -449h-217z" />
|
||||||
|
<glyph unicode="Y" horiz-adv-x="700" d="M14 1505h217l111 -481l6 -14h4l6 14l111 481h217l-225 -864v-641h-221v641z" />
|
||||||
|
<glyph unicode="Z" horiz-adv-x="626" d="M20 0v238l347 1048h-297v219h536v-219l-352 -1067h352v-219h-586z" />
|
||||||
|
<glyph unicode="[" horiz-adv-x="538" d="M82 -16v1521h399v-196h-202v-1325h202v-197h-399v197z" />
|
||||||
|
<glyph unicode="\" horiz-adv-x="792" d="M8 1692h162l614 -1872h-168z" />
|
||||||
|
<glyph unicode="]" horiz-adv-x="538" d="M57 -16h203v1325h-203v196h400v-1521v-197h-400v197z" />
|
||||||
|
<glyph unicode="^" horiz-adv-x="1101" d="M53 809l381 696h234l381 -696h-199l-299 543l-299 -543h-199z" />
|
||||||
|
<glyph unicode="_" horiz-adv-x="1210" d="M74 -154h1063v-172h-1063v172z" />
|
||||||
|
<glyph unicode="`" horiz-adv-x="1024" d="M293 1489h215l106 -184h-159z" />
|
||||||
|
<glyph unicode="a" horiz-adv-x="681" d="M49 260q0 106 34 187t83 124t98 73t88 50.5t43 36.5v37v86q0 102 -57 102q-20 0 -32.5 -9t-17.5 -32.5t-7 -37t-2 -47.5v-39h-207v47q0 123 80.5 211t197.5 88q102 0 177 -74t75 -180v-351v-337q0 -109 14 -195h-202q-18 20 -19 90h-14q-20 -37 -65.5 -71.5t-100.5 -34.5 q-59 0 -112.5 60t-53.5 216zM252 291q0 -104 57 -105q35 0 60.5 19.5t25.5 48.5v287q-143 -62 -143 -250z" />
|
||||||
|
<glyph unicode="b" d="M82 0v1505h207v-458q88 90 164 90q78 0 118.5 -69t40.5 -150v-715q0 -82 -41 -150.5t-118 -68.5q-33 0 -74 22.5t-66 44.5l-24 23v-74h-207zM289 246q0 -29 19.5 -48.5t42 -19.5t39 19.5t16.5 48.5v628q0 29 -16.5 48.5t-39 19.5t-42 -21.5t-19.5 -46.5v-628z" />
|
||||||
|
<glyph unicode="c" horiz-adv-x="645" d="M66 315v490q0 332 264 332q137 0 201.5 -71t64.5 -251v-88h-207v135q0 51 -12 70.5t-47 19.5q-57 0 -58 -90v-604q0 -90 58 -90q35 0 47 19.5t12 70.5v156h207v-109q0 -180 -64.5 -250.5t-201.5 -70.5q-264 -1 -264 331z" />
|
||||||
|
<glyph unicode="d" d="M74 203v715q0 82 41 150.5t118 68.5q33 0 74 -22.5t66 -45.5l24 -22v458h207v-1505h-207v74q-88 -90 -164 -90q-78 0 -118.5 68.5t-40.5 150.5zM281 246q0 -29 16 -48.5t38.5 -19.5t42 19.5t19.5 48.5v628q0 25 -19.5 46.5t-42 21.5t-38.5 -19.5t-16 -48.5v-628z" />
|
||||||
|
<glyph unicode="e" horiz-adv-x="659" d="M66 279v563q0 12 2 31.5t16 70.5t40 90t81 71t129 32q76 0 130 -30t79.5 -73t40 -85t14.5 -72l2 -29v-326h-342v-243v-13q0 -8 4 -27.5t11.5 -34t23.5 -26.5t37 -12q35 0 53.5 27.5t18.5 56.5l2 29v122h192v-129q0 -12 -2 -31.5t-16.5 -68.5t-39 -88t-79.5 -69.5 t-131 -30.5q-74 0 -129.5 30.5t-80 73.5t-38.5 86t-16 74zM258 684h150v158q0 12 -1 31.5t-19.5 51t-53.5 31.5q-33 0 -52.5 -28.5t-21.5 -57.5l-2 -28v-158z" />
|
||||||
|
<glyph unicode="f" horiz-adv-x="475" d="M20 934v186h105v17v14q0 51 2 84t14.5 92t35 94t70.5 63.5t115 28.5q29 0 53.5 -3t35.5 -7l8 -4v-178q-27 8 -62 8q-66 0 -65 -180v-16v-13h104v-186h-104v-934h-207v934h-105z" />
|
||||||
|
<glyph unicode="g" horiz-adv-x="700" d="M12 -184q0 94 162 170q-125 35 -125 149q0 45 40 93t89 75q-51 35 -80.5 95.5t-34.5 105.5l-4 43v305q0 12 2 30.5t16.5 67.5t39 87t79 69t126.5 31q135 0 206 -103q102 102 170 103v-185q-72 0 -120 -24l10 -70v-317q0 -10 -2 -29.5t-17.5 -67t-40 -84t-79 -66.5 t-127.5 -30q-27 0 -39 2q-29 -25 -29 -51q0 -16 11 -28.5t42 -20.5t45.5 -10t59.5 -11q57 -8 101 -21t89 -41t70.5 -78t25.5 -120q0 -152 -103 -219t-251 -67q-164 4 -248 52t-84 165zM213 -150q0 -78 135 -77q59 0 108.5 19.5t49.5 55.5q0 33 -20.5 50.5t-90.5 29.5 l-106 21q-76 -44 -76 -99zM262 509q0 -17 15.5 -45t44.5 -28q31 0 47 25.5t16 50.5v25v307q-1 1 -1 3.5t1 7.5t1 6q0 8 -3 19q-4 15 -9 30.5t-18.5 25.5t-33.5 10q-29 0 -44.5 -25.5t-15.5 -52.5v-24v-307v-28z" />
|
||||||
|
<glyph unicode="h" horiz-adv-x="690" d="M82 0v1505h207v-479l32 32q30 30 66.5 54.5t69.5 24.5q76 0 115.5 -69t39.5 -150v-918h-206v887q0 49 -50 49q-18 0 -34.5 -13.5t-24.5 -25.5l-8 -14v-883h-207z" />
|
||||||
|
<glyph unicode="i" horiz-adv-x="370" d="M82 0v1120h207v-1120h-207zM82 1298v207h207v-207h-207z" />
|
||||||
|
<glyph unicode="j" horiz-adv-x="364" d="M-45 -182q29 -8 57 -8q64 0 64 142v10.5v10.5v1147h207v-1149q0 -51 -2 -83.5t-14.5 -90t-35 -92.5t-70.5 -62.5t-116 -27.5q-29 0 -51.5 3t-30.5 5l-8 4v191zM76 1298v207h207v-207h-207z" />
|
||||||
|
<glyph unicode="k" horiz-adv-x="641" d="M82 0v1505h207v-678v-36h10l12 36l101 293h186l-149 -364l188 -756h-199l-102 453l-4 16h-10l-7 -16l-26 -66v-387h-207z" />
|
||||||
|
<glyph unicode="l" horiz-adv-x="370" d="M82 0v1505h207v-1505h-207z" />
|
||||||
|
<glyph unicode="m" horiz-adv-x="1021" d="M82 0v1120h207v-94q2 0 32.5 30.5t68.5 55.5t71 25q100 0 139 -125l43 41t76 60.5t69 23.5q76 0 116 -69t40 -150v-918h-194v887q0 49 -56 49q-18 0 -37.5 -13.5t-29.5 -25.5l-11 -14v-883h-194v887q0 49 -55 49q-18 0 -38 -13.5t-30 -25.5l-10 -14v-883h-207z" />
|
||||||
|
<glyph unicode="n" horiz-adv-x="690" d="M82 0v1120h207v-94l32 32q30 30 66.5 54.5t69.5 24.5q76 0 115.5 -69t39.5 -150v-918h-206v887q0 49 -50 49q-18 0 -34.5 -13.5t-24.5 -25.5l-8 -14v-883h-207z" />
|
||||||
|
<glyph unicode="o" horiz-adv-x="657" d="M63 279v563q0 12 1.5 31.5t15.5 70.5t38.5 90t80 71t129.5 32q76 0 130 -30t79.5 -73t40 -85t16.5 -72v-29v-576q0 -12 -1 -31.5t-15.5 -68.5t-40 -88t-80 -69.5t-129.5 -30.5q-74 0 -129.5 30.5t-80 73.5t-38.5 86t-14 74zM257 259q0 -9 3 -20q4 -17 10 -34t21.5 -28 t36.5 -11q35 0 52 27.5t17 56.5l2 29v563q-2 0 0 11q1 4 1 8q0 9 -3 21q-4 17 -10 33.5t-21.5 28.5t-37.5 12q-33 0 -50.5 -28.5t-19.5 -57.5v-28v-563q1 -1 1 -4t-1 -9t-1 -7z" />
|
||||||
|
<glyph unicode="p" d="M82 -385v1505h207v-73q88 90 164 90q78 0 118.5 -69t40.5 -150v-715q0 -82 -41 -150.5t-118 -68.5q-33 0 -74 22.5t-66 44.5l-24 23v-459h-207zM289 246q0 -25 19.5 -46.5t42 -21.5t39 19.5t16.5 48.5v628q0 29 -16.5 48.5t-39 19.5t-42 -19.5t-19.5 -48.5v-628z" />
|
||||||
|
<glyph unicode="q" d="M74 203v715q0 82 41 150.5t118 68.5q33 0 74 -22.5t66 -45.5l24 -22v73h207v-1505h-207v459q-88 -90 -164 -90q-78 0 -118.5 68.5t-40.5 150.5zM281 246q0 -29 16 -48.5t38.5 -19.5t42 21.5t19.5 46.5v628q0 29 -19.5 48.5t-42 19.5t-38.5 -19.5t-16 -48.5v-628z" />
|
||||||
|
<glyph unicode="r" horiz-adv-x="503" d="M82 0v1120h207v-125q8 41 58 91.5t149 50.5v-230q-34 11 -64 11q-56 0 -98 -37q-45 -41 -45 -103v-778h-207z" />
|
||||||
|
<glyph unicode="s" horiz-adv-x="630" d="M37 326h192q0 -170 97 -170q72 0 71 135q0 74 -129 198q-68 66 -98.5 99t-64 101.5t-33.5 144.5q0 55 12 104t39 95t78 74t123 30h11q78 0 131 -26q56 -28 80.5 -79t33 -95t8.5 -103h-193q0 131 -67 131q-63 -2 -64 -131q0 -33 23.5 -73t45 -62.5t66.5 -65.5 q190 -182 191 -342q0 -123 -64.5 -215t-199.5 -92q-72 0 -126.5 24.5t-85 60t-49 85t-23.5 89.5t-5 83z" />
|
||||||
|
<glyph unicode="t" horiz-adv-x="501" d="M20 934v186h105v277h207v-277h141v-186h-141v-557q0 -184 65 -184l76 8v-203q-45 -14 -111 -14q-68 0 -115.5 28.5t-70 64.5t-35 96t-14.5 95t-2 92v574h-105z" />
|
||||||
|
<glyph unicode="u" horiz-adv-x="690" d="M78 203v917h207v-887q0 -49 49 -49q18 0 34.5 13.5t24.5 27.5l8 13v882h207v-1120h-207v94l-31 -32q-30 -30 -67 -54t-70 -24q-76 0 -115.5 68.5t-39.5 150.5z" />
|
||||||
|
<glyph unicode="v" horiz-adv-x="602" d="M16 1120h201l68 -649l8 -72h16l8 72l68 649h201l-183 -1120h-204z" />
|
||||||
|
<glyph unicode="w" horiz-adv-x="905" d="M20 1120h189l65 -585l9 -64h12l10 64l86 585h123l86 -585l10 -64h13l8 64l65 585h189l-166 -1120h-172l-80 535l-10 63h-8l-11 -63l-80 -535h-172z" />
|
||||||
|
<glyph unicode="x" horiz-adv-x="618" d="M16 0l193 578l-176 542h194l74 -262l6 -31h4l6 31l74 262h195l-176 -542l192 -578h-201l-84 283l-6 30h-4l-6 -30l-84 -283h-201z" />
|
||||||
|
<glyph unicode="y" horiz-adv-x="634" d="M25 1120h202l82 -688l4 -57h9l4 57l82 688h202l-198 -1204q-16 -127 -94 -222t-193 -95l-92 4v184q16 -4 49 -4q61 6 97 61.5t36 122.5z" />
|
||||||
|
<glyph unicode="z" horiz-adv-x="532" d="M12 0v168l285 764h-240v188h459v-168l-285 -764h285v-188h-504z" />
|
||||||
|
<glyph unicode="{" horiz-adv-x="688" d="M61 453v163q72 0 102 49.5t30 90.5v397q0 223 96 298t342 71v-172q-135 2 -188.5 -38t-53.5 -159v-397q0 -143 -127 -221q127 -82 127 -222v-397q0 -119 53.5 -159t188.5 -38v-172q-246 -4 -342 71t-96 298v397q0 20 -8.5 47t-41.5 59t-82 34z" />
|
||||||
|
<glyph unicode="|" horiz-adv-x="356" d="M82 -512v2204h192v-2204h-192z" />
|
||||||
|
<glyph unicode="}" horiz-adv-x="688" d="M57 -281q135 -2 188.5 38t53.5 159v397q0 139 127 222q-127 78 -127 221v397q0 119 -53 159t-189 38v172q246 4 342.5 -71t96.5 -298v-397q0 -23 8 -50.5t41 -58.5t82 -31v-163q-72 -4 -101.5 -52.5t-29.5 -87.5v-397q0 -223 -96.5 -298t-342.5 -71v172z" />
|
||||||
|
<glyph unicode="~" horiz-adv-x="1280" d="M113 1352q4 12 12 32.5t38 73.5t64.5 94t95 74t126.5 33q55 0 111 -18.5t82 -33t83 -51.5q106 -72 174 -71q57 0 105.5 46t66.5 91l19 45l135 -57q-4 -12 -12.5 -34t-38 -75t-64.5 -93t-91 -74t-120 -34q-121 0 -272 101q-115 74 -178.5 74t-113.5 -45.5t-69 -90.5 l-18 -45z" />
|
||||||
|
<glyph unicode="¢" horiz-adv-x="636" d="M66 508v489q0 297 208 328v242h123v-244q98 -16 144.5 -88t46.5 -227v-88h-189v135q0 90 -73 90q-72 0 -72 -90v-604q0 -90 72 -91q74 0 73 91v155h189v-108q0 -156 -46 -228.5t-145 -89.5v-303h-123v301q-208 31 -208 330z" />
|
||||||
|
<glyph unicode="£" horiz-adv-x="817" d="M4 63q8 20 23.5 53.5t70 91.5t117.5 68q37 111 37 199q0 68 -31 174h-188v137h147l-6 21q-78 254 -78 342q0 70 15.5 131t48.5 116.5t92 89.5t139 36q96 2 164 -32t103.5 -93.5t50 -127t14.5 -149.5h-213q0 86 -25.5 142.5t-89.5 54.5q-47 -2 -68.5 -51t-21.5 -117 q0 -113 70 -338l6 -25h211v-137h-174q25 -100 24 -174q0 -104 -57 -219q16 -8 44 -24.5t48.5 -25.5t40.5 -9q74 4 82 190l188 -22q-12 -182 -81.5 -281.5t-169.5 -99.5q-51 0 -143.5 51t-129.5 51q-33 0 -61.5 -25.5t-40.5 -52.5l-12 -24z" />
|
||||||
|
<glyph unicode="¥" horiz-adv-x="720" d="M25 1505h217l110 -481l6 -14h4l7 14l110 481h217l-196 -753h147v-138h-176v-137h176v-137h-176v-340h-221v340h-176v137h176v137h-176v138h147z" />
|
||||||
|
<glyph unicode="©" horiz-adv-x="1644" d="M53 751.5q0 317.5 225.5 544t543 226.5t543.5 -226.5t226 -544t-226 -542.5t-543.5 -225t-543 225t-225.5 542.5zM172 751.5q0 -266.5 191.5 -458t457.5 -191.5t459 191.5t193 458.5q0 268 -191.5 459.5t-460.5 191.5q-266 0 -457.5 -192.5t-191.5 -459zM627 487v531 q0 8 1 21.5t11 47t27.5 59t57.5 47t95 21.5q53 0 92 -20t56.5 -49t28 -57.5t12.5 -49.5v-20v-125h-138v125v17q0 11 -12 28.5t-37 17.5q-23 0 -35 -16t-12 -33l-2 -14v-531q0 -63 49 -63q25 0 37 15.5t12 31.5v16v125h138v-125q0 -8 -1 -21t-11.5 -47t-28 -59.5t-56.5 -47 t-92 -21.5q-86 0 -134 49t-54 98z" />
|
||||||
|
<glyph unicode="­" horiz-adv-x="444" d="M74 455v194h297v-194h-297z" />
|
||||||
|
<glyph unicode="®" horiz-adv-x="1644" d="M53 751.5q0 317.5 225.5 544t543 226.5t543.5 -226.5t226 -544t-226 -542.5t-543.5 -225t-543 225t-225.5 542.5zM172 751.5q0 -266.5 191.5 -458t457.5 -191.5t459 191.5t193 458.5q0 268 -191.5 459.5t-460.5 191.5q-266 0 -457.5 -192.5t-191.5 -459zM625 313v879h196 q231 0 232 -258q0 -76 -16.5 -125t-71.5 -96l106 -400h-151l-95 365h-55v-365h-145zM770 805h45q43 0 65.5 21.5t27.5 45t5 60.5q0 39 -5 63.5t-27.5 46t-65.5 21.5h-45v-258z" />
|
||||||
|
<glyph unicode="´" horiz-adv-x="1024" d="M410 1305l106 184h215l-162 -184h-159z" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="845" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="1691" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="845" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="1691" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="563" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="421" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="280" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="280" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="210" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="337" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="92" />
|
||||||
|
<glyph unicode="‐" horiz-adv-x="444" d="M74 455v194h297v-194h-297z" />
|
||||||
|
<glyph unicode="‑" horiz-adv-x="444" d="M74 455v194h297v-194h-297z" />
|
||||||
|
<glyph unicode="‒" horiz-adv-x="444" d="M74 455v194h297v-194h-297z" />
|
||||||
|
<glyph unicode="–" horiz-adv-x="806" d="M74 649v195h659v-195h-659z" />
|
||||||
|
<glyph unicode="—" horiz-adv-x="972" d="M74 649v195h825v-195h-825z" />
|
||||||
|
<glyph unicode="‘" horiz-adv-x="309" d="M49 1012v227l113 266h102l-71 -266h71v-227h-215z" />
|
||||||
|
<glyph unicode="’" horiz-adv-x="309" d="M45 1012l72 266h-72v227h215v-227l-113 -266h-102z" />
|
||||||
|
<glyph unicode="“" horiz-adv-x="624" d="M53 1012v227l113 266h102l-71 -266h71v-227h-215zM356 1012v227l113 266h102l-71 -266h71v-227h-215z" />
|
||||||
|
<glyph unicode="”" horiz-adv-x="624" d="M53 1012l72 266h-72v227h215v-227l-112 -266h-103zM356 1012l72 266h-72v227h215v-227l-112 -266h-103z" />
|
||||||
|
<glyph unicode="•" horiz-adv-x="663" d="M82 817q0 102 72.5 175t179.5 73q102 0 175 -72.5t73 -175.5q0 -106 -73 -179t-175 -73q-106 0 -179 73t-73 179z" />
|
||||||
|
<glyph unicode="…" horiz-adv-x="964" d="M53 0v227h215v-227h-215zM375 0v227h215v-227h-215zM696 0v227h215v-227h-215z" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="337" />
|
||||||
|
<glyph unicode=" " horiz-adv-x="421" />
|
||||||
|
<glyph unicode="€" horiz-adv-x="813" d="M53 547v137h107v137h-107v137h107v238q0 12 2 34.5t17.5 79t43 99.5t88 78t144.5 35t144 -34t88 -81t43 -95t18 -83l2 -33v-84h-207v84q-2 0 0 11.5t-3 27.5t-12.5 32.5t-25 28t-43.5 11.5q-35 0 -54.5 -28t-21.5 -54l-2 -29v-238h233v-137h-233v-137h233v-137h-233v-238 q0 -12 2 -30.5t21.5 -49t54.5 -30.5q41 0 61.5 27.5t20.5 56.5l2 26v84h207v-84q0 -12 -2.5 -34.5t-17.5 -79t-43 -99.5t-88 -77.5t-144 -34.5t-144.5 33.5t-88 80.5t-43 95.5t-17.5 80.5l-2 35v238h-107z" />
|
||||||
|
<glyph unicode="™" horiz-adv-x="937" d="M74 1401v104h321v-104h-104v-580h-113v580h-104zM440 821v684h138l67 -319h6l68 319h137v-684h-104v449l-78 -449h-51l-80 449v-449h-103z" />
|
||||||
|
<glyph unicode="" horiz-adv-x="1120" d="M0 1120h1120v-1120h-1120v1120z" />
|
||||||
|
<glyph unicode="fi" horiz-adv-x="772" d="M20 934v186h105v31q0 45 1 69.5t7 77t22.5 84t43 67.5t72.5 53.5t108 17.5q33 0 69.5 -4.5t57.5 -8.5l20 -2v-184q-41 12 -110 12q-31 0 -50.5 -18.5t-25.5 -58t-7 -54t-1 -53.5v-29h358v-1120h-207v934h-151v-934h-207v934h-105z" />
|
||||||
|
<glyph unicode="fl" horiz-adv-x="772" d="M20 934v186h105v31q0 45 1 69.5t7 77t22.5 84t43 67.5t72.5 53.5t108 17.5q33 0 69.5 -4.5t57.5 -8.5l20 -2h164v-1505h-207v1329q-37 4 -67.5 4t-50 -18.5t-25.5 -58t-7 -54t-1 -53.5v-29h104v-186h-104v-934h-207v934h-105z" />
|
||||||
|
<glyph unicode="ffi" horiz-adv-x="1320" d="M1032 0v1120h207v-1120h-207zM1032 1298v207h207v-207h-207zM495 934v186h105v17v14q0 51 2 84t14.5 92t35 94t70.5 63.5t115 28.5q29 0 53.5 -3t35.5 -7l8 -4v-178q-27 8 -62 8q-66 0 -65 -180v-16v-13h104v-186h-104v-934h-207v934h-105zM20 934v186h105v17v14 q0 51 2 84t14.5 92t35 94t70.5 63.5t115 28.5q29 0 53.5 -3t35.5 -7l8 -4v-178q-27 8 -62 8q-66 0 -65 -180v-16v-13h104v-186h-104v-934h-207v934h-105z" />
|
||||||
|
<glyph unicode="ffl" horiz-adv-x="1320" d="M1032 0v1505h207v-1505h-207zM495 934v186h105v17v14q0 51 2 84t14.5 92t35 94t70.5 63.5t115 28.5q29 0 53.5 -3t35.5 -7l8 -4v-178q-27 8 -62 8q-66 0 -65 -180v-16v-13h104v-186h-104v-934h-207v934h-105zM20 934v186h105v17v14q0 51 2 84t14.5 92t35 94t70.5 63.5 t115 28.5q29 0 53.5 -3t35.5 -7l8 -4v-178q-27 8 -62 8q-66 0 -65 -180v-16v-13h104v-186h-104v-934h-207v934h-105z" />
|
||||||
|
</font>
|
||||||
|
</defs></svg>
|
After Width: | Height: | Size: 27 KiB |
BIN
www/css/fonts/League_Gothic-webfont.ttf
Normal file
BIN
www/css/fonts/League_Gothic-webfont.woff
Normal file
22
www/css/main.css
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
|
||||||
|
/* ==========================================================================
|
||||||
|
Author's custom styles
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
767
www/css/style.css
Normal file
@ -0,0 +1,767 @@
|
|||||||
|
article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
|
||||||
|
audio[controls], canvas, video { display: inline-block; *display: inline; *zoom: 1; }
|
||||||
|
html { font-size: 100%; overflow-y: scroll; -webkit-overflow-scrolling: touch; -webkit-tap-highlight-color: rgba(0,0,0,0); -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
|
||||||
|
body { margin: 0; font-size: 13px; line-height: 1.231; }
|
||||||
|
body, button, input, select, textarea { font-family: sans-serif; color: #222; }
|
||||||
|
::-moz-selection { background: #fe57a1; color: #fff; text-shadow: none; }
|
||||||
|
::selection { background: #fe57a1; color: #fff; text-shadow: none; }
|
||||||
|
a { color: #00e; }
|
||||||
|
a:visited { color: #551a8b; }
|
||||||
|
a:focus { outline: thin dotted; }
|
||||||
|
a:hover, a:active { outline: 0; }
|
||||||
|
abbr[title] { border-bottom: 1px dotted; }
|
||||||
|
b, strong { font-weight: bold; }
|
||||||
|
blockquote { margin: 1em 40px; }
|
||||||
|
dfn { font-style: italic; }
|
||||||
|
hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
|
||||||
|
ins { background: #ff9; color: #000; text-decoration: none; }
|
||||||
|
mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
|
||||||
|
pre, code, kbd, samp { font-family: monospace, monospace; _font-family: 'courier new', monospace; font-size: 1em; }
|
||||||
|
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
|
||||||
|
q { quotes: none; }
|
||||||
|
q:before, q:after { content: ""; content: none; }
|
||||||
|
small { font-size: 85%; }
|
||||||
|
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
|
||||||
|
sup { top: -0.5em; }
|
||||||
|
sub { bottom: -0.25em; }
|
||||||
|
ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
|
||||||
|
dd { margin: 0 0 0 40px; }
|
||||||
|
nav ul, nav ol { list-style: none; margin: 0; padding: 0; }
|
||||||
|
img { border: 0; -ms-interpolation-mode: bicubic; }
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
figure { margin: 0; }
|
||||||
|
form { margin: 0; }
|
||||||
|
fieldset { border: 0; margin: 0; padding: 0; }
|
||||||
|
legend { border: 0; *margin-left: -7px; padding: 0; }
|
||||||
|
label { cursor: pointer; }
|
||||||
|
button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
|
||||||
|
button, input { line-height: normal; *overflow: visible; }
|
||||||
|
button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; }
|
||||||
|
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; }
|
||||||
|
input[type="search"] { -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
|
||||||
|
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
|
||||||
|
textarea { overflow: auto; vertical-align: top; }
|
||||||
|
input:valid, textarea:valid { }
|
||||||
|
input:invalid, textarea:invalid { background-color: #f0dddd; }
|
||||||
|
table { border-collapse: collapse; border-spacing: 0; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'ChunkFiveRegular';
|
||||||
|
src: url('fonts/Chunkfive-webfont.eot');
|
||||||
|
src: url('fonts/Chunkfive-webfont.eot?#iefix') format('embedded-opentype'),
|
||||||
|
url('fonts/Chunkfive-webfont.woff') format('woff'),
|
||||||
|
url('fonts/Chunkfive-webfont.ttf') format('truetype'),
|
||||||
|
url('fonts/Chunkfive-webfont.svg#ChunkFiveRegular') format('svg');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: 'LeagueGothicRegular';
|
||||||
|
src: url('fonts/League_Gothic-webfont.eot');
|
||||||
|
src: url('fonts/League_Gothic-webfont.eot?#iefix') format('embedded-opentype'),
|
||||||
|
url('fonts/League_Gothic-webfont.woff') format('woff'),
|
||||||
|
url('fonts/League_Gothic-webfont.ttf') format('truetype'),
|
||||||
|
url('fonts/League_Gothic-webfont.svg#LeagueGothicRegular') format('svg');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* ===================================================
|
||||||
|
Initializr styles
|
||||||
|
http://verekia.com/initializr/responsive-template
|
||||||
|
Author: Jonathan Verrecchia
|
||||||
|
=================================================== */
|
||||||
|
|
||||||
|
body{ font:16px/26px Helvetica, Helvetica Neue, Arial; }
|
||||||
|
|
||||||
|
.wrapper{
|
||||||
|
width:90%;
|
||||||
|
margin:0 5%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===================
|
||||||
|
ALL: Orange Theme
|
||||||
|
=================== */
|
||||||
|
|
||||||
|
#header-container{ border-bottom: 13px solid #e44d26; }
|
||||||
|
#footer-container{ border-top: 20px solid #e44d26; }
|
||||||
|
#main aside { border-top: 20px solid #e44d26; }
|
||||||
|
|
||||||
|
#header-container,
|
||||||
|
#footer-container,
|
||||||
|
#main aside{
|
||||||
|
background:#f16529;
|
||||||
|
}
|
||||||
|
|
||||||
|
#title{
|
||||||
|
color:white;
|
||||||
|
font-family:'ChunkFiveRegular';
|
||||||
|
font-weight:normal;
|
||||||
|
font-size:4em;
|
||||||
|
margin-bottom:20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header-container h2{
|
||||||
|
color:white;
|
||||||
|
font-size:16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#header-container header{
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-moz-selection { background: #f16529; color: #fff; text-shadow: none; }
|
||||||
|
::selection { background: #f16529; color: #fff; text-shadow: none; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* WEBSITE */
|
||||||
|
|
||||||
|
#html5-logo-container{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#follow-container{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#badges{
|
||||||
|
margin:0 auto;
|
||||||
|
width:265px;
|
||||||
|
margin-top:10px;
|
||||||
|
line-height:18px;
|
||||||
|
font-size:14px;
|
||||||
|
color:white;
|
||||||
|
font-weight:bold;
|
||||||
|
font-style:italic;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#badges li{
|
||||||
|
float:left;
|
||||||
|
background:#eee;
|
||||||
|
color:#444;
|
||||||
|
text-align:center;
|
||||||
|
width:85px;
|
||||||
|
height:85px;
|
||||||
|
/* border:10px solid #E44D26; */
|
||||||
|
-webkit-border-radius:999px;
|
||||||
|
-moz-border-radius:999px;
|
||||||
|
border-radius:999px;
|
||||||
|
margin-left:5px;
|
||||||
|
text-shadow:0 2px 1px white;
|
||||||
|
box-shadow:1px 1px 1px rgba(0, 0, 0, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
#badges li:first-child{
|
||||||
|
margin-left:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-label{
|
||||||
|
margin-top:26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#badges ul{
|
||||||
|
float:right;
|
||||||
|
margin:0;
|
||||||
|
list-style-type:none;
|
||||||
|
padding:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.separator{
|
||||||
|
font-family:LeagueGothicRegular;
|
||||||
|
text-align:center;
|
||||||
|
font-weight:normal;
|
||||||
|
font-size:3em;
|
||||||
|
color:#F16529;
|
||||||
|
margin:50px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.separator:before,
|
||||||
|
.separator:after{
|
||||||
|
width:20%;
|
||||||
|
height:4px;
|
||||||
|
display:block;
|
||||||
|
background:#eee;
|
||||||
|
content:"";
|
||||||
|
margin-top:14px;
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.separator:before{
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.separator:after{
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fine-tuning-separator{
|
||||||
|
margin:30px 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blank-background button,
|
||||||
|
.blank-background a{
|
||||||
|
background:#bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blank-background button:hover,
|
||||||
|
.blank-background a:hover{
|
||||||
|
background:#c4c4c4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.blank-background button:active{
|
||||||
|
background:#888;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.initializr-background button,
|
||||||
|
.initializr-background a,
|
||||||
|
#download-section a{
|
||||||
|
background:#F16529;
|
||||||
|
}
|
||||||
|
|
||||||
|
.initializr-background button:hover,
|
||||||
|
.initializr-background a:hover,
|
||||||
|
#download-section a:hover{
|
||||||
|
background:#F67539;
|
||||||
|
}
|
||||||
|
|
||||||
|
.initializr-background button:active{
|
||||||
|
background:#d14509;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-background button,
|
||||||
|
.bootstrap-background a{
|
||||||
|
background:#6090ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-background button:hover,
|
||||||
|
.bootstrap-background a:hover{
|
||||||
|
background:#78a0ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bootstrap-background button:active{
|
||||||
|
background:#4070df;
|
||||||
|
}
|
||||||
|
|
||||||
|
#preconfig-section{
|
||||||
|
padding-bottom:10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preconfig-container{
|
||||||
|
display:block;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preconfig-block{
|
||||||
|
border:none;
|
||||||
|
display:block;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#preconfig-section h3,
|
||||||
|
#download-section a
|
||||||
|
{
|
||||||
|
font-weight:normal;
|
||||||
|
font-family:ChunkFiveRegular;
|
||||||
|
font-size:2em;
|
||||||
|
color:white;
|
||||||
|
margin:0;
|
||||||
|
text-align:center;
|
||||||
|
padding:25px 0;
|
||||||
|
text-shadow:0 -2px 2px rgba(0, 0, 0, 0.1);
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preconfig-links-container{
|
||||||
|
width:100px;
|
||||||
|
margin:6px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#preconfig-section a{
|
||||||
|
padding:4px;
|
||||||
|
color:white;
|
||||||
|
font-weight:bold;
|
||||||
|
text-decoration:none;
|
||||||
|
margin:0px;
|
||||||
|
-webkit-border-radius:0 3px 3px 0;
|
||||||
|
-moz-border-radius:0 3px 3px 0;
|
||||||
|
border-radius:0 3px 3px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#preconfig-section a.first{
|
||||||
|
-webkit-border-radius:3px 0 0 3px;
|
||||||
|
-moz-border-radius:3px 0 0 3px;
|
||||||
|
border-radius:3px 0 0 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#main{
|
||||||
|
padding:30px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#customize-section label{
|
||||||
|
background:white;
|
||||||
|
-webkit-border-radius:4px;
|
||||||
|
-moz-border-radius:4px;
|
||||||
|
border-radius:4px;
|
||||||
|
|
||||||
|
border:1px solid #ccc;
|
||||||
|
border-top:0;
|
||||||
|
border-left:0;
|
||||||
|
|
||||||
|
padding:4px 8px;
|
||||||
|
display:block;
|
||||||
|
margin:0 5px 5px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#customize-section label:hover{
|
||||||
|
background:#f5f5f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#customize-section input{
|
||||||
|
margin-right:6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.customize-section h3{
|
||||||
|
text-align:center;
|
||||||
|
font-weight:normal;
|
||||||
|
font-family:LeagueGothicRegular;
|
||||||
|
font-size:2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.second-h5bp-label,
|
||||||
|
.third-h5bp-label{
|
||||||
|
display:none;
|
||||||
|
visibility:hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.customize-section a{
|
||||||
|
color:#E44D26;
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea{
|
||||||
|
display:block;
|
||||||
|
width:700px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#download-section{
|
||||||
|
margin-top:50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#download-section a{
|
||||||
|
background:#F16529;
|
||||||
|
display:block;
|
||||||
|
text-decoration:none;
|
||||||
|
margin-bottom:20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#about-container{
|
||||||
|
background:#eee;
|
||||||
|
padding:30px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#about-container h3{
|
||||||
|
font-weight:normal;
|
||||||
|
font-family:LeagueGothicRegular;
|
||||||
|
font-size:2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#about-container a{
|
||||||
|
color:#E44D26;
|
||||||
|
/* font-weight:bold; */
|
||||||
|
text-decoration:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#github-container img{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#email:before{
|
||||||
|
content:"initializr@gmail.com";
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===============
|
||||||
|
ALL: IE Fixes
|
||||||
|
=============== */
|
||||||
|
|
||||||
|
.ie7 #title{ padding-top:20px; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Non-semantic helper classes
|
||||||
|
Please define your styles before this section.
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/* For image replacement */
|
||||||
|
.ir { display: block; text-indent: -999em; overflow: hidden; background-repeat: no-repeat; text-align: left; direction: ltr; }
|
||||||
|
.ir br { display: none; }
|
||||||
|
|
||||||
|
/* Hide for both screenreaders and browsers:
|
||||||
|
css-discuss.incutio.com/wiki/Screenreader_Visibility */
|
||||||
|
.hidden { display: none; visibility: hidden; }
|
||||||
|
|
||||||
|
/* Hide only visually, but have it available for screenreaders: by Jon Neal.
|
||||||
|
www.webaim.org/techniques/css/invisiblecontent/ & j.mp/visuallyhidden */
|
||||||
|
.visuallyhidden { border: 0; clip: rect(0 0 0 0); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; }
|
||||||
|
|
||||||
|
/* Extends the .visuallyhidden class to allow the element to be focusable when navigated to via the keyboard: drupal.org/node/897638 */
|
||||||
|
.visuallyhidden.focusable:active, .visuallyhidden.focusable:focus { clip: auto; height: auto; margin: 0; overflow: visible; position: static; width: auto; }
|
||||||
|
|
||||||
|
/* Hide visually and from screenreaders, but maintain layout */
|
||||||
|
.invisible { visibility: hidden; }
|
||||||
|
|
||||||
|
/* Contain floats: nicolasgallagher.com/micro-clearfix-hack/ */
|
||||||
|
.clearfix:before, .clearfix:after { content: ""; display: table; }
|
||||||
|
.clearfix:after { clear: both; }
|
||||||
|
.clearfix { zoom: 1; }
|
||||||
|
|
||||||
|
|
||||||
|
/* ==|== media queries ====================================================== */
|
||||||
|
|
||||||
|
@media only screen and (min-width: 540px) {
|
||||||
|
|
||||||
|
/* ====================
|
||||||
|
INTERMEDIATE: Menu
|
||||||
|
==================== */
|
||||||
|
|
||||||
|
#header-container{
|
||||||
|
-webkit-box-shadow:0 5px 8px rgba(0, 0, 0, 0.15);
|
||||||
|
-moz-box-shadow:0 5px 8px rgba(0, 0, 0, 0.15);
|
||||||
|
box-shadow:0 5px 8px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
#header-container header{
|
||||||
|
text-align:left;
|
||||||
|
height:133px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.ie7 #header-container header,
|
||||||
|
.ie8 #header-container header{
|
||||||
|
height:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#title,
|
||||||
|
#header-container h2,
|
||||||
|
#follow-container p{
|
||||||
|
text-shadow:0 -2px 2px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#title-container{
|
||||||
|
float:left;
|
||||||
|
width:63%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#html5-logo-container{
|
||||||
|
float:left;
|
||||||
|
width:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#follow-iframes-container{
|
||||||
|
width:260px;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#follow-iframes-container iframe{
|
||||||
|
float:right;
|
||||||
|
width:146px!important;
|
||||||
|
margin-bottom:6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ie9 #follow-iframes-container iframe,
|
||||||
|
.ie8 #follow-iframes-container iframe,
|
||||||
|
.ie7 #follow-iframes-container iframe{
|
||||||
|
width:135px!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#follow-container{
|
||||||
|
float:right;
|
||||||
|
width:37%;
|
||||||
|
display:block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#follow-container p{
|
||||||
|
text-align:right;
|
||||||
|
color:white;
|
||||||
|
font-weight:bold;
|
||||||
|
margin:12px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#follow-container a{
|
||||||
|
color:white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#intro p{
|
||||||
|
/* float:left; */
|
||||||
|
margin-right:285px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#badges{
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.separator:before,
|
||||||
|
.separator:after{
|
||||||
|
width:20%;
|
||||||
|
display:block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preconfig-container{
|
||||||
|
float:left;
|
||||||
|
width:48%;
|
||||||
|
margin:0 1%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preconfig-block{
|
||||||
|
}
|
||||||
|
|
||||||
|
.preconfig-container:last-child{
|
||||||
|
margin:auto;
|
||||||
|
float:none;
|
||||||
|
clear:both;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hidden-section{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.customize-section{
|
||||||
|
float:left;
|
||||||
|
width:50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.customize-section:nth-child(2n + 1){
|
||||||
|
clear:both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.second-h5bp-label{
|
||||||
|
display:block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#download-section a{
|
||||||
|
float:left;
|
||||||
|
width:48%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#download-section a:first-child{
|
||||||
|
margin-right:4%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#about-container{
|
||||||
|
-webkit-box-shadow: inset 0 10px 15px rgba(0, 0, 0, 0.1);
|
||||||
|
-moz-box-shadow: inset 0 10px 15px rgba(0, 0, 0, 0.1);
|
||||||
|
box-shadow: inset 0 10px 15px rgba(0, 0, 0, 0.1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#about-container article{
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#github-container{
|
||||||
|
margin:auto;
|
||||||
|
width:480px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#github-container img{
|
||||||
|
float:left;
|
||||||
|
display:block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#github-repositories{
|
||||||
|
float:right;
|
||||||
|
margin-top:20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#github-repositories h3{
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 860px) {
|
||||||
|
|
||||||
|
#title-container{
|
||||||
|
float:left;
|
||||||
|
width:40%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#html5-logo-container{
|
||||||
|
display:block;
|
||||||
|
float:left;
|
||||||
|
width:20%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#html5-logo-container img{
|
||||||
|
display:block;
|
||||||
|
margin:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#follow-iframes-container{
|
||||||
|
width:260px;
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#follow-container{
|
||||||
|
float:right;
|
||||||
|
width:40%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#follow-container p:before{
|
||||||
|
content:"Initialized by ";
|
||||||
|
}
|
||||||
|
|
||||||
|
#follow-iframes-container iframe{
|
||||||
|
/* float:right; */
|
||||||
|
width:auto!important;
|
||||||
|
margin-bottom:6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ie9 #follow-iframes-container iframe,
|
||||||
|
.ie8 #follow-iframes-container iframe,
|
||||||
|
.ie7 #follow-iframes-container iframe{
|
||||||
|
width:auto!important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#intro p{
|
||||||
|
/* width:56%; */
|
||||||
|
}
|
||||||
|
|
||||||
|
#intro #badges{
|
||||||
|
/* width:44%; */
|
||||||
|
}
|
||||||
|
|
||||||
|
.separator:before,
|
||||||
|
.separator:after{
|
||||||
|
width:31%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preconfig-container{
|
||||||
|
width:32%;
|
||||||
|
margin-right:2%;
|
||||||
|
margin-left:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preconfig-block{
|
||||||
|
}
|
||||||
|
|
||||||
|
.ie8 .preconfig-container,
|
||||||
|
.ie7 .preconfig-container{
|
||||||
|
width:31.33%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preconfig-container:last-child{
|
||||||
|
margin:0;
|
||||||
|
float:left;
|
||||||
|
clear:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.first-h5bp-label{
|
||||||
|
visibility:hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.second-h5bp-label{
|
||||||
|
visibility:visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.third-h5bp-label{
|
||||||
|
display:block;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.customize-section{
|
||||||
|
width:33.3%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.customize-section:nth-child(2n + 1){
|
||||||
|
clear:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.customize-section:nth-child(3n + 1){
|
||||||
|
clear:both;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#about-container article{
|
||||||
|
width:530px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#github-container{
|
||||||
|
float:right;
|
||||||
|
}
|
||||||
|
|
||||||
|
#github-container img{
|
||||||
|
float:none;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#github-repositories{
|
||||||
|
float:none;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#github-container{
|
||||||
|
width:auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@media only screen and (min-width: 1140px) {
|
||||||
|
|
||||||
|
/* ===============
|
||||||
|
Maximal Width
|
||||||
|
=============== */
|
||||||
|
|
||||||
|
.wrapper{
|
||||||
|
width:1026px; /* 1140px - 10% for margins */
|
||||||
|
margin:0 auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Print styles.
|
||||||
|
Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; } /* Black prints faster: sanbeiji.com/archives/953 */
|
||||||
|
a, a:visited { color: #444 !important; text-decoration: underline; }
|
||||||
|
a[href]:after { content: " (" attr(href) ")"; }
|
||||||
|
abbr[title]:after { content: " (" attr(title) ")"; }
|
||||||
|
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } /* Don't show links for images, or javascript/internal links */
|
||||||
|
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
|
||||||
|
thead { display: table-header-group; } /* css-discuss.incutio.com/wiki/Printing_Tables */
|
||||||
|
tr, img { page-break-inside: avoid; }
|
||||||
|
img { max-width: 100% !important; }
|
||||||
|
@page { margin: 0.5cm; }
|
||||||
|
p, h2, h3 { orphans: 3; widows: 3; }
|
||||||
|
h2, h3{ page-break-after: avoid; }
|
||||||
|
}
|
BIN
www/favicon.ico
Normal file
After Width: | Height: | Size: 1.1 KiB |
20
www/humans.txt
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# humanstxt.org/
|
||||||
|
# The humans responsible & technology colophon
|
||||||
|
|
||||||
|
/* TEAM */
|
||||||
|
|
||||||
|
Senior Developer: Antonio Ramirez
|
||||||
|
Contact: amigo.cobos [at] gmail.com
|
||||||
|
Twitter: @tonydspaniard
|
||||||
|
From: Majorca, Catalonia, Spain
|
||||||
|
|
||||||
|
/* THANKS */
|
||||||
|
|
||||||
|
(First) Phundamente man: Tobias Munk
|
||||||
|
From: Stuttgart, Schwabenland, Germany
|
||||||
|
|
||||||
|
/* SITE */
|
||||||
|
Standards: HTML5, CSS3
|
||||||
|
Components: JQuery, Modernizr, Yii Framework
|
||||||
|
Doctype: HTML5
|
||||||
|
IDE: PhpStorm 6.0
|
BIN
www/img/github-logo.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
www/img/html5-logo-165-cut.png
Normal file
After Width: | Height: | Size: 6.3 KiB |
14
www/index.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Bootstrap index file
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
require('./../app/lib/vendor/autoload.php');
|
||||||
|
|
||||||
|
Yiinitializr\Helpers\Initializer::create('./../app', 'main', array('common', 'env', 'local'))->run();
|
2268
www/js/libs/bootstrap.js
vendored
Normal file
6
www/js/libs/bootstrap.min.js
vendored
Normal file
9597
www/js/libs/jquery-1.9.1.js
vendored
Normal file
5
www/js/libs/jquery-1.9.1.min.js
vendored
Normal file
4
www/js/libs/modernizr-2.0.6.min.js
vendored
Normal file
11
www/js/libs/modernizr-2.6.2-respond-1.1.0.min.js
vendored
Normal file
1
www/js/main.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
24
www/js/plugins.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
// Avoid `console` errors in browsers that lack a console.
|
||||||
|
(function() {
|
||||||
|
var method;
|
||||||
|
var noop = function () {};
|
||||||
|
var methods = [
|
||||||
|
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
|
||||||
|
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
|
||||||
|
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
|
||||||
|
'timeStamp', 'trace', 'warn'
|
||||||
|
];
|
||||||
|
var length = methods.length;
|
||||||
|
var console = (window.console = window.console || {});
|
||||||
|
|
||||||
|
while (length--) {
|
||||||
|
method = methods[length];
|
||||||
|
|
||||||
|
// Only stub undefined methods.
|
||||||
|
if (!console[method]) {
|
||||||
|
console[method] = noop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
// Place any jQuery/helper plugins in here.
|
222
www/js/script.js
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
$(function(){
|
||||||
|
|
||||||
|
/************
|
||||||
|
CONFIG
|
||||||
|
************/
|
||||||
|
var config = {
|
||||||
|
|
||||||
|
defaultModules:{
|
||||||
|
blank: [
|
||||||
|
'css-mode',
|
||||||
|
'h5bp-content',
|
||||||
|
'modernizr',
|
||||||
|
'jquerymin',
|
||||||
|
'h5bp-htaccess',
|
||||||
|
'h5bp-chromeframe',
|
||||||
|
'h5bp-analytics',
|
||||||
|
'h5bp-iecond',
|
||||||
|
'h5bp-favicon',
|
||||||
|
'h5bp-appletouchicons',
|
||||||
|
'h5bp-scripts',
|
||||||
|
'h5bp-robots',
|
||||||
|
'h5bp-humans',
|
||||||
|
'h5bp-404',
|
||||||
|
'h5bp-adobecrossdomain'
|
||||||
|
],
|
||||||
|
initializr: [
|
||||||
|
'css-mode',
|
||||||
|
'izr-responsive',
|
||||||
|
'modernizr',
|
||||||
|
'respond',
|
||||||
|
'jquerymin',
|
||||||
|
'h5bp-chromeframe',
|
||||||
|
'h5bp-analytics',
|
||||||
|
'h5bp-favicon',
|
||||||
|
'h5bp-appletouchicons',
|
||||||
|
'h5bp-iecond'
|
||||||
|
],
|
||||||
|
bootstrap: [
|
||||||
|
'less-mode',
|
||||||
|
'boot-hero',
|
||||||
|
'modernizr',
|
||||||
|
'respond',
|
||||||
|
'jquerymin',
|
||||||
|
'h5bp-chromeframe',
|
||||||
|
'h5bp-analytics',
|
||||||
|
'h5bp-favicon',
|
||||||
|
'h5bp-appletouchicons',
|
||||||
|
'h5bp-iecond',
|
||||||
|
'less'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
baseUrl:'http://localhost:8888/builder?'
|
||||||
|
};
|
||||||
|
|
||||||
|
/************
|
||||||
|
VARIABLES
|
||||||
|
************/
|
||||||
|
|
||||||
|
var params;
|
||||||
|
var modules = [];
|
||||||
|
var stylelang = '';
|
||||||
|
|
||||||
|
/**********
|
||||||
|
EVENTS
|
||||||
|
**********/
|
||||||
|
|
||||||
|
$('input').click(function(){
|
||||||
|
update();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$('#preconfig-blank').click(function(){
|
||||||
|
fillDefaultModules('blank');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#preconfig-initializr').click(function(){
|
||||||
|
fillDefaultModules('initializr');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#preconfig-bootstrap').click(function(){
|
||||||
|
fillDefaultModules('bootstrap');
|
||||||
|
});
|
||||||
|
|
||||||
|
/*********
|
||||||
|
LOGIC
|
||||||
|
*********/
|
||||||
|
|
||||||
|
function fillDefaultModules(type){
|
||||||
|
$('input').attr('checked', false);
|
||||||
|
|
||||||
|
for (var i = 0, curModule; curModule = config.defaultModules[type][i++];){
|
||||||
|
$('input[value=' + curModule +']').attr('checked', true);
|
||||||
|
};
|
||||||
|
update();
|
||||||
|
$('#hidden-section').fadeIn('slow');
|
||||||
|
}
|
||||||
|
|
||||||
|
function update(){
|
||||||
|
updateModules();
|
||||||
|
updateUrls();
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateModules(){
|
||||||
|
modules = [];
|
||||||
|
$('input').each(function(){
|
||||||
|
if ($(this).is(':checked'))
|
||||||
|
modules.push($(this).val());
|
||||||
|
});
|
||||||
|
replaceSpecialModules();
|
||||||
|
}
|
||||||
|
|
||||||
|
function replaceSpecialModules(){
|
||||||
|
if (modules.indexOf('jquerymin') != -1 && modules.indexOf('jquerydev') != -1){
|
||||||
|
modules.remove('jquerymin');
|
||||||
|
modules.remove('jquerydev');
|
||||||
|
modules.push('jquery');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modules.indexOf('modernizr') != -1 && modules.indexOf('respond') != -1){
|
||||||
|
modules.remove('modernizr');
|
||||||
|
modules.remove('respond');
|
||||||
|
modules.push('modernizrrespond');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modules.indexOf('html5shiv') != -1 && modules.indexOf('respond') != -1){
|
||||||
|
modules.remove('html5shiv');
|
||||||
|
modules.remove('respond');
|
||||||
|
modules.push('html5shivrespond');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modules.indexOf('less-mode') != -1){
|
||||||
|
modules.remove('less-mode');
|
||||||
|
stylelang = 'less';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
stylelang = '';
|
||||||
|
|
||||||
|
if (modules.indexOf('css-mode') != -1){
|
||||||
|
modules.remove('css-mode');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modules.indexOf('h5bp-content') != -1 || modules.indexOf('izr-responsive') != -1){
|
||||||
|
modules.push('h5bp-css');
|
||||||
|
modules.push('h5bp-csshelpers');
|
||||||
|
modules.push('h5bp-mediaqueryprint');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modules.indexOf('h5bp-content') != -1){
|
||||||
|
modules.push('h5bp-mediaqueries');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modules.indexOf('h5bp-iecond') == -1){
|
||||||
|
modules.push('simplehtmltag');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modules.indexOf('h5bp-scripts') == -1){
|
||||||
|
modules.push('izr-emptyscript');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modules.indexOf('boot-hero') != -1){
|
||||||
|
modules.push('boot-css');
|
||||||
|
modules.push('boot-scripts');
|
||||||
|
if (modules.indexOf('jquery') == -1 && modules.indexOf('jquerydev') == -1 && modules.indexOf('jquerymin') == -1){
|
||||||
|
modules.push('jquerymin');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateUrls(){
|
||||||
|
var modeParam = '';
|
||||||
|
|
||||||
|
if (stylelang != ''){
|
||||||
|
modeParam = 'mode=' + stylelang + '&';
|
||||||
|
}
|
||||||
|
|
||||||
|
params = '';
|
||||||
|
|
||||||
|
for (var i = 0, curModule; curModule = modules[i++];){
|
||||||
|
params += curModule + '&';
|
||||||
|
}
|
||||||
|
|
||||||
|
params = params.substring(0, params.length - 1);
|
||||||
|
|
||||||
|
$('#preview-url').val(config.baseUrl + 'print&' + modeParam + params);
|
||||||
|
$('#download-url').val(config.baseUrl + modeParam + params);
|
||||||
|
|
||||||
|
$('#preview-link').attr('href', config.baseUrl + 'print&' + modeParam + params);
|
||||||
|
$('#download-link').attr('href', config.baseUrl + modeParam + params);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********
|
||||||
|
HELPERS
|
||||||
|
***********/
|
||||||
|
|
||||||
|
if (!Array.indexOf){
|
||||||
|
Array.prototype.indexOf = function(searchedElement){
|
||||||
|
for (var i = 0; i < this.length; i++){
|
||||||
|
if (this[i] === searchedElement)
|
||||||
|
return i;
|
||||||
|
};
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Array.prototype.remove = function(searchedElement){
|
||||||
|
var i = this.indexOf(searchedElement);
|
||||||
|
if (i != -1)
|
||||||
|
this.splice(i, 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
/***********
|
||||||
|
MAIN
|
||||||
|
***********/
|
||||||
|
|
||||||
|
if ($('input:checked').length > 0)
|
||||||
|
$('#hidden-section').fadeIn(0);
|
||||||
|
update();
|
||||||
|
|
||||||
|
|
||||||
|
});
|
3
www/robots.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# robotstxt.org/
|
||||||
|
|
||||||
|
User-agent: *
|
4
yiic
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once(dirname(__FILE__).'/yiic.php');
|
16
yiic.bat
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
rem -------------------------------------------------------------
|
||||||
|
rem Yii command line script for Windows.
|
||||||
|
rem This is the bootstrap script for running yiic on Windows.
|
||||||
|
rem -------------------------------------------------------------
|
||||||
|
|
||||||
|
@setlocal
|
||||||
|
|
||||||
|
set BIN_PATH=%~dp0
|
||||||
|
|
||||||
|
if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe
|
||||||
|
|
||||||
|
"%PHP_COMMAND%" "%BIN_PATH%yiic.php" %*
|
||||||
|
|
||||||
|
@endlocal
|
14
yiic.php
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Yiic.php bootstrap file
|
||||||
|
*
|
||||||
|
* @author Antonio Ramirez <amigo.cobos@gmail.com>
|
||||||
|
* @link http://www.ramirezcobos.com/
|
||||||
|
* @link http://www.2amigos.us/
|
||||||
|
* @copyright 2013 2amigOS! Consultation Group LLC
|
||||||
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License
|
||||||
|
*/
|
||||||
|
require('./app/lib/vendor/autoload.php');
|
||||||
|
|
||||||
|
Yiinitializr\Helpers\Initializer::create('./app', 'console', array('common', 'env', 'local'))->run();
|