diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..86a0a44e --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +Config/database.php +tmp +Plugin/DebugKit +Plugin/Setup +/Config/configs_private.php +_* \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..09b2d65c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,6 @@ +[submodule "Plugin/Tools"] + path = Plugin/Tools + url = https://github.com/dereuromark/tools/ +[submodule "Plugin/Authenticate"] + path = Plugin/Authenticate + url = https://github.com/ceeram/Authenticate/ diff --git a/.htaccess b/.htaccess new file mode 100644 index 00000000..d054fb0a --- /dev/null +++ b/.htaccess @@ -0,0 +1,5 @@ + + RewriteEngine on + RewriteRule ^$ webroot/ [L] + RewriteRule (.*) webroot/$1 [L] + diff --git a/Config/Schema/schema.php b/Config/Schema/schema.php new file mode 100644 index 00000000..88892813 --- /dev/null +++ b/Config/Schema/schema.php @@ -0,0 +1,30 @@ + array('type' => 'integer', 'null' => false, 'default' => null, 'key' => 'primary'), + 'active' => array('type' => 'boolean', 'null' => false, 'default' => '0'), + 'last_login' => array('type' => 'datetime', 'null' => false, 'default' => null), + 'created' => array('type' => 'datetime', 'null' => true, 'default' => null), + 'modified' => array('type' => 'datetime', 'null' => true, 'default' => null), + 'logins' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 10), + 'login_errors' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 10, 'comment' => 'count++'), + 'flood_protection' => array('type' => 'datetime', 'null' => false, 'default' => null, 'comment' => 'access denied X min.'), + 'username' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 30, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'password' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 64, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'email' => array('type' => 'string', 'null' => false, 'default' => null, 'length' => 80, 'collate' => 'utf8_unicode_ci', 'charset' => 'utf8'), + 'role_id' => array('type' => 'integer', 'null' => false, 'default' => '0', 'length' => 2), + 'indexes' => array( + 'PRIMARY' => array('column' => 'id', 'unique' => 1) + ), + 'tableParameters' => array('charset' => 'utf8', 'collate' => 'utf8_unicode_ci', 'engine' => 'MyISAM') + ); + +} diff --git a/Config/acl.ini b/Config/acl.ini new file mode 100644 index 00000000..7b3357d2 --- /dev/null +++ b/Config/acl.ini @@ -0,0 +1,8 @@ +[Overview] +* = user,admin + +[Account] +* = user,admin + +[Users] +* = admin diff --git a/Config/bootstrap.php b/Config/bootstrap.php new file mode 100644 index 00000000..3a298659 --- /dev/null +++ b/Config/bootstrap.php @@ -0,0 +1,19 @@ + 1, + 'check_for_cake_version' => 0, # gecached 24 hours :-) + 'check_for_php_version' => 0, # gecached 48 hours :-) + 'ajax_remember' => 1, # ajax remember current tab + 'override' => 1 # if cache etc is usually disabled in debug mode, this overrides it +); + +/** private information holder */ +$config['Mail'] = array( + 'debug' => 0, # 0=no,1=flashMessageAfterwards,2=fullDebug(noMailSent) + 'log' => 1, + 'use_smtp' => 1, + 'smtp_port' => 25, + 'smtp_timeout' => 20, + 'smtp_host' => '', + 'smtp_username' => '', + 'smtp_password' => '', +); + +$config['Google'] = array( + 'key' => '', + 'api' => '2.x', + 'zoom' => 6, + 'lat' => 51, + 'lng' => 11, + 'type' => 'G_NORMAL_MAP', + 'static_size' => '500x500' +); + +$config['Role'] = array( + 'admin' => '1', + 'user' => '2', +); + +$config['App'] = array( + 'language' => 'eng', +); + +$config['Asset'] = array( + 'js' => 'buffer' +); + +$config['Cronjob'] = array( + 'code' => 'xyz', + 'www_active' => 1, # if cronjobs are possible from www (/cronjobs/run/) +); + +$config['Config'] = array( + 'admin_name' => 'Site Owner', + 'admin_email' => 'test@test.de', + 'admin_emailname' => 'Site Owner', + 'no_reply_email' => 'noreply@test.de', + 'no_reply_emailname' => '', + 'max_emails' => '10', + 'page_name' => 'Sandbox', + 'domain_name' => 'CakePHP Sandbox', + 'keywords' => '', + 'description' => '', + 'author' => '', + 'flood_protection' => 60, # seconds + 'bruteforce_trials' => 2, + 'bruteforce_interval' => 60, # seconds + //'max_login_trials' => 2, + 'secure_critical_actions' => 1, # pw neccessary -> more security (change_pw, change_email, Account delete) + 'admin_appr_register' => 0, # if user can access site right after activation + 'user_online_time' => 10, # minutes + 'user_inactive_time' => 20, # minutes + 'insert_ip' => 0, # insert ips on login in users table + 'check_ip' => 0, # trigger admin warning if different users sign in with the same ip + 'soft_delete' => 1, # 1=UsernameIsDeleted, but UserRecord is not deleted + 'allow_register' => 0 +); + +$config['Twitter'] = array( + 'id' => '', + 'cache_duration' => '' +); +/** end: private information holder */ + +$config['Settings'] = array( + 'version' => '1.0', + 'title' => 'CakePHP Sandbox', +); + +$config['Caching'] = array( + 'default' => '+4 hours', + 'short' => '+1 day', + 'medium' => '+1 week', + 'long' => '+1 month', + 'test' => '+30 seconds', + 'url_cache_type' => 'pages' # pages (single pages) / combined (all together) / false +); + +$config['LanguagesAvailable'] = array( # supported languages + //'de', + 'en', + //'it' +); + +$config['Languages'] = array( + 'de' => '', + 'en' => '', + 'it' => '' +); + +/** 0000 to 0777 Rights **/ +$config['FolderRights'] = array( + 'locale' => '0777', + 'webroot' . DS . 'img' => '0777', + 'webroot' . DS . 'files' => '0777', + 'webroot' . DS . 'folder' => '0777', + ); + +$config['Currency'] = array( + 'code' => 'EUR', + 'symbolLeft' => '€', + 'symbolRight' => '', + 'places' => '2', + 'thousands' => '.', + 'decimals' => ',', +); + +$config['Localization'] = array( + 'address_format' => 'de', + 'thousands' => '.', + 'decimals' => ',', +); + diff --git a/Config/core.php b/Config/core.php new file mode 100644 index 00000000..9df8b180 --- /dev/null +++ b/Config/core.php @@ -0,0 +1,269 @@ + 0 + * and log errors with CakeLog when debug = 0. + * + * Options: + * + * - `handler` - callback - The callback to handle errors. You can set this to any callback type, + * including anonymous functions. + * - `level` - int - The level of errors you are interested in capturing. + * - `trace` - boolean - Include stack traces for errors in log files. + * + * @see ErrorHandler for more information on error handling and configuration. + */ + Configure::write('Error', array( + 'handler' => 'ErrorHandler::handleError', + 'level' => E_ALL & ~E_DEPRECATED, + //'level' => E_ALL | E_STRICT, + 'trace' => true + )); + +/** + * Configure the Exception handler used for uncaught exceptions. By default, + * ErrorHandler::handleException() is used. It will display a HTML page for the exception, and + * while debug > 0, framework errors like Missing Controller will be displayed. When debug = 0, + * framework errors will be coerced into generic HTTP errors. + * + * Options: + * + * - `handler` - callback - The callback to handle exceptions. You can set this to any callback type, + * including anonymous functions. + * - `renderer` - string - The class responsible for rendering uncaught exceptions. If you choose a custom class you + * should place the file for that class in app/Lib/Error. This class needs to implement a render method. + * - `log` - boolean - Should Exceptions be logged? + * + * @see ErrorHandler for more information on exception handling and configuration. + */ + Configure::write('Exception', array( + 'handler' => 'ErrorHandler::handleException', + 'renderer' => 'ExceptionRenderer', + 'log' => true + )); + +/** + * Application wide charset encoding + */ + Configure::write('App.encoding', 'UTF-8'); + mb_internal_encoding('UTF-8'); + mb_encode_mimeheader('UTF-8'); + mb_http_output('UTF-8'); + +/** + * To configure CakePHP *not* to use mod_rewrite and to + * use CakePHP pretty URLs, remove these .htaccess + * files: + * + * /.htaccess + * /app/.htaccess + * /app/webroot/.htaccess + * + * And uncomment the App.baseUrl below: + */ + //Configure::write('App.baseUrl', env('SCRIPT_NAME')); +/** + * Uncomment the define below to use CakePHP admin routes. + * + * The value of the define determines the name of the route + * and its associated controller actions: + * + * 'admin' -> admin_index() and /admin/controller/index + * 'superuser' -> superuser_index() and /superuser/controller/index + */ + + Configure::write('Routing.prefixes', array('admin')); + +Configure::write('Dispatcher.filters', array( + 'AssetDispatcher', + //'CacheDispatcher' +)); + +/** + * Turn off all caching application-wide. + * + */ + //Configure::write('Cache.disable', false); +/** + * Enable cache checking. + * + * If set to true, for view caching you must still use the controller + * public $cacheAction inside your controllers to define caching settings. + * You can either set it controller-wide by setting public $cacheAction = true, + * or in each action using $this->cacheAction = true. + * + */ + Configure::write('Cache.check', true); +/** + * Defines the default error type when using the log() function. Used for + * differentiating error logging and debugging. Currently PHP supports LOG_DEBUG. + */ + define('LOG_ERROR', 2); + + Configure::write('Session', array( + 'defaults' => 'php', + 'timeout' => 4000, + 'cookie' => 'SANDBOX', + 'checkAgent' => true + )); + +/** + * The level of CakePHP security. The session timeout time defined + * in 'Session.timeout' is multiplied according to the settings here. + * Valid values: + * + * 'high' Session timeout in 'Session.timeout' x 10 + * 'medium' Session timeout in 'Session.timeout' x 100 + * 'low' Session timeout in 'Session.timeout' x 300 + * + * CakePHP session IDs are also regenerated between requests if + * 'Security.level' is set to 'high'. + */ + Configure::write('Security.level', 'low'); +/** + * A random string used in security hashing methods. + */ + Configure::write('Security.salt', '9163a89ca59ead88188a917dd5e64eb316e175b8'); +/** + * Compress CSS output by removing comments, whitespace, repeating tags, etc. + * This requires a/var/cache directory to be writable by the web server for caching. + * and /vendors/csspp/csspp.php + * + * To use, prefix the CSS link URL with '/ccss/' instead of '/css/' or use HtmlHelper::css(). + */ + //Configure::write('Asset.filter.css', 'css.php'); +/** + * Plug in your own custom JavaScript compressor by dropping a script in your webroot to handle the + * output, and setting the config below to the name of the script. + * + * To use, prefix your JavaScript link URLs with '/cjs/' instead of '/js/' or use JavaScriptHelper::link(). + */ + //Configure::write('Asset.filter.js', 'custom_javascript_output_filter.php'); +/** + * The classname and database used in CakePHP's + * access control lists. + */ + Configure::write('Acl.classname', 'DbAcl'); + Configure::write('Acl.database', 'default'); +/** + * + * Cache Engine Configuration + * Default settings provided below + * + * File storage engine. + * + * Cache::config('default', array( + * 'engine' => 'File', //[required] + * 'duration'=> 3600, //[optional] + * 'probability'=> 100, //[optional] + * 'path' => CACHE, //[optional] use system tmp directory - remember to use absolute path + * 'prefix' => 'cake_', //[optional] prefix every cache file with this string + * 'lock' => false, //[optional] use file locking + * 'serialize' => true, [optional] + * )); + * + * + * APC (http://pecl.php.net/package/APC) + * + * Cache::config('default', array( + * 'engine' => 'Apc', //[required] + * 'duration'=> 3600, //[optional] + * 'probability'=> 100, //[optional] + * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string + * )); + * + * Xcache (http://xcache.lighttpd.net/) + * + * Cache::config('default', array( + * 'engine' => 'Xcache', //[required] + * 'duration'=> 3600, //[optional] + * 'probability'=> 100, //[optional] + * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string + * 'user' => 'user', //user from xcache.admin.user settings + * 'password' => 'password', //plaintext password (xcache.admin.pass) + * )); + * + * + * Memcache (http://www.danga.com/memcached/) + * + * Cache::config('default', array( + * 'engine' => 'Memcache', //[required] + * 'duration'=> 3600, //[optional] + * 'probability'=> 100, //[optional] + * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string + * 'servers' => array( + * '127.0.0.1:11211' // localhost, default port 11211 + * ), //[optional] + * 'compress' => false, // [optional] compress data in Memcache (slower, but uses less memory) + * )); + * + */ +$engine = 'File'; +if (extension_loaded('apc') && function_exists('apc_dec') && (php_sapi_name() !== 'cli' || ini_get('apc.enable_cli'))) { + //$engine = 'Apc'; +} + +// In development mode, caches should expire quickly. +$duration = '+999 days'; +if (Configure::read('debug') >= 1) { + $duration = '20 seconds'; +} + +/** + * Configure the cache used for general framework caching. Path information, + * object listings, and translation cache files are stored with this configuration. + */ +Cache::config('_cake_core_', array( + 'engine' => $engine, + 'prefix' => 'cake_core_', + 'path' => CACHE . 'persistent' . DS, + 'serialize' => ($engine === 'File'), + 'duration' => $duration +)); + +/** + * Configure the cache for model and datasource caches. This cache configuration + * is used to store schema descriptions, and table listings in connections. + */ +Cache::config('_cake_model_', array( + 'engine' => $engine, + 'prefix' => 'cake_model_', + 'path' => CACHE . 'models' . DS, + 'serialize' => ($engine === 'File'), + 'duration' => $duration +)); + +Cache::config('default', array( + 'engine' => $engine, + 'duration' => 31 * DAY, + //'path' => CACHE . 'data' . DS, +)); + +Cache::config('data', array( + 'engine' => $engine, + 'prefix' => '', + 'path' => CACHE . 'data' . DS, + 'serialize' => ($engine === 'File'), + 'duration' => '+1 day' +)); + diff --git a/Config/database.php.default b/Config/database.php.default new file mode 100644 index 00000000..4856256d --- /dev/null +++ b/Config/database.php.default @@ -0,0 +1,103 @@ + + * Copyright 2005-2008, Cake Software Foundation, Inc. + * 1785 E. Sahara Avenue, Suite 490-204 + * Las Vegas, Nevada 89104 + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice. + * + * @filesource + * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. + * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project + * @package cake + * @subpackage cake.app.config + * @since CakePHP(tm) v 0.2.9 + * @version $Revision: 7062 $ + * @modifiedby $LastChangedBy: nate $ + * @lastmodified $Date: 2008-05-30 06:29:53 -0500 (Fri, 30 May 2008) $ + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ +/** + * In this file you set up your database connection details. + * + * @package cake + * @subpackage cake.config + */ +/** + * Database configuration class. + * You can specify multiple configurations for production, development and testing. + * + * driver => The name of a supported driver; valid options are as follows: + * mysql - MySQL 4 & 5, + * mysqli - MySQL 4 & 5 Improved Interface (PHP5 only), + * sqlite - SQLite (PHP5 only), + * postgres - PostgreSQL 7 and higher, + * mssql - Microsoft SQL Server 2000 and higher, + * db2 - IBM DB2, Cloudscape, and Apache Derby (http://php.net/ibm-db2) + * oracle - Oracle 8 and higher + * firebird - Firebird/Interbase + * sybase - Sybase ASE + * adodb-[drivername] - ADOdb interface wrapper (see below), + * pear-[drivername] - PEAR::DB wrapper + * + * You can add custom database drivers (or override existing drivers) by adding the + * appropriate file to app/models/datasources/dbo. Drivers should be named 'dbo_x.php', + * where 'x' is the name of the database. + * + * persistent => true / false + * Determines whether or not the database should use a persistent connection + * + * connect => + * ADOdb set the connect to one of these + * (http://phplens.com/adodb/supported.databases.html) and + * append it '|p' for persistent connection. (mssql|p for example, or just mssql for not persistent) + * For all other databases, this setting is deprecated. + * + * host => + * the host you connect to the database. To add a socket or port number, use 'port' => # + * + * prefix => + * Uses the given prefix for all the tables in this database. This setting can be overridden + * on a per-table basis with the Model::$tablePrefix property. + * + * schema => + * For Postgres and DB2, specifies which schema you would like to use the tables in. Postgres defaults to + * 'public', DB2 defaults to empty. + * + * encoding => + * For MySQL, MySQLi, Postgres and DB2, specifies the character encoding to use when connecting to the + * database. Defaults to 'UTF-8' for DB2. Uses database default for all others. + * + */ +class DATABASE_CONFIG { + + var $default = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'user', + 'password' => 'password', + 'database' => 'database_name', + 'prefix' => '', + ); + + var $test = array( + 'driver' => 'mysql', + 'persistent' => false, + 'host' => 'localhost', + 'login' => 'user', + 'password' => 'password', + 'database' => 'test_database_name', + 'prefix' => '', + ); +} +?> \ No newline at end of file diff --git a/Config/routes.php b/Config/routes.php new file mode 100644 index 00000000..1de9e3ba --- /dev/null +++ b/Config/routes.php @@ -0,0 +1,35 @@ + 'overview', 'action' => 'index')); +/** +* ...and connect the rest of 'Pages' controller's urls. +* WHY NOT WORKING? +*/ +Router::connect('/page/*', array('plugin' => 0, 'controller' => 'pages', 'action' => 'display')); + +//Router::connect('/user/*', array('admin'=>false, 'controller' => 'users', 'action' => 'view')); + +Router::connect('/register', array('controller' => 'account', 'action' => 'register')); +Router::connect('/login', array('controller' => 'account', 'action' => 'login')); +Router::connect('/logout', array('controller' => 'account', 'action' => 'logout')); + +//route to switch locale +//Router::connect('/lang/*', array('controller' => 'p28n', 'action' => 'change')); + +Router::connect('/admin', array('admin' => 'admin', 'controller' => 'overview', 'action' => 'index')); + +//Router::connect('/translate', array('plugin' => 'translate', 'controller' => 'translate_groups', 'action' => 'overview')); + +CakePlugin::routes(); + +/** +* Load the CakePHP default routes. Remove this if you do not want to use +* the built-in default routes. +*/ +require CAKE . 'Config' . DS . 'routes.php'; \ No newline at end of file diff --git a/Controller/AccountController.php b/Controller/AccountController.php new file mode 100644 index 00000000..9d27ecdd --- /dev/null +++ b/Controller/AccountController.php @@ -0,0 +1,238 @@ +Auth->allow('login', 'logout', 'register', 'activate', 'lost_password', 'change_password'); + } + + /** + * AccountController::login() + * + * @return void + */ + public function login() { + if ($this->Common->isPosted()) { + if ($this->Auth->login()) { + $this->Common->flashMessage(__('loggedInMessage'), 'success'); + + return $this->redirect($this->Auth->redirectUrl()); + } + $this->request->data['User']['password'] = ''; + + } else { + if ($username = $this->request->query('username')) { + $this->request->data['User']['login'] = $username; + } + } + } + + /** + * AccountController::logout() + * + * @return void + */ + public function logout() { + $whereTo = $this->Auth->logout(); + # delete cookie + if (Configure::read('Config.rememberMe')) { + $this->Comon->loadComponent('Tools.RememberMe'); + $this->RememberMe->delete(); + } + $this->Common->flashMessage(__('loggedOutMessage'), 'success'); + return $this->redirect($whereTo); + } + + /** + * AccountController::lost_password() + * + * @param string $key + * @return void + */ + public function lost_password($key = null) { + if ($this->Common->isPosted()) { + $keyToCheck = $this->request->data('Form.key'); + } elseif (!empty($key)) { + $keyToCheck = $key; + } + + if (!empty($keyToCheck)) { + $this->Token = ClassRegistry::init('Tools.Token'); + $key = $this->Token->useKey('reset_pwd', $keyToCheck); + + if (!empty($key) && $key['Token']['used'] == 1) { + $this->Common->flashMessage(__('alreadyChangedYourPassword'), 'warning'); + } elseif (!empty($key)) { + $uid = $key['Token']['user_id']; + $this->Session->write('Auth.Tmp.id', $uid); + $this->redirect(array('action' => 'change_password')); + } else { + $this->Common->flashMessage(__('Invalid Key'), 'error'); + } + + } elseif (!empty($this->request->data['Form']['login'])) { + $this->User->Behaviors->attach('Tools.Captcha'); + unset($this->User->validate['email']['isUnique']); + $this->User->set($this->request->data); + + // Validate basic email scheme and captcha input. + if ($this->User->validates()) { + $res = $this->User->find('first', array( + 'fields' => array('username', 'id', 'email'), + 'conditions' => array('email' => $this->request->data['Form']['login']))); + + // Valid user found to this email address + if (!empty($res)) { + $uid = $res['User']['id']; + $this->Token = ClassRegistry::init('Tools.Token'); + $cCode = $this->Token->newKey('reset_pwd', null, $uid); + if (Configure::read('debug') > 0) { + $debugMessage = 'DEBUG MODE: Show activation key - ' . h($res['User']['username']) . ' | ' . $cCode; + $this->Common->flashMessage($debugMessage, 'info'); + } + + // Send email + Configure::write('Email.live', true); + App::uses('EmailLib', 'Tools.Lib'); + $this->Email = new EmailLib(); + $this->Email->to($res['User']['email'], $res['User']['username']); + $this->Email->subject(Configure::read('Config.pageName') . ' - ' . __('Password request')); + $this->Email->template('lost_password'); + $this->Email->viewVars(compact('cCode')); + if ($this->Email->send()) { + // Confirmation output + App::uses('FormatHelper', 'Tools.View/Helper'); + $email = h(FormatHelper::hideEmail($res['User']['email'])); + + $this->Common->flashMessage(__('An email with instructions has been send to \'%s\'.', $email), 'success'); + $this->Common->flashMessage(__('In a third step you will then be able to change your password.'), 'success'); + } else { + $this->Common->flashMessage(__('Confirmation Email could not be sent. Please consult an admin.'), 'error'); + } + return $this->redirect(array('action' => 'lost_password')); + } + $this->Common->flashMessage(__('No account has been found for \'%s\'', $this->request->data['Form']['login']), 'error'); + } + } + + $this->helpers = array_merge($this->helpers, array('Tools.Captcha')); + } + + /** + * AccountController::change_password() + * + * @return void + */ + public function change_password() { + $uid = $this->Session->read('Auth.Tmp.id'); + if (empty($uid)) { + $this->Common->flashMessage(__('You have to find your account first and click on the link in the email you receive afterwards'), 'error'); + $this->redirect(array('action' => 'lost_password')); + } + + if ($this->request->query('abort')) { + if (!empty($uid)) { + $this->Session->delete('Auth.Tmp'); + } + $this->redirect(array('action' => 'login')); + } + + $this->User->Behaviors->load('Tools.Passwordable', array()); + if ($this->Common->isPosted()) { + if ($this->User->save($this->request->data)) { + $this->Common->flashMessage(__('new pw saved - you may now log in'), 'success'); + $this->Session->delete('Auth.Tmp'); + $username = $this->User->field('username', array('id' => $uid)); + $this->redirect(array('action' => 'login', '?' => array('username' => $username))); + } + $this->Common->flashMessage(__('formContainsErrors'), 'error'); + + // Pwd should not be passed to the view again for security reasons. + unset($this->request->data['User']['pwd']); + unset($this->request->data['User']['pwd_repeat']); + } + } + + /** + * AccountController::register() + * + * @return void + */ + public function register() { + $this->User->Behaviors->load('Tools.Passwordable', array()); + if ($this->Common->isPosted()) { + $this->request->data['User']['role_id'] = Configure::read('Role.user'); + if ($user = $this->User->save($this->request->data)) { + $this->Common->flashMessage(__('Account created'), 'success'); + if (!$this->Auth->login($user['User'])) { + throw new CakeException('Cannot log user in'); + } + return $this->redirect(array('controller' => 'overview', 'action' => 'index')); + } + $this->Common->flashMessage(__('formContainsErrors'), 'error'); + + # pw should not be passed to the view again for security reasons + unset($this->request->data['User']['pwd']); + unset($this->request->data['User']['pwd_repeat']); + } + } + + /** + * AccountController::index() + * + * @return void + */ + public function index() { + } + + /** + * AccountController::edit() + * + * @return void + */ + public function edit() { + $uid = $this->Session->read('Auth.User.id'); + $user = $this->User->get($uid); + $this->User->Behaviors->attach('Tools.Passwordable', array('require' => false)); + + if ($this->Common->isPosted()) { + $this->request->data['User']['id'] = $uid; + if ($this->User->save($this->request->data, true, array('id', 'username', 'email', 'irc_nick', 'pwd', 'pwd_repeat'))) { + $this->Common->flashMessage(__('Account modified'), 'success'); + if (!$this->Auth->login($user['User'])) { + throw new CakeException('Cannot log user in'); + } + return $this->redirect(array('action' => 'index')); + } + $this->Common->flashMessage(__('formContainsErrors'), 'error'); + + // Pwd should not be passed to the view again for security reasons. + unset($this->request->data['User']['pwd']); + unset($this->request->data['User']['pwd_repeat']); + } else { + $this->request->data = $user; + } + } + + /** + * AccountController::delete() + * + * @param mixed $id + * @return void + */ + public function delete($id = null) { + $this->request->onlyAllow('post', 'delete'); + $uid = $this->Session->read('Auth.User.id'); + if (!$this->User->delete($uid)) { + throw new InternalErrorException(); + } + $this->Common->flashMessage('Account deleted', 'success'); + return $this->redirect(array('action' => 'logout')); + } + +} diff --git a/Controller/AppController.php b/Controller/AppController.php new file mode 100644 index 00000000..1e5104fb --- /dev/null +++ b/Controller/AppController.php @@ -0,0 +1,118 @@ + array('className' => 'Tools.FormExt'), 'Tools.Common', 'Tools.Format', 'Tools.Datetime', 'Tools.Numeric'); + + public $paginate = array(); + + /** + * AppController::constructClasses() + * + * @return void + */ + public function constructClasses() { + if (CakePlugin::loaded('DebugKit')) { + $this->components[] = 'DebugKit.Toolbar'; + } + + parent::constructClasses(); + } + + /** + * AppController::beforeFilter() + * + * @return void + */ + public function beforeFilter() { + parent::beforeFilter(); + $this->Auth->authenticate = array( + 'Authenticate.MultiColumn' => array( + 'fields' => array( + 'username' => 'login', + 'password' => 'password' + ), + 'columns' => array('username', 'email'), + 'userModel' => 'User', + //'scope' => array('User.email_confirmed' => 1) + ) + ); + $this->Auth->authorize = array( + 'Tools.Tiny' => array() + ); + $this->Auth->logoutRedirect = array( + 'plugin' => false, + 'admin' => false, + 'controller' => 'overview', + 'action' => 'index'); + $this->Auth->loginRedirect = array( + 'plugin' => false, + 'admin' => false, + 'controller' => 'account', + 'action' => 'index'); + $this->Auth->loginAction = array( + 'plugin' => false, + 'admin' => false, + 'controller' => 'account', + 'action' => 'login'); + + $controllers = array('Pages'); + foreach ($controllers as $controller) { + if ($this->name === $controller) { + $this->Auth->allow(); + } + } + + $allowed = array('Account' => array('login', 'lost_password', 'register')); + if (!Auth::id()) { + return; + } + foreach ($allowed as $controller => $actions) { + if ($this->name === $controller && in_array($this->request->action, $actions)) { + $this->Common->flashMessage('The page you tried to access is not relevant if you are already logged in. Redirected to main page.', 'info'); + return $this->redirect($this->Auth->loginRedirect); + } + } + } + + /** + * AppController::beforeRender() + * + * @return void + */ + public function beforeRender() { + if ($this->request->is('ajax') && $this->layout === 'default') { + $this->layout = 'ajax'; + } + + # default title + if (empty($this->pageTitle)) { + $this->pageTitle = __(Inflector::humanize($this->request->action)) . ' | ' . __($this->name); + } + $this->set('title_for_layout', $this->pageTitle); + + if (true || $this->layout === 'default') { + $this->disableCache(); + } + + if ($m = $this->Session->read('Message.auth')) { + $this->Common->flashMessage($m['message'], 'error'); + $this->Session->delete('Message.auth'); + } + + parent::beforeRender(); + } + +} diff --git a/Controller/ContactController.php b/Controller/ContactController.php new file mode 100644 index 00000000..52a4dd24 --- /dev/null +++ b/Controller/ContactController.php @@ -0,0 +1,76 @@ +Auth->allow(); + } + + /** + * @return void + */ + public function index() { + if ($this->Common->isPosted()) { + + $name = $this->request->data['ContactForm']['name']; + $email = $this->request->data['ContactForm']['email']; + $message = $this->request->data['ContactForm']['message']; + $subject = $this->request->data['ContactForm']['subject']; + + if (!Auth::id()) { + $this->ContactForm->Behaviors->attach('Tools.Captcha'); + } + $this->ContactForm->set($this->request->data); + if ($this->ContactForm->validates()) { + $this->_send($name, $email, $subject, $message); + } else { + $this->Common->flashMessage(__('formContainsErrors'), 'error'); + } + + } else { + // prepopulate form + $this->request->data['ContactForm'] = $this->request->query; + + # try to autofill fields + $user = (array)$this->Session->read('Auth.User'); + if (!empty($user['email'])) { + $this->request->data['ContactForm']['email'] = $user['email']; + } + if (!empty($user['username'])) { + $this->request->data['ContactForm']['name'] = $user['username']; + } + } + + $this->set(compact('dropdowns')); + $this->helpers = array_merge($this->helpers, array('Tools.Captcha')); + } + + /** + * @return void + */ + protected function _send($fromName, $fromEmail, $subject, $message) { + $adminEmail = Configure::read('Config.admin_email'); + $adminEmailname = Configure::read('Config.admin_emailname'); + + // Send email to Admin + Configure::write('Email.live', true); + App::uses('EmailLib', 'Tools.Lib'); + $this->Email = new EmailLib(); + $this->Email->to($adminEmail, $adminEmailname); + + $this->Email->subject(Configure::read('Config.pageName') . ' - ' . __('contact via form')); + $this->Email->template('contact'); + $this->Email->viewVars(compact('message', 'subject', 'fromEmail', 'fromName')); + if ($this->Email->send()) { + $this->Common->flashMessage(__('contactSuccessfullySent %s', $fromEmail), 'success'); + return $this->redirect(array('action' => 'index')); + } + $this->Common->flashMessage(__('Contact Email could not be sent'), 'error'); + } + +} diff --git a/Controller/ExportController.php b/Controller/ExportController.php new file mode 100644 index 00000000..55d05e8d --- /dev/null +++ b/Controller/ExportController.php @@ -0,0 +1,117 @@ +Auth->allow(); + + if ($this->viewClass === 'View') { + return; + } + + if ($this->referer(null, true) !== '/export') { + throw new MethodNotAllowedException('Please do not use this as a webservice (the capacities are limited). Download the JSON or XML file and import it.'); + } + //die($this->referer(null, true)); + } + + /** + * ExportController::afterFilter() + * + * @return void + */ + public function afterFilter() { + parent::afterFilter(); + + if ($this->request->query('download')) { + $this->response->download($this->request->params['action'] . '.' . $this->request->params['ext']); + } + } + + public function index() { + } + + /** + * + */ + public function countries() { + $this->Country = ClassRegistry::init('Tools.Country'); + $countries = $this->Country->find('all', array('fields' => array())); + + $this->set(compact('countries')); + $this->set('_serialize', array('countries')); + } + + /** + * maybe with countries directly? + */ + public function country_provinces() { + $this->CountryProvince = ClassRegistry::init('Tools.CountryProvince'); + $countryProvinces = $this->CountryProvince->find('all', array('fields' => array())); + + $this->set(compact('countryProvinces')); + $this->set('_serialize', array('countryProvinces')); + } + + /** + * + */ + public function currencies() { + $this->Currency = ClassRegistry::init('Tools.Currency'); + $currencies = $this->Currency->find('all', array('fields' => array())); + + $this->set(compact('currencies')); + $this->set('_serialize', array('currencies')); + } + + /** + * + */ + public function languages() { + $this->Language = ClassRegistry::init('Tools.Language'); + $languages = $this->Language->find('all', array('fields' => array())); + + $this->set(compact('languages')); + $this->set('_serialize', array('languages')); + } + + /** + * + */ + public function continents() { + $this->Continent = ClassRegistry::init('Tools.Continent'); + $continents = $this->Continent->find('all', array('fields' => array())); + + $this->set(compact('continents')); + $this->set('_serialize', array('continents')); + } + + /** + * + */ + public function postal_codes() { + $this->PostalCode = ClassRegistry::init('Tools.PostalCode'); + $postalCodes = $this->PostalCode->find('all', array('fields' => array())); + + $this->set(compact('postalCodes')); + $this->set('_serialize', array('postalCodes')); + } + + /** + * and mime_type_images + */ + public function mime_types() { + } + +} + diff --git a/Controller/MiscController.php b/Controller/MiscController.php new file mode 100644 index 00000000..7d5716ca --- /dev/null +++ b/Controller/MiscController.php @@ -0,0 +1,123 @@ +Auth->allow('index', 'convert_text', 'analyze_text'); + } + + /** + * overview + * 2010-09-30 ms + */ + public function index() { + } + + public $types = array( + '1' => 'html encode', + '2' => 'html decode', + '3' => 'entity encode', + '4' => 'entity decode', + '5' => 'indent', + '6' => 'outdent' + ); + + /** + * 2010-09-30 ms + */ + public function convert_text() { + + if ($this->Common->isPosted()) { + $this->request->data['Form']['result'] = $this->_process($this->request->data['Form']['text'], $this->request->data['Form']['type']); + if (array_key_exists((string)$this->request->data['Form']['type'], $this->types)) { + $this->Common->flashMessage($this->types[(string)$this->request->data['Form']['type']] . ' done', 'success'); + } else { + $this->Common->flashMessage($this->types[(string)$this->request->data['Form']['type']] . ' not successfull', 'warning'); + } + } + + $types = $this->types; + $this->set(compact('types')); + } + + protected function _process($text, $type = null) { + if (empty($type)) { + # auto detect + $type = $this->_autoDetect($text); + $this->request->data['Form']['type'] = $type; + //return $text; + } + switch ($type) { + case '1': + $text = h($text); + break; + case '2': + $text = hDec($text); + + break; + case '3': + $text = ent($text); + break; + case '4': + $text = entDec($text); + break; + case '5': + $pieces = explode(NL, $text); + foreach ($pieces as $key => $val) { + $pieces[$key] = TB . $val; + } + $text = implode(NL, $pieces); + break; + case '6': + $pieces = explode(NL, $text); + foreach ($pieces as $key => $val) { + $pieces[$key] = mb_substr($val, 0, 1) === TB ? mb_substr($val, 1) : $val; + } + $text = implode(NL, $pieces); + break; + } + return $text; + } + + protected function _autoDetect($text) { + if (mb_strpos($text, '>') !== false || mb_strpos($text, '<') || mb_strpos($text, '&') || mb_strpos($text, '"')) { // || mb_strpos($text, ''') + return 2; + } + return 1; + } + + public function analyze_text() { + $results = array(); + + if ($this->Common->isPosted()) { + $results = $this->_analyze($this->request->data['Form']['text']); + } + + $this->set(compact('results')); + } + + protected function _analyze($text, $type = null) { + $res = array(); + if (empty($text)) { + return $res; + } + App::uses('TextLib', 'Tools.Utility'); + $textLib = new TextLib($text); + + ini_set('memory_limit', '128M'); + + $res['words'] = $textLib->wordCount($this->request->data['Form']); + $res['sentence_count'] = $textLib->getSentence(); + $res['paragraph_count'] = $textLib->getParagraph(); + $res['length'] = $textLib->getLength(); + $res['is_ascii'] = $textLib->isAscii(); + $res['word_count'] = $textLib->getWord(); + + return $res; + } + +} + diff --git a/Controller/OverviewController.php b/Controller/OverviewController.php new file mode 100644 index 00000000..78418341 --- /dev/null +++ b/Controller/OverviewController.php @@ -0,0 +1,21 @@ +Auth->allow('index'); + } + + public function index() { + } + + public function admin_index() { + } + +} diff --git a/Controller/PagesController.php b/Controller/PagesController.php new file mode 100644 index 00000000..b9c26bf1 --- /dev/null +++ b/Controller/PagesController.php @@ -0,0 +1,63 @@ +redirect('/'); + } + $page = $subpage = $title_for_layout = null; + + if (!empty($path[0])) { + $page = $path[0]; + } + if (!empty($path[1])) { + $subpage = $path[1]; + } + if (!empty($path[$count - 1])) { + $title_for_layout = Inflector::humanize($path[$count - 1]); + } + $this->set(compact('page', 'subpage', 'title_for_layout')); + + try { + $this->render(implode('/', $path)); + } catch (MissingViewException $e) { + if (Configure::read('debug')) { + throw $e; + } + throw new NotFoundException(); + } + } +} diff --git a/Locale/deu/LC_MESSAGES/default.po b/Locale/deu/LC_MESSAGES/default.po new file mode 100644 index 00000000..ebe8603c --- /dev/null +++ b/Locale/deu/LC_MESSAGES/default.po @@ -0,0 +1,834 @@ +/* als JAVASCRIPT highlighten zum Editieren! */ +msgid "" +msgstr "" +"Project-Id-Version: CakePHP 1.2.x.x\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2006-12-23 16:42+0100\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Country: GERMANY\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-Language: German\n" + +# Eigene neue: + +msgid "Translate String" +msgstr "This is a Translate String" + +msgid "Blogä@$€ posts" +msgstr "Blogü-Post" + +msgid "language_help" +msgstr "

Hilfe

Der 'Sprach-Wechsler' ist eigentlich hauptsächlich zu Präsentationszwecken da. Auf die ganze Seite bezogen wird dadurch nur sehr wenig übersetzt.
Falls eine andere Sprache als Englisch gesetzt wird, werden höchstens wichtige Seitenelemente und Links in der Sprache angezeigt.Was vielleicht demjenigen, der in Englisch nicht so bewandert ist, eine kleine Navigationshilfe geben kann.(Aber mal ehrlich, welcher deutsche - ernsthafte - Programmierer spricht kein englisch...)

An dieser Stelle möchte ich auch nochmal betonen, dass die Hauptsprache dieser Seite definitiv englisch ist - auch wenn ich selbst aus Deutschland bin.Es ist auf deiner einen Seite zu viel Arbeit, alles mehrsprachig anzubieten, auf der anderen Seite ist die deutsche CakePHP Community (noch) nicht groß genug, dass es Sinn machen würde.
Vielleicht ändert sich das ja in der Zukunft irgendwann.
Darum auch die Bitte, Code-Stücke, Verbesserungsvorschläge, Kommentare, Tipps etc. in englisch zu verfassen, oder es zumindest zu versuchen. Es muss ja nich das 'Business English' sein - aber auf diese Weise profitiert ein größerer Teil der Community von deinem Beitrag.

Danke, Mark" + + +msgid "pleaseSelect" +msgstr "bitte auswählen" + +#: \views\country_provinces\update_select.ctp:8 +#: \views\elements\user_search_form.ctp:17 +#: \views\user_infos\regional.ctp:13 +#: \views\users\admin_add.ctp:18 +#: \views\users\admin_edit.ctp:19 +#: \views\users\register.ctp:21 +msgid "noOptionAvailable" +msgstr "Keine Wahlmöglichkeit verfügbar" + +msgid "Blogä@$€ posts" +msgstr "Blogü-Post" + +msgid "lipsum" +msgstr "Blogü-Post df sdfhosdföos fhosdfh osdfhosd s" + +msgid "active" +msgstr "aktiv" + + +msgid "Language" +msgstr "Sprache" + +#### contact (Controller) + +msgid "Contact Us" +msgstr "Uns kontaktieren" + +msgid "Contact Owner" +msgstr "Besitzer kontaktieren" + +msgid "contactSuccessfullySent" +msgstr "Vielen Dank. Ich werde die E-Mail baldmöglichst beantworten." + +msgid "contactChoseSubject" +msgstr "Bitte wähle ein Betreff aus - oder bestimme selbst einen" + +msgid "Subject" +msgstr "Betreff" + +msgid "Message" +msgstr "Nachricht" + +msgid "Own Subject" +msgstr "Eigener Betreff" + +msgid "Email" +msgstr "E-Mail" + +msgid "contactHeader" +msgstr "Kontakt" + +msgid "contactLegend" +msgstr "So erreichst du uns am schnellsten" + +msgid "contactOwnSubject" +msgstr "eigenen Betreff" + +msgid "contactMessage" +msgstr "deine Nachricht" + +msgid "messageNew" +msgstr "ungelesene Nachricht" + +msgid "messageRead" +msgstr "gelesene Nachricht" + +msgid "messageAnswered" +msgstr "beantwortete Nachricht" + + + + +# fuelConsumption + +msgid "Milage" +msgstr "Tacho-Stand" + +msgid "Receipt Date" +msgstr "Datum" + +msgid "Total Cost" +msgstr "Kosten" + +msgid "Total Fuel" +msgstr "Getankt" + +msgid "Driven km" +msgstr "Gefahrene Km" + +msgid "Comment" +msgstr "Kommentar" + +# test + +msgid "Vielen Dank" +msgstr "Vielen Dank Äther" + +msgid "Change Language" +msgstr "Sprache wechseln" + + +#: cake/libs/overloadable_php4.php:63 +#: ;96 cake/libs/overloadable_php5.php:44 +#: ;56 +#, fuzzy +msgid "Magic method handler __call__ not defined in %s" +msgstr "Magic Method Handler __call__ wurde nicht definiert in %s" + +#: cake/libs/controller/components/acl_base.php:49 +#: cake/libs/controller/components/dbacl/models/aclnode.php:55 +#: ;125;200;219 +msgid "[acl_base] The AclBase class constructor has been called, or the class was instantiated. This class must remain abstract. Please refer to the Cake docs for ACL configuration." +msgstr "[acl_base] Der Konstruktor von AclBase wurde aufgerufen, oder die Klasse wurde instanziiert. Diese Klasse muss jedoch abstrakt bleiben. Siehe auch die Cake Dokumentation zum Thema \"ACL configuration\"." + +#: cake/libs/view/templates/errors/missing_action.ctp:30 +#: cake/libs/view/templates/errors/missing_connection.ctp:31 +msgid "If you want to customize this error message, create %s." +msgstr "Um diese Fehlermeldung anzupassen, erstelle %s." + +msgid "%s could not be found." +msgstr "%s Konnte nicht gefunden werden." + +#: cake/libs/view/templates/errors/missing_action.ctp:31 +#: cake/libs/view/templates/errors/missing_component_class.ctp:33 +#: cake/libs/view/templates/errors/missing_component_file.ctp:31 +#: cake/libs/view/templates/errors/missing_connection.ctp:32 +#: cake/libs/view/templates/errors/missing_controller.ctp:32 +#: cake/libs/view/templates/errors/missing_helper_class.ctp:31 +#: cake/libs/view/templates/errors/missing_helper_file.ctp:31 +#: cake/libs/view/templates/errors/missing_layout.ctp:31 +#: cake/libs/view/templates/errors/missing_model.ctp:31 +#: cake/libs/view/templates/errors/missing_scaffolddb.ctp:31 +#: cake/libs/view/templates/errors/missing_view.ctp:31 +msgid "Fatal" +msgstr "Fatal" + +#: cake/libs/view/templates/errors/missing_component_class.ctp:31 +#: cake/libs/view/templates/errors/missing_component_file.ctp:29 +#: cake/libs/view/templates/errors/missing_connection.ctp:30 +#: cake/libs/view/templates/errors/missing_controller.ctp:30 +#: cake/libs/view/templates/errors/missing_helper_class.ctp:29 +#: cake/libs/view/templates/errors/missing_helper_file.ctp:29 +#: cake/libs/view/templates/errors/missing_layout.ctp:29 +#: cake/libs/view/templates/errors/missing_model.ctp:29 +#: cake/libs/view/templates/errors/missing_scaffolddb.ctp:29 +#: cake/libs/view/templates/errors/missing_table.ctp:29 +#: cake/libs/view/templates/errors/missing_view.ctp:29 +#: cake/libs/view/templates/errors/private_action.ctp:29 +#: cake/libs/view/templates/errors/scaffold_error.ctp:29 +#, fuzzy +msgid "Notice" +msgstr "Hinweis" + +#: cake/libs/view/templates/errors/missing_component_class.ctp:32 +#: cake/libs/view/templates/errors/missing_component_file.ctp:30 +#: cake/libs/view/templates/errors/missing_controller.ctp:31 +#: cake/libs/view/templates/errors/missing_helper_class.ctp:30 +#: cake/libs/view/templates/errors/missing_helper_file.ctp:30 +#: cake/libs/view/templates/errors/missing_layout.ctp:30 +#: cake/libs/view/templates/errors/missing_model.ctp:30 +#: cake/libs/view/templates/errors/missing_scaffolddb.ctp:30 +#: cake/libs/view/templates/errors/missing_table.ctp:30 +#: cake/libs/view/templates/errors/missing_view.ctp:30 +#: cake/libs/view/templates/errors/private_action.ctp:30 +#: cake/libs/view/templates/errors/scaffold_error.ctp:30 +msgid "If you want to customize this error message, create %s" +msgstr "Um diese Fehlermeldung anzupassen, erstelle %s" + +#: cake/libs/view/templates/errors/missing_component_class.ctp:34 +#: cake/libs/view/templates/errors/missing_component_file.ctp:32 +#: cake/libs/view/templates/errors/missing_controller.ctp:33 +#: cake/libs/view/templates/errors/missing_helper_class.ctp:32 +#: cake/libs/view/templates/errors/missing_helper_file.ctp:32 +#: cake/libs/view/templates/errors/missing_model.ctp:32 +msgid "Create the class below in file: %s" +msgstr "Erstelle die untenstehende Klasse in Datei: %s" + +#: cake/libs/view/templates/errors/missing_layout.ctp:32 +#: cake/libs/view/templates/errors/missing_scaffolddb.ctp:32 +#: cake/libs/view/templates/errors/missing_view.ctp:32 +msgid "Confirm you have created the file: %s" +msgstr "Bestätige, dass die Datei %s erstellt wurde" + +#: cake/libs/view/templates/scaffolds/add.thtml:34 +#: cake/libs/view/templates/scaffolds/edit.thtml:39 +msgid "List " +msgstr "Auflisten" + +#: cake/libs/view/templates/scaffolds/add.thtml:38 +#: cake/libs/view/templates/scaffolds/edit.thtml:43 +msgid "View " +msgstr "Anzeigen" + +#: cake/libs/view/templates/scaffolds/add.thtml:39 +#: cake/libs/view/templates/scaffolds/edit.thtml:44 +msgid "Add " +msgstr "Hinzufügen" + +#: cake/libs/view/templates/scaffolds/index.thtml:75 +#: cake/libs/view/templates/scaffolds/view.thtml:138 +#: ;144 +msgid "View" +msgstr "Anzeigen" + +#: cake/libs/view/templates/scaffolds/index.thtml:76 +#: cake/libs/view/templates/scaffolds/view.thtml:139 +#: ;145 +msgid "Edit" +msgstr "Bearbeiten" + +#: cake/libs/view/templates/scaffolds/index.thtml:77 +#: cake/libs/view/templates/scaffolds/view.thtml:140 +#: ;146 +msgid "Delete" +msgstr "Löschen" + +#: cake/libs/view/templates/scaffolds/index.thtml:77 +#: cake/libs/view/templates/scaffolds/view.thtml:63 +#: ;140;146 +msgid "Are you sure you want to delete id %s?" +msgstr "Soll Id %s gelöscht werden?" + +#: cake/libs/view/templates/scaffolds/index.thtml:86 +#: cake/libs/view/templates/scaffolds/view.thtml:155 +msgid "New " +msgstr "Neu" + +#: cake/basics.php:96 +msgid "Plugins must have a class named %s" +msgstr "Plugins müssen eine Klasse %s besitzen" + +#: cake/basics.php:1265 +msgid "Deprecated: Use Set::countDim instead" +msgstr "Deprecated: Verwende stattdessen Set::countDim" + +#: cake/libs/configure.php:213 +msgid "Configure::load() - %s.php not found" +msgstr "Configure::load() - %s.php wurde nicht gefunden" + +#: cake/libs/configure.php:219 +msgid "Configure::load() - no variable $config found in %s.php" +msgstr "Configure::load() - es wurde keine Variable $config in %s.php gefunden" + +#: cake/libs/error.php:123 +msgid "The requested address %s was not found on this server." +msgstr "Die angeforderte Adresse %s wurde nicht gefunden auf diesem Server." + +#: cake/libs/folder.php:281 +msgid "chmodr() File exists" +msgstr "chmodr() Datei existiert" + +#: cake/libs/folder.php:308 +msgid "mkdirr() File exists" +msgstr "mkdirr() Datei existiert" + +#: cake/libs/validation.php:302 +msgid "You must define the $operator parameter for Validation::comparison()" +msgstr "Der Parameter $operator muss definiert sein für Validation::comparison() " + +#: cake/libs/validation.php:325 +msgid "You must define a regular expression for Validation::custom()" +msgstr "Ein regulärer Ausdruck muss definiert sein für Validation::custom()" + +#: cake/libs/controller/controller.php:255 +#, fuzzy +msgid "Controller::__construct() : Can not get or parse my own class name, exiting." +msgstr "Controller::__construct() : Der eigene Klassenname kann nicht geparst werden." + +#: cake/libs/controller/controller.php:605 +msgid "Deprecated: Use Controller::set(\"title\", \"...\") instead" +msgstr "Deprecated: Verwende stattdessen Controller::set(\"title\", \"...\")" + +#: cake/libs/controller/components/security.php:352 +msgid "SecurityComponent::loginCredentials() - Server does not support digest authentication" +msgstr "SecurityComponent::loginCredentials() - Der Server unterstützt nicht Digest Authentication" + +#: cake/libs/controller/components/dbacl/db_acl.php:85 +#, fuzzy +msgid "ACO permissions key %s does not exist in DB_ACL::check()" +msgstr "ACO Permissions-Schlüssel %s existiert nicht in DB_ACL::check()" + +#: cake/libs/controller/components/dbacl/db_acl.php:144 +msgid "DB_ACL::allow() - Invalid node" +msgstr "DB_ACL::allow() - Ungültiger Node" + +#: cake/libs/controller/components/dbacl/db_acl.php:162 +msgid "DB_ACL::allow() - Invalid ACO action" +msgstr "DB_ACL::allow() - Ungültige ACO Aktion" + +#: cake/libs/controller/components/dbacl/db_acl.php:231 +msgid "Null id provided in DB_ACL::get" +msgstr "Null id wurde übergeben in DB_ACL::get" + +#: cake/libs/controller/components/dbacl/models/aclnode.php:70 +msgid "Null parent in %s::create()" +msgstr "Null parent in %s::create()" + +#: cake/libs/model/connection_manager.php:110 +msgid "ConnectionManager::getDataSource - Non-existent data source %s" +msgstr "ConnectionManager::getDataSource - Datasource %s existiert nicht" + +#: cake/libs/model/connection_manager.php:163 +msgid "Unable to load DataSource file %s.php" +msgstr "DataSource file %s.php konnte nicht geladen werden" + +#: cake/libs/model/datasources/dbo_source.php:305 +msgid "Deprecated: Use DboSource::fetchRow() instead" +msgstr "Deprecated: Verwende stattdessen DboSource::fetchRow()" + +#: cake/libs/model/datasources/dbo_source.php:313 +msgid "Deprecated: Use DboSource::fetchRow($sql) instead" +msgstr "Deprecated: Verwende stattdessen DboSource::fetchRow($sql)" + +#: cake/libs/model/datasources/dbo_source.php:1557 +msgid "Implement in DBO" +msgstr "In DBO implementieren" + +#: cake/libs/model/datasources/dbo/dbo_pear.php:79 +msgid "Please implement DBO::disconnect() first." +msgstr "Bitte zuerst DBO::disconnect() implementieren." + +#: cake/libs/model/datasources/dbo/dbo_pear.php:131 +msgid "Please implement DBO_Pear::tablesList() for your database driver." +msgstr "Implementiere DBO_Pear::tablesList() für den Datenbank-Treiber." + +#: cake/libs/view/helper.php:134 +#, fuzzy +msgid "Method %1$s::%2$s does not exist" +msgstr "Methode %s::%s existiert nicht" + +#: cake/libs/view/view.php:325 +msgid "Error in view %s, got:
%s
" +msgstr "Fehler in View %s:
%s
" + +#: cake/libs/view/view.php:429 +msgid "Error in layout %s, got:
%s
" +msgstr "Fehler im Layout %s:
%s
" + +#: cake/libs/view/view.php:488 +msgid "(View::setLayout) Deprecated: Use $this->layout = \"...\" instead" +msgstr "(View::setLayout) Deprecated: Verwende stattdessen $this->layout = \"...\"" + +#: cake/libs/view/helpers/form.php:88 +msgid "Model %s does not exist" +msgstr "Model %s existiert nicht" + +#: cake/libs/view/helpers/form.php:470 +msgid "Don't use me yet" +msgstr "Bitte noch nicht verwenden" + +#: cake/libs/view/helpers/form.php:662 +msgid "Deprecated: Use FormHelper::input() or FormHelper::text() instead" +msgstr "Deprecated: Verwende stattdessen FormHelper::input() oder FormHelper::text()" + +#: cake/libs/view/helpers/form.php:686 +msgid "Deprecated: Use FormHelper::input() or FormHelper::checkbox() instead" +msgstr "Deprecated: Verwende stattdessen FormHelper::input() oder FormHelper::checkbox()" + +#: cake/libs/view/helpers/form.php:709 +#: ;732;754;777;834 +msgid "Deprecated: Use FormHelper::input() instead" +msgstr "Deprecated: Verwende stattdessen FormHelper::input()" + +#: cake/libs/view/helpers/form.php:803 +msgid "Deprecated: Use FormHelper::input() or FormHelper::select() instead" +msgstr "Deprecated: Verwende stattdessen FormHelper::input() oder FormHelper::select()" + +#: cake/libs/view/helpers/form.php:826 +msgid "Deprecated: Use FormHelper::submit() instead" +msgstr "Deprecated: Verwende stattdessen FormHelper::submit()" + +#: cake/libs/view/helpers/form.php:951 +msgid "Deprecated: Use FormHelper::label() instead" +msgstr "Deprecated: Verwende stattdessen FormHelper::label()" + +#: cake/libs/view/helpers/html.php:673 +msgid "(HtmlHelper::formTag) Deprecated: Use FormHelper::create instead" +msgstr "(HtmlHelper::formTag) Deprecated: Verwende stattdessen FormHelper::create" + +#: cake/libs/view/helpers/html.php:719 +msgid "(HtmlHelper::linkEmail) Deprecated: Use HtmlHelper::link instead" +msgstr "(HtmlHelper::linkEmail) Deprecated: Verwende stattdessen HtmlHelper::link" + +#: cake/libs/view/helpers/javascript.php:152 +msgid "(JavascriptHelper::linkOut) Deprecated: Use JavascriptHelper::link instead" +msgstr "(JavascriptHelper::linkOut) Deprecated: Verwende stattdessen JavascriptHelper::link" + +#: cake/libs/view/templates/elements/dump.ctp:28 +msgid "Controller dump:" +msgstr "Controller Dump:" + +#: cake/libs/view/templates/errors/missing_action.ctp:28 +msgid "Missing Method in %s" +msgstr "Fehlende Methode in %s" + +#: cake/libs/view/templates/errors/missing_action.ctp:29 +msgid "You are seeing this error because the action %1$s is not defined in controller %2$s" +msgstr "Dieser Fehler wird angezeigt weil die Action %1$s nicht definiert ist im Controller %2$s" + +#: cake/libs/view/templates/errors/missing_action.ctp:32 +msgid ": Confirm you have created the %1$s::%2$s in file : %3$s." +msgstr ": Bestätige, dass %1$s::%2$s in der Datei : %3$s erstellt wurde" + +#: cake/libs/view/templates/errors/missing_component_class.ctp:27 +msgid "Missing Component Class" +msgstr "Fehlende Component Klasse" + +#: cake/libs/view/templates/errors/missing_component_class.ctp:29 +msgid "You are seeing this error because the component class %1$s you have set in %2$s can't be found or doesn't exist." +msgstr "Dieser Fehler wird angezeigt weil die Component Klasse %1$s, definiert in %2$s, nicht gefunden wurde oder nicht existiert." + +#: cake/libs/view/templates/errors/missing_component_file.ctp:27 +msgid "Missing Component File" +msgstr "Fehlende Component Datei" + +#: cake/libs/view/templates/errors/missing_component_file.ctp:28 +msgid "You are seeing this error because the component file can not be found or does not exist." +msgstr "Dieser Fehler wird angezeigt weil die Component Datei nicht gefunden wurde oder nicht existiert." + +#: cake/libs/view/templates/errors/missing_connection.ctp:27 +msgid "Requires a Database Connection" +msgstr "Benötigt eine Datenbankverbindung" + +#: cake/libs/view/templates/errors/missing_connection.ctp:28 +#: ;33 +msgid "Confirm you have created the file : %s." +msgstr "Bestätige, dass die Datei %s erstellt wurde." + +#: cake/libs/view/templates/errors/missing_connection.ctp:29 +msgid "Missing Database Connection: %s requires a database connection" +msgstr "Fehlende Datenbankverbindung: %s benötigt eine Datenbankverbindung" + +#: cake/libs/view/templates/errors/missing_controller.ctp:27 +msgid "Missing controller" +msgstr "Fehlender Controller" + +#: cake/libs/view/templates/errors/missing_controller.ctp:28 +msgid "You are seeing this error because controller %s could not be found." +msgstr "Dieser Fehler wird angezeigt, weil der Controller %s nicht gefunden wurde." + +#: cake/libs/view/templates/errors/missing_helper_class.ctp:27 +msgid "Missing Helper Class" +msgstr "Fehlende Helper Klasse" + +#: cake/libs/view/templates/errors/missing_helper_class.ctp:28 +msgid "You are seeing this error because the view helper class %s can not be found or does not exist." +msgstr "Dieser Fehler wird angezeigt, weil die View Helper Klasse %s nicht gefunden wurde, oder nicht existiert." + +#: cake/libs/view/templates/errors/missing_helper_file.ctp:27 +msgid "Missing Helper File" +msgstr "Fehlende Helper Datei" + +#: cake/libs/view/templates/errors/missing_helper_file.ctp:28 +msgid "You are seeing this error because the view helper file %s can not be found or does not exist." +msgstr "Dieser Fehler wird angezeigt, weil die View Helper Datei %s nicht gefunden wurde oder nicht existiert." + +#: cake/libs/view/templates/errors/missing_layout.ctp:27 +msgid "Missing Layout" +msgstr "Fehlendes Layout" + +#: cake/libs/view/templates/errors/missing_layout.ctp:28 +msgid "You are seeing this error because the layout file %s can not be found or does not exist." +msgstr "Dieser Fehler wird angezeigt, weil die Layout Datei %s nicht gefunden wurde oder nicht existiert." + +#: cake/libs/view/templates/errors/missing_model.ctp:27 +msgid "Missing Model" +msgstr "Fehlendes Model" + +#: cake/libs/view/templates/errors/missing_model.ctp:28 +msgid "No class found for the %s model." +msgstr "Es wurde keine Klasse gefunden für das %s Model." + +#: cake/libs/view/templates/errors/missing_scaffolddb.ctp:27 +msgid "Scaffold Requires a Database Connection" +msgstr "Scaffold benötigt eine Datenbankverbindung" + +#: cake/libs/view/templates/errors/missing_scaffolddb.ctp:28 +msgid "Missing Database Connection: Scaffold Does not work without a database connection" +msgstr "Fehlende Datenbankverbindung: Scaffold funktioniert nicht ohne Datenbankverbindung" + +#: cake/libs/view/templates/errors/missing_table.ctp:27 +msgid "Missing Database Table" +msgstr "Fehlende Datenbanktabelle" + +#: cake/libs/view/templates/errors/missing_table.ctp:28 +msgid "No Database table for model %1$s (expected %2$s), create it first." +msgstr "Keine Datenbanktabelle für Model %1$s vorhanden (erwartet %2$s). Erstelle zuerst diese Tabelle." + +#: cake/libs/view/templates/errors/missing_view.ctp:27 +msgid "Missing view" +msgstr "Fehlende View" + +#: cake/libs/view/templates/errors/missing_view.ctp:28 +msgid "You are seeing this error because the view for %1$s::%2$s(), could not be found." +msgstr "Dieser Fehler wird angezeigt, weil die View für %1$s::%2$s() nicht gefunden wurde." + +#: cake/libs/view/templates/errors/private_action.ctp:27 +msgid "Private Method in %s" +msgstr "Private Methode in %s" + +#: cake/libs/view/templates/errors/private_action.ctp:28 +msgid "You are seeing this error because the private class method %s should not be accessed directly." +msgstr "Dieser Fehler wird angezeigt, weil auf die private Methode %s nicht direkt zugegriffen werden kann." + +#: cake/libs/view/templates/errors/scaffold_error.ctp:27 +msgid "Scaffold Error" +msgstr "Scaffold Fehler" + +#: cake/libs/view/templates/errors/scaffold_error.ctp:28 +msgid "Your must implement the following method in your controller" +msgstr "Folgende Methode muss im Controller implementiert werden" + +#: cake/libs/view/templates/layouts/default.ctp:40 +#, fuzzy +msgid "CakePHP Rapid Development" +msgstr "Das Rapid Development Framework" + +#: cake/libs/view/templates/scaffolds/add.thtml:31 +msgid "Add" +msgstr "Hinzufügen" + +#: cake/libs/view/templates/scaffolds/edit.thtml:32 +msgid "Save" +msgstr "Speichern" + +#: cake/libs/view/templates/scaffolds/edit.thtml:37 +msgid "Delete " +msgstr "Löschen" + +#: cake/libs/view/templates/scaffolds/index.thtml:40 +msgid "Actions" +msgstr "Aktionen" + +#: cake/libs/view/templates/scaffolds/view.thtml:32 +msgid "View %s" +msgstr "Zeige %s an" + +#: cake/libs/view/templates/scaffolds/view.thtml:62 +#: ;98 +msgid "Edit %s" +msgstr "%s bearbeiten" + +#: cake/libs/view/templates/scaffolds/view.thtml:63 +msgid "Delete %s" +msgstr "%s löschen" + +#: cake/libs/view/templates/scaffolds/view.thtml:64 +#: ;69 +msgid "List %s" +msgstr " %s auflisten" + +#: cake/libs/view/templates/scaffolds/view.thtml:65 +#: ;100 +msgid "New %s" +msgstr " %s erstellen" + +#: cake/libs/view/templates/scaffolds/view.thtml:70 +msgid "Add %s" +msgstr "%s hinzufügen" + +#: cake/libs/view/templates/scaffolds/view.thtml:82 +#: ;117 +msgid "Related %s" +msgstr "Zusammengehörige %s" + +#: cake/scripts/acl.php:91 +msgid "" +"Unable to find /app/config/database.php. Please create it before continuing.\n" +"\n" +msgstr "" +"/app/config/database.php konnte nicht gefunden werden. Diese Datei muss erstellt werden, bevor weitergefahren werden kann.\n" +"\n" + +#: cake/scripts/bake.php:1892 +msgid "File exists, overwrite?" +msgstr "Datei existiert bereits. Soll sie überschrieben werden?" + +#: cake/scripts/bake.php:1896 +#, fuzzy +msgid "Quitting." +msgstr "Verlassend." + +#: cake/scripts/bake.php:1902 +msgid "Skip" +msgstr "Überspringen" + +#: cake/scripts/bake.php:1910 +msgid "Wrote" +msgstr "Geschrieben" + +#: cake/scripts/bake.php:1913 +#, fuzzy +msgid "Error! Could not write to" +msgstr "Fehler! Es konnte nicht geschrieben werden zu" + +#: cake/scripts/templates/skel/webroot/css.php:68 +#: ;76 +msgid "Wrong file name." +msgstr "Falscher Dateiname." + +#: cake/libs/view/templates/pages/home.ctp:27 +msgid "Your database configuration file is %s." +msgstr "Die Datenbankkonfigurationsdatei ist %s." + +#: cake/libs/view/templates/pages/home.ctp:27 +msgid "present" +msgstr "vorhanden" + +#: cake/libs/view/templates/pages/home.ctp:27 +msgid "not present" +msgstr "nicht vorhanden" + +#: cake/libs/view/templates/pages/home.ctp:31 +msgid "Cake %s connect to the database." +msgstr "Cake %s eine Verbindung mit der Datenbank herstellen." + +#: cake/libs/view/templates/pages/home.ctp:31 +msgid "is able to" +msgstr "kann" + +#: cake/libs/view/templates/pages/home.ctp:31 +msgid "is not able to" +msgstr "kann nicht" + +#: cake/libs/view/templates/pages/home.ctp:34 +msgid "CakePHP release information is on CakeForge" +msgstr "CakePHP Release Informationen sind zu finden auf CakeForge" + +#: cake/libs/view/templates/pages/home.ctp:35 +msgid "Read the release notes and get the latest version" +msgstr "Lies die Release Informationen und besorge die aktuellste Version" + +#: cake/libs/view/templates/pages/home.ctp:36 +msgid "Editing this Page" +msgstr "Diese Seite bearbeiten" + +#: cake/libs/view/templates/pages/home.ctp:38 +msgid "To change the content of this page, create: /app/views/pages/home.thtml." +msgstr "Um den Inhalt dieser Seite zu ändern, erstelle: /app/views/pages/home.thtml." + +#: cake/libs/view/templates/pages/home.ctp:39 +msgid "To change its layout, create: /app/views/layouts/default.thtml." +msgstr "Um das Layout zu ändern, erstelle: /app/views/layouts/default.thtml." + +#: cake/libs/view/templates/pages/home.ctp:40 +msgid "See the views section of the manual for more info." +msgstr "Für weitere Informationen siehe das \"Views\"-Kapitel im Manual ." + +#: cake/libs/view/templates/pages/home.ctp:41 +msgid "You can also add some CSS styles for your pages at: app/webroot/css/." +msgstr "Definiere weitere CSS Styles in: app/webroot/css/." + +#: cake/libs/view/templates/pages/home.ctp:43 +msgid "More about Cake" +msgstr "Mehr über Cake" + +#: cake/libs/view/templates/pages/home.ctp:45 +msgid "CakePHP is a rapid development framework for PHP which uses commonly known design patterns like Active Record, Association Data Mapping, Front Controller and MVC." +msgstr "CakePHP ist ein Rapid Development Framework für PHP welches allgemein bekannte Design Patterns wie Active Record, Association Data Mapping, Front Controller und MVC verwendet." + +#: cake/libs/view/templates/pages/home.ctp:48 +msgid "Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility." +msgstr "Unser primäres Ziel ist es, ein strukturiertes Framework zur Verfügung zu stellen, um PHP Benutzern aller Stufen zu ermöglichen, schnell robuste Web Applikationen zu erstellen, ohne Verlust von Flexibilität." + +#: cake/libs/view/templates/pages/home.ctp:51 +msgid "Cake Software Foundation" +msgstr "Cake Software Foundation" + +#: cake/libs/view/templates/pages/home.ctp:52 +msgid "Promoting development related to CakePHP" +msgstr "Fördern der Entwicklung bezüglich CakePHP" + +#: cake/libs/view/templates/pages/home.ctp:53 +msgid "The Bakery" +msgstr "The Bakery" + +#: cake/libs/view/templates/pages/home.ctp:54 +msgid "Everything CakePHP" +msgstr "Alles über CakePHP" + +#: cake/libs/view/templates/pages/home.ctp:55 +msgid "Book Store" +msgstr "Bücher-Shop" + +#: cake/libs/view/templates/pages/home.ctp:56 +msgid "Recommended Software Books" +msgstr "Empfohlene Software-Bücher" + +#: cake/libs/view/templates/pages/home.ctp:57 +msgid "CakeSchwag" +msgstr "CakeSchwag" + +#: cake/libs/view/templates/pages/home.ctp:58 +msgid "Get your own CakePHP gear - Doughnate to Cake" +msgstr "Kauf CakePHP Artikel - und unterstütze damit Cake" + +#: cake/libs/view/templates/pages/home.ctp:59 +msgid "CakePHP" +msgstr "CakePHP" + +#: cake/libs/view/templates/pages/home.ctp:60 +msgid "The Rapid Development Framework" +msgstr "Das Rapid Development Framework" + +#: cake/libs/view/templates/pages/home.ctp:61 +msgid "CakePHP Manual" +msgstr "CakePHP Manual" + +#: cake/libs/view/templates/pages/home.ctp:62 +msgid "Your Rapid Development Cookbook" +msgstr "Das CakePHP Kochbuch" + +#: cake/libs/view/templates/pages/home.ctp:63 +msgid "CakePHP Wiki" +msgstr "CakePHP Wiki" + +#: cake/libs/view/templates/pages/home.ctp:64 +msgid "The Community for CakePHP" +msgstr "Die Community für CakePHP" + +#: cake/libs/view/templates/pages/home.ctp:65 +msgid "CakePHP API" +msgstr "CakePHP API" + +#: cake/libs/view/templates/pages/home.ctp:66 +msgid "Docblock Your Best Friend" +msgstr "API Dokumentation" + +#: cake/libs/view/templates/pages/home.ctp:67 +msgid "CakeForge" +msgstr "CakeForge" + +#: cake/libs/view/templates/pages/home.ctp:68 +msgid "Open Development for CakePHP" +msgstr "Open Source Entwicklung mit CakePHP" + +#: cake/libs/view/templates/pages/home.ctp:69 +msgid "CakePHP Trac" +msgstr "CakePHP Trac" + +#: cake/libs/view/templates/pages/home.ctp:70 +msgid "For the Development of CakePHP (Tickets, SVN browser, Roadmap, Changelogs)" +msgstr "Bereich für Entwickler (Tickets, SVN Browser, Roadmap, Changelogs)" + +#: cake/libs/view/templates/pages/home.ctp:71 +msgid "CakePHP Google Group" +msgstr "CakePHP Google Group" + +#: cake/libs/view/templates/pages/home.ctp:72 +msgid "Community mailing list" +msgstr "Community Mailingliste" + +#: cake/libs/view/templates/pages/home.ctp:74 +msgid "Live chat about CakePHP" +msgstr "Live Chat über CakePHP" + +#: cake/libs/controller/scaffold.php:116 +msgid "Scaffold :: " +msgstr "Scaffold :: " + +#: cake/libs/controller/scaffold.php:150 +#: ;153 +msgid "No id set for %s::view()" +msgstr "Keine Id gesetzt für %s::view()" + +#: cake/libs/controller/scaffold.php:223 +#: ;226 +msgid "No id set for %s::edit()" +msgstr "Keine Id gesetzt für %s::edit()" + +#: cake/libs/controller/scaffold.php:260 +msgid "updated" +msgstr "aktualisiert" + +#: cake/libs/controller/scaffold.php:266 +msgid "saved" +msgstr "gespeichert" + +#: cake/libs/controller/scaffold.php:287 +#: ;291 +#, fuzzy +msgid "The %1$s has been %2$s" +msgstr "Der %1$s wurde %2$s" + +#: cake/libs/controller/scaffold.php:298 +msgid "Please correct errors below." +msgstr "Bitte die untenstehenden fehler beheben." + +#: cake/libs/controller/scaffold.php:330 +#: ;333 +msgid "No id set for %s::delete()" +msgstr "Keine Id gesetzt für %s::delete()" + +#: cake/libs/controller/scaffold.php:339 +#: ;342 +#, fuzzy +msgid "The %1$s with id: %2$d has been deleted." +msgstr "Der %1$s mit Id %2$d wurde gelöscht." + +#: cake/libs/controller/scaffold.php:346 +#: ;349 +#, fuzzy +msgid "There was an error deleting the %1$s with id: %2$d" +msgstr "Es ist ein Fehler aufgetreten beim Löschen von %1$s mit der Id %2$d" + diff --git a/Locale/eng/LC_MESSAGES/default.po b/Locale/eng/LC_MESSAGES/default.po new file mode 100644 index 00000000..7aff32c1 --- /dev/null +++ b/Locale/eng/LC_MESSAGES/default.po @@ -0,0 +1,59 @@ +/* als JAVASCRIPT highlighten zum Editieren! */ +msgid "" +msgstr "" +"Project-Id-Version: CakePHP 1.2.x.x\n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2006-12-23 16:42+0100\n" +"Last-Translator: Daniel Hofstetter \n" +"Language-Team: CakePHP I18N & I10N Team \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Poedit-Country: UNITED STATES\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-Language: English\n" + +# Contact + +msgid "contactChoseSubject" +msgstr "Please chose a subject or define one yourself" + +msgid "contactHeader" +msgstr "Contact me" + +msgid "contactLegend" +msgstr "The fastest way to contact me" + +msgid "contactOwnSubject" +msgstr "Own subject" + +msgid "contactMessage" +msgstr "Your message" + +msgid "valErrMandatoryField" +msgstr "Mandatory field" + +msgid "valErrInvalidEmail" +msgstr "Invalid eMail" + + +# Eigene neue: + +msgid "language_help" +msgstr "

Help

sf
Thx, Mark" + + +msgid "Blogä@$€ posts" +msgstr "" + +msgid "lipsum" +msgstr "" + + +msgid "Vielen Dank" +msgstr "Vielen Äther" + + +msgid "Zuruck" +msgstr "Zurück!" \ No newline at end of file diff --git a/Model/AppModel.php b/Model/AppModel.php new file mode 100644 index 00000000..c129d282 --- /dev/null +++ b/Model/AppModel.php @@ -0,0 +1,6 @@ + array( + 'notEmpty' => array( + 'rule' => array('notEmpty'), + 'message' => 'Mandatory', + 'last' => true + ), + 'isUnique' => array( + 'rule' => 'isUnique', + 'message' => 'Username already exists', + 'last' => true + ), + ), + 'email' => array( + 'email' => array( + 'rule' => array('email'), + 'message' => 'Email invalid', + 'last' => true + ), + 'unique' => array( + 'rule' => array('isUnique'), + 'message' => 'Email already exists', + //'last' => true + ), + ), + ); + + public $hasMany = array( + 'Codesnippet' => array( + 'className' => 'Codesnippet', + 'foreignKey' => 'user_id', + 'dependent' => false, + 'conditions' => '', + 'fields' => '', + 'order' => '', + 'limit' => '', + ), + ); + +} + diff --git a/README.md b/README.md new file mode 100644 index 00000000..edcc64fa --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# CakePHP Sandbox APP + +A sandbox app to showcase Cake features and tools as well as a sandbox for tryouts. + +* Check it out live: http://cakephp.dereuromark.de +* Author: Mark Scherer alias dereuromark + + +### Dependencies + +* CakePHP 2.4/2.5 +* Ceerams Authenticate plugin +* My Tools plugin + + +### TODOS + +* OptIn/Registration + +#### Ideas + +* Timezone +* More stuff \ No newline at end of file diff --git a/View/Account/change_password.ctp b/View/Account/change_password.ctp new file mode 100644 index 00000000..1bf9f241 --- /dev/null +++ b/View/Account/change_password.ctp @@ -0,0 +1,22 @@ +

+ +
+Form->create('User');?> +
+ + Form->input('pwd', array('type' => 'password', 'autocomplete' => 'off')); + echo $this->Form->input('pwd_repeat', array('type' => 'password', 'autocomplete' => 'off')); + ?> +
+Form->end(__('Submit'));?> +
+ +

+ +
+
    +
  • I do remember again. Html->link(__('Abort'), array('action' => 'lost_password', '?' => array('abort'=>1)), null, __('Sure?'));?>
  • +
  • Html->link(__('Login instead'), array('action' => 'login'));?>
  • +
+
\ No newline at end of file diff --git a/View/Account/edit.ctp b/View/Account/edit.ctp new file mode 100644 index 00000000..8a31affd --- /dev/null +++ b/View/Account/edit.ctp @@ -0,0 +1,36 @@ +
+Form->create('User'); ?> +
+ + Form->input('username'); + echo $this->Form->input('email'); + ?> +
+
+ Set new password + Form->input('pwd', array('type' => 'password')); + echo $this->Form->input('pwd_repeat', array('type' => 'password')); + ?> +
+ +
+ + Form->input('irc_nick'); + //echo $this->Form->input('timezone'); + + //echo $this->Form->input('language_id'); + ?> +
+ +Form->end(__('Submit')); ?> +
+
+

+
    + +
  • Form->postLink(__('Delete'), array('action' => 'delete', $this->Form->value('User.id')), null, __('Are you sure you want to delete your account # %s?', $this->Form->value('User.id'))); ?>
  • +
+
diff --git a/View/Account/index.ctp b/View/Account/index.ctp new file mode 100644 index 00000000..2e5b9acc --- /dev/null +++ b/View/Account/index.ctp @@ -0,0 +1,12 @@ +

Session->read('Auth.User.username'));?>

+Your eMail: Session->read('Auth.User.email'));?> +

+ +

Your account

+ + + \ No newline at end of file diff --git a/View/Account/login.ctp b/View/Account/login.ctp new file mode 100644 index 00000000..c1bccfe4 --- /dev/null +++ b/View/Account/login.ctp @@ -0,0 +1,27 @@ +

Welcome

+

You need to login to proceed.

+ +Form->create('User');?> + +

Please enter your username/email and password below.

+ + Form->input('login', array('label' => 'Your username or email')); + echo $this->Form->input('password', array('autocomplete' => 'off')); + if (Configure::read('Config.rememberMe')) { + echo $this->Form->input('RememberMe.confirm', array('type' => 'checkbox', 'label' => __('Remember me on this device.'))); + } + ?> + +Form->end(__('Log me in'));?> + +

No account yet?

+ +

Html->link('Create one here. For free :P', array('action' => 'register'))?>

+ +

:

+ + +

Password lost?

+

Html->link('Reset your password.', array('action' => 'lost_password'))?>

+ diff --git a/View/Account/lost_password.ctp b/View/Account/lost_password.ctp new file mode 100644 index 00000000..f90e390e --- /dev/null +++ b/View/Account/lost_password.ctp @@ -0,0 +1,40 @@ + +

+ +
+Form->create('User');?> +
+ +

Please enter your email address

+ Form->input('Form.login', array('autocomplete'=>'off', 'label'=>__('Email'))); + echo $this->Captcha->input(); + + echo $this->Form->submit(__('Submit')); + ?> +
+Form->end();?> +
+Form->create('User');?> +
+ +

+ Click on the link in the email or Copy-and-Paste your received token here: +

+ Form->input('Form.key', array('autocomplete' => 'off')); + + echo $this->Form->submit(__('Submit')); + ?> +
+Form->end();?> +
+ + +

+ +
+
    +
  • Html->link(__('Login instead'), array('action' => 'login'));?>
  • +
+
\ No newline at end of file diff --git a/View/Account/register.ctp b/View/Account/register.ctp new file mode 100644 index 00000000..eac3fdaa --- /dev/null +++ b/View/Account/register.ctp @@ -0,0 +1,36 @@ +

Register

+

We don't want SPAM. So we need to verify your account/email.

+ + +Form->create('User');?> + +

Create an account

+
+ Required information + + Form->input('username', array()); + echo $this->Form->input('email', array()); + + echo $this->Form->input('pwd', array('type' => 'password')); + echo $this->Form->input('pwd_repeat', array('type' => 'password')); + ?> +
+ +
+ Optional information + Form->input('timezone', array()); + echo $this->Form->input('irc_nick', array()); + ?> +
+ + +Form->end(__('Create account'));?> + +

No account yet?

+

Html->link('Create one here. For free :P', array('action' => 'register'))?>

+ + +

?

+Html->link(__('Login'), array('action'=>'login'));?> \ No newline at end of file diff --git a/View/Codebase/index.ctp b/View/Codebase/index.ctp new file mode 100644 index 00000000..80509b18 --- /dev/null +++ b/View/Codebase/index.ctp @@ -0,0 +1,90 @@ +
+

+This CodeBase consists of 3 different categories: +
    +
  • + +Tutorials (with source files) + +
  • + +Modules (download, extract, configure and run) + +
  • + +Codesnippets (again grouped by categories and elements) + +
  • +
+ +
+Additionally, there will be +
    +
  • + +Examples (usually they belong to a codesnippet) + +
  • + +
  • + +Idea Pool (with some thoughts on maybe further projects / updates) + +
  • + +
+ +
+

Recent Changes / Updates

+... + + + +

+ + + + + + + + + > + + + + +
Name
+ Html->link($codesnippetCat['CodesnippetCat']['name'], array('action'=>'view', $codesnippetCat['CodesnippetCat']['id']), array('title'=>'Show all in this category')); ?> + + + '; + if (is_array($codesnippetCat['Codesnippet']) && count($codesnippetCat['Codesnippet'])>0) { + + foreach ($codesnippetCat['Codesnippet'] as $snippet) { + echo '
  • '.$this->Html->link($snippet['title'], array('controller'=>'codesnippets','action'=>'view', $snippet['id']), array('title'=>'View codesnippet')).'
  • '; + } + } else { echo '
  • n/a
  • '; } + echo ''; + ?> +
    +
    + + + +

    + + +
    +
      +
    • Html->link(__('Search for a particular Codesnippet'), array('controller'=> 'codesnippets', 'action'=>'index')); ?>
    • +
    +
    \ No newline at end of file diff --git a/View/Contact/contact_with_flashupload.ctp b/View/Contact/contact_with_flashupload.ctp new file mode 100644 index 00000000..bbb325d3 --- /dev/null +++ b/View/Contact/contact_with_flashupload.ctp @@ -0,0 +1,61 @@ +Html->script('jquery/plugins/form.js',false); +$this->Html->script('jquery/plugins/jqUploader.js',false); +?> + +

    Contact me:

    + +Form->create('Contact', array('url'=>'/'.$this->request->url));?> +
    + + Form->input('name'); + echo $this->Form->input('email'); + echo $this->Form->input('title'); + echo $this->Form->input('message', array('type' => 'textarea')); + echo $this->Form->input('attachments'); + ?> +
    + +
    + ..uploaded files.. +
    +Form->end(__('Submit'));?> + +
    +
    +

    Upload:

    + + + +


    + +Form->create('ContactUpload', array('url'=>'/'.$this->request->url,'id'=>'myUploadForm','type'=>'file'));?> +
    + + '; + ?> + +
      +
    1. + + + +
    2. +
    + +
    + +Form->end('Go on');?> + +

    + + +
    + + \ No newline at end of file diff --git a/View/Contact/contact_with_upload.ctp b/View/Contact/contact_with_upload.ctp new file mode 100644 index 00000000..0fd9e05f --- /dev/null +++ b/View/Contact/contact_with_upload.ctp @@ -0,0 +1,56 @@ +Html->addCrumb('Contact', array('action'=>'index'), array('title'=>'contact me')); +//$this->Html->addCrumb('xx', array('admin'=>'admin','action'=>'edit'), array('title'=>'ccxxs title')); + +echo $this->Html->getCrumbs(' » ','[Home]'); + + +$this->Html->script('jquery/plugins/form.js',false); +?> + +

    Contact me:

    + +Form->create('Contact', array('action'=>'index'));?> +
    + + Form->input('name'); + echo $this->Form->input('email'); + echo $this->Form->input('title'); + echo $this->Form->input('message', array('type'=>'textarea')); + echo $this->Form->input('attachments'); + ?> +
    + +
    + ..uploaded files.. +
    +Form->end(__('Submit'));?> + +
    +
    +

    Upload:

    + + +Form->create('ContactUpload', array('action'=>'file_upload','id'=>'postUploadForm','type'=>'file'));?> +
    + + Form->input('attachments', array('type'=>'file','id'=>'upload_attachments')); + echo $this->Form->button('Upload', array('onclick'=>'$(\'#postUploadForm\').ajaxSubmit({target: \'#files_uploaded\', url: \''.$this->Html->url('/contact/file_upload').'\'});return false;')); + ?> +
    + +Form->end();?> + + + +
    + + +
    + + \ No newline at end of file diff --git a/View/Contact/file_upload.ctp b/View/Contact/file_upload.ctp new file mode 100644 index 00000000..8ad14d0c --- /dev/null +++ b/View/Contact/file_upload.ctp @@ -0,0 +1,22 @@ +
    +Html->pre($file_info); +?> +FILE1 +Ajax->link('DeleteIMG #'.$file_info['ContactUpload']['attachments'], array('action'=>'file_delete', $file_info['ContactUpload']['attachments']), array('update'=>'ajaxToggle-'.$file_info['ContactUpload']['attachments']),null,false) +?> + + +
    \ No newline at end of file diff --git a/View/Contact/index.ctp b/View/Contact/index.ctp new file mode 100644 index 00000000..03dbc7b7 --- /dev/null +++ b/View/Contact/index.ctp @@ -0,0 +1,70 @@ +Jquery->plugins(array('form','growfield')); + +?> + +Html->scriptStart(array('inline' => false)); ?> + +$(document).ready(function() { + + $("#dropdown-subject").change(function () { + var selvalue = $(this).val(); + if (selvalue > 0) { + $("#selfdefined-subject").hide(); + //$("#own-subject").val(selvalue); + } else { + $("#selfdefined-subject").show(); + //$("#own-subject").val(''); + } + }); + + + +}); +/* +$(function() { + + $('textareas.contact').growfield( { + min: 100, + max: 600, + animate: false, + speed: 1, + restore: false + } + ); + +}); +*/ + + +Html->scriptEnd(); ?> + +
    + +

    +Email: Format->encodeEmailUrl(Configure::read('Config.admin_email')); ?>

    + +Form->create('ContactForm');?> +
    + + Form->input('name'); + echo $this->Form->input('email'); + echo $this->Form->input('dropdowns', array( + 'label'=>__('Subject'), + 'empty'=>' -[ '.__('contactChoseSubject').' ]- ', + 'id'=>'dropdown-subject' + )); + echo '
    Form->data['Contact']['dropdowns']) && $this->Form->data['Contact']['dropdowns']>0) ? 'style="display:none"' : '').'>'; + echo $this->Form->input('subject', array( + 'label'=>__('contactOwnSubject'), + 'id'=>'own-subject' + )); + echo '

    '; + echo $this->Form->input('message', array('type'=>'textarea', 'class'=>'contact', 'label'=>__('contactMessage'))); + ?> +
    +Form->end(__('Submit'));?> + + +
    \ No newline at end of file diff --git a/View/Elements/alpha_sort.ctp b/View/Elements/alpha_sort.ctp new file mode 100644 index 00000000..3e0c7fe4 --- /dev/null +++ b/View/Elements/alpha_sort.ctp @@ -0,0 +1,47 @@ + +
    Html->link(__('Custom'), array('custom'), array('title'=>'Custom Controllers','class'=>$class)); + +?>|Html->link(__('All'), array('all'), array('title'=>'Show All Controllers and their actions','class'=>$class)); +?>|Html->link($char, array($char), array('title'=>'Starting with "'.$char.'"','class'=>$class)); + + } else { + echo ''.$char.''; + } + +} + +?>
    +
    diff --git a/View/Elements/comment.ctp b/View/Elements/comment.ctp new file mode 100644 index 00000000..314c57c9 --- /dev/null +++ b/View/Elements/comment.ctp @@ -0,0 +1,29 @@ + + 'name'=> + 'comment'=> + 'title'=> + 'created'=> + 'email'=> + ); +*/ + +//debug ($commentposts); + +foreach ($commentposts as $comment) +{ + echo '
  • '; + echo '

    '.$comment['title'].'

    '; + echo '

    + '.$comment['name'].' + // '.$comment['created'].' +

    +
    +

    '.$comment['comment'].'

    +
    '; + echo '
  • '; +} + +?> \ No newline at end of file diff --git a/View/Elements/email/html/contact.ctp b/View/Elements/email/html/contact.ctp new file mode 100644 index 00000000..c2e86ac8 --- /dev/null +++ b/View/Elements/email/html/contact.ctp @@ -0,0 +1,14 @@ + + Sender:
    + Email:
    +
    + Message:
    +
    +
    + Attachments: + '.$mail_content['attachments']; + } + ?> \ No newline at end of file diff --git a/View/Elements/email/html/default.ctp b/View/Elements/email/html/default.ctp new file mode 100644 index 00000000..ddccbbd0 --- /dev/null +++ b/View/Elements/email/html/default.ctp @@ -0,0 +1,14 @@ + + ' . $line . '

    '; +endforeach; +?> \ No newline at end of file diff --git a/View/Elements/email/html/simple_message.ctp b/View/Elements/email/html/simple_message.ctp new file mode 100644 index 00000000..d4cea585 --- /dev/null +++ b/View/Elements/email/html/simple_message.ctp @@ -0,0 +1,9 @@ + + +

    Dear ' . $user[1] ?>,
    +    Ã¤ for your interest.

    \ No newline at end of file diff --git a/View/Elements/email/text/contact.ctp b/View/Elements/email/text/contact.ctp new file mode 100644 index 00000000..2cb5a3de --- /dev/null +++ b/View/Elements/email/text/contact.ctp @@ -0,0 +1,15 @@ +Jemand hat sich über das Kontaktformular gemeldet + +Betreff: + + +Nachricht: + + + +- - - - - - - - - - - - - - - - - - - - - - - - + +Userinfos +Name: + +Email: \ No newline at end of file diff --git a/View/Elements/email/text/default.ctp b/View/Elements/email/text/default.ctp new file mode 100644 index 00000000..f35776d1 --- /dev/null +++ b/View/Elements/email/text/default.ctp @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/View/Elements/email/text/simple_message.ctp b/View/Elements/email/text/simple_message.ctp new file mode 100644 index 00000000..1fd416ee --- /dev/null +++ b/View/Elements/email/text/simple_message.ctp @@ -0,0 +1,8 @@ + + +Dear , + ä for your interest. \ No newline at end of file diff --git a/View/Elements/examples/change_system.ctp b/View/Elements/examples/change_system.ctp new file mode 100644 index 00000000..c3ad2733 --- /dev/null +++ b/View/Elements/examples/change_system.ctp @@ -0,0 +1,4 @@ + windows':$this->Html->link('windows', array('action'=>'change_system_ajax','windows'), array()));?> + | +mac':$this->Html->link('mac', array('action'=>'change_system_ajax','mac'))); +?> \ No newline at end of file diff --git a/View/Elements/navis.ctp b/View/Elements/navis.ctp new file mode 100644 index 00000000..0b2c7bb7 --- /dev/null +++ b/View/Elements/navis.ctp @@ -0,0 +1,86 @@ +Html->link(__('Home'), '/', array('title'=>'')); + +//$list[]=$this->Html->link('Code-Base','/codebase', array('title'=>'Overview - Codesnippets and CO')); + +$list[]=$this->Html->link('Code-Snippet Categories', '/codesnippet_cats', array('title'=>'')); +//$list[]=$this->Html->link('Code-Snippets','/codesnippets', array('title'=>'')); +$list[]=$this->Html->link('Working Examples','/examples', array('title'=>'')); +$list[]=$this->Html->link('Little Projects / Fun Apps', '/page/projects', array('title'=>'Show Project List')); + +//$list[]=$this->Html->link('Questions/Problems','/todos', array('title'=>'')); +//$list[]=$this->Html->link('ToDo\'s/Suggestions/Ideas','/todos', array('title'=>'')); + +$list[]=$this->Html->link('Useful tools','/misc', array('title'=>'Tools', 'escape'=>false)); +$list[]=$this->Html->link('Tests','/testing/tests', array('title'=>'Tests', 'escape'=>false)); + +echo $this->Html->nestedList($list, array('class'=>'navigation')); + +?> + +

    + +Introducing Plugins +Live CakePHP Plugins in Action + + + + +


    + +Session->check('Auth.User.id')) { +?> +Eingeloggt als 'Session->read('Auth.User.username'));?>'
    +UID: Session->read('Auth.User.id')?>
    +Roles: Session->read('Auth.User.Role') as $role) {echo $role.', ';}?> +
    -- Html->link('Logout', array('plugin'=>false, 'admin'=>false, 'controller'=>'users', 'action'=>'logout'));?>-- + +

    +Admin-Navi +

    + +Html->link('Admin', array('admin'=>true, 'controller'=>'overview', 'action'=>'index'), array('title'=>'Admin-Menü')); +$list[]=$this->Html->link('Translate Languages','/translate/translate_languages', array('title'=>'Translate Languages')); +$list[]=$this->Html->link('Translate Terms','/translate/translate_terms', array('title'=>'Translate Terms')); +//$list[]=$this->Html->link('Translate Dump','/admin/translate_terms', array('title'=>'Translate Dump')); + +$list[]=$this->Html->link('Comments','/admin/codesnippetComments', array('title'=>'')); +$list[]=$this->Html->link('Code-Snippet Cats','/admin/codesnippetCats', array('title'=>'')); +$list[]=$this->Html->link('Code-Snippets','/admin/codesnippets', array('title'=>'')); +$list[]=$this->Html->link('Examples','/admin/examples', array('title'=>'')); +$list[]=$this->Html->link('ToDo\'s','/admin/todos', array('title'=>'')); + +echo $this->Html->nestedList($list, array('class'=>'navigation')); + + +if (Auth::hasRole(ROLE_SUPERADMIN)) { + $list=array(); + + $list[]=$this->Html->link(__('Users'), array('admin'=>false, 'controller'=>'users'), array('title'=>'Mitglieder')); + + + + //$list[]=$this->Html->link('ACL\'s update','/roles/acl_search', array('title'=>'')); + //$list[]=$this->Html->link('ACL edit','/roles/acl2', array('title'=>'')); + + + + $list[]=$this->Html->link('Configurations','/admin/configurations', array('title'=>'All Configs and stuff')); + $list[]=$this->Html->link('Clear Cache!','/admin/configurations/clearcache', array('title'=>'Delete Cache Files and Show Result')); + $list[]=$this->Html->link('Clear Cache Silently!','/admin/configurations/clearcache/silent', array('title'=>'Delete Cache Files (silently)')); + + + echo $this->Html->nestedList($list, array('class'=>'navigation')); +} + +} diff --git a/View/Export/index.ctp b/View/Export/index.ctp new file mode 100644 index 00000000..79f6bf93 --- /dev/null +++ b/View/Export/index.ctp @@ -0,0 +1,46 @@ +

    Export

    +This is the export interface where you can get the current version of the tables.
    +Please help to keep it up to date. You can submit changes via Email.
    +An interface to directly modify the data is planned, though. + +

    +
    Key information: lat/lng
    +Html->link(__('View online'), array('plugin'=>'tools', 'controller'=>'continents', 'action'=>'index')); ?> + + +

    Countries

    +
    Key information: lat/lng, iso codes, zip code length/regexp, eu member, address_format, country_code, timezone
    +Html->link(__('View online'), array('plugin'=>'tools', 'controller'=>'countries', 'action'=>'index')); ?> + + +

    Country Provinces

    +
    Key information: lat/lng, iso codes, timezone
    +Html->link(__('View online'), array('plugin'=>'tools', 'controller'=>'country_provinces', 'action'=>'index')); ?> + + +

    +
    Key information: iso codes, current value, base currency, symbol
    +Html->link(__('View online'), array('plugin'=>'tools', 'controller'=>'currencies', 'action'=>'index')); ?> + + +

    +Html->link(__('View online'), array('plugin'=>'tools', 'controller'=>'languages', 'action'=>'index')); ?> + + +
    +Note: If you want to force downloading, append `?download=1` after the extension. \ No newline at end of file diff --git a/View/Helper/AppHelper.php b/View/Helper/AppHelper.php new file mode 100644 index 00000000..fca6f611 --- /dev/null +++ b/View/Helper/AppHelper.php @@ -0,0 +1,20 @@ + & + * + * @deprecated + * @param string $input the input-string + * @return string the manipulated string + */ + public function htmlspecialcharsBack($input) { + $search = array('&', '>', '<', '"', '''); + $replace = array('&', '>', '<', '"', "'"); + return str_replace($search, $replace, $input); + } + +} diff --git a/View/Helper/BbcodeHelper.php b/View/Helper/BbcodeHelper.php new file mode 100644 index 00000000..54af2d01 --- /dev/null +++ b/View/Helper/BbcodeHelper.php @@ -0,0 +1,325 @@ + 'bbcode/stringparser_bbcode.class.php')); + } + + public function add_languages($languages) { + if (!empty($languages) && is_array($languages)) { + foreach ($languages as $language) { + $this->languages[strtolower($language['CodesnippetType']['name'])] = $language['CodesnippetType']['name']; + } + } + } + +/** INPUT (Form Element And Buttons) **/ + + /** + * Has to be called right at the top of the Page where you want to use it (needs the language array from the controller!) + * @param form name, text name, languages array, (options) + */ + public function init($formName, $textName, $languages = array(), $options = null) { + $this->Html->script('bbcode.js', false); + + // $languages = $this->Common->readFile('bbcode'); + $this->add_languages($languages); + + $output = ""; + + return $output; + } + + /** + * Add Buttons and Select Menus + * NOTE: have to be INSIDE the
    (as long its still "this.form") + */ + public function buttons() { + if (sizeof($this->languages) > 0) { + $codedropdown = ' +'; + + $codebutton = '
    Code
    '; + + } else { + $codedropdown = ''; + $codebutton = ''; + } + + $output = ' +
    +

    BB-Code Help

    + + + + + + + + + + + +
    [img] / [url]For external images/urls, please start with the full url (http:// etc.)
    For internal ones, use a / at the beginning. Cake will automatically attach the root to it.
    +Internal Example: [img]/images/123.jpg[url] becomes images/123.jpg
    +External Example: [img]http://site.yz/images/123.jpg[url] becomes http://site.yz/images/123.jpg
    [url=]Some as above, only that the url is now inside the square brackets, and you can use anything you want for the description
    Example: [url=http://google.de]This is a search engine[url]
    [nobb]Content in this tag will stay completely untouched. Useful if you have some BB-Code in your text (which would be transformed otherwise)

    +Note: If there is some BB-Code left (on preview or after saving it) - you probably used it in an invalid way (like [code] inside of [h1] etc). +
    +
    +
    Help
    +
    b
    + +
    i
    +
    u
    +
    Quote
    + ' . $codebutton . ' +
    List
    +
    List=
    +
    [*]
    +
    IMG
    +
    URL
    +
    NoBB
    +
    + + ' . $codedropdown . ' +
    '; + + return $output; + } + +/** OUTPUT (Tansforming into html + highlighting) **/ + + /** + * + * @param string content + * @param array options: highlight=>TRUE/FALSE (default TRUE), smiley=>TRUE/FALSE (default FALSE) + */ + public function parse($content, $options = array()) { + $out = '' . h($content) . ''; + $out = preg_replace("/\015\012|\015|\012/", "\n", $out); // new lines on different systems + + $this->Bbcode = new StringParser_BBCode(); + $this->Bbcode->setGlobalCaseSensitive(false); // [b]=[B] + + //$this->Bbcode->addParser (array ('header','block', 'inline', 'link', 'listitem'), 'htmlspecialchars'); + $this->Bbcode->addParser(array ('block', 'inline', 'link', 'listitem', 'nobb'), 'nl2br'); + $this->Bbcode->addParser('list', 'bbcode_stripcontents'); + $this->Bbcode->addParser('header', 'bbcode_stripnewlines'); + + $this->Bbcode->addCode('h1', 'simple_replace', null, array ('start_tag' => '

    ', 'end_tag' => '

    '), + 'header', array ('block', 'inline'), array ()); + $this->Bbcode->addCode('h2', 'simple_replace', null, array ('start_tag' => '

    ', 'end_tag' => '

    '), + 'header', array ('block', 'inline'), array ()); + + $this->Bbcode->addCode('b', 'simple_replace', null, array ('start_tag' => '', 'end_tag' => ''), + 'inline', array ('listitem', 'block', 'inline', 'link'), array ()); + $this->Bbcode->addCode('i', 'simple_replace', null, array ('start_tag' => '', 'end_tag' => ''), + 'inline', array ('listitem', 'block', 'inline', 'link'), array ()); + $this->Bbcode->addCode('u', 'simple_replace', null, array ('start_tag' => '', 'end_tag' => ''), + 'inline', array ('listitem', 'block', 'inline', 'link'), array ()); + + $this->Bbcode->addCode('email', 'usecontent', 'do_bbcode_email', array (), + 'link', array ('listitem', 'block', 'inline', 'link'), array ()); + + $this->Bbcode->addCode('url', 'usecontent?', 'do_bbcode_url', array ('usecontent_param' => 'default'), + 'link', array ('listitem', 'block', 'inline'), array ('link')); + $this->Bbcode->addCode('link', 'callback_replace_single', 'do_bbcode_url', array (), + 'link', array ('listitem', 'block', 'inline'), array ('link')); + $this->Bbcode->addCode('img', 'usecontent', 'do_bbcode_img', array (), + 'image', array ('listitem', 'block', 'inline', 'link'), array ()); + + $this->Bbcode->addCode('quote', 'simple_replace', null, array ('start_tag' => '', 'end_tag' => ''), + 'quote', array ('block', 'inline'), array ()); + + $this->Bbcode->addCode('code', 'usecontent', 'do_bbcode_code', array (), + 'code', array ('block', 'inline'), array ()); + + $this->Bbcode->addCode('nobb', 'usecontent', 'do_bbcode_nobb', array (), + 'nobb', array ('block', 'listitem', 'link', 'inline'), array ()); + + //$this->Bbcode->setOccurrenceType ('img', 'image'); + //$this->Bbcode->setMaxOccurrences ('image', 2); + + $this->Bbcode->addCode('list', 'simple_replace', null, array ('start_tag' => ''), + 'list', array ('block', 'listitem'), array ()); + $this->Bbcode->addCode('*', 'simple_replace', null, array ('start_tag' => '
  • ', 'end_tag' => '
  • '), + 'listitem', array ('list'), array ()); + + //$this->Bbcode->addCode ('br', 'simple_replace', null, array ('start_tag' => '
    ', 'end_tag' => ''), + // 'linefeed', array ('block','inline','listitem'), array ()); + + //$this->Bbcode->setCodeFlag ('br', 'closetag', BBCODE_CLOSETAG_FORBIDDEN); + + $this->Bbcode->setCodeFlag('*', 'closetag', BBCODE_CLOSETAG_OPTIONAL); + $this->Bbcode->setCodeFlag('*', 'paragraphs', false); // inside the
  • tags -

    tags allowed? + $this->Bbcode->setCodeFlag('list', 'paragraph_type', BBCODE_PARAGRAPH_BLOCK_ELEMENT); + $this->Bbcode->setCodeFlag('list', 'opentag.before.newline', BBCODE_NEWLINE_DROP); + $this->Bbcode->setCodeFlag('list', 'closetag.before.newline', BBCODE_NEWLINE_DROP); + + # Does not work for HEADER and CODE: + $this->Bbcode->setCodeFlag('code', 'paragraph_type', BBCODE_PARAGRAPH_BLOCK_ELEMENT); + $this->Bbcode->setCodeFlag('code', 'closetag.after.newline', BBCODE_NEWLINE_DROP); + $this->Bbcode->setCodeFlag('code', 'closetag.before.newline', BBCODE_NEWLINE_DROP); + $this->Bbcode->setCodeFlag('code', 'opentag.before.newline', BBCODE_NEWLINE_DROP); + $this->Bbcode->setCodeFlag('code', 'opentag.after.newline', BBCODE_NEWLINE_DROP); + + # Not good for us: + //$this->Bbcode->setRootParagraphHandling (true); //
    into

    + + $out = $this->Bbcode->parse($out); + + # Fixing Links (target="_blank" for external) + Img (internal/external) + //$out = $this->parseImagesRecursive($out); // not important + + # Highlighting + if (!empty($options['highlight']) && $options['highlight'] === false) {} else { + $out = $this->Geshi->parseTagsRecursive(($out)); + } + + #Smileys + if (!empty($options['smiley']) && $options['smiley'] === true) {} else { + //$out = $this->Common->parseSmileys($out); + } + + //$out = nl2br($out); + return $out; + } + + public function parseImagesRecursive($input) { + $regex = '/(.*)<\/link>/siU'; + //$regex = '/[code]\s+.*class\s*="(.*)">(.*)<[/code]/siU'; + //$regex = '/(.*)<\/pre>/siU'; WORKS! for

    
    +
    +		// mit lang="": $regex = "/(.*)<\/pre>/siU";
    + 	// geht nicht: $regex = '#\
    ((?:[^[]|\<(?!/?pre>)|(?R))+)\
    #'; + + if (is_array($input)) { + + pr($input); + $input = '' . $input[2] . ''; + //$this->highlight(trim(html_entity_decode($this->entodec($input[2]),ENT_QUOTES)), $input[1], $flag); + //$input = '
    '.$input[1].'
    '; + } + + return preg_replace_callback($regex, array(&$this, 'parseImagesRecursive'), $input); + } + +} + +/** !!! Functions for BBCODE are set OUTSIDE of the class BbcodeHelper !!! **/ + +/* +// Alles bis auf Neuezeile-Zeichen entfernen +function bbcode_stripnewlines($text) { + return str_replace ("\n", '\n\n', $text); +} +*/ + +// Neuezeile-Zeichen entfernen + +function bbcode_stripcontents($text) { + return preg_replace("/[^\n]/", '', $text); +} + +/** TODO: action=validate for visitors */ +function do_bbcode_url($action, $attributes, $content, $params, $nodeObject) { + if (!isset($attributes['default'])) { + $url = trim($content); + $text = $content; + } else { + $url = trim($attributes['default']); + $text = $content; + } + if ($action === 'validate') { + if (substr($url, 0, 5) === 'data:' || substr($url, 0, 5) === 'file:' + || substr($url, 0, 11) === 'javascript:' || substr($url, 0, 4) === 'jar:') { + return false; + } + return true; + } + if (substr($url, 0, 1) == '/') { + + $url = Router::url($url); //substr($this->Html->url('/'),0,-1).$url; + $target = ''; + } else { + $url = (@substr($url) == 'http://' ? $url : 'http://' . $url); + $target = ' target="_blank"'; + } + return '' . h($text) . ''; +} + +// Funktion zum Einbinden von Bildern + +function do_bbcode_img($action, $attributes, $content, $params, $nodeObject) { + if ($action === 'validate') { + if (substr($content, 0, 5) === 'data:' || substr($content, 0, 5) === 'file:' + || substr($content, 0, 11) === 'javascript:' || substr($content, 0, 4) === 'jar:') { + return false; + } + return true; + } + return ''; +} + +// Funktion zum Einbinden von Bildern + +function do_bbcode_code($action, $attributes, $content, $params, $nodeObject) { + if (!isset($attributes['default'])) { + $class = 'text'; + $text = h($content); + } else { + $class = $attributes['default']; + $text = $content; + } + return '' . h($content) . ''; +} + +function do_bbcode_email($action, $attributes, $content, $params, $nodeObject) { + return 'vv'; +} + +function do_bbcode_nobb($action, $attributes, $content, $params, $nodeObject) { + return h($content); +} + +/* +function do_bbcode_br($action, $attributes, $content, $params, $node_object) { + return '
    '; +} +*/ + diff --git a/View/Helper/CustomHelper.php b/View/Helper/CustomHelper.php new file mode 100644 index 00000000..1abe8ee2 --- /dev/null +++ b/View/Helper/CustomHelper.php @@ -0,0 +1,50 @@ +Html->image($consolationPrize); + } */ + } + return $this->Html->image('places/cup_' . $i . '.gif', array('title' => $title)); + } + +} + diff --git a/View/Helper/MenuHelper.php b/View/Helper/MenuHelper.php new file mode 100644 index 00000000..38e8726e --- /dev/null +++ b/View/Helper/MenuHelper.php @@ -0,0 +1,137 @@ +'dd', 'ul'=>'li', 'ol'=>'li'); + + /** + * + * @param array $data data for menu as Name=>value pairs + * @param string $tag html tag to enclose link in + * @param string $activeClass Css class to use for highlight + * @access public + + * usage: Menus->menu(array('Home'=>'/home', 'Profile'=>'/profile'), 'li', 'current'); ?> + */ + + public function menu($data=array(), $tag='li', $activeClass='current', $mainMenuActive=null) { + // reset output + $this->_out = array(); + // check data + if (empty($data) && count($data) < 1) { + return ''; + } + + // sort out matching links + $matchingLinks = array(); + + foreach ($data as $link) { + // + if ($mainMenuActive) { + if (preg_match('/^'.preg_quote($link, '/').'/', $mainMenuActive)) { + $matchingLinks[strlen($link)] = $link; + } + } else { + if (preg_match('/^'.preg_quote($link, '/').'/', substr($this->request->here, strlen($this->request->base)))) { + $matchingLinks[strlen($link)] = $link; + } + } + } + + krsort($matchingLinks); + + $activeLink = !empty($matchingLinks) ? array_shift($matchingLinks) : null; + + # VIEW html + + foreach ($data as $title => $link) { + $content = $this->Html->link($title, $link, $link == $activeLink ? array('class'=>$activeClass) : false); + $this->_out[] = '<'.$tag.'>'.$content.''; + } + + return join("", $this->_out); + } + + /** + * + * @param array $data data for menu as Name=>array(Name=>value) pairs + * @param array $options options for menu as array to enable new features to be added + * @access public + + * usage: Menu->twoTierMenu($data, array('type'=>'dl', 'class'=>'sub-menu', 'title'=>'dt', 'activeClass'=>'current')); ?> + */ + + public function twoTierMenu($data=array(), $options=array('activeClass'=>'current', 'type'=>'ul', 'class'=>false, 'title'=>false)) { + // reset output + $this->_out = array(); + // check data + if (empty($data) && count($data) < 1) { + return ''; + } + // check we have a 2 level structure + $keys = array_keys($data); + if (!is_array($data[$keys[0]])) { + return ''; + } + + // sort out matching links + $activeLinks = array(); + + // get array of all links + foreach ($data as $groupTitle => $groupLinks) { + $matchingLinks = array(); + + foreach ($groupLinks as $linkTitle => $linkUrl) { + if (preg_match('/^'.preg_quote($linkUrl, '/').'/', substr($this->request->here, strlen($this->request->base)))) { + // if (preg_match('/^'.preg_quote($link, '/').'/', $this->request->url)) { + $matchingLinks[strlen($linkUrl)] = $linkUrl; + } elseif ($linkUrl == substr($this->request->here, strlen($this->request->base))) { + // $matchingLinks[$groupTitle][strlen($linkUrl)] = $linkUrl; + } else { + // pr('link: '.$link.' | url: '.substr($this->request->here, strlen($this->request->base))); + } + // pr('preg: '.preg_quote($link).'/'); + // pr('base: '.substr($this->request->here, strlen($this->request->base))); + // pr('url: '.$this->request->url); + } + // sorting + krsort($matchingLinks); + // pr($matchingLinks); + // active link + $activeLinks[$groupTitle] = !empty($matchingLinks) ? array_shift($matchingLinks) : null; + } + + // pr($matchingLinks); + // pr($activeLinks); + + // output menu + if ($options['class']) { + $this->_out[] = '<'.$options['type'].' class="'.$options['class'].'">'; + } else { + $this->_out[] = '<'.$options['type'].'>'; + } + + // build html + foreach ($data as $groupTitle => $links) { + if ($options['title']) { + $this->_out[] = "<".$options['title'].">".$groupTitle.""; + } + + foreach ($links as $linkTitle => $linkUrl) { + $this->_out[] = '<'.$this->_typeTags[$options['type']].'>'.$this->Html->link($linkTitle, $linkUrl, $linkUrl == $activeLinks[$groupTitle] ? array('class'=>$options['activeClass']) : false).'_typeTags[$options['type']].'>'; + } + } + $this->_out[] = ''; + + // return + return join("\n", $this->_out); + } + +} + diff --git a/View/Home/index.ctp b/View/Home/index.ctp new file mode 100644 index 00000000..148276ad --- /dev/null +++ b/View/Home/index.ctp @@ -0,0 +1,9 @@ +
    +

    +

    +Schön, dass du auf meiner CakePHP-Sandbox vorbeischaust. + + +

    + +
    \ No newline at end of file diff --git a/View/Layouts/ajax.ctp b/View/Layouts/ajax.ctp new file mode 100644 index 00000000..eae92d84 --- /dev/null +++ b/View/Layouts/ajax.ctp @@ -0,0 +1,4 @@ + +fetch('content'); ?> \ No newline at end of file diff --git a/View/Layouts/default.ctp b/View/Layouts/default.ctp new file mode 100644 index 00000000..38df847a --- /dev/null +++ b/View/Layouts/default.ctp @@ -0,0 +1,138 @@ + + + + + Html->charset(); + +?> + + <?php + +echo $description + +?>: + <?php + +echo $title_for_layout; + +?> + + Html->meta('icon'); + +echo $this->Html->css('bootstrap'); +echo $this->Html->css('app'); +echo $this->Html->css('/sandbox/font-awesome/css/font-awesome'); + +echo $this->Html->script('jquery/jquery'); +echo $this->Html->script('bootstrap'); + +echo $this->fetch('meta'); +echo $this->fetch('css'); +echo $this->fetch('script'); + +?> + + +
    + + + + + +
    + + Session->flash(); +echo $this->Common->flash(); +?> + + fetch('content'); + +?> +
    + +
    + + 0 && Configure::read('Debug.helper')) { + $this->loadHelper('Setup.Debug', $debug); + + echo $this->Debug->show(); + } +} else { + echo $this->element('sql_dump'); +} +?> + + diff --git a/View/Layouts/email/html/default.ctp b/View/Layouts/email/html/default.ctp new file mode 100644 index 00000000..7126f16b --- /dev/null +++ b/View/Layouts/email/html/default.ctp @@ -0,0 +1,11 @@ + + + + <?php echo $title_for_layout;?> + + + + + fetch('content');?> + + diff --git a/View/Layouts/email/text/default.ctp b/View/Layouts/email/text/default.ctp new file mode 100644 index 00000000..47642027 --- /dev/null +++ b/View/Layouts/email/text/default.ctp @@ -0,0 +1 @@ +fetch('content');?> diff --git a/View/Layouts/email/text/plain.ctp b/View/Layouts/email/text/plain.ctp new file mode 100644 index 00000000..05866482 --- /dev/null +++ b/View/Layouts/email/text/plain.ctp @@ -0,0 +1,4 @@ +fetch('content');?> + +- - - - - - - - - - - - - - - - - - - - - - - - - +Please activate HTML-View for better readability \ No newline at end of file diff --git a/View/MediaView.php b/View/MediaView.php new file mode 100644 index 00000000..7dbecb7d --- /dev/null +++ b/View/MediaView.php @@ -0,0 +1,282 @@ + 'application/postscript', 'bcpio' => 'application/x-bcpio', 'bin' => 'application/octet-stream', + 'ccad' => 'application/clariscad', 'cdf' => 'application/x-netcdf', 'class' => 'application/octet-stream', + 'cpio' => 'application/x-cpio', 'cpt' => 'application/mac-compactpro', 'csh' => 'application/x-csh', + 'csv' => 'application/csv', 'dcr' => 'application/x-director', 'dir' => 'application/x-director', + 'dms' => 'application/octet-stream', 'doc' => 'application/msword', 'drw' => 'application/drafting', + 'dvi' => 'application/x-dvi', 'dwg' => 'application/acad', 'dxf' => 'application/dxf', 'dxr' => 'application/x-director', + 'eps' => 'application/postscript', 'exe' => 'application/octet-stream', 'ez' => 'application/andrew-inset', + 'flv' => 'video/x-flv', 'gtar' => 'application/x-gtar', 'gz' => 'application/x-gzip', + 'bz2' => 'application/x-bzip', '7z' => 'application/x-7z-compressed', 'hdf' => 'application/x-hdf', + 'hqx' => 'application/mac-binhex40', 'ips' => 'application/x-ipscript', 'ipx' => 'application/x-ipix', + 'js' => 'application/x-javascript', 'latex' => 'application/x-latex', 'lha' => 'application/octet-stream', + 'lsp' => 'application/x-lisp', 'lzh' => 'application/octet-stream', 'man' => 'application/x-troff-man', + 'me' => 'application/x-troff-me', 'mif' => 'application/vnd.mif', 'ms' => 'application/x-troff-ms', + 'nc' => 'application/x-netcdf', 'oda' => 'application/oda', 'pdf' => 'application/pdf', + 'pgn' => 'application/x-chess-pgn', 'pot' => 'application/mspowerpoint', 'pps' => 'application/mspowerpoint', + 'ppt' => 'application/mspowerpoint', 'ppz' => 'application/mspowerpoint', 'pre' => 'application/x-freelance', + 'prt' => 'application/pro_eng', 'ps' => 'application/postscript', 'roff' => 'application/x-troff', + 'scm' => 'application/x-lotusscreencam', 'set' => 'application/set', 'sh' => 'application/x-sh', + 'shar' => 'application/x-shar', 'sit' => 'application/x-stuffit', 'skd' => 'application/x-koan', + 'skm' => 'application/x-koan', 'skp' => 'application/x-koan', 'skt' => 'application/x-koan', + 'smi' => 'application/smil', 'smil' => 'application/smil', 'sol' => 'application/solids', + 'spl' => 'application/x-futuresplash', 'src' => 'application/x-wais-source', 'step' => 'application/STEP', + 'stl' => 'application/SLA', 'stp' => 'application/STEP', 'sv4cpio' => 'application/x-sv4cpio', + 'sv4crc' => 'application/x-sv4crc', 'svg' => 'image/svg+xml', 'svgz' => 'image/svg+xml', + 'swf' => 'application/x-shockwave-flash', 't' => 'application/x-troff', + 'tar' => 'application/x-tar', 'tcl' => 'application/x-tcl', 'tex' => 'application/x-tex', + 'texi' => 'application/x-texinfo', 'texinfo' => 'application/x-texinfo', 'tr' => 'application/x-troff', + 'tsp' => 'application/dsptype', 'unv' => 'application/i-deas', 'ustar' => 'application/x-ustar', + 'vcd' => 'application/x-cdlink', 'vda' => 'application/vda', 'xlc' => 'application/vnd.ms-excel', + 'xll' => 'application/vnd.ms-excel', 'xlm' => 'application/vnd.ms-excel', 'xls' => 'application/vnd.ms-excel', + 'xlw' => 'application/vnd.ms-excel', 'zip' => 'application/zip', 'aif' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', 'au' => 'audio/basic', 'kar' => 'audio/midi', 'mid' => 'audio/midi', + 'midi' => 'audio/midi', 'mp2' => 'audio/mpeg', 'mp3' => 'audio/mpeg', 'mpga' => 'audio/mpeg', + 'ra' => 'audio/x-realaudio', 'ram' => 'audio/x-pn-realaudio', 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', 'snd' => 'audio/basic', 'tsi' => 'audio/TSP-audio', 'wav' => 'audio/x-wav', + 'asc' => 'text/plain', 'c' => 'text/plain', 'cc' => 'text/plain', 'css' => 'text/css', 'etx' => 'text/x-setext', + 'f' => 'text/plain', 'f90' => 'text/plain', 'h' => 'text/plain', 'hh' => 'text/plain', 'htm' => 'text/html', + 'html' => 'text/html', 'm' => 'text/plain', 'rtf' => 'text/rtf', 'rtx' => 'text/richtext', 'sgm' => 'text/sgml', + 'sgml' => 'text/sgml', 'tsv' => 'text/tab-separated-values', 'tpl' => 'text/template', 'txt' => 'text/plain', + 'xml' => 'text/xml', 'avi' => 'video/x-msvideo', 'fli' => 'video/x-fli', 'mov' => 'video/quicktime', + 'movie' => 'video/x-sgi-movie', 'mpe' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'mpg' => 'video/mpeg', + 'qt' => 'video/quicktime', 'viv' => 'video/vnd.vivo', 'vivo' => 'video/vnd.vivo', 'gif' => 'image/gif', + 'ief' => 'image/ief', 'jpe' => 'image/jpeg', 'jpeg' => 'image/jpeg', 'jpg' => 'image/jpeg', + 'pbm' => 'image/x-portable-bitmap', 'pgm' => 'image/x-portable-graymap', 'png' => 'image/png', + 'pnm' => 'image/x-portable-anymap', 'ppm' => 'image/x-portable-pixmap', 'ras' => 'image/cmu-raster', + 'rgb' => 'image/x-rgb', 'tif' => 'image/tiff', 'tiff' => 'image/tiff', 'xbm' => 'image/x-xbitmap', + 'xpm' => 'image/x-xpixmap', 'xwd' => 'image/x-xwindowdump', 'ice' => 'x-conference/x-cooltalk', + 'iges' => 'model/iges', 'igs' => 'model/iges', 'mesh' => 'model/mesh', 'msh' => 'model/mesh', + 'silo' => 'model/mesh', 'vrml' => 'model/vrml', 'wrl' => 'model/vrml', + 'mime' => 'www/mime', 'pdb' => 'chemical/x-pdb', 'xyz' => 'chemical/x-pdb', + /** core-hack: own ones - 2009-05-11 ms **/ + /* + 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', + 'odt' => 'application/vnd.oasis.opendocument.text', + */ + ); + + /** + * Holds headers sent to browser before rendering media + * + * @var array + * @access protected + */ + public $_headers = array(); + + /** + * Constructor + * + * @param object $controller + */ + public function __construct(Controller $controller) { + parent::__construct($controller); + } + + /** + * Display or download the given file + * + * @return unknown + */ + public function render() { + /** content hack (for displaying files on the fly) **/ + $content = $name = $download = $extension = $id = $modified = $path = $size = $cache = $mimeType = null; + extract($this->viewVars, EXTR_OVERWRITE); + + if ($size) { + $id = $id . '_' . $size; + } + + if (is_dir($path)) { + $path = $path . $id; + } else { + $path = APP . $path . $id; + } + + if (!file_exists($path) && empty($content)) { + header('Content-Type: text/html'); + $this->cakeError('error404'); + } + + if ($name === null) { + $name = $id; + } + + if (is_array($mimeType)) { + $this->mimeType = array_merge($this->mimeType, $mimeType); + } + + /** extension download HACK!!! **/ + if (!isset($this->mimeType[$extension])) { + $download = true; + } + + if (isset($extension) && connection_status() == 0) { + $chunkSize = 8192; + $buffer = ''; + + if (!empty($content)) { + $fileSize = strlen($content); + $handle = tmpfile(); + fwrite($handle, $content); + fseek($handle, 0); + } else { + $fileSize = @filesize($path); + $handle = fopen($path, 'rb'); + } + + if ($handle === false) { + return false; + } + if (!empty($modified)) { + $modified = gmdate('D, d M Y H:i:s', strtotime($modified, time())) . ' GMT'; + } else { + $modified = gmdate('D, d M Y H:i:s') . ' GMT'; + } + + if ($download) { + $contentTypes = array('application/octet-stream'); + $agent = env('HTTP_USER_AGENT'); + + if (preg_match('%Opera(/| )([0-9].[0-9]{1,2})%', $agent)) { + $contentTypes[0] = 'application/octetstream'; + } elseif (preg_match('/MSIE ([0-9].[0-9]{1,2})/', $agent)) { + $contentTypes[0] = 'application/force-download'; + array_push($contentTypes, array( + 'application/octet-stream', + 'application/download' + )); + } + foreach ($contentTypes as $contentType) { + $this->_header('Content-Type: ' . $contentType); + } + $this->_header(array( + 'Content-Disposition: attachment; filename="' . $name . '.' . $extension . '";', + 'Expires: 0', + 'Accept-Ranges: bytes', + 'Cache-Control: private' => false, + 'Pragma: private')); + + $httpRange = env('HTTP_RANGE'); + if (isset($httpRange)) { + list($toss, $range) = explode('=', $httpRange); + + $size = $fileSize - 1; + $length = $fileSize - $range; + + $this->_header(array( + 'HTTP/1.1 206 Partial Content', + 'Content-Length: ' . $length, + 'Content-Range: bytes ' . $range . $size . '/' . $fileSize)); + + fseek($handle, $range); + } else { + $this->_header('Content-Length: ' . $fileSize); + } + } else { + $this->_header('Date: ' . gmdate('D, d M Y H:i:s', time()) . ' GMT'); + if ($cache) { + if (!is_numeric($cache)) { + $cache = strtotime($cache) - time(); + } + $this->_header(array( + 'Cache-Control: max-age=' . $cache, + 'Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache) . ' GMT', + 'Pragma: cache')); + } else { + $this->_header(array( + 'Cache-Control: must-revalidate, post-check=0, pre-check=0', + 'Pragma: no-cache')); + } + $this->_header(array( + //'Content-Disposition: filename="' . $name . '.' . $extension . '";', /** hack: does not work **/ + 'Last-Modified: ' . $modified, + 'Content-Type: ' . $this->mimeType[$extension], + 'Content-Length: ' . $fileSize)); + } + $this->_output(); + //@ob_end_clean(); + + while (!feof($handle) && connection_status() == 0 && !connection_aborted()) { + set_time_limit(0); + $buffer = fread($handle, $chunkSize); + echo $buffer; + try { + //@flush(); + //@ob_flush(); + } catch (Exception $e) { + $this->log('Exeption ' . $e->getMessage() . ' in ' . $this->request->url); + } + } + fclose($handle); + exit(0); + } + + return false; + } + + /** + * Method to set headers + * @param mixed $header + * @param boolean $boolean + * @access protected + */ + public function _header($header, $boolean = true) { + if (is_array($header)) { + foreach ($header as $string => $boolean) { + if (is_numeric($string)) { + $this->_headers[] = array($boolean => true); + } else { + $this->_headers[] = array($string => $boolean); + } + } + return; + } + $this->_headers[] = array($header => $boolean); + return; + } + + /** + * Method to output headers + * @access protected + */ + public function _output() { + foreach ($this->_headers as $key => $value) { + $header = key($value); + header($header, $value[$header]); + } + } +} + diff --git a/View/Misc/analyze_text.ctp b/View/Misc/analyze_text.ctp new file mode 100644 index 00000000..4a1b28fd --- /dev/null +++ b/View/Misc/analyze_text.ctp @@ -0,0 +1,51 @@ +

    Analyze Text

    +Count words, sentences, etc + +

    Analyzer

    + +
    +Form->create('Tool');?> +
    + + Form->input('Form.text', array('type'=>'textarea', 'class'=>'halfSize', 'rows'=>15)); + //echo $this->Form->input('Form.type', array('empty'=>array('0'=>'- [auto-detect] -'))); + echo $this->Form->input('Form.min_char', array()); + echo $this->Form->input('Form.max_char', array()); + echo $this->Form->input('Form.sort', array('options'=>array(''=>'- [none] -', 'asc'=>'ASC', 'desc'=>'DESC'))); + echo $this->Form->input('Form.limit'); + + //echo $this->Form->input('Form.prevent_trim', array('type'=>'hidden', 'value'=>1)); + ?> +
    +Form->end(__('Submit'));?> +
    + +

    Result

    + $occ) { + echo '
  • '; + echo h($result). ' ('.$occ.')'; + echo '
  • '; + } + +} +?> + +

    + +
    +
      +
    • Html->link(__('Back'), array('action'=>'index'));?>
    • +
    +
    \ No newline at end of file diff --git a/View/Misc/convert_text.ctp b/View/Misc/convert_text.ctp new file mode 100644 index 00000000..cc8132a1 --- /dev/null +++ b/View/Misc/convert_text.ctp @@ -0,0 +1,61 @@ +

    Convert Text

    +Sometimes you need to escape the text in order to post somewhere. Sometimes you need exactly the opposite.
    +Example: If a blog already escapes characters like & (result is ) and you would pass already escaped characters, you would end up with double-escaped characters () which are not readable anymore. +

    +Use this converter to get the text in the appropriate format. + + +

    Converter

    + +
    +Form->create('Tool');?> +
    + + Form->input('Form.text', array('type'=>'textarea', 'class'=>'halfSize')); + echo $this->Form->input('Form.type', array('empty'=>array('0'=>'- [auto-detect] -'))); + echo $this->Form->input('Form.prevent_trim', array('type'=>'hidden', 'value'=>1)); + ?> +
    +Form->end(__('Submit'));?> +
    + +

    Result

    +Form->input('Form.result', array('type'=>'textarea', 'class'=>'halfSize')); + +if (!empty($this->request->data) && !empty($this->request->data['Form']['result'])) { + echo '
    '; + echo ''; + echo nl2br(h($this->request->data['Form']['result'])); + echo '
    '; + /* + echo '
    '; + echo '
    '; + echo ''; + echo nl2br(h(h($this->request->data['Form']['result']))); + echo '
    '; + + echo '
    '; + echo '
    '; + echo ''; + echo nl2br(hDec($this->request->data['Form']['result'])); + echo '
    '; + + echo '
    '; + echo '
    '; + echo ''; + echo nl2br(hDec(hDec($this->request->data['Form']['result']))); + echo '
    '; + */ +} + +?> + +

    + +
    +
      +
    • Html->link(__('Back'), array('action'=>'index'));?>
    • +
    +
    \ No newline at end of file diff --git a/View/Misc/index.ctp b/View/Misc/index.ctp new file mode 100644 index 00000000..55b78a91 --- /dev/null +++ b/View/Misc/index.ctp @@ -0,0 +1,8 @@ +

    Misc. tools

    + +
    +
      +
    • Html->link(__('Convert Text'), array('action'=>'convert_text'));?>
    • +
    • Html->link(__('Analyze Text'), array('action'=>'analyze_text'));?>
    • +
    +
    \ No newline at end of file diff --git a/View/Overview/admin_index.ctp b/View/Overview/admin_index.ctp new file mode 100644 index 00000000..b17143f9 --- /dev/null +++ b/View/Overview/admin_index.ctp @@ -0,0 +1,41 @@ +

    Admin-Backend -

    + + +

    + + + +

    + + + +

    + + \ No newline at end of file diff --git a/View/Overview/index.ctp b/View/Overview/index.ctp new file mode 100644 index 00000000..7babd689 --- /dev/null +++ b/View/Overview/index.ctp @@ -0,0 +1,30 @@ + +

    Welcome

    +This is a private website contributing to CakePHP. +I always found it difficult so "imagine" specific code snippets without demo/examples. +This site combines useful code snippets with their live result. + + +

    Conventions and help for Cake Newbies

    + + +

    Sandbox

    +Play around with demos and see some core and plugin tools in action: + + +

    Shared Standard data

    +ISO and other commonly used data: + +You may also contribute back by adding/editing data. + +
    + +

    +There are lots of things that can be done - even for beginners. Html->link('Details', array('controller'=>'pages', 'action'=>'display', 'updates')); ?> diff --git a/View/Pages/cake.ctp b/View/Pages/cake.ctp new file mode 100644 index 00000000..05afff1b --- /dev/null +++ b/View/Pages/cake.ctp @@ -0,0 +1,84 @@ +

    CakePHP - Rapid Develoment Framework

    + +

    :

    + +

    What is CakePHP?

    +It is one of the most powerful Frameworks for PHP. +
    +Framework means you don't have to write functions for every little task. The framework provides you with basic functionality which you can extend.
    +Html->link('CakePHP', 'http://www.cakephp.org'); ?> is easier to learn than many other frameworks - and comes with very handy features. + +

    +

    +Using commonly known design patterns like MVC and ORM within the convention over configuration paradigm, CakePHP reduces development costs and helps developers write less code. +

    +What speaks for CakePHP: +Html->nestedList($list, array('class'=>'features')); + +?> + + + +

    + + +

    +

    +Manual and Communities +Html->link('CakePHP - the MANUAL (very helpful)','/manual/', array('target'=>'_blank')); +$list[]=$this->Html->link('CakePHP - the MANUAL (very helpful)','http://book.cakephp.org/complete/3/the-manual', array('target'=>'_blank')); + +$list[]=$this->Html->link('CakePHP API (Code Reference)','http://api.cakephp.org', array('target'=>'_blank')); +$list[]=$this->Html->link('CakePHP Codesnippets/Tutorials','http://bakery.cakephp.org/', array('target'=>'_blank')); + +$list[]=$this->Html->link('Unofficial CakePHP Forum (!)','http://cakephpforum.net', array('target'=>'_blank')); +$list[]=$this->Html->link('CakePHP German Forum (the smaller one)','http://www.cakephp-forum.com', array('target'=>'_blank')); + +$list[]=$this->Html->link('CakePHP Google Group (the biggest around?)','http://groups.google.com/group/cake-php', array('target'=>'_blank')); +$list[]=$this->Html->link('CakePHP German Google Group (the smaller one)','http://groups.google.com/group/cakephp-de', array('target'=>'_blank')); + +echo $this->Html->nestedList($list, array('class'=>'links')); + +echo '
    Examples and Code Pieces'; +$list=array(); + +$list[]=$this->Html->link('CakePHP Links (Blogs etc.)','http://cakephp.org/#read', array('target'=>'_blank')); +$list[]=$this->Html->link('A nice CakePHP Introduction (German)','http://blog.dievolution.net/cakephp/cakephp-einfuhrung/', array('target'=>'_blank')); +$list[]=$this->Html->link('Good to know about these little things','http://teknoid.wordpress.com/category/cakephp/', array('target'=>'_blank')); +$list[]=$this->Html->link('And about these too','http://labs.iamkoa.net/category/cakephp/', array('target'=>'_blank')); +$list[]=$this->Html->link('Page: reazulk','http://reazulk.wordpress.com/category/cakephp/', array('target'=>'_blank')); +$list[]=$this->Html->link('Blog: Adam Royle','http://blogs.bigfish.tv/adam/category/cakephp/', array('target'=>'_blank')); +$list[]=$this->Html->link('Blog: m3nt0r','http://www.m3nt0r.de/blog/2007/07/29/cakephp-sanitize-fur-alle-controller/', array('target'=>'_blank')); +$list[]=$this->Html->link('Blog: ad7six','http://www.ad7six.com/MiBlog/Blogs/Index/CakePHP', array('target'=>'_blank')); +$list[]=$this->Html->link('ACL with Ajax','http://dev.newnewmedia.com/cakephp/admin/acl/permissions', array('target'=>'_blank')); + +echo $this->Html->nestedList($list, array('class'=>'links')); + + + +echo '
    Other Links'; +$list=array(); + +$list[]=$this->Html->link('Code-Snippets to test your application against XSS Hackings','http://ha.ckers.org/xss.html', array('target'=>'_blank')); + +echo $this->Html->nestedList($list, array('class'=>'links')); +?> +

    \ No newline at end of file diff --git a/View/Pages/cheat-sheets.ctp b/View/Pages/cheat-sheets.ctp new file mode 100644 index 00000000..439933f6 --- /dev/null +++ b/View/Pages/cheat-sheets.ctp @@ -0,0 +1,45 @@ +

    Cheat-Sheets

    +Updated 2011/01 + +Html->url('/cheat_sheets', true); +?> + + + +Main: + +
    + +Other: + + +
    + +

    Powered by

    +addedbytes.com \ No newline at end of file diff --git a/View/Pages/downloads.ctp b/View/Pages/downloads.ctp new file mode 100644 index 00000000..2e5a8469 --- /dev/null +++ b/View/Pages/downloads.ctp @@ -0,0 +1,24 @@ +

    Downloads

    +Some download links to make life easier + +

    CakePHP-Core: Nightly Build + Stable

    +The newest versions of CakePHP (and older ones, too): + + +

    CakePHP-Core: Git Checkout

    +Even nicer because you need just one click to get the current HEAD (current version). + + +
    +For downloading select "Git Clone" and use the following url: + +After that you can change to Cake1.2, Cake1.3, Cake1.3dev or even Cake2.0 by using "Switch/Checkout" + +

    +And one "Pull" command gets all the updates and displays what files have been changed. \ No newline at end of file diff --git a/View/Pages/geshi.ctp b/View/Pages/geshi.ctp new file mode 100644 index 00000000..e56dd946 --- /dev/null +++ b/View/Pages/geshi.ctp @@ -0,0 +1,50 @@ + +

    Sweet, "Myapp" got Baked by CakePHP!

    + + + +

    +ssss: +\n"; + --$foo; + echo \'sss\'; +} +for ( $i = 1; $i < $foo; $i++ ) +{ + echo "$foo
    \n"; + --$foo; + echo \'sss\'; +} +for ( $i = 1; $i < $foo; $i++ ) +{ + echo "$foo
    \n"; + --$foo; + echo \'sss\'; +}'; + +$language='php-brief'; +$flag='fancy'; + +echo $this->Geshi->geshi_highlight($text, $language, $flag); + + + + +$text='
    sdl fhsodf dsf sdif sdpif hsdoöfhosdf oösdf sdf ds fdsf dsf dsf ods fdsf dsf dsf ds fosd f + +
    '; + +$language='html4strict'; +$flag='fancy'; + +echo 'oder so:'.$this->Geshi->geshi_highlight($text, $language, $flag) + + +?> \ No newline at end of file diff --git a/View/Pages/modul-role-application.ctp b/View/Pages/modul-role-application.ctp new file mode 100644 index 00000000..97512fd2 --- /dev/null +++ b/View/Pages/modul-role-application.ctp @@ -0,0 +1,56 @@ +

    MODUL: Role Application

    +Users can apply for "admin", "moderator" roles etc. + +

    +Status: Completed (Beta) + +

    Overview

    +Extends the Cake core role system (With Auth/Acl). In this special case it uses AuthExt Component by Franck (with a small modification) +for the possibility to have multiple roles per user.
    +But it would work with any "single" role system as well - as it is independant from the live "roles" table. The "approve method" has to be altered then, though. + + +

    Details

    +The Main aspects are: + +
      + +
    • +Extra toggle field in "roles" controller: "applyable" (TINYINT(1) - 0/1)
      +Usually not all roles are for users to apply for (e.g. "Guest", "Superadmin", "TestUser" etc) +
    • + +
    • +A user can apply only for roles that he does not already have.
      +Includes a check if application already processed (= role is already set) before the save() is triggered - to prevent that this is done twice - and the user gets a role twice. +
    • + +
    • +After applying, if the user wants to apply again, all pending "roles" (as well as the roles he already has) are not shown anymore either. Prevents "double" applications. +
    • + +
    • +Full logging history. Including the "admin userid" that checked it. Not deletable by anybody except the "superadmin" for example. Users have their own history not beeing able to see "admin only comments" which +can be used for admin notes. They will see the comment/reasoning for a disapproved application though. As they should know why their whish for applying to a certain role was denyed. +
    • + +
    • +Optional: Nobody can approve his own applications. Prevents missusage under everybody having access to the "check" action. +
    • + +
    • +Optional: After processing an application, it cannot be changed anymore by anyone. The other case would be, that the application could be dissapproved by one admin, and the next admin then "revalidates" +it and then approves it (the other way is not implemented - the role has to be deleted "manually" in the roles controller). In this case a second log entry will be created, showing which admin did what. +With the first case active, the user would have to re-apply. +
    • + +
    + + + + + + + +
    +Html->link('Send me your ideas for improvement', array('controller'=>'contact','subject'=>'Idea for Improvement'), array('title'=>'To the contact form')); \ No newline at end of file diff --git a/View/Pages/projects.ctp b/View/Pages/projects.ctp new file mode 100644 index 00000000..8e18b381 --- /dev/null +++ b/View/Pages/projects.ctp @@ -0,0 +1,69 @@ +

    Projects

    +My little projects - mainly for testing purposes.
    +Some might even be useful. If you are interested, drop me a line.
    +Maybe you find some errors, program some enhancements or just tell me what could be added. + +
    +

    Status: Completed (Beta)

    +
      +
    • +Role Application - Users can apply for "admin", "moderator" roles etc. +
      +Extends the Cake core role system (With Auth/Acl). In this special case it uses AuthExt Component by Franck (with a small modification) +for the possibility to have multiple roles per user.
      +But it would work with any "single" role system as well - as it is independant from the live "roles" table. The "approve method" has to be altered then, though. +Details Html->link('here', array('modul-role-application'), array('title'=>'Role Application Modul'));?>. +
    • +
    + + + +
    +

    Status: In development

    +
      + +
    • +Fuel Consumption - keeping track of fuel costs / milage / development +
      +Individually for each car observed. Calculates the missing value out of the other 2 values given.
      +Html->link('See it in action', array('controller'=>'fuel_consumptions'), array('title'=>'Here is a working example of this project'));?> +
    • + +
    • +Voting System +
    • +
    + + + + + +
    +

    Status: Well - anyone some spare time? :)

    +
      + +
    • +Poll System +
      +Should be able to handle unlimited options - beeing able to use it in a project or a community page would be nice as well. +
      +As a addon, it could function as an "election" system as well - like for admins/mods: Everybody can apply - and is added as an "option". +Now everybody can vote 1 time and finally the top "x" is elected as president - or at least as new mod for a site or something.
      +Besides all the "normal" poll features: "poll active/inactive, "limiting to a period of time or certain user groups", "avoiding double votes of a user" etc +
    • + +
    • +Messaging System +
      +Maybe with friend/block list - multiple addresses - flood protection - email notification - etc. +
    • + + +
    • +... to be continued +
    • + +
    + +
    +Html->link('Send me your idea', array('controller'=>'contact','subject'=>'Project idea'), array('title'=>'To the contact form')); \ No newline at end of file diff --git a/View/Pages/terms-of-use.ctp b/View/Pages/terms-of-use.ctp new file mode 100644 index 00000000..ec35878a --- /dev/null +++ b/View/Pages/terms-of-use.ctp @@ -0,0 +1,22 @@ +

    Terms of use

    +As CakePHP, all content on this site is open source. Feel free to use my code (or parts of it) in your projects - and help making it better by tributing enhancements or tips. +I give no safety quaranties or whatsoever on it. You use it on your own risk.

    +Sometimes I linked to other sites and projects - or enhanced their functions and code-snippets. If anyone feels unhappy about that, please contact me - i will remove any such content immediately. + +

    +

    +Mark Scherer (Site-Owner)
    +0174-9179825
    +Format->encodeEmail('markscherer@gmx.de');?> +

    +

    +Due to a new law it is now not longer neccessary to provide a real address in the impressum. It is enough to have a valid email address and/or a valid phone number listed.
    +The email address is - to avoid spam mails en masse - not displayed as plain text. But with Javascript enabled (which should always be the case!) you are able to see it. There is a contact formular as well, though. For those who want to contact me directly (instead of an external mail service).
    +

    + +

    Disclaimer

    +

    +CONTENT PROVIDED VIA LINKS +
    +You may find links to other Internet sites or resources on the Website. You acknowledge and agree that I am not responsible for the availability of such external sites or resources, and do not endorse and am not responsible or liable for any content, advertising, products, or other materials on or available from such sites or resources. I will not be responsible or liable, directly or indirectly, for any actual or alleged damage or loss caused by or in connection with use of or reliance on any such content, goods or services available on or through any such site or resource. +

    \ No newline at end of file diff --git a/View/Pages/updates.ctp b/View/Pages/updates.ctp new file mode 100644 index 00000000..77d1ff40 --- /dev/null +++ b/View/Pages/updates.ctp @@ -0,0 +1,15 @@ +

    Updates

    + +
    +
    +Need Some Help!
    +Anybody who wants to help improve this site - or add new features? Feel free to contact me. +

    +Found some errors? spelling mistakes?   Html->link('-> Contact Form', array('controller'=>'contact'))?> +
    +
    + +

    Here will soon be a list...

    +...of all the things that happens on this page +

    +Mabye even some RSS feed to it. \ No newline at end of file diff --git a/View/Users/add.ctp b/View/Users/add.ctp new file mode 100644 index 00000000..ac9cd1d6 --- /dev/null +++ b/View/Users/add.ctp @@ -0,0 +1,44 @@ +
    +Form->create('User');?> +
    + + Form->input('active'); + echo $this->Form->input('lastlogin'); + echo $this->Form->input('adminchange'); + echo $this->Form->input('logins'); + echo $this->Form->input('ipadr'); + echo $this->Form->input('host'); + echo $this->Form->input('user_agent'); + echo $this->Form->input('username'); + echo $this->Form->input('password'); + echo $this->Form->input('email'); + echo $this->Form->input('code'); + echo $this->Form->input('value'); + echo $this->Form->input('role_id'); + echo $this->Form->input('Role'); + ?> +
    +Form->end(__('Submit'));?> +
    +
    +
      +
    • Html->link(__('List %s', __('Users')), array('action'=>'index'));?>
    • +
    • Html->link(__('List %s', __('Roles')), array('controller'=> 'roles', 'action'=>'index')); ?>
    • +
    • Html->link(__('New First Role'), array('controller'=> 'roles', 'action'=>'add')); ?>
    • +
    • Html->link(__('List User Infos'), array('controller'=> 'user_infos', 'action'=>'index')); ?>
    • +
    • Html->link(__('New User Info'), array('controller'=> 'user_infos', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Addresses Addresstypes'), array('controller'=> 'addresses_addresstypes', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Addresses Addresstype'), array('controller'=> 'addresses_addresstypes', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Chat Entries'), array('controller'=> 'chat_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Chat Entry'), array('controller'=> 'chat_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Email Entries'), array('controller'=> 'email_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Email Entry'), array('controller'=> 'email_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Group Entries'), array('controller'=> 'group_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Group Entry'), array('controller'=> 'group_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Tag Entries'), array('controller'=> 'tag_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Tag Entry'), array('controller'=> 'tag_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Telnumber Entries'), array('controller'=> 'telnumber_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Telnumber Entry'), array('controller'=> 'telnumber_entries', 'action'=>'add')); ?>
    • +
    +
    \ No newline at end of file diff --git a/View/Users/admin_assign_roles.ctp b/View/Users/admin_assign_roles.ctp new file mode 100644 index 00000000..2dda7fbd --- /dev/null +++ b/View/Users/admin_assign_roles.ctp @@ -0,0 +1,52 @@ +
    +

    +
    + + > + > + +   + +
    +
    +
    + +
    +Current Roles: +
      +'.$role['name'].'('.$role['id'].') '.$this->Format->icon('delete').''; + } +} else { + echo '
    • no roles yet
    • '; +} +?> +
    +
    +
    + +
    +Add Roles: +
      + $userRole) { + echo ''.$this->Form->input($userRole, array('type'=>'checkbox','value'=>$id)).''; + } +} else { + echo '
    • no more roles availible
    • '; +} +?> +
    +
    +
    + + +
    +
      +
    • Html->link(__('Edit %s', __('User')), array('action'=>'edit', $user['User']['id'])); ?>
    • +
    • Html->link(__('List %s', __('Users')), array('action'=>'index')); ?>
    • +
    +
    \ No newline at end of file diff --git a/View/Users/edit.ctp b/View/Users/edit.ctp new file mode 100644 index 00000000..35091493 --- /dev/null +++ b/View/Users/edit.ctp @@ -0,0 +1,46 @@ +
    +Form->create('User');?> +
    + + Form->input('id'); + echo $this->Form->input('active'); + echo $this->Form->input('lastlogin'); + echo $this->Form->input('adminchange'); + echo $this->Form->input('logins'); + echo $this->Form->input('ipadr'); + echo $this->Form->input('host'); + echo $this->Form->input('user_agent'); + echo $this->Form->input('username'); + echo $this->Form->input('password'); + echo $this->Form->input('email'); + echo $this->Form->input('code'); + echo $this->Form->input('value'); + echo $this->Form->input('role_id'); + echo $this->Form->input('Role'); + ?> +
    +Form->end(__('Submit'));?> +
    +
    +
      +
    • Form->postLink(__('Delete'), array('action'=>'delete', $this->Form->value('User.id')), null, __('Are you sure you want to delete # %s?', $this->Form->value('User.id'))); ?>
    • +
    • Html->link(__('List %s', __('Users')), array('action'=>'index'));?>
    • +
    • Html->link(__('List %s', __('Roles')), array('controller'=> 'roles', 'action'=>'index')); ?>
    • +
    • Html->link(__('New First Role'), array('controller'=> 'roles', 'action'=>'add')); ?>
    • +
    • Html->link(__('List User Infos'), array('controller'=> 'user_infos', 'action'=>'index')); ?>
    • +
    • Html->link(__('New User Info'), array('controller'=> 'user_infos', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Addresses Addresstypes'), array('controller'=> 'addresses_addresstypes', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Addresses Addresstype'), array('controller'=> 'addresses_addresstypes', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Chat Entries'), array('controller'=> 'chat_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Chat Entry'), array('controller'=> 'chat_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Email Entries'), array('controller'=> 'email_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Email Entry'), array('controller'=> 'email_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Group Entries'), array('controller'=> 'group_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Group Entry'), array('controller'=> 'group_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Tag Entries'), array('controller'=> 'tag_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Tag Entry'), array('controller'=> 'tag_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Telnumber Entries'), array('controller'=> 'telnumber_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Telnumber Entry'), array('controller'=> 'telnumber_entries', 'action'=>'add')); ?>
    • +
    +
    \ No newline at end of file diff --git a/View/Users/index.ctp b/View/Users/index.ctp new file mode 100644 index 00000000..59f99b05 --- /dev/null +++ b/View/Users/index.ctp @@ -0,0 +1,76 @@ +
    +

    +

    +Paginator->counter(array( +'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%') +)); +?>

    + + + + + + + + + + + > + + + + + + + + +
    Paginator->sort('lastlogin');?>Paginator->sort('created');?>Paginator->sort('logins');?>Paginator->sort('username');?>Paginator->sort('email');?>
    + + + Datetime->niceDate($user['User']['created']); ?> + + + + + + + + Html->link(__('View'), array('action'=>'view', $user['User']['id'])); ?> + Html->link(__('Edit'), array('action'=>'edit', $user['User']['id'])); ?> + Form->postLink(__('Delete'), array('action'=>'delete', $user['User']['id']), null, __('Are you sure you want to delete # %s?', $user['User']['id'])); ?> +
    +
    +
    + Paginator->prev('<< '.__('previous'), array(), null, array('class'=>'disabled'));?> + | Paginator->numbers();?> + Paginator->next(__('next').' >>', array(), null, array('class'=>'disabled'));?> +
    +
    +
      +
    • Html->link(__('New User'), array('action'=>'add')); ?>
    • +
    • Html->link(__('List %s', __('Roles')), array('controller'=> 'roles', 'action'=>'index')); ?>
    • +
    • Html->link(__('New First Role'), array('controller'=> 'roles', 'action'=>'add')); ?>
    • +
    • Html->link(__('List User Infos'), array('controller'=> 'user_infos', 'action'=>'index')); ?>
    • +
    • Html->link(__('New User Info'), array('controller'=> 'user_infos', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Addresses Addresstypes'), array('controller'=> 'addresses_addresstypes', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Addresses Addresstype'), array('controller'=> 'addresses_addresstypes', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Chat Entries'), array('controller'=> 'chat_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Chat Entry'), array('controller'=> 'chat_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Email Entries'), array('controller'=> 'email_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Email Entry'), array('controller'=> 'email_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Group Entries'), array('controller'=> 'group_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Group Entry'), array('controller'=> 'group_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Tag Entries'), array('controller'=> 'tag_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Tag Entry'), array('controller'=> 'tag_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Telnumber Entries'), array('controller'=> 'telnumber_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Telnumber Entry'), array('controller'=> 'telnumber_entries', 'action'=>'add')); ?>
    • +
    +
    \ No newline at end of file diff --git a/View/Users/registered.ctp b/View/Users/registered.ctp new file mode 100644 index 00000000..5d0e2444 --- /dev/null +++ b/View/Users/registered.ctp @@ -0,0 +1,31 @@ +
    +You should now recieve an email.
    +Please click on the link to activate your account.
    +If you choose otherwise, the account will be deleted automatically within the next 20 days. +

    +After clicking the link you should be able to login. +

    + + +If you want, you can take the activation key from the email you got and paste it in here: + +Form->create('User', array('action'=>'registered'));?> +
    + + Form->input('akt'); + ?> +
    +Form->end(__('Submit'));?> +
    +
    +
      +
    • +
    +
    + + + + +

    +Note: NO EMAIL is sent! this is a todo! \ No newline at end of file diff --git a/View/Users/roles.ctp b/View/Users/roles.ctp new file mode 100644 index 00000000..3276e2ec --- /dev/null +++ b/View/Users/roles.ctp @@ -0,0 +1,27 @@ +
    +

    + +Your Current Roles: + + + +
    + +
    +
      +
    • Html->link(__('New RoleApplication'), array('controller'=>'roleApplications','action'=>'add')); ?>
    • +
    • Html->link(__('List %s', __('ApplicationHistory')), array('controller'=>'roleApplications','action'=>'history')); ?>
    • +
    • Html->link(__('Pending Applications'), array('controller'=>'roleApplications','action'=>'pending')); ?>
    • +
    +
    + +You are currenctly applying for the following roles:
    + +render('/role_applications/user','ajax'); +?> + + +
    \ No newline at end of file diff --git a/View/Users/view.ctp b/View/Users/view.ctp new file mode 100644 index 00000000..1b134627 --- /dev/null +++ b/View/Users/view.ctp @@ -0,0 +1,479 @@ +
    +

    +
    + > + > + +   + + > + > + +   + + > + > + +   + + > + > + Datetime->niceDate($user['User']['created']); ?> +   + + > + > + Datetime->niceDate($user['User']['modified']); ?> +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + +   + + > + > + Html->link($user['FirstRole']['name'], array('controller'=> 'roles', 'action'=>'view', $user['FirstRole']['id'])); ?> +   + +
    +
    +
    +
      +
    • Html->link(__('Edit %s', __('User')), array('action'=>'edit', $user['User']['id'])); ?>
    • +
    • Form->postLink(__('Delete User'), array('action'=>'delete', $user['User']['id']), null, __('Are you sure you want to delete # %s?', $user['User']['id'])); ?>
    • +
    • Html->link(__('List %s', __('Users')), array('action'=>'index')); ?>
    • +
    • Html->link(__('New User'), array('action'=>'add')); ?>
    • +
    • Html->link(__('List %s', __('Roles')), array('controller'=> 'roles', 'action'=>'index')); ?>
    • +
    • Html->link(__('New First Role'), array('controller'=> 'roles', 'action'=>'add')); ?>
    • +
    • Html->link(__('List User Infos'), array('controller'=> 'user_infos', 'action'=>'index')); ?>
    • +
    • Html->link(__('New User Info'), array('controller'=> 'user_infos', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Addresses Addresstypes'), array('controller'=> 'addresses_addresstypes', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Addresses Addresstype'), array('controller'=> 'addresses_addresstypes', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Chat Entries'), array('controller'=> 'chat_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Chat Entry'), array('controller'=> 'chat_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Email Entries'), array('controller'=> 'email_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Email Entry'), array('controller'=> 'email_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Group Entries'), array('controller'=> 'group_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Group Entry'), array('controller'=> 'group_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Tag Entries'), array('controller'=> 'tag_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Tag Entry'), array('controller'=> 'tag_entries', 'action'=>'add')); ?>
    • +
    • Html->link(__('List Telnumber Entries'), array('controller'=> 'telnumber_entries', 'action'=>'index')); ?>
    • +
    • Html->link(__('New Telnumber Entry'), array('controller'=> 'telnumber_entries', 'action'=>'add')); ?>
    • +
    +
    + + + + + + + + \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..fdbbb090 --- /dev/null +++ b/composer.json @@ -0,0 +1,15 @@ +{ + "name": "dereuromark/sandbox", + "description": "A CakePHP Sandbox App", + "minimum-stability": "dev", + "authors": [ + { + "name": "Mark Scherer", + "email": "euromark@web.de" + } + ], + "require": { + "dereuromark/cakephp-sandbox": "master", + "FriendsOfCake/Authenticate": "master" + } +} diff --git a/index.php b/index.php new file mode 100644 index 00000000..7b672e46 --- /dev/null +++ b/index.php @@ -0,0 +1,26 @@ + + * Copyright 2005-2008, Cake Software Foundation, Inc. + * 1785 E. Sahara Avenue, Suite 490-204 + * Las Vegas, Nevada 89104 + * + * Licensed under The MIT License + * Redistributions of files must retain the above copyright notice. + * + * @filesource + * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. + * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project + * @package cake + * @subpackage cake.app + * @since CakePHP(tm) v 0.10.0.1076 + * @version $Revision: 7062 $ + * @modifiedby $LastChangedBy: nate $ + * @lastmodified $Date: 2008-05-30 06:29:53 -0500 (Fri, 30 May 2008) $ + * @license http://www.opensource.org/licenses/mit-license.php The MIT License + */ +require 'webroot' . DIRECTORY_SEPARATOR . 'index.php'; + diff --git a/webroot/.htaccess b/webroot/.htaccess new file mode 100644 index 00000000..2c992176 --- /dev/null +++ b/webroot/.htaccess @@ -0,0 +1,10 @@ + + + RewriteEngine On + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.*)$ index.php [QSA,L] + + + + diff --git a/webroot/css.php b/webroot/css.php new file mode 100644 index 00000000..99d86246 --- /dev/null +++ b/webroot/css.php @@ -0,0 +1,44 @@ +css(); diff --git a/webroot/css/app.css b/webroot/css/app.css new file mode 100644 index 00000000..383f0728 --- /dev/null +++ b/webroot/css/app.css @@ -0,0 +1,9 @@ +#header { + margin-top: 70px; +} + +#container { + padding-left: 10px; + padding-right: 10px; + padding-bottom: 10px; +} \ No newline at end of file diff --git a/webroot/css/bootstrap.css b/webroot/css/bootstrap.css new file mode 100644 index 00000000..c869c243 --- /dev/null +++ b/webroot/css/bootstrap.css @@ -0,0 +1,7408 @@ +@import url("//fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,400,700"); + +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden] { + display: none; +} + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + outline: 0; +} + +h1 { + margin: 0.67em 0; + font-size: 2em; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +hr { + height: 0; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +mark { + color: #000; + background: #ff0; +} + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +pre { + white-space: pre-wrap; +} + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +fieldset { + padding: 0.35em 0.625em 0.75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +button, +input, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: 100%; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; + box-sizing: border-box; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + 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: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 2cm .5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .table td, + .table th { + background-color: #fff !important; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +*, +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +body { + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.428571429; + color: #666666; + background-color: #ffffff; +} + +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input, +select[multiple], +textarea { + background-image: none; +} + +a { + color: #3399f3; + text-decoration: none; +} + +a:hover, +a:focus { + color: #3399f3; + text-decoration: underline; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +img { + vertical-align: middle; +} + +.img-responsive { + display: block; + height: auto; + max-width: 100%; +} + +.img-rounded { + border-radius: 6px; +} + +.img-thumbnail { + display: inline-block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.img-circle { + border-radius: 50%; +} + +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0 0 0 0); + border: 0; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 16.099999999999998px; + font-weight: 200; + line-height: 1.4; +} + +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} + +small { + font-size: 85%; +} + +cite { + font-style: normal; +} + +.text-muted { + color: #999999; +} + +.text-primary { + color: #446e9b; +} + +.text-warning { + color: #c09853; +} + +.text-danger { + color: #b94a48; +} + +.text-success { + color: #468847; +} + +.text-info { + color: #3a87ad; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-weight: 500; + line-height: 1.1; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + margin-top: 20px; + margin-bottom: 10px; +} + +h4, +h5, +h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +h1, +.h1 { + font-size: 36px; +} + +h2, +.h2 { + font-size: 30px; +} + +h3, +.h3 { + font-size: 24px; +} + +h4, +.h4 { + font-size: 18px; +} + +h5, +.h5 { + font-size: 14px; +} + +h6, +.h6 { + font-size: 12px; +} + +h1 small, +.h1 small { + font-size: 24px; +} + +h2 small, +.h2 small { + font-size: 18px; +} + +h3 small, +.h3 small, +h4 small, +.h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} + +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 1.428571429; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 0; +} + +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } + .dl-horizontal dd:before, + .dl-horizontal dd:after { + display: table; + content: " "; + } + .dl-horizontal dd:after { + clear: both; + } +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +blockquote small { + display: block; + line-height: 1.428571429; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 1.428571429; +} + +code, +pre { + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; + border-radius: 4px; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.428571429; + color: #333333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #cccccc; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11, +.col-xs-12, +.col-sm-1, +.col-sm-2, +.col-sm-3, +.col-sm-4, +.col-sm-5, +.col-sm-6, +.col-sm-7, +.col-sm-8, +.col-sm-9, +.col-sm-10, +.col-sm-11, +.col-sm-12, +.col-md-1, +.col-md-2, +.col-md-3, +.col-md-4, +.col-md-5, +.col-md-6, +.col-md-7, +.col-md-8, +.col-md-9, +.col-md-10, +.col-md-11, +.col-md-12, +.col-lg-1, +.col-lg-2, +.col-lg-3, +.col-lg-4, +.col-lg-5, +.col-lg-6, +.col-lg-7, +.col-lg-8, +.col-lg-9, +.col-lg-10, +.col-lg-11, +.col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col-xs-1, +.col-xs-2, +.col-xs-3, +.col-xs-4, +.col-xs-5, +.col-xs-6, +.col-xs-7, +.col-xs-8, +.col-xs-9, +.col-xs-10, +.col-xs-11 { + float: left; +} + +.col-xs-1 { + width: 8.333333333333332%; +} + +.col-xs-2 { + width: 16.666666666666664%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-4 { + width: 33.33333333333333%; +} + +.col-xs-5 { + width: 41.66666666666667%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-7 { + width: 58.333333333333336%; +} + +.col-xs-8 { + width: 66.66666666666666%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-10 { + width: 83.33333333333334%; +} + +.col-xs-11 { + width: 91.66666666666666%; +} + +.col-xs-12 { + width: 100%; +} + +@media (min-width: 768px) { + .container { + max-width: 750px; + } + .col-sm-1, + .col-sm-2, + .col-sm-3, + .col-sm-4, + .col-sm-5, + .col-sm-6, + .col-sm-7, + .col-sm-8, + .col-sm-9, + .col-sm-10, + .col-sm-11 { + float: left; + } + .col-sm-1 { + width: 8.333333333333332%; + } + .col-sm-2 { + width: 16.666666666666664%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-4 { + width: 33.33333333333333%; + } + .col-sm-5 { + width: 41.66666666666667%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-7 { + width: 58.333333333333336%; + } + .col-sm-8 { + width: 66.66666666666666%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-10 { + width: 83.33333333333334%; + } + .col-sm-11 { + width: 91.66666666666666%; + } + .col-sm-12 { + width: 100%; + } + .col-sm-push-1 { + left: 8.333333333333332%; + } + .col-sm-push-2 { + left: 16.666666666666664%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-4 { + left: 33.33333333333333%; + } + .col-sm-push-5 { + left: 41.66666666666667%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-7 { + left: 58.333333333333336%; + } + .col-sm-push-8 { + left: 66.66666666666666%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-10 { + left: 83.33333333333334%; + } + .col-sm-push-11 { + left: 91.66666666666666%; + } + .col-sm-pull-1 { + right: 8.333333333333332%; + } + .col-sm-pull-2 { + right: 16.666666666666664%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-4 { + right: 33.33333333333333%; + } + .col-sm-pull-5 { + right: 41.66666666666667%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-7 { + right: 58.333333333333336%; + } + .col-sm-pull-8 { + right: 66.66666666666666%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-10 { + right: 83.33333333333334%; + } + .col-sm-pull-11 { + right: 91.66666666666666%; + } + .col-sm-offset-1 { + margin-left: 8.333333333333332%; + } + .col-sm-offset-2 { + margin-left: 16.666666666666664%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-4 { + margin-left: 33.33333333333333%; + } + .col-sm-offset-5 { + margin-left: 41.66666666666667%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-7 { + margin-left: 58.333333333333336%; + } + .col-sm-offset-8 { + margin-left: 66.66666666666666%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-10 { + margin-left: 83.33333333333334%; + } + .col-sm-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 992px) { + .container { + max-width: 970px; + } + .col-md-1, + .col-md-2, + .col-md-3, + .col-md-4, + .col-md-5, + .col-md-6, + .col-md-7, + .col-md-8, + .col-md-9, + .col-md-10, + .col-md-11 { + float: left; + } + .col-md-1 { + width: 8.333333333333332%; + } + .col-md-2 { + width: 16.666666666666664%; + } + .col-md-3 { + width: 25%; + } + .col-md-4 { + width: 33.33333333333333%; + } + .col-md-5 { + width: 41.66666666666667%; + } + .col-md-6 { + width: 50%; + } + .col-md-7 { + width: 58.333333333333336%; + } + .col-md-8 { + width: 66.66666666666666%; + } + .col-md-9 { + width: 75%; + } + .col-md-10 { + width: 83.33333333333334%; + } + .col-md-11 { + width: 91.66666666666666%; + } + .col-md-12 { + width: 100%; + } + .col-md-push-0 { + left: auto; + } + .col-md-push-1 { + left: 8.333333333333332%; + } + .col-md-push-2 { + left: 16.666666666666664%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-4 { + left: 33.33333333333333%; + } + .col-md-push-5 { + left: 41.66666666666667%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-7 { + left: 58.333333333333336%; + } + .col-md-push-8 { + left: 66.66666666666666%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-10 { + left: 83.33333333333334%; + } + .col-md-push-11 { + left: 91.66666666666666%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-pull-1 { + right: 8.333333333333332%; + } + .col-md-pull-2 { + right: 16.666666666666664%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-4 { + right: 33.33333333333333%; + } + .col-md-pull-5 { + right: 41.66666666666667%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-7 { + right: 58.333333333333336%; + } + .col-md-pull-8 { + right: 66.66666666666666%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-10 { + right: 83.33333333333334%; + } + .col-md-pull-11 { + right: 91.66666666666666%; + } + .col-md-offset-0 { + margin-left: 0; + } + .col-md-offset-1 { + margin-left: 8.333333333333332%; + } + .col-md-offset-2 { + margin-left: 16.666666666666664%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-4 { + margin-left: 33.33333333333333%; + } + .col-md-offset-5 { + margin-left: 41.66666666666667%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-7 { + margin-left: 58.333333333333336%; + } + .col-md-offset-8 { + margin-left: 66.66666666666666%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-10 { + margin-left: 83.33333333333334%; + } + .col-md-offset-11 { + margin-left: 91.66666666666666%; + } +} + +@media (min-width: 1200px) { + .container { + max-width: 1170px; + } + .col-lg-1, + .col-lg-2, + .col-lg-3, + .col-lg-4, + .col-lg-5, + .col-lg-6, + .col-lg-7, + .col-lg-8, + .col-lg-9, + .col-lg-10, + .col-lg-11 { + float: left; + } + .col-lg-1 { + width: 8.333333333333332%; + } + .col-lg-2 { + width: 16.666666666666664%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-4 { + width: 33.33333333333333%; + } + .col-lg-5 { + width: 41.66666666666667%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-7 { + width: 58.333333333333336%; + } + .col-lg-8 { + width: 66.66666666666666%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-10 { + width: 83.33333333333334%; + } + .col-lg-11 { + width: 91.66666666666666%; + } + .col-lg-12 { + width: 100%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-push-1 { + left: 8.333333333333332%; + } + .col-lg-push-2 { + left: 16.666666666666664%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-4 { + left: 33.33333333333333%; + } + .col-lg-push-5 { + left: 41.66666666666667%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-7 { + left: 58.333333333333336%; + } + .col-lg-push-8 { + left: 66.66666666666666%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-10 { + left: 83.33333333333334%; + } + .col-lg-push-11 { + left: 91.66666666666666%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-pull-1 { + right: 8.333333333333332%; + } + .col-lg-pull-2 { + right: 16.666666666666664%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-4 { + right: 33.33333333333333%; + } + .col-lg-pull-5 { + right: 41.66666666666667%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-7 { + right: 58.333333333333336%; + } + .col-lg-pull-8 { + right: 66.66666666666666%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-10 { + right: 83.33333333333334%; + } + .col-lg-pull-11 { + right: 91.66666666666666%; + } + .col-lg-offset-0 { + margin-left: 0; + } + .col-lg-offset-1 { + margin-left: 8.333333333333332%; + } + .col-lg-offset-2 { + margin-left: 16.666666666666664%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-4 { + margin-left: 33.33333333333333%; + } + .col-lg-offset-5 { + margin-left: 41.66666666666667%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-7 { + margin-left: 58.333333333333336%; + } + .col-lg-offset-8 { + margin-left: 66.66666666666666%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-10 { + margin-left: 83.33333333333334%; + } + .col-lg-offset-11 { + margin-left: 91.66666666666666%; + } +} + +table { + max-width: 100%; + background-color: transparent; +} + +th { + text-align: left; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table thead > tr > th, +.table tbody > tr > th, +.table tfoot > tr > th, +.table thead > tr > td, +.table tbody > tr > td, +.table tfoot > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #dddddd; +} + +.table caption + thead tr:first-child th, +.table colgroup + thead tr:first-child th, +.table thead:first-child tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed thead > tr > th, +.table-condensed tbody > tr > th, +.table-condensed tfoot > tr > th, +.table-condensed thead > tr > td, +.table-condensed tbody > tr > td, +.table-condensed tfoot > tr > td { + padding: 5px; +} + +.table-bordered { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #dddddd; +} + +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} + +table col[class*="col-"] { + display: table-column; + float: none; +} + +table td[class*="col-"], +table th[class*="col-"] { + display: table-cell; + float: none; +} + +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} + +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td { + background-color: #d0e9c6; + border-color: #c9e2b3; +} + +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; + border-color: #eed3d7; +} + +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td { + background-color: #ebcccc; + border-color: #e6c1c7; +} + +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td { + background-color: #faf2cc; + border-color: #f8e5be; +} + +@media (max-width: 768px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-x: scroll; + overflow-y: hidden; + border: 1px solid #dddddd; + } + .table-responsive > .table { + margin-bottom: 0; + background-color: #fff; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > thead > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > thead > tr:last-child > td, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #666666; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +label { + display: inline-block; + margin-bottom: 5px; + font-weight: bold; +} + +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} + +input[type="file"] { + display: block; +} + +select[multiple], +select[size] { + height: auto; +} + +select optgroup { + font-family: inherit; + font-size: inherit; + font-style: inherit; +} + +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +input[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { + height: auto; +} + +.form-control:-moz-placeholder { + color: #999999; +} + +.form-control::-moz-placeholder { + color: #999999; +} + +.form-control:-ms-input-placeholder { + color: #999999; +} + +.form-control::-webkit-input-placeholder { + color: #999999; +} + +.form-control { + display: block; + width: 100%; + height: 38px; + padding: 8px 12px; + font-size: 14px; + line-height: 1.428571429; + color: #666666; + vertical-align: middle; + background-color: #ffffff; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; + transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; +} + +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); +} + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eeeeee; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + display: block; + min-height: 20px; + padding-left: 20px; + margin-top: 10px; + margin-bottom: 10px; + vertical-align: middle; +} + +.radio label, +.checkbox label { + display: inline; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +.radio[disabled], +.radio-inline[disabled], +.checkbox[disabled], +.checkbox-inline[disabled], +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"], +fieldset[disabled] .radio, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-sm { + height: 30px; + line-height: 30px; +} + +textarea.input-sm { + height: auto; +} + +.input-lg { + height: 56px; + padding: 14px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-lg { + height: 56px; + line-height: 56px; +} + +textarea.input-lg { + height: auto; +} + +.has-warning .help-block, +.has-warning .control-label { + color: #c09853; +} + +.has-warning .form-control { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-warning .form-control:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.has-warning .input-group-addon { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.has-error .help-block, +.has-error .control-label { + color: #b94a48; +} + +.has-error .form-control { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-error .form-control:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.has-error .input-group-addon { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.has-success .help-block, +.has-success .control-label { + color: #468847; +} + +.has-success .form-control { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-success .form-control:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.has-success .input-group-addon { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.form-control-static { + padding-top: 9px; + margin-bottom: 0; +} + +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #a6a6a6; +} + +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +.form-horizontal .control-label, +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 9px; + margin-top: 0; + margin-bottom: 0; +} + +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +.form-horizontal .form-group:before, +.form-horizontal .form-group:after { + display: table; + content: " "; +} + +.form-horizontal .form-group:after { + clear: both; +} + +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + } +} + +.btn { + display: inline-block; + padding: 8px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.428571429; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + border: 1px solid transparent; + border-radius: 4px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:hover, +.btn:focus { + color: #ffffff; + text-decoration: none; +} + +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-default { + color: #ffffff; + background-color: #474949; + border-color: #474949; +} + +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + color: #ffffff; + background-color: #333434; + border-color: #292a2a; +} + +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + background-image: none; +} + +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #474949; + border-color: #474949; +} + +.btn-primary { + color: #ffffff; + background-color: #446e9b; + border-color: #446e9b; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + color: #ffffff; + background-color: #385a7f; + border-color: #315070; +} + +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + background-image: none; +} + +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #446e9b; + border-color: #446e9b; +} + +.btn-warning { + color: #ffffff; + background-color: #d47500; + border-color: #d47500; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + color: #ffffff; + background-color: #ab5e00; + border-color: #975300; +} + +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + background-image: none; +} + +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #d47500; + border-color: #d47500; +} + +.btn-danger { + color: #ffffff; + background-color: #cd0200; + border-color: #cd0200; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + color: #ffffff; + background-color: #a40200; + border-color: #900100; +} + +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + background-image: none; +} + +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #cd0200; + border-color: #cd0200; +} + +.btn-success { + color: #ffffff; + background-color: #3cb521; + border-color: #3cb521; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + color: #ffffff; + background-color: #31921b; + border-color: #2b8118; +} + +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + background-image: none; +} + +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #3cb521; + border-color: #3cb521; +} + +.btn-info { + color: #ffffff; + background-color: #3399f3; + border-color: #3399f3; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + color: #ffffff; + background-color: #0e86ef; + border-color: #0d7bdc; +} + +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + background-image: none; +} + +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #3399f3; + border-color: #3399f3; +} + +.btn-link { + font-weight: normal; + color: #3399f3; + cursor: pointer; + border-radius: 0; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} + +.btn-link:hover, +.btn-link:focus { + color: #3399f3; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #999999; + text-decoration: none; +} + +.btn-lg { + padding: 14px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-sm, +.btn-xs { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-xs { + padding: 1px 5px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.in { + display: block; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons-halflingsregular') format('svg'); +} + +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + -webkit-font-smoothing: antialiased; + font-style: normal; + font-weight: normal; + line-height: 1; +} + +.glyphicon-asterisk:before { + content: "\2a"; +} + +.glyphicon-plus:before { + content: "\2b"; +} + +.glyphicon-euro:before { + content: "\20ac"; +} + +.glyphicon-minus:before { + content: "\2212"; +} + +.glyphicon-cloud:before { + content: "\2601"; +} + +.glyphicon-envelope:before { + content: "\2709"; +} + +.glyphicon-pencil:before { + content: "\270f"; +} + +.glyphicon-glass:before { + content: "\e001"; +} + +.glyphicon-music:before { + content: "\e002"; +} + +.glyphicon-search:before { + content: "\e003"; +} + +.glyphicon-heart:before { + content: "\e005"; +} + +.glyphicon-star:before { + content: "\e006"; +} + +.glyphicon-star-empty:before { + content: "\e007"; +} + +.glyphicon-user:before { + content: "\e008"; +} + +.glyphicon-film:before { + content: "\e009"; +} + +.glyphicon-th-large:before { + content: "\e010"; +} + +.glyphicon-th:before { + content: "\e011"; +} + +.glyphicon-th-list:before { + content: "\e012"; +} + +.glyphicon-ok:before { + content: "\e013"; +} + +.glyphicon-remove:before { + content: "\e014"; +} + +.glyphicon-zoom-in:before { + content: "\e015"; +} + +.glyphicon-zoom-out:before { + content: "\e016"; +} + +.glyphicon-off:before { + content: "\e017"; +} + +.glyphicon-signal:before { + content: "\e018"; +} + +.glyphicon-cog:before { + content: "\e019"; +} + +.glyphicon-trash:before { + content: "\e020"; +} + +.glyphicon-home:before { + content: "\e021"; +} + +.glyphicon-file:before { + content: "\e022"; +} + +.glyphicon-time:before { + content: "\e023"; +} + +.glyphicon-road:before { + content: "\e024"; +} + +.glyphicon-download-alt:before { + content: "\e025"; +} + +.glyphicon-download:before { + content: "\e026"; +} + +.glyphicon-upload:before { + content: "\e027"; +} + +.glyphicon-inbox:before { + content: "\e028"; +} + +.glyphicon-play-circle:before { + content: "\e029"; +} + +.glyphicon-repeat:before { + content: "\e030"; +} + +.glyphicon-refresh:before { + content: "\e031"; +} + +.glyphicon-list-alt:before { + content: "\e032"; +} + +.glyphicon-flag:before { + content: "\e034"; +} + +.glyphicon-headphones:before { + content: "\e035"; +} + +.glyphicon-volume-off:before { + content: "\e036"; +} + +.glyphicon-volume-down:before { + content: "\e037"; +} + +.glyphicon-volume-up:before { + content: "\e038"; +} + +.glyphicon-qrcode:before { + content: "\e039"; +} + +.glyphicon-barcode:before { + content: "\e040"; +} + +.glyphicon-tag:before { + content: "\e041"; +} + +.glyphicon-tags:before { + content: "\e042"; +} + +.glyphicon-book:before { + content: "\e043"; +} + +.glyphicon-print:before { + content: "\e045"; +} + +.glyphicon-font:before { + content: "\e047"; +} + +.glyphicon-bold:before { + content: "\e048"; +} + +.glyphicon-italic:before { + content: "\e049"; +} + +.glyphicon-text-height:before { + content: "\e050"; +} + +.glyphicon-text-width:before { + content: "\e051"; +} + +.glyphicon-align-left:before { + content: "\e052"; +} + +.glyphicon-align-center:before { + content: "\e053"; +} + +.glyphicon-align-right:before { + content: "\e054"; +} + +.glyphicon-align-justify:before { + content: "\e055"; +} + +.glyphicon-list:before { + content: "\e056"; +} + +.glyphicon-indent-left:before { + content: "\e057"; +} + +.glyphicon-indent-right:before { + content: "\e058"; +} + +.glyphicon-facetime-video:before { + content: "\e059"; +} + +.glyphicon-picture:before { + content: "\e060"; +} + +.glyphicon-map-marker:before { + content: "\e062"; +} + +.glyphicon-adjust:before { + content: "\e063"; +} + +.glyphicon-tint:before { + content: "\e064"; +} + +.glyphicon-edit:before { + content: "\e065"; +} + +.glyphicon-share:before { + content: "\e066"; +} + +.glyphicon-check:before { + content: "\e067"; +} + +.glyphicon-move:before { + content: "\e068"; +} + +.glyphicon-step-backward:before { + content: "\e069"; +} + +.glyphicon-fast-backward:before { + content: "\e070"; +} + +.glyphicon-backward:before { + content: "\e071"; +} + +.glyphicon-play:before { + content: "\e072"; +} + +.glyphicon-pause:before { + content: "\e073"; +} + +.glyphicon-stop:before { + content: "\e074"; +} + +.glyphicon-forward:before { + content: "\e075"; +} + +.glyphicon-fast-forward:before { + content: "\e076"; +} + +.glyphicon-step-forward:before { + content: "\e077"; +} + +.glyphicon-eject:before { + content: "\e078"; +} + +.glyphicon-chevron-left:before { + content: "\e079"; +} + +.glyphicon-chevron-right:before { + content: "\e080"; +} + +.glyphicon-plus-sign:before { + content: "\e081"; +} + +.glyphicon-minus-sign:before { + content: "\e082"; +} + +.glyphicon-remove-sign:before { + content: "\e083"; +} + +.glyphicon-ok-sign:before { + content: "\e084"; +} + +.glyphicon-question-sign:before { + content: "\e085"; +} + +.glyphicon-info-sign:before { + content: "\e086"; +} + +.glyphicon-screenshot:before { + content: "\e087"; +} + +.glyphicon-remove-circle:before { + content: "\e088"; +} + +.glyphicon-ok-circle:before { + content: "\e089"; +} + +.glyphicon-ban-circle:before { + content: "\e090"; +} + +.glyphicon-arrow-left:before { + content: "\e091"; +} + +.glyphicon-arrow-right:before { + content: "\e092"; +} + +.glyphicon-arrow-up:before { + content: "\e093"; +} + +.glyphicon-arrow-down:before { + content: "\e094"; +} + +.glyphicon-share-alt:before { + content: "\e095"; +} + +.glyphicon-resize-full:before { + content: "\e096"; +} + +.glyphicon-resize-small:before { + content: "\e097"; +} + +.glyphicon-exclamation-sign:before { + content: "\e101"; +} + +.glyphicon-gift:before { + content: "\e102"; +} + +.glyphicon-leaf:before { + content: "\e103"; +} + +.glyphicon-eye-open:before { + content: "\e105"; +} + +.glyphicon-eye-close:before { + content: "\e106"; +} + +.glyphicon-warning-sign:before { + content: "\e107"; +} + +.glyphicon-plane:before { + content: "\e108"; +} + +.glyphicon-random:before { + content: "\e110"; +} + +.glyphicon-comment:before { + content: "\e111"; +} + +.glyphicon-magnet:before { + content: "\e112"; +} + +.glyphicon-chevron-up:before { + content: "\e113"; +} + +.glyphicon-chevron-down:before { + content: "\e114"; +} + +.glyphicon-retweet:before { + content: "\e115"; +} + +.glyphicon-shopping-cart:before { + content: "\e116"; +} + +.glyphicon-folder-close:before { + content: "\e117"; +} + +.glyphicon-folder-open:before { + content: "\e118"; +} + +.glyphicon-resize-vertical:before { + content: "\e119"; +} + +.glyphicon-resize-horizontal:before { + content: "\e120"; +} + +.glyphicon-hdd:before { + content: "\e121"; +} + +.glyphicon-bullhorn:before { + content: "\e122"; +} + +.glyphicon-certificate:before { + content: "\e124"; +} + +.glyphicon-thumbs-up:before { + content: "\e125"; +} + +.glyphicon-thumbs-down:before { + content: "\e126"; +} + +.glyphicon-hand-right:before { + content: "\e127"; +} + +.glyphicon-hand-left:before { + content: "\e128"; +} + +.glyphicon-hand-up:before { + content: "\e129"; +} + +.glyphicon-hand-down:before { + content: "\e130"; +} + +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} + +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} + +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} + +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} + +.glyphicon-globe:before { + content: "\e135"; +} + +.glyphicon-tasks:before { + content: "\e137"; +} + +.glyphicon-filter:before { + content: "\e138"; +} + +.glyphicon-fullscreen:before { + content: "\e140"; +} + +.glyphicon-dashboard:before { + content: "\e141"; +} + +.glyphicon-heart-empty:before { + content: "\e143"; +} + +.glyphicon-link:before { + content: "\e144"; +} + +.glyphicon-phone:before { + content: "\e145"; +} + +.glyphicon-usd:before { + content: "\e148"; +} + +.glyphicon-gbp:before { + content: "\e149"; +} + +.glyphicon-sort:before { + content: "\e150"; +} + +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} + +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} + +.glyphicon-sort-by-order:before { + content: "\e153"; +} + +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} + +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} + +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} + +.glyphicon-unchecked:before { + content: "\e157"; +} + +.glyphicon-expand:before { + content: "\e158"; +} + +.glyphicon-collapse-down:before { + content: "\e159"; +} + +.glyphicon-collapse-up:before { + content: "\e160"; +} + +.glyphicon-log-in:before { + content: "\e161"; +} + +.glyphicon-flash:before { + content: "\e162"; +} + +.glyphicon-log-out:before { + content: "\e163"; +} + +.glyphicon-new-window:before { + content: "\e164"; +} + +.glyphicon-record:before { + content: "\e165"; +} + +.glyphicon-save:before { + content: "\e166"; +} + +.glyphicon-open:before { + content: "\e167"; +} + +.glyphicon-saved:before { + content: "\e168"; +} + +.glyphicon-import:before { + content: "\e169"; +} + +.glyphicon-export:before { + content: "\e170"; +} + +.glyphicon-send:before { + content: "\e171"; +} + +.glyphicon-floppy-disk:before { + content: "\e172"; +} + +.glyphicon-floppy-saved:before { + content: "\e173"; +} + +.glyphicon-floppy-remove:before { + content: "\e174"; +} + +.glyphicon-floppy-save:before { + content: "\e175"; +} + +.glyphicon-floppy-open:before { + content: "\e176"; +} + +.glyphicon-credit-card:before { + content: "\e177"; +} + +.glyphicon-transfer:before { + content: "\e178"; +} + +.glyphicon-cutlery:before { + content: "\e179"; +} + +.glyphicon-header:before { + content: "\e180"; +} + +.glyphicon-compressed:before { + content: "\e181"; +} + +.glyphicon-earphone:before { + content: "\e182"; +} + +.glyphicon-phone-alt:before { + content: "\e183"; +} + +.glyphicon-tower:before { + content: "\e184"; +} + +.glyphicon-stats:before { + content: "\e185"; +} + +.glyphicon-sd-video:before { + content: "\e186"; +} + +.glyphicon-hd-video:before { + content: "\e187"; +} + +.glyphicon-subtitles:before { + content: "\e188"; +} + +.glyphicon-sound-stereo:before { + content: "\e189"; +} + +.glyphicon-sound-dolby:before { + content: "\e190"; +} + +.glyphicon-sound-5-1:before { + content: "\e191"; +} + +.glyphicon-sound-6-1:before { + content: "\e192"; +} + +.glyphicon-sound-7-1:before { + content: "\e193"; +} + +.glyphicon-copyright-mark:before { + content: "\e194"; +} + +.glyphicon-registration-mark:before { + content: "\e195"; +} + +.glyphicon-cloud-download:before { + content: "\e197"; +} + +.glyphicon-cloud-upload:before { + content: "\e198"; +} + +.glyphicon-tree-conifer:before { + content: "\e199"; +} + +.glyphicon-tree-deciduous:before { + content: "\e200"; +} + +.glyphicon-briefcase:before { + content: "\1f4bc"; +} + +.glyphicon-calendar:before { + content: "\1f4c5"; +} + +.glyphicon-pushpin:before { + content: "\1f4cc"; +} + +.glyphicon-paperclip:before { + content: "\1f4ce"; +} + +.glyphicon-camera:before { + content: "\1f4f7"; +} + +.glyphicon-lock:before { + content: "\1f512"; +} + +.glyphicon-bell:before { + content: "\1f514"; +} + +.glyphicon-bookmark:before { + content: "\1f516"; +} + +.glyphicon-fire:before { + content: "\1f525"; +} + +.glyphicon-wrench:before { + content: "\1f527"; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-bottom: 0 dotted; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown { + position: relative; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + list-style: none; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #446e9b; +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #446e9b; + outline: 0; +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #999999; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0 dotted; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } +} + +.btn-default .caret { + border-top-color: #ffffff; +} + +.btn-primary .caret, +.btn-success .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret { + border-top-color: #fff; +} + +.dropup .btn-default .caret { + border-bottom-color: #ffffff; +} + +.dropup .btn-primary .caret, +.dropup .btn-success .caret, +.dropup .btn-warning .caret, +.dropup .btn-danger .caret, +.dropup .btn-info .caret { + border-bottom-color: #fff; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus { + outline: none; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar .btn-group { + float: left; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group, +.btn-toolbar > .btn-group + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group-xs > .btn { + padding: 5px 10px; + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +.btn-group-lg > .btn { + padding: 14px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group > .btn { + float: none; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-right-radius: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 0; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child > .btn:last-child, +.btn-group-vertical > .btn-group:first-child > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child > .btn:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.btn-group-justified { + display: table; + width: 100%; + border-collapse: separate; + table-layout: fixed; +} + +.btn-group-justified .btn { + display: table-cell; + float: none; + width: 1%; +} + +[data-toggle="buttons"] > .btn > input[type="radio"], +[data-toggle="buttons"] > .btn > input[type="checkbox"] { + display: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} + +.input-group.col { + float: none; + padding-right: 0; + padding-left: 0; +} + +.input-group .form-control { + width: 100%; + margin-bottom: 0; +} + +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 56px; + padding: 14px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} + +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 56px; + line-height: 56px; +} + +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn { + height: auto; +} + +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} + +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} + +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn { + height: auto; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: 8px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + text-align: center; + background-color: #eeeeee; + border: 1px solid #cccccc; + border-radius: 4px; +} + +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} + +.input-group-addon.input-lg { + padding: 14px 16px; + font-size: 18px; + border-radius: 6px; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child) { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -4px; +} + +.input-group-btn > .btn:hover, +.input-group-btn > .btn:active { + z-index: 2; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav > li { + position: relative; + display: block; +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li.disabled > a { + color: #999999; +} + +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #999999; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} + +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eeeeee; + border-color: #3399f3; +} + +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.nav > li > a > img { + max-width: none; +} + +.nav-tabs { + border-bottom: 1px solid #dddddd; +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.428571429; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #666666; + cursor: default; + background-color: #ffffff; + border: 1px solid #dddddd; + border-bottom-color: transparent; +} + +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} + +.nav-tabs.nav-justified > li { + float: none; +} + +.nav-tabs.nav-justified > li > a { + text-align: center; +} + +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } +} + +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs.nav-justified > .active > a { + border-bottom-color: #ffffff; +} + +.nav-pills > li { + float: left; +} + +.nav-pills > li > a { + border-radius: 5px; +} + +.nav-pills > li + li { + margin-left: 2px; +} + +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #ffffff; + background-color: #446e9b; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} + +.nav-justified { + width: 100%; +} + +.nav-justified > li { + float: none; +} + +.nav-justified > li > a { + text-align: center; +} + +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } +} + +.nav-tabs-justified { + border-bottom: 0; +} + +.nav-tabs-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #dddddd; +} + +.nav-tabs-justified > .active > a { + border-bottom-color: #ffffff; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.nav .caret { + border-top-color: #3399f3; + border-bottom-color: #3399f3; +} + +.nav a:hover .caret { + border-top-color: #3399f3; + border-bottom-color: #3399f3; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar { + position: relative; + z-index: 1000; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +.navbar-header:before, +.navbar-header:after { + display: table; + content: " "; +} + +.navbar-header:after { + clear: both; +} + +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} + +.navbar-collapse { + max-height: 340px; + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + border-top: 1px solid transparent; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1); + -webkit-overflow-scrolling: touch; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse:before, +.navbar-collapse:after { + display: table; + content: " "; +} + +.navbar-collapse:after { + clear: both; +} + +.navbar-collapse.in { + overflow-y: auto; +} + +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-collapse .navbar-nav.navbar-left:first-child { + margin-left: -15px; + } + .navbar-collapse .navbar-nav.navbar-right:last-child { + margin-right: -15px; + } + .navbar-collapse .navbar-text:last-child { + margin-right: 0; + } +} + +.container > .navbar-header, +.container > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} + +@media (min-width: 768px) { + .container > .navbar-header, + .container > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} + +.navbar-static-top { + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + border-width: 0 0 1px; +} + +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; + z-index: 1030; +} + +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; +} + +.navbar-brand { + float: left; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} + +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} + +@media (min-width: 768px) { + .navbar > .container .navbar-brand { + margin-left: -15px; + } +} + +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + border: 1px solid transparent; + border-radius: 4px; +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} + +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} + +.navbar-nav { + margin: 7.5px -15px; +} + +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} + +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} + +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} + +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + } +} + +.navbar-form { + padding: 10px 15px; + margin-top: 6px; + margin-right: -15px; + margin-bottom: 6px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); +} + +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + padding-left: 0; + margin-top: 0; + margin-bottom: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + float: none; + margin-left: 0; + } +} + +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } +} + +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} + +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar-nav.pull-right > li > .dropdown-menu, +.navbar-nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar-btn { + margin-top: 6px; + margin-bottom: 6px; +} + +.navbar-text { + float: left; + margin-top: 15px; + margin-bottom: 15px; +} + +@media (min-width: 768px) { + .navbar-text { + margin-right: 15px; + margin-left: 15px; + } +} + +.navbar-default { + background-color: #eeeeee; + border-color: #dddddd; +} + +.navbar-default .navbar-brand { + color: #777777; +} + +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #3399f3; + background-color: transparent; +} + +.navbar-default .navbar-text { + color: #777777; +} + +.navbar-default .navbar-nav > li > a { + color: #777777; +} + +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #3399f3; + background-color: transparent; +} + +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #3399f3; + background-color: transparent; +} + +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} + +.navbar-default .navbar-toggle { + border-color: #dddddd; +} + +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #dddddd; +} + +.navbar-default .navbar-toggle .icon-bar { + background-color: #cccccc; +} + +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #dcdcdc; +} + +.navbar-default .navbar-nav > .dropdown > a:hover .caret, +.navbar-default .navbar-nav > .dropdown > a:focus .caret { + border-top-color: #3399f3; + border-bottom-color: #3399f3; +} + +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #3399f3; + background-color: transparent; +} + +.navbar-default .navbar-nav > .open > a .caret, +.navbar-default .navbar-nav > .open > a:hover .caret, +.navbar-default .navbar-nav > .open > a:focus .caret { + border-top-color: #3399f3; + border-bottom-color: #3399f3; +} + +.navbar-default .navbar-nav > .dropdown > a .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #3399f3; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #3399f3; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444444; + background-color: transparent; + } +} + +.navbar-default .navbar-link { + color: #777777; +} + +.navbar-default .navbar-link:hover { + color: #3399f3; +} + +.navbar-inverse { + background-color: #446e9b; + border-color: #345578; +} + +.navbar-inverse .navbar-brand { + color: #dddddd; +} + +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-text { + color: #dddddd; +} + +.navbar-inverse .navbar-nav > li > a { + color: #dddddd; +} + +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} + +.navbar-inverse .navbar-toggle { + border-color: #345578; +} + +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #345578; +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #ffffff; +} + +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #395c82; +} + +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-nav > .dropdown > a .caret { + border-top-color: #dddddd; + border-bottom-color: #dddddd; +} + +.navbar-inverse .navbar-nav > .open > a .caret, +.navbar-inverse .navbar-nav > .open > a:hover .caret, +.navbar-inverse .navbar-nav > .open > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #345578; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #dddddd; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #ffffff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #cccccc; + background-color: transparent; + } +} + +.navbar-inverse .navbar-link { + color: #dddddd; +} + +.navbar-inverse .navbar-link:hover { + color: #ffffff; +} + +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; +} + +.breadcrumb > li + li:before { + padding: 0 5px; + color: #cccccc; + content: "/\00a0"; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} + +.pagination > li { + display: inline; +} + +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 8px 12px; + margin-left: -1px; + line-height: 1.428571429; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + background-color: #eeeeee; +} + +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #999999; + cursor: default; + background-color: #f5f5f5; + border-color: #f5f5f5; +} + +.pagination > .disabled > span, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; + border-color: #dddddd; +} + +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 14px 16px; + font-size: 18px; +} + +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} + +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: not-allowed; + background-color: #ffffff; +} + +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} + +.label[href]:hover, +.label[href]:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label:empty { + display: none; +} + +.label-default { + background-color: #474949; +} + +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #2e2f2f; +} + +.label-primary { + background-color: #446e9b; +} + +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #345578; +} + +.label-success { + background-color: #3cb521; +} + +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #2e8a19; +} + +.label-info { + background-color: #3399f3; +} + +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #0e80e5; +} + +.label-warning { + background-color: #d47500; +} + +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #a15900; +} + +.label-danger { + background-color: #cd0200; +} + +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #9a0200; +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #ffffff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; + border-radius: 10px; +} + +.badge:empty { + display: none; +} + +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.btn .badge { + position: relative; + top: -1px; +} + +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #3399f3; + background-color: #ffffff; +} + +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: 21px; + font-weight: 200; + line-height: 2.1428571435; + color: inherit; + background-color: #eeeeee; +} + +.jumbotron h1 { + line-height: 1; + color: inherit; +} + +.jumbotron p { + line-height: 1.4; +} + +.container .jumbotron { + border-radius: 6px; +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1 { + font-size: 63px; + } +} + +.thumbnail { + display: inline-block; + display: block; + height: auto; + max-width: 100%; + padding: 4px; + line-height: 1.428571429; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 4px; + -webkit-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +.thumbnail > img { + display: block; + height: auto; + max-width: 100%; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #3399f3; +} + +.thumbnail > img { + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #666666; +} + +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} + +.alert h4 { + margin-top: 0; + color: inherit; +} + +.alert .alert-link { + font-weight: bold; +} + +.alert > p, +.alert > ul { + margin-bottom: 0; +} + +.alert > p + p { + margin-top: 5px; +} + +.alert-dismissable { + padding-right: 35px; +} + +.alert-dismissable .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success hr { + border-top-color: #c9e2b3; +} + +.alert-success .alert-link { + color: #356635; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info hr { + border-top-color: #a6e1ec; +} + +.alert-info .alert-link { + color: #2d6987; +} + +.alert-warning { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.alert-warning hr { + border-top-color: #f8e5be; +} + +.alert-warning .alert-link { + color: #a47e3c; +} + +.alert-danger { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger hr { + border-top-color: #e6c1c7; +} + +.alert-danger .alert-link { + color: #953b39; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + background-color: #446e9b; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 40px 40px; +} + +.progress.active .progress-bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-success { + background-color: #3cb521; +} + +.progress-striped .progress-bar-success { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-info { + background-color: #3399f3; +} + +.progress-striped .progress-bar-info { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-warning { + background-color: #d47500; +} + +.progress-striped .progress-bar-warning { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-bar-danger { + background-color: #cd0200; +} + +.progress-striped .progress-bar-danger { + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 20px; +} + +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #ffffff; + border: 1px solid #dddddd; +} + +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.list-group-item > .badge { + float: right; +} + +.list-group-item > .badge + .badge { + margin-right: 5px; +} + +a.list-group-item { + color: #555555; +} + +a.list-group-item .list-group-item-heading { + color: #333333; +} + +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #ffffff; + background-color: #446e9b; + border-color: #446e9b; +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading { + color: inherit; +} + +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c5d5e6; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.panel { + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.panel-body { + padding: 15px; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel-body:before, +.panel-body:after { + display: table; + content: " "; +} + +.panel-body:after { + clear: both; +} + +.panel > .list-group { + margin-bottom: 0; +} + +.panel > .list-group .list-group-item { + border-width: 1px 0; +} + +.panel > .list-group .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.panel > .list-group .list-group-item:last-child { + border-bottom: 0; +} + +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} + +.panel > .table { + margin-bottom: 0; +} + +.panel > .panel-body + .table { + border-top: 1px solid #dddddd; +} + +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} + +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; +} + +.panel-title > a { + color: inherit; +} + +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} + +.panel-group .panel { + margin-bottom: 0; + overflow: hidden; + border-radius: 4px; +} + +.panel-group .panel + .panel { + margin-top: 5px; +} + +.panel-group .panel-heading { + border-bottom: 0; +} + +.panel-group .panel-heading + .panel-collapse .panel-body { + border-top: 1px solid #dddddd; +} + +.panel-group .panel-footer { + border-top: 0; +} + +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #dddddd; +} + +.panel-default { + border-color: #dddddd; +} + +.panel-default > .panel-heading { + color: #333333; + background-color: #f5f5f5; + border-color: #dddddd; +} + +.panel-default > .panel-heading + .panel-collapse .panel-body { + border-top-color: #dddddd; +} + +.panel-default > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #dddddd; +} + +.panel-primary { + border-color: #446e9b; +} + +.panel-primary > .panel-heading { + color: #ffffff; + background-color: #446e9b; + border-color: #446e9b; +} + +.panel-primary > .panel-heading + .panel-collapse .panel-body { + border-top-color: #446e9b; +} + +.panel-primary > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #446e9b; +} + +.panel-success { + border-color: #d6e9c6; +} + +.panel-success > .panel-heading { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.panel-success > .panel-heading + .panel-collapse .panel-body { + border-top-color: #d6e9c6; +} + +.panel-success > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #d6e9c6; +} + +.panel-warning { + border-color: #fbeed5; +} + +.panel-warning > .panel-heading { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; +} + +.panel-warning > .panel-heading + .panel-collapse .panel-body { + border-top-color: #fbeed5; +} + +.panel-warning > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #fbeed5; +} + +.panel-danger { + border-color: #eed3d7; +} + +.panel-danger > .panel-heading { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.panel-danger > .panel-heading + .panel-collapse .panel-body { + border-top-color: #eed3d7; +} + +.panel-danger > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #eed3d7; +} + +.panel-info { + border-color: #bce8f1; +} + +.panel-info > .panel-heading { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.panel-info > .panel-heading + .panel-collapse .panel-body { + border-top-color: #bce8f1; +} + +.panel-info > .panel-footer + .panel-collapse .panel-body { + border-bottom-color: #bce8f1; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-lg { + padding: 24px; + border-radius: 6px; +} + +.well-sm { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.modal-open { + overflow: hidden; +} + +body.modal-open, +.modal-open .navbar-fixed-top, +.modal-open .navbar-fixed-bottom { + margin-right: 15px; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: auto; + overflow-y: scroll; +} + +.modal.fade .modal-dialog { + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + transform: translate(0, -25%); + -webkit-transition: -webkit-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + transition: transform 0.3s ease-out; +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-dialog { + z-index: 1050; + width: auto; + padding: 10px; + margin-right: auto; + margin-left: auto; +} + +.modal-content { + position: relative; + background-color: #ffffff; + border: 1px solid #999999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + background-clip: padding-box; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} + +.modal-backdrop.in { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.modal-header { + min-height: 16.428571429px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.428571429; +} + +.modal-body { + position: relative; + padding: 20px; +} + +.modal-footer { + padding: 19px 20px 20px; + margin-top: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +@media screen and (min-width: 768px) { + .modal-dialog { + right: auto; + left: 50%; + width: 600px; + padding-top: 30px; + padding-bottom: 30px; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 12px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.9; + filter: alpha(opacity=90); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: rgba(0, 0, 0, 0.9); + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: rgba(0, 0, 0, 0.9); + border-width: 5px 5px 0; +} + +.tooltip.top-left .tooltip-arrow { + bottom: 0; + left: 5px; + border-top-color: rgba(0, 0, 0, 0.9); + border-width: 5px 5px 0; +} + +.tooltip.top-right .tooltip-arrow { + right: 5px; + bottom: 0; + border-top-color: rgba(0, 0, 0, 0.9); + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: rgba(0, 0, 0, 0.9); + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: rgba(0, 0, 0, 0.9); + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: rgba(0, 0, 0, 0.9); + border-width: 0 5px 5px; +} + +.tooltip.bottom-left .tooltip-arrow { + top: 0; + left: 5px; + border-bottom-color: rgba(0, 0, 0, 0.9); + border-width: 0 5px 5px; +} + +.tooltip.bottom-right .tooltip-arrow { + top: 0; + right: 5px; + border-bottom-color: rgba(0, 0, 0, 0.9); + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #cccccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; + content: " "; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; + content: " "; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; + content: " "; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; + content: " "; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + height: auto; + max-width: 100%; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.left { + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.5) 0), color-stop(rgba(0, 0, 0, 0.0001) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0.0001) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} + +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-gradient(linear, 0 top, 100% top, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, 0.0001) 0), color-stop(rgba(0, 0, 0, 0.5) 100%)); + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0, rgba(0, 0, 0, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; +} + +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + font-family: serif; +} + +.carousel-control .icon-prev:before { + content: '\2039'; +} + +.carousel-control .icon-next:before { + content: '\203a'; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + border: 1px solid #ffffff; + border-radius: 10px; +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #ffffff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #ffffff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} + +.carousel-caption .btn { + text-shadow: none; +} + +@media screen and (min-width: 768px) { + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} + +@media screen and (max-width: 400px) { + @-ms-viewport { + width: 320px; + } +} + +.hidden { + display: none !important; + visibility: hidden !important; +} + +.visible-xs { + display: none !important; +} + +tr.visible-xs { + display: none !important; +} + +th.visible-xs, +td.visible-xs { + display: none !important; +} + +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-xs.visible-sm { + display: block !important; + } + tr.visible-xs.visible-sm { + display: table-row !important; + } + th.visible-xs.visible-sm, + td.visible-xs.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-xs.visible-md { + display: block !important; + } + tr.visible-xs.visible-md { + display: table-row !important; + } + th.visible-xs.visible-md, + td.visible-xs.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-xs.visible-lg { + display: block !important; + } + tr.visible-xs.visible-lg { + display: table-row !important; + } + th.visible-xs.visible-lg, + td.visible-xs.visible-lg { + display: table-cell !important; + } +} + +.visible-sm { + display: none !important; +} + +tr.visible-sm { + display: none !important; +} + +th.visible-sm, +td.visible-sm { + display: none !important; +} + +@media (max-width: 767px) { + .visible-sm.visible-xs { + display: block !important; + } + tr.visible-sm.visible-xs { + display: table-row !important; + } + th.visible-sm.visible-xs, + td.visible-sm.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-sm.visible-md { + display: block !important; + } + tr.visible-sm.visible-md { + display: table-row !important; + } + th.visible-sm.visible-md, + td.visible-sm.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-sm.visible-lg { + display: block !important; + } + tr.visible-sm.visible-lg { + display: table-row !important; + } + th.visible-sm.visible-lg, + td.visible-sm.visible-lg { + display: table-cell !important; + } +} + +.visible-md { + display: none !important; +} + +tr.visible-md { + display: none !important; +} + +th.visible-md, +td.visible-md { + display: none !important; +} + +@media (max-width: 767px) { + .visible-md.visible-xs { + display: block !important; + } + tr.visible-md.visible-xs { + display: table-row !important; + } + th.visible-md.visible-xs, + td.visible-md.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-md.visible-sm { + display: block !important; + } + tr.visible-md.visible-sm { + display: table-row !important; + } + th.visible-md.visible-sm, + td.visible-md.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-md.visible-lg { + display: block !important; + } + tr.visible-md.visible-lg { + display: table-row !important; + } + th.visible-md.visible-lg, + td.visible-md.visible-lg { + display: table-cell !important; + } +} + +.visible-lg { + display: none !important; +} + +tr.visible-lg { + display: none !important; +} + +th.visible-lg, +td.visible-lg { + display: none !important; +} + +@media (max-width: 767px) { + .visible-lg.visible-xs { + display: block !important; + } + tr.visible-lg.visible-xs { + display: table-row !important; + } + th.visible-lg.visible-xs, + td.visible-lg.visible-xs { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .visible-lg.visible-sm { + display: block !important; + } + tr.visible-lg.visible-sm { + display: table-row !important; + } + th.visible-lg.visible-sm, + td.visible-lg.visible-sm { + display: table-cell !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .visible-lg.visible-md { + display: block !important; + } + tr.visible-lg.visible-md { + display: table-row !important; + } + th.visible-lg.visible-md, + td.visible-lg.visible-md { + display: table-cell !important; + } +} + +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} + +.hidden-xs { + display: block !important; +} + +tr.hidden-xs { + display: table-row !important; +} + +th.hidden-xs, +td.hidden-xs { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } + tr.hidden-xs { + display: none !important; + } + th.hidden-xs, + td.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-xs.hidden-sm { + display: none !important; + } + tr.hidden-xs.hidden-sm { + display: none !important; + } + th.hidden-xs.hidden-sm, + td.hidden-xs.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-xs.hidden-md { + display: none !important; + } + tr.hidden-xs.hidden-md { + display: none !important; + } + th.hidden-xs.hidden-md, + td.hidden-xs.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-xs.hidden-lg { + display: none !important; + } + tr.hidden-xs.hidden-lg { + display: none !important; + } + th.hidden-xs.hidden-lg, + td.hidden-xs.hidden-lg { + display: none !important; + } +} + +.hidden-sm { + display: block !important; +} + +tr.hidden-sm { + display: table-row !important; +} + +th.hidden-sm, +td.hidden-sm { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-sm.hidden-xs { + display: none !important; + } + tr.hidden-sm.hidden-xs { + display: none !important; + } + th.hidden-sm.hidden-xs, + td.hidden-sm.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } + tr.hidden-sm { + display: none !important; + } + th.hidden-sm, + td.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-sm.hidden-md { + display: none !important; + } + tr.hidden-sm.hidden-md { + display: none !important; + } + th.hidden-sm.hidden-md, + td.hidden-sm.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-sm.hidden-lg { + display: none !important; + } + tr.hidden-sm.hidden-lg { + display: none !important; + } + th.hidden-sm.hidden-lg, + td.hidden-sm.hidden-lg { + display: none !important; + } +} + +.hidden-md { + display: block !important; +} + +tr.hidden-md { + display: table-row !important; +} + +th.hidden-md, +td.hidden-md { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-md.hidden-xs { + display: none !important; + } + tr.hidden-md.hidden-xs { + display: none !important; + } + th.hidden-md.hidden-xs, + td.hidden-md.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-md.hidden-sm { + display: none !important; + } + tr.hidden-md.hidden-sm { + display: none !important; + } + th.hidden-md.hidden-sm, + td.hidden-md.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } + tr.hidden-md { + display: none !important; + } + th.hidden-md, + td.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-md.hidden-lg { + display: none !important; + } + tr.hidden-md.hidden-lg { + display: none !important; + } + th.hidden-md.hidden-lg, + td.hidden-md.hidden-lg { + display: none !important; + } +} + +.hidden-lg { + display: block !important; +} + +tr.hidden-lg { + display: table-row !important; +} + +th.hidden-lg, +td.hidden-lg { + display: table-cell !important; +} + +@media (max-width: 767px) { + .hidden-lg.hidden-xs { + display: none !important; + } + tr.hidden-lg.hidden-xs { + display: none !important; + } + th.hidden-lg.hidden-xs, + td.hidden-lg.hidden-xs { + display: none !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-lg.hidden-sm { + display: none !important; + } + tr.hidden-lg.hidden-sm { + display: none !important; + } + th.hidden-lg.hidden-sm, + td.hidden-lg.hidden-sm { + display: none !important; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-lg.hidden-md { + display: none !important; + } + tr.hidden-lg.hidden-md { + display: none !important; + } + th.hidden-lg.hidden-md, + td.hidden-lg.hidden-md { + display: none !important; + } +} + +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } + tr.hidden-lg { + display: none !important; + } + th.hidden-lg, + td.hidden-lg { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +tr.visible-print { + display: none !important; +} + +th.visible-print, +td.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: block !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } + .hidden-print { + display: none !important; + } + tr.hidden-print { + display: none !important; + } + th.hidden-print, + td.hidden-print { + display: none !important; + } +} + +.navbar { + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(50%, #eeeeee), to(#e4e4e4)); + background-image: -webkit-linear-gradient(#ffffff, #eeeeee 50%, #e4e4e4); + background-image: -moz-linear-gradient(top, #ffffff, #eeeeee 50%, #e4e4e4); + background-image: linear-gradient(#ffffff, #eeeeee 50%, #e4e4e4); + background-repeat: no-repeat; + border: 1px solid #d5d5d5; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe4e4e4', GradientType=0); +} + +.navbar-inverse { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6d94bf), color-stop(50%, #446e9b), to(#3e648d)); + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #3e648d); + background-image: -moz-linear-gradient(top, #6d94bf, #446e9b 50%, #3e648d); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #3e648d); + background-repeat: no-repeat; + border: 1px solid #345578; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff3e648d', GradientType=0); +} + +.navbar-nav > li > a, +.navbar-nav > li > a:hover { + padding-top: 17px; + padding-bottom: 13px; + -webkit-transition: color ease-in-out 0.2s; + transition: color ease-in-out 0.2s; +} + +.navbar-brand, +.navbar-brand:hover { + -webkit-transition: color ease-in-out 0.2s; + transition: color ease-in-out 0.2s; +} + +.navbar .caret, +.navbar .caret:hover { + -webkit-transition: border-color ease-in-out 0.2s; + transition: border-color ease-in-out 0.2s; +} + +.navbar .dropdown-menu { + text-shadow: none; +} + +.btn { + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); +} + +.btn-default, +.btn-default:hover { + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6d7070), color-stop(50%, #474949), to(#3d3f3f)); + background-image: -webkit-linear-gradient(#6d7070, #474949 50%, #3d3f3f); + background-image: -moz-linear-gradient(top, #6d7070, #474949 50%, #3d3f3f); + background-image: linear-gradient(#6d7070, #474949 50%, #3d3f3f); + background-repeat: no-repeat; + border: 1px solid #2e2f2f; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d7070', endColorstr='#ff3d3f3f', GradientType=0); +} + +.btn-primary, +.btn-primary:hover { + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#6d94bf), color-stop(50%, #446e9b), to(#3e648d)); + background-image: -webkit-linear-gradient(#6d94bf, #446e9b 50%, #3e648d); + background-image: -moz-linear-gradient(top, #6d94bf, #446e9b 50%, #3e648d); + background-image: linear-gradient(#6d94bf, #446e9b 50%, #3e648d); + background-repeat: no-repeat; + border: 1px solid #345578; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff6d94bf', endColorstr='#ff3e648d', GradientType=0); +} + +.btn-success, +.btn-success:hover { + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#61dd45), color-stop(50%, #3cb521), to(#36a41e)); + background-image: -webkit-linear-gradient(#61dd45, #3cb521 50%, #36a41e); + background-image: -moz-linear-gradient(top, #61dd45, #3cb521 50%, #36a41e); + background-image: linear-gradient(#61dd45, #3cb521 50%, #36a41e); + background-repeat: no-repeat; + border: 1px solid #2e8a19; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff61dd45', endColorstr='#ff36a41e', GradientType=0); +} + +.btn-info, +.btn-info:hover { + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#7bbdf7), color-stop(50%, #3399f3), to(#208ff2)); + background-image: -webkit-linear-gradient(#7bbdf7, #3399f3 50%, #208ff2); + background-image: -moz-linear-gradient(top, #7bbdf7, #3399f3 50%, #208ff2); + background-image: linear-gradient(#7bbdf7, #3399f3 50%, #208ff2); + background-repeat: no-repeat; + border: 1px solid #0e80e5; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff7bbdf7', endColorstr='#ff208ff2', GradientType=0); +} + +.btn-warning, +.btn-warning:hover { + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ff9c21), color-stop(50%, #d47500), to(#c06a00)); + background-image: -webkit-linear-gradient(#ff9c21, #d47500 50%, #c06a00); + background-image: -moz-linear-gradient(top, #ff9c21, #d47500 50%, #c06a00); + background-image: linear-gradient(#ff9c21, #d47500 50%, #c06a00); + background-repeat: no-repeat; + border: 1px solid #a15900; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff9c21', endColorstr='#ffc06a00', GradientType=0); +} + +.btn-danger, +.btn-danger:hover { + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ff1d1b), color-stop(50%, #cd0200), to(#b90200)); + background-image: -webkit-linear-gradient(#ff1d1b, #cd0200 50%, #b90200); + background-image: -moz-linear-gradient(top, #ff1d1b, #cd0200 50%, #b90200); + background-image: linear-gradient(#ff1d1b, #cd0200 50%, #b90200); + background-repeat: no-repeat; + border: 1px solid #9a0200; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff1d1b', endColorstr='#ffb90200', GradientType=0); +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: #2d2d2d; +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.affix { + position: fixed; +} diff --git a/webroot/css/cake.generic.css b/webroot/css/cake.generic.css new file mode 100644 index 00000000..f83a5250 --- /dev/null +++ b/webroot/css/cake.generic.css @@ -0,0 +1,740 @@ +@charset "utf-8"; +/** + * + * Generic CSS for CakePHP + * + * CakePHP(tm) : Rapid Development Framework (http://cakephp.org) + * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) + * + * Licensed under The MIT License + * For full copyright and license information, please see the LICENSE.txt + * Redistributions of files must retain the above copyright notice. + * + * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org) + * @link http://cakephp.org CakePHP(tm) Project + * @package app.webroot.css + * @since CakePHP(tm) + * @license http://www.opensource.org/licenses/mit-license.php MIT License + */ + +* { + margin:0; + padding:0; +} + +/** General Style Info **/ +body { + background: #003d4c; + color: #fff; + font-family:'lucida grande',verdana,helvetica,arial,sans-serif; + font-size:90%; + margin: 0; +} +a { + color: #003d4c; + text-decoration: underline; + font-weight: bold; +} +a:hover { + color: #367889; + text-decoration:none; +} +a img { + border:none; +} +h1, h2, h3, h4 { + font-weight: normal; + margin-bottom:0.5em; +} +h1 { + background:#fff; + color: #003d4c; + font-size: 100%; +} +h2 { + background:#fff; + color: #e32; + font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif; + font-size: 190%; +} +h3 { + color: #2c6877; + font-family:'Gill Sans','lucida grande', helvetica, arial, sans-serif; + font-size: 165%; +} +h4 { + color: #993; + font-weight: normal; +} +ul, li { + margin: 0 12px; +} +p { + margin: 0 0 1em 0; +} + +/** Layout **/ +#container { + text-align: left; +} + +#header{ + padding: 10px 20px; +} +#header h1 { + line-height:20px; + background: #003d4c url('../img/cake.icon.png') no-repeat left; + color: #fff; + padding: 0px 30px; +} +#header h1 a { + color: #fff; + background: #003d4c; + font-weight: normal; + text-decoration: none; +} +#header h1 a:hover { + color: #fff; + background: #003d4c; + text-decoration: underline; +} +#content{ + background: #fff; + clear: both; + color: #333; + padding: 10px 20px 40px 20px; + overflow: auto; +} +#footer { + clear: both; + padding: 6px 10px; + text-align: right; +} + +/** containers **/ +div.form, +div.index, +div.view { + float:right; + width:76%; + border-left:1px solid #666; + padding:10px 2%; +} +div.actions { + float:left; + width:16%; + padding:10px 1.5%; +} +div.actions h3 { + padding-top:0; + color:#777; +} + + +/** Tables **/ +table { + border-right:0; + clear: both; + color: #333; + margin-bottom: 10px; + width: 100%; +} +th { + border:0; + border-bottom:2px solid #555; + text-align: left; + padding:4px; +} +th a { + display: block; + padding: 2px 4px; + text-decoration: none; +} +th a.asc:after { + content: ' ⇣'; +} +th a.desc:after { + content: ' ⇡'; +} +table tr td { + padding: 6px; + text-align: left; + vertical-align: top; + border-bottom:1px solid #ddd; +} +table tr:nth-child(even) { + background: #f9f9f9; +} +td.actions { + text-align: center; + white-space: nowrap; +} +table td.actions a { + margin: 0px 6px; + padding:2px 5px; +} + +/* SQL log */ +.cake-sql-log { + background: #fff; +} +.cake-sql-log td { + padding: 4px 8px; + text-align: left; + font-family: Monaco, Consolas, "Courier New", monospaced; +} +.cake-sql-log caption { + color:#fff; +} + +/** Paging **/ +.paging { + background:#fff; + color: #ccc; + margin-top: 1em; + clear:both; +} +.paging .current, +.paging .disabled, +.paging a { + text-decoration: none; + padding: 5px 8px; + display: inline-block +} +.paging > span { + display: inline-block; + border: 1px solid #ccc; + border-left: 0; +} +.paging > span:hover { + background: #efefef; +} +.paging .prev { + border-left: 1px solid #ccc; + -moz-border-radius: 4px 0 0 4px; + -webkit-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} +.paging .next { + -moz-border-radius: 0 4px 4px 0; + -webkit-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} +.paging .disabled { + color: #ddd; +} +.paging .disabled:hover { + background: transparent; +} +.paging .current { + background: #efefef; + color: #c73e14; +} + +/** Scaffold View **/ +dl { + line-height: 2em; + margin: 0em 0em; + width: 60%; +} +dl dd:nth-child(4n+2), +dl dt:nth-child(4n+1) { + background: #f4f4f4; +} + +dt { + font-weight: bold; + padding-left: 4px; + vertical-align: top; + width: 10em; +} +dd { + margin-left: 10em; + margin-top: -2em; + vertical-align: top; +} + +/** Forms **/ +form { + clear: both; + margin-right: 20px; + padding: 0; + width: 95%; +} +fieldset { + border: none; + margin-bottom: 1em; + padding: 16px 10px; +} +fieldset legend { + color: #e32; + font-size: 160%; + font-weight: bold; +} +fieldset fieldset { + margin-top: 0; + padding: 10px 0 0; +} +fieldset fieldset legend { + font-size: 120%; + font-weight: normal; +} +fieldset fieldset div { + clear: left; + margin: 0 20px; +} +form div { + clear: both; + margin-bottom: 1em; + padding: .5em; + vertical-align: text-top; +} +form .input { + color: #444; +} +form .required { + font-weight: bold; +} +form .required label:after { + color: #e32; + content: '*'; + display:inline; +} +form div.submit { + border: 0; + clear: both; + margin-top: 10px; +} +label { + display: block; + font-size: 110%; + margin-bottom:3px; +} +input, textarea { + clear: both; + font-size: 140%; + font-family: "frutiger linotype", "lucida grande", "verdana", sans-serif; + padding: 1%; + width:98%; +} +select { + clear: both; + font-size: 120%; + vertical-align: text-bottom; +} +select[multiple=multiple] { + width: 100%; +} +option { + font-size: 120%; + padding: 0 3px; +} +input[type=checkbox] { + clear: left; + float: left; + margin: 0px 6px 7px 2px; + width: auto; +} +div.checkbox label { + display: inline; +} +input[type=radio] { + float:left; + width:auto; + margin: 6px 0; + padding: 0; + line-height: 26px; +} +.radio label { + margin: 0 0 6px 20px; + line-height: 26px; +} +input[type=submit] { + display: inline; + font-size: 110%; + width: auto; +} +form .submit input[type=submit] { + background:#62af56; + background-image: -webkit-gradient(linear, left top, left bottom, from(#76BF6B), to(#3B8230)); + background-image: -webkit-linear-gradient(top, #76BF6B, #3B8230); + background-image: -moz-linear-gradient(top, #76BF6B, #3B8230); + border-color: #2d6324; + color: #fff; + text-shadow: rgba(0, 0, 0, 0.5) 0px -1px 0px; + padding: 8px 10px; +} +form .submit input[type=submit]:hover { + background: #5BA150; +} +/* Form errors */ +form .error { + background: #FFDACC; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + font-weight: normal; +} +form .error-message { + -moz-border-radius: none; + -webkit-border-radius: none; + border-radius: none; + border: none; + background: none; + margin: 0; + padding-left: 4px; + padding-right: 0; +} +form .error, +form .error-message { + color: #9E2424; + -webkit-box-shadow: none; + -moz-box-shadow: none; + -ms-box-shadow: none; + -o-box-shadow: none; + box-shadow: none; + text-shadow: none; +} + +/** Notices and Errors **/ +.message { + clear: both; + color: #fff; + font-size: 140%; + font-weight: bold; + margin: 0 0 1em 0; + padding: 5px; +} + +.success, +.message, +.cake-error, +.cake-debug, +.notice, +p.error, +.error-message { + background: #ffcc00; + background-repeat: repeat-x; + background-image: -moz-linear-gradient(top, #ffcc00, #E6B800); + background-image: -ms-linear-gradient(top, #ffcc00, #E6B800); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ffcc00), to(#E6B800)); + background-image: -webkit-linear-gradient(top, #ffcc00, #E6B800); + background-image: -o-linear-gradient(top, #ffcc00, #E6B800); + background-image: linear-gradient(top, #ffcc00, #E6B800); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border: 1px solid rgba(0, 0, 0, 0.2); + margin-bottom: 18px; + padding: 7px 14px; + color: #404040; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} +.success, +.message, +.cake-error, +p.error, +.error-message { + clear: both; + color: #fff; + background: #c43c35; + border: 1px solid rgba(0, 0, 0, 0.5); + background-repeat: repeat-x; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(top, #ee5f5b, #c43c35); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); +} +.success { + clear: both; + color: #fff; + border: 1px solid rgba(0, 0, 0, 0.5); + background: #3B8230; + background-repeat: repeat-x; + background-image: -webkit-gradient(linear, left top, left bottom, from(#76BF6B), to(#3B8230)); + background-image: -webkit-linear-gradient(top, #76BF6B, #3B8230); + background-image: -moz-linear-gradient(top, #76BF6B, #3B8230); + background-image: -ms-linear-gradient(top, #76BF6B, #3B8230); + background-image: -o-linear-gradient(top, #76BF6B, #3B8230); + background-image: linear-gradient(top, #76BF6B, #3B8230); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); +} +p.error { + font-family: Monaco, Consolas, Courier, monospace; + font-size: 120%; + padding: 0.8em; + margin: 1em 0; +} +p.error em { + font-weight: normal; + line-height: 140%; +} +.notice { + color: #000; + display: block; + font-size: 120%; + padding: 0.8em; + margin: 1em 0; +} +.success { + color: #fff; +} + +/** Actions **/ +.actions ul { + margin: 0; + padding: 0; +} +.actions li { + margin:0 0 0.5em 0; + list-style-type: none; + white-space: nowrap; + padding: 0; +} +.actions ul li a { + font-weight: normal; + display: block; + clear: both; +} + +/* Buttons and button links */ +input[type=submit], +.actions ul li a, +.actions a { + font-weight:normal; + padding: 4px 8px; + background: #dcdcdc; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#dcdcdc)); + background-image: -webkit-linear-gradient(top, #fefefe, #dcdcdc); + background-image: -moz-linear-gradient(top, #fefefe, #dcdcdc); + background-image: -ms-linear-gradient(top, #fefefe, #dcdcdc); + background-image: -o-linear-gradient(top, #fefefe, #dcdcdc); + background-image: linear-gradient(top, #fefefe, #dcdcdc); + color:#333; + border:1px solid #bbb; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + text-decoration: none; + text-shadow: #fff 0px 1px 0px; + min-width: 0; + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.3), 0px 1px 1px rgba(0, 0, 0, 0.2); + -webkit-user-select: none; + user-select: none; +} +.actions ul li a:hover, +.actions a:hover { + background: #ededed; + border-color: #acacac; + text-decoration: none; +} +input[type=submit]:active, +.actions ul li a:active, +.actions a:active { + background: #eee; + background-image: -webkit-gradient(linear, left top, left bottom, from(#dfdfdf), to(#eee)); + background-image: -webkit-linear-gradient(top, #dfdfdf, #eee); + background-image: -moz-linear-gradient(top, #dfdfdf, #eee); + background-image: -ms-linear-gradient(top, #dfdfdf, #eee); + background-image: -o-linear-gradient(top, #dfdfdf, #eee); + background-image: linear-gradient(top, #dfdfdf, #eee); + text-shadow: #eee 0px 1px 0px; + -moz-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3); + box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.3); + border-color: #aaa; + text-decoration: none; +} + +/** Related **/ +.related { + clear: both; + display: block; +} + +/** Debugging **/ +pre { + color: #000; + background: #f0f0f0; + padding: 15px; + -moz-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); + box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3); +} +.cake-debug-output { + padding: 0; + position: relative; +} +.cake-debug-output > span { + position: absolute; + top: 5px; + right: 5px; + background: rgba(255, 255, 255, 0.3); + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + padding: 5px 6px; + color: #000; + display: block; + float: left; + -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(255, 255, 255, 0.5); + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(255, 255, 255, 0.5); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.25), 0 1px 0 rgba(255, 255, 255, 0.5); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.8); +} +.cake-debug, +.cake-error { + font-size: 16px; + line-height: 20px; + clear: both; +} +.cake-error > a { + text-shadow: none; +} +.cake-error { + white-space: normal; +} +.cake-stack-trace { + background: rgba(255, 255, 255, 0.7); + color: #333; + margin: 10px 0 5px 0; + padding: 10px 10px 0 10px; + font-size: 120%; + line-height: 140%; + overflow: auto; + position: relative; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; +} +.cake-stack-trace a { + text-shadow: none; + background: rgba(255, 255, 255, 0.7); + padding: 5px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + border-radius: 10px; + margin: 0px 4px 10px 2px; + font-family: sans-serif; + font-size: 14px; + line-height: 14px; + display: inline-block; + text-decoration: none; + -moz-box-shadow: inset 0px 1px 0 rgba(0, 0, 0, 0.3); + -webkit-box-shadow: inset 0px 1px 0 rgba(0, 0, 0, 0.3); + box-shadow: inset 0px 1px 0 rgba(0, 0, 0, 0.3); +} +.cake-code-dump pre { + position: relative; + overflow: auto; +} +.cake-context { + margin-bottom: 10px; +} +.cake-stack-trace pre { + color: #000; + background-color: #F0F0F0; + margin: 0px 0 10px 0; + padding: 1em; + overflow: auto; + text-shadow: none; +} +.cake-stack-trace li { + padding: 10px 5px 0px; + margin: 0 0 4px 0; + font-family: monospace; + border: 1px solid #bbb; + -moz-border-radius: 4px; + -wekbkit-border-radius: 4px; + border-radius: 4px; + background: #dcdcdc; + background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#dcdcdc)); + background-image: -webkit-linear-gradient(top, #fefefe, #dcdcdc); + background-image: -moz-linear-gradient(top, #fefefe, #dcdcdc); + background-image: -ms-linear-gradient(top, #fefefe, #dcdcdc); + background-image: -o-linear-gradient(top, #fefefe, #dcdcdc); + background-image: linear-gradient(top, #fefefe, #dcdcdc); +} +/* excerpt */ +.cake-code-dump pre, +.cake-code-dump pre code { + clear: both; + font-size: 12px; + line-height: 15px; + margin: 4px 2px; + padding: 4px; + overflow: auto; +} +.cake-code-dump .code-highlight { + display: block; + background-color: rgba(255, 255, 0, 0.5); +} +.code-coverage-results div.code-line { + padding-left:5px; + display:block; + margin-left:10px; +} +.code-coverage-results div.uncovered span.content { + background:#ecc; +} +.code-coverage-results div.covered span.content { + background:#cec; +} +.code-coverage-results div.ignored span.content { + color:#aaa; +} +.code-coverage-results span.line-num { + color:#666; + display:block; + float:left; + width:20px; + text-align:right; + margin-right:5px; +} +.code-coverage-results span.line-num strong { + color:#666; +} +.code-coverage-results div.start { + border:1px solid #aaa; + border-width:1px 1px 0px 1px; + margin-top:30px; + padding-top:5px; +} +.code-coverage-results div.end { + border:1px solid #aaa; + border-width:0px 1px 1px 1px; + margin-bottom:30px; + padding-bottom:5px; +} +.code-coverage-results div.realstart { + margin-top:0px; +} +.code-coverage-results p.note { + color:#bbb; + padding:5px; + margin:5px 0 10px; + font-size:10px; +} +.code-coverage-results span.result-bad { + color: #a00; +} +.code-coverage-results span.result-ok { + color: #fa0; +} +.code-coverage-results span.result-good { + color: #0a0; +} + +/** Elements **/ +#url-rewriting-warning { + display:none; +} diff --git a/webroot/css/common/common.css b/webroot/css/common/common.css new file mode 100644 index 00000000..183a230b --- /dev/null +++ b/webroot/css/common/common.css @@ -0,0 +1,33 @@ +/* + * COMMON CSS STYLING + */ + + + /** diff **/ + +div.diff { + +} + +div.diff del { + color: red; +} +div.diff ins { + color: green; +} + +table.diff { + +} +table.diff tr td { + padding: 2px; +} + +table.diff td.diffdeleted { + color: red; +} + +table.diff td.diffadded { + color: green; +} + diff --git a/webroot/css/common/tabber.css b/webroot/css/common/tabber.css new file mode 100644 index 00000000..8c927949 --- /dev/null +++ b/webroot/css/common/tabber.css @@ -0,0 +1,110 @@ +/* $Id: example.css,v 1.5 2006/03/27 02:44:36 pat Exp $ */ + + +/*-------------------------------------------------- + REQUIRED to hide the non-active tab content. + But do not hide them in the print stylesheet! + --------------------------------------------------*/ +.tabberlive .tabbertabhide { + display:none; +} + +/*-------------------------------------------------- + .tabber = before the tabber interface is set up + .tabberlive = after the tabber interface is set up + --------------------------------------------------*/ +.tabber { +} +.tabberlive { + margin-top:1em; +} + +/*-------------------------------------------------- + ul.tabbernav = the tab navigation list + li.tabberactive = the active tab + --------------------------------------------------*/ +ul.tabbernav +{ + margin:0; + padding: 3px 0; + border-bottom: 1px solid #778; + font: bold 12px Verdana, sans-serif; +} + +ul.tabbernav li +{ + list-style: none; + margin: 0; + display: inline; +} + +ul.tabbernav li a +{ + padding: 3px 0.5em; + margin-left: 3px; + border: 1px solid #778; + border-bottom: none; + background: #DDE; + text-decoration: none; +} + +ul.tabbernav li a:link { color: #448; } +ul.tabbernav li a:visited { color: #667; } + +ul.tabbernav li a:hover +{ + color: #000; + background: #AAE; + border-color: #227; +} + +ul.tabbernav li.tabberactive a +{ + background-color: #fff; + border-bottom: 1px solid #fff; +} + +ul.tabbernav li.tabberactive a:hover +{ + color: #000; + background: white; + border-bottom: 1px solid white; +} + +/*-------------------------------------------------- + .tabbertab = the tab content + Add style only after the tabber interface is set up (.tabberlive) + --------------------------------------------------*/ +.tabberlive .tabbertab { + padding:5px; + border:1px solid #aaa; + border-top:0; + + /* If you don't want the tab size changing whenever a tab is changed + you can set a fixed height */ + + /* height:200px; */ + + /* If you set a fix height set overflow to auto and you will get a + scrollbar when necessary */ + + /* overflow:auto; */ +} + +/* If desired, hide the heading since a heading is provided by the tab */ +.tabberlive .tabbertab h2 { + display:none; +} +.tabberlive .tabbertab h3 { + display:none; +} + +/* Example of using an ID to set different styles for the tabs on the page */ +.tabberlive#tab1 { +} +.tabberlive#tab2 { +} +.tabberlive#tab2 .tabbertab { + height:200px; + overflow:auto; +} diff --git a/webroot/css/common/tabs.css b/webroot/css/common/tabs.css new file mode 100644 index 00000000..821999f5 --- /dev/null +++ b/webroot/css/common/tabs.css @@ -0,0 +1,48 @@ + +div.tabs { + background:#2A2A2F none repeat scroll 0 0; + clear:both; + padding:0 10px 10px; +} + + + +div.tabs ul, #box ol { + list-style-image:none; + list-style-position:outside; + list-style-type:none; +} + +div.tabs ul.tabNavigation { + overflow:hidden; + padding-top:10px; +} + + +div.tabs ul.tabNavigation li { + float:left; +} + +div.tabs ul.tabNavigation li a { +background:#1C1C1C none repeat scroll 0 0; +float:left; +margin-right:2px; +padding:5px 10px; +} +div.tabs ul.tabNavigation li a.active { + background:#222225 none repeat scroll 0 0; + color:#CCCCCC; +} + +div.tabs a { +color:#7D94BC; +font-weight:bold; +text-decoration:none; +} + +div.tabs div.content { +background:#222225 none repeat scroll 0 0; +color:#999999; +display:none; +padding:20px 20px 1px; +} \ No newline at end of file diff --git a/webroot/favicon.ico b/webroot/favicon.ico new file mode 100644 index 00000000..5ca95538 Binary files /dev/null and b/webroot/favicon.ico differ diff --git a/webroot/files/examples/folder_example_files/common files/MicrosoftPowerpoint.ppt b/webroot/files/examples/folder_example_files/common files/MicrosoftPowerpoint.ppt new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/common files/PdfFile.pdf b/webroot/files/examples/folder_example_files/common files/PdfFile.pdf new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/common files/SomePic.gif b/webroot/files/examples/folder_example_files/common files/SomePic.gif new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/common files/anotherPic.png b/webroot/files/examples/folder_example_files/common files/anotherPic.png new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/common files/pic.jpg b/webroot/files/examples/folder_example_files/common files/pic.jpg new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/common files/someText.txt b/webroot/files/examples/folder_example_files/common files/someText.txt new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/common files/sqlFile.sql b/webroot/files/examples/folder_example_files/common files/sqlFile.sql new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/common files/zippedFolder.zip b/webroot/files/examples/folder_example_files/common files/zippedFolder.zip new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/some more/MicrosoftExcel.xls b/webroot/files/examples/folder_example_files/some more/MicrosoftExcel.xls new file mode 100644 index 00000000..d08f11d9 Binary files /dev/null and b/webroot/files/examples/folder_example_files/some more/MicrosoftExcel.xls differ diff --git a/webroot/files/examples/folder_example_files/some more/MicrosoftExcel2007.xlsx b/webroot/files/examples/folder_example_files/some more/MicrosoftExcel2007.xlsx new file mode 100644 index 00000000..d08f11d9 Binary files /dev/null and b/webroot/files/examples/folder_example_files/some more/MicrosoftExcel2007.xlsx differ diff --git a/webroot/files/examples/folder_example_files/some more/MicrosoftPPP.pps b/webroot/files/examples/folder_example_files/some more/MicrosoftPPP.pps new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/some more/MicrosoftWord.doc b/webroot/files/examples/folder_example_files/some more/MicrosoftWord.doc new file mode 100644 index 00000000..d08f11d9 Binary files /dev/null and b/webroot/files/examples/folder_example_files/some more/MicrosoftWord.doc differ diff --git a/webroot/files/examples/folder_example_files/some more/MicrosoftWord2007.docx b/webroot/files/examples/folder_example_files/some more/MicrosoftWord2007.docx new file mode 100644 index 00000000..f79ef1ed Binary files /dev/null and b/webroot/files/examples/folder_example_files/some more/MicrosoftWord2007.docx differ diff --git a/webroot/files/examples/folder_example_files/some more/OpenTextDocument.odt b/webroot/files/examples/folder_example_files/some more/OpenTextDocument.odt new file mode 100644 index 00000000..a5fbd76b Binary files /dev/null and b/webroot/files/examples/folder_example_files/some more/OpenTextDocument.odt differ diff --git a/webroot/files/examples/folder_example_files/some more/cssFile.css b/webroot/files/examples/folder_example_files/some more/cssFile.css new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/some more/jsFile.js b/webroot/files/examples/folder_example_files/some more/jsFile.js new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/some more/phpFile.php b/webroot/files/examples/folder_example_files/some more/phpFile.php new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_example_files/some more/zippedFolder.gz b/webroot/files/examples/folder_example_files/some more/zippedFolder.gz new file mode 100644 index 00000000..e69de29b diff --git a/webroot/files/examples/folder_zip/1.txt b/webroot/files/examples/folder_zip/1.txt new file mode 100644 index 00000000..a8a94062 --- /dev/null +++ b/webroot/files/examples/folder_zip/1.txt @@ -0,0 +1 @@ +this is a test \ No newline at end of file diff --git a/webroot/files/examples/folder_zip/containing subfolders/Some File.txt b/webroot/files/examples/folder_zip/containing subfolders/Some File.txt new file mode 100644 index 00000000..56d8c1a6 --- /dev/null +++ b/webroot/files/examples/folder_zip/containing subfolders/Some File.txt @@ -0,0 +1 @@ +Some Content \ No newline at end of file diff --git a/webroot/files/media/sword.mp3 b/webroot/files/media/sword.mp3 new file mode 100644 index 00000000..9bfda65f Binary files /dev/null and b/webroot/files/media/sword.mp3 differ diff --git a/webroot/img/cake.icon.png b/webroot/img/cake.icon.png new file mode 100644 index 00000000..394fa42d Binary files /dev/null and b/webroot/img/cake.icon.png differ diff --git a/webroot/img/cake.power.gif b/webroot/img/cake.power.gif new file mode 100644 index 00000000..8f8d570a Binary files /dev/null and b/webroot/img/cake.power.gif differ diff --git a/webroot/img/css/layout/icon_error.gif b/webroot/img/css/layout/icon_error.gif new file mode 100644 index 00000000..21d6c5c9 Binary files /dev/null and b/webroot/img/css/layout/icon_error.gif differ diff --git a/webroot/img/css/layout/icon_info.gif b/webroot/img/css/layout/icon_info.gif new file mode 100644 index 00000000..e3df763f Binary files /dev/null and b/webroot/img/css/layout/icon_info.gif differ diff --git a/webroot/img/css/layout/icon_info2.gif b/webroot/img/css/layout/icon_info2.gif new file mode 100644 index 00000000..0c66ad5d Binary files /dev/null and b/webroot/img/css/layout/icon_info2.gif differ diff --git a/webroot/img/css/layout/icon_success.gif b/webroot/img/css/layout/icon_success.gif new file mode 100644 index 00000000..583b1ee5 Binary files /dev/null and b/webroot/img/css/layout/icon_success.gif differ diff --git a/webroot/img/css/layout/icon_warning.gif b/webroot/img/css/layout/icon_warning.gif new file mode 100644 index 00000000..772ac9b3 Binary files /dev/null and b/webroot/img/css/layout/icon_warning.gif differ diff --git a/webroot/img/icons/abuse.png b/webroot/img/icons/abuse.png new file mode 100644 index 00000000..88a605c5 Binary files /dev/null and b/webroot/img/icons/abuse.png differ diff --git a/webroot/img/icons/cake.gif b/webroot/img/icons/cake.gif new file mode 100644 index 00000000..f29f72eb Binary files /dev/null and b/webroot/img/icons/cake.gif differ diff --git a/webroot/img/icons/calendar.gif b/webroot/img/icons/calendar.gif new file mode 100644 index 00000000..d0abaa7c Binary files /dev/null and b/webroot/img/icons/calendar.gif differ diff --git a/webroot/img/icons/calendar.png b/webroot/img/icons/calendar.png new file mode 100644 index 00000000..750891d7 Binary files /dev/null and b/webroot/img/icons/calendar.png differ diff --git a/webroot/img/icons/check.png b/webroot/img/icons/check.png new file mode 100644 index 00000000..801bbf00 Binary files /dev/null and b/webroot/img/icons/check.png differ diff --git a/webroot/img/icons/checkbox.gif b/webroot/img/icons/checkbox.gif new file mode 100644 index 00000000..dc1cdb95 Binary files /dev/null and b/webroot/img/icons/checkbox.gif differ diff --git a/webroot/img/icons/checkbox_crossed.gif b/webroot/img/icons/checkbox_crossed.gif new file mode 100644 index 00000000..0c36667e Binary files /dev/null and b/webroot/img/icons/checkbox_crossed.gif differ diff --git a/webroot/img/icons/checkbox_ticked.gif b/webroot/img/icons/checkbox_ticked.gif new file mode 100644 index 00000000..77bdfaf9 Binary files /dev/null and b/webroot/img/icons/checkbox_ticked.gif differ diff --git a/webroot/img/icons/clock.gif b/webroot/img/icons/clock.gif new file mode 100644 index 00000000..eb3d8865 Binary files /dev/null and b/webroot/img/icons/clock.gif differ diff --git a/webroot/img/icons/color_green.gif b/webroot/img/icons/color_green.gif new file mode 100644 index 00000000..53f182d4 Binary files /dev/null and b/webroot/img/icons/color_green.gif differ diff --git a/webroot/img/icons/color_red.gif b/webroot/img/icons/color_red.gif new file mode 100644 index 00000000..d8365924 Binary files /dev/null and b/webroot/img/icons/color_red.gif differ diff --git a/webroot/img/icons/color_yellow.gif b/webroot/img/icons/color_yellow.gif new file mode 100644 index 00000000..78de8404 Binary files /dev/null and b/webroot/img/icons/color_yellow.gif differ diff --git a/webroot/img/icons/cross.png b/webroot/img/icons/cross.png new file mode 100644 index 00000000..47898685 Binary files /dev/null and b/webroot/img/icons/cross.png differ diff --git a/webroot/img/icons/delete.gif b/webroot/img/icons/delete.gif new file mode 100644 index 00000000..87f03f10 Binary files /dev/null and b/webroot/img/icons/delete.gif differ diff --git a/webroot/img/icons/edit.gif b/webroot/img/icons/edit.gif new file mode 100644 index 00000000..9f0916d6 Binary files /dev/null and b/webroot/img/icons/edit.gif differ diff --git a/webroot/img/icons/edit_add.png b/webroot/img/icons/edit_add.png new file mode 100644 index 00000000..92431b3d Binary files /dev/null and b/webroot/img/icons/edit_add.png differ diff --git a/webroot/img/icons/edit_remove.png b/webroot/img/icons/edit_remove.png new file mode 100644 index 00000000..c95ee07c Binary files /dev/null and b/webroot/img/icons/edit_remove.png differ diff --git a/webroot/img/icons/filter.gif b/webroot/img/icons/filter.gif new file mode 100644 index 00000000..70cf7ec4 Binary files /dev/null and b/webroot/img/icons/filter.gif differ diff --git a/webroot/img/icons/filter_.gif b/webroot/img/icons/filter_.gif new file mode 100644 index 00000000..f3cac613 Binary files /dev/null and b/webroot/img/icons/filter_.gif differ diff --git a/webroot/img/icons/help.png b/webroot/img/icons/help.png new file mode 100644 index 00000000..5c870176 Binary files /dev/null and b/webroot/img/icons/help.png differ diff --git a/webroot/img/icons/list-add.png b/webroot/img/icons/list-add.png new file mode 100644 index 00000000..1aa7f095 Binary files /dev/null and b/webroot/img/icons/list-add.png differ diff --git a/webroot/img/icons/list-remove.png b/webroot/img/icons/list-remove.png new file mode 100644 index 00000000..00b654e8 Binary files /dev/null and b/webroot/img/icons/list-remove.png differ diff --git a/webroot/img/icons/loader.black.gif b/webroot/img/icons/loader.black.gif new file mode 100644 index 00000000..0b31f6f9 Binary files /dev/null and b/webroot/img/icons/loader.black.gif differ diff --git a/webroot/img/icons/loader.white.gif b/webroot/img/icons/loader.white.gif new file mode 100644 index 00000000..f2a1bc0c Binary files /dev/null and b/webroot/img/icons/loader.white.gif differ diff --git a/webroot/img/icons/lock_icon.gif b/webroot/img/icons/lock_icon.gif new file mode 100644 index 00000000..8a87e283 Binary files /dev/null and b/webroot/img/icons/lock_icon.gif differ diff --git a/webroot/img/icons/loupe.gif b/webroot/img/icons/loupe.gif new file mode 100644 index 00000000..889cae05 Binary files /dev/null and b/webroot/img/icons/loupe.gif differ diff --git a/webroot/img/icons/loupe_.gif b/webroot/img/icons/loupe_.gif new file mode 100644 index 00000000..11f8f128 Binary files /dev/null and b/webroot/img/icons/loupe_.gif differ diff --git a/webroot/img/icons/no.gif b/webroot/img/icons/no.gif new file mode 100644 index 00000000..4a53c3bc Binary files /dev/null and b/webroot/img/icons/no.gif differ diff --git a/webroot/img/icons/paste.png b/webroot/img/icons/paste.png new file mode 100644 index 00000000..2c5a8038 Binary files /dev/null and b/webroot/img/icons/paste.png differ diff --git a/webroot/img/icons/pixelspace.gif b/webroot/img/icons/pixelspace.gif new file mode 100644 index 00000000..8e6c7dca Binary files /dev/null and b/webroot/img/icons/pixelspace.gif differ diff --git a/webroot/img/icons/playback-pause.png b/webroot/img/icons/playback-pause.png new file mode 100644 index 00000000..c8b4fe22 Binary files /dev/null and b/webroot/img/icons/playback-pause.png differ diff --git a/webroot/img/icons/playback-start.png b/webroot/img/icons/playback-start.png new file mode 100644 index 00000000..a7de0feb Binary files /dev/null and b/webroot/img/icons/playback-start.png differ diff --git a/webroot/img/icons/playback-stop.png b/webroot/img/icons/playback-stop.png new file mode 100644 index 00000000..ede2815e Binary files /dev/null and b/webroot/img/icons/playback-stop.png differ diff --git a/webroot/img/icons/reply.jpg b/webroot/img/icons/reply.jpg new file mode 100644 index 00000000..cea4add6 Binary files /dev/null and b/webroot/img/icons/reply.jpg differ diff --git a/webroot/img/icons/role.png b/webroot/img/icons/role.png new file mode 100644 index 00000000..bba21e01 Binary files /dev/null and b/webroot/img/icons/role.png differ diff --git a/webroot/img/icons/see.gif b/webroot/img/icons/see.gif new file mode 100644 index 00000000..11f657a1 Binary files /dev/null and b/webroot/img/icons/see.gif differ diff --git a/webroot/img/icons/see_.gif b/webroot/img/icons/see_.gif new file mode 100644 index 00000000..761cdacc Binary files /dev/null and b/webroot/img/icons/see_.gif differ diff --git a/webroot/img/icons/translation.png b/webroot/img/icons/translation.png new file mode 100644 index 00000000..a4384f09 Binary files /dev/null and b/webroot/img/icons/translation.png differ diff --git a/webroot/img/icons/use.png b/webroot/img/icons/use.png new file mode 100644 index 00000000..1d218c38 Binary files /dev/null and b/webroot/img/icons/use.png differ diff --git a/webroot/img/icons/view.gif b/webroot/img/icons/view.gif new file mode 100644 index 00000000..b50d7702 Binary files /dev/null and b/webroot/img/icons/view.gif differ diff --git a/webroot/img/icons/warning.png b/webroot/img/icons/warning.png new file mode 100644 index 00000000..a6cdac6e Binary files /dev/null and b/webroot/img/icons/warning.png differ diff --git a/webroot/img/icons/yes.gif b/webroot/img/icons/yes.gif new file mode 100644 index 00000000..ee6d17b8 Binary files /dev/null and b/webroot/img/icons/yes.gif differ diff --git a/webroot/img/test-error-icon.png b/webroot/img/test-error-icon.png new file mode 100644 index 00000000..07bb1241 Binary files /dev/null and b/webroot/img/test-error-icon.png differ diff --git a/webroot/img/test-fail-icon.png b/webroot/img/test-fail-icon.png new file mode 100644 index 00000000..f9d2f147 Binary files /dev/null and b/webroot/img/test-fail-icon.png differ diff --git a/webroot/img/test-pass-icon.png b/webroot/img/test-pass-icon.png new file mode 100644 index 00000000..99c5eb05 Binary files /dev/null and b/webroot/img/test-pass-icon.png differ diff --git a/webroot/img/test-skip-icon.png b/webroot/img/test-skip-icon.png new file mode 100644 index 00000000..749771c9 Binary files /dev/null and b/webroot/img/test-skip-icon.png differ diff --git a/webroot/index.php b/webroot/index.php new file mode 100644 index 00000000..c17e9562 --- /dev/null +++ b/webroot/index.php @@ -0,0 +1,101 @@ +dispatch( + new CakeRequest(), + new CakeResponse() +); diff --git a/webroot/js.php b/webroot/js.php new file mode 100644 index 00000000..a8ed2083 --- /dev/null +++ b/webroot/js.php @@ -0,0 +1,44 @@ +js(); diff --git a/webroot/js/bootstrap.js b/webroot/js/bootstrap.js new file mode 100644 index 00000000..3ec3b870 --- /dev/null +++ b/webroot/js/bootstrap.js @@ -0,0 +1,1988 @@ +/** +* bootstrap.js v3.0.0 by @fat and @mdo +* Copyright 2013 Twitter Inc. +* http://www.apache.org/licenses/LICENSE-2.0 +*/ +if (!jQuery) { throw new Error("Bootstrap requires jQuery") } + +/* ======================================================================== + * Bootstrap: transition.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#transitions + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false, $el = this + $(this).one($.support.transition.end, function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#alerts + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent.trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one($.support.transition.end, removeElement) + .emulateTransitionEnd(150) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + var old = $.fn.alert + + $.fn.alert = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#buttons + * ======================================================================== + * Copyright 2013 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + } + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (!data.resetText) $el.data('resetText', $el[val]()) + + $el[val](data[state] || this.options[state]) + + // push to event loop to allow forms to submit + setTimeout(function () { + state == 'loadingText' ? + $el.addClass(d).attr(d, d) : + $el.removeClass(d).removeAttr(d); + }, 0) + } + + Button.prototype.toggle = function () { + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + .prop('checked', !this.$element.hasClass('active')) + .trigger('change') + if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') + } + + this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + var old = $.fn.button + + $.fn.button = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + e.preventDefault() + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#carousel + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.DEFAULTS = { + interval: 5000 + , pause: 'hover' + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + + return this.$items.index(this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + .emulateTransitionEnd(600) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#collapse + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + var hasData = actives.data('bs.collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing') + [dimension](0) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('in') + [dimension]('auto') + this.transitioning = 0 + this.$element.trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + [dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element + [dimension](this.$element[dimension]()) + [0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse') + .removeClass('in') + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .trigger('hidden.bs.collapse') + .removeClass('collapsing') + .addClass('collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one($.support.transition.end, $.proxy(complete, this)) + .emulateTransitionEnd(350) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') + var $parent = parent && $(parent) + + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent=' + parent + ']').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) + }) + +}(window.jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.0.0 + * http://twbs.github.com/bootstrap/javascript.html#dropdowns + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + var $el = $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement) { + // if mobile we we use a backdrop because click events don't delegate + $('