Merge pull request #1 from julienmalik/master
LDAP support and admin autoconfigure by julienmalik's pull request
5
TODO.md
|
@ -1,5 +0,0 @@
|
|||
TODO
|
||||
----
|
||||
|
||||
Adding LDAP usernames
|
||||
Auto setup admin account and other system defined things.
|
80
conf/config.php
Normal file
|
@ -0,0 +1,80 @@
|
|||
<?php
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright notice
|
||||
#
|
||||
# (c) 2014 Jérôme Schneider <mail@jeromeschneider.fr>
|
||||
# All rights reserved
|
||||
#
|
||||
# http://baikal-server.com
|
||||
#
|
||||
# This script is part of the Baïkal Server project. The Baïkal
|
||||
# Server project is free software; you can redistribute it
|
||||
# and/or modify it under the terms of the GNU General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2 of the License, or (at your option) any later version.
|
||||
#
|
||||
# The GNU General Public License can be found at
|
||||
# http://www.gnu.org/copyleft/gpl.html.
|
||||
#
|
||||
# This script is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# This copyright notice MUST APPEAR in all copies of the script!
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
##############################################################################
|
||||
# Required configuration
|
||||
# You *have* to review these settings for Baïkal to run properly
|
||||
#
|
||||
|
||||
# Timezone of your users, if unsure, check http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||||
define("PROJECT_TIMEZONE", 'YNH_TIMEZONE');
|
||||
|
||||
# CardDAV ON/OFF switch; default TRUE
|
||||
define("BAIKAL_CARD_ENABLED", TRUE);
|
||||
|
||||
# CalDAV ON/OFF switch; default TRUE
|
||||
define("BAIKAL_CAL_ENABLED", TRUE);
|
||||
|
||||
# WebDAV authentication type; default Digest
|
||||
define("BAIKAL_DAV_AUTH_TYPE", 'LDAP-UserBind');
|
||||
|
||||
# Auth Backend LDAP-UserBind; LDAP URI
|
||||
define("BAIKAL_DAV_LDAP_URI", 'ldap://127.0.0.1/');
|
||||
|
||||
# Auth Backend LDAP-UserBind; Template for userbind
|
||||
# %n => username
|
||||
# %u => user part of username when it is an email
|
||||
# %u => domain part of username when it is an email
|
||||
define("BAIKAL_DAV_LDAP_DN_TEMPLATE", 'uid=%n,ou=users,dc=yunohost,dc=org');
|
||||
|
||||
# Auth Backend LDAP-UserBind; attribute for displayname
|
||||
define("BAIKAL_DAV_LDAP_DISPLAYNAME_ATTR", 'cn');
|
||||
|
||||
# Auth Backend LDAP-UserBind; attribute for email
|
||||
define("BAIKAL_DAV_LDAP_EMAIL_ATTR", 'mail');
|
||||
|
||||
# Auth Backend Mail; protocol of service
|
||||
define("BAIKAL_DAV_MAIL_PROTOCOL", 'imap');
|
||||
|
||||
# Auth Backend Mail; server host:port
|
||||
define("BAIKAL_DAV_MAIL_SERVER", 'localhost:143');
|
||||
|
||||
# Auth Backend Mail; validate the ssl-certificate
|
||||
define("BAIKAL_DAV_MAIL_CHECK_CERT", TRUE);
|
||||
|
||||
# Auth Backends: automatic creation of users; default yes"
|
||||
define("BAIKAL_DAV_AUTO_CREATE_USER", TRUE);
|
||||
|
||||
# Baïkal Web Admin ON/OFF switch; default TRUE
|
||||
define("BAIKAL_ADMIN_ENABLED", TRUE);
|
||||
|
||||
# Baïkal Web Admin autolock ON/OFF switch; default FALSE
|
||||
define("BAIKAL_ADMIN_AUTOLOCKENABLED", FALSE);
|
||||
|
||||
# Baïkal Web admin password hash; Set via Baïkal Web Admin
|
||||
define("BAIKAL_ADMIN_PASSWORDHASH", 'YNH_ADMIN_PASSWORDHASH');
|
72
conf/config.system.php
Normal file
|
@ -0,0 +1,72 @@
|
|||
<?php
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright notice
|
||||
#
|
||||
# (c) 2014 Jérôme Schneider <mail@jeromeschneider.fr>
|
||||
# All rights reserved
|
||||
#
|
||||
# http://baikal-server.com
|
||||
#
|
||||
# This script is part of the Baïkal Server project. The Baïkal
|
||||
# Server project is free software; you can redistribute it
|
||||
# and/or modify it under the terms of the GNU General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2 of the License, or (at your option) any later version.
|
||||
#
|
||||
# The GNU General Public License can be found at
|
||||
# http://www.gnu.org/copyleft/gpl.html.
|
||||
#
|
||||
# This script is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# This copyright notice MUST APPEAR in all copies of the script!
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
##############################################################################
|
||||
# System configuration
|
||||
# Should not be changed, unless YNWYD
|
||||
#
|
||||
# RULES
|
||||
# 0. All folder pathes *must* be suffixed by "/"
|
||||
# 1. All URIs *must* be suffixed by "/" if pointing to a folder
|
||||
#
|
||||
|
||||
# PATH to SabreDAV
|
||||
define("BAIKAL_PATH_SABREDAV", PROJECT_PATH_FRAMEWORKS . "SabreDAV/lib/Sabre/");
|
||||
|
||||
# If you change this value, you'll have to re-generate passwords for all your users
|
||||
define("BAIKAL_AUTH_REALM", 'BaikalDAV');
|
||||
|
||||
# Should begin and end with a "/"
|
||||
define("BAIKAL_CARD_BASEURI", "YNH_LOCATION/card.php/");
|
||||
|
||||
# Should begin and end with a "/"
|
||||
define("BAIKAL_CAL_BASEURI", "YNH_LOCATION/cal.php/");
|
||||
|
||||
# Define path to Baïkal Database SQLite file
|
||||
define("PROJECT_SQLITE_FILE", PROJECT_PATH_SPECIFIC . "db/db.sqlite");
|
||||
|
||||
# MySQL > Use MySQL instead of SQLite ?
|
||||
define("PROJECT_DB_MYSQL", TRUE);
|
||||
|
||||
# MySQL > Host, including ':portnumber' if port is not the default one (3306)
|
||||
define("PROJECT_DB_MYSQL_HOST", 'localhost');
|
||||
|
||||
# MySQL > Database name
|
||||
define("PROJECT_DB_MYSQL_DBNAME", 'YNH_DBNAME');
|
||||
|
||||
# MySQL > Username
|
||||
define("PROJECT_DB_MYSQL_USERNAME", 'YNH_DBUSER');
|
||||
|
||||
# MySQL > Password
|
||||
define("PROJECT_DB_MYSQL_PASSWORD", 'YNH_DBPWD');
|
||||
|
||||
# A random 32 bytes key that will be used to encrypt data
|
||||
define("BAIKAL_ENCRYPTION_KEY", 'YNH_ENCRYPTKEY');
|
||||
|
||||
# The currently configured Baïkal version
|
||||
define("BAIKAL_CONFIGURED_VERSION", '0.2.7');
|
|
@ -3,7 +3,7 @@
|
|||
"id": "baikal",
|
||||
"description": {
|
||||
"en": "Lightweight CalDAV+CardDAV server",
|
||||
"fr": "CalDAV+CardDAV server"
|
||||
"fr": "Serveur CalDAV+CardDAV léger"
|
||||
},
|
||||
"developer": {
|
||||
"name": "aquaxp",
|
||||
|
@ -27,7 +27,14 @@
|
|||
},
|
||||
"example": "/baikal",
|
||||
"default": "/baikal"
|
||||
},
|
||||
{
|
||||
"name": "admin_pwd",
|
||||
"ask": {
|
||||
"en": "Choose a password for baikal admin"
|
||||
},
|
||||
"example": "mysecret"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
# Retrieve arguments
|
||||
domain=$1
|
||||
path=$2
|
||||
admin_pwd=$3
|
||||
|
||||
# Check domain/path availability
|
||||
sudo yunohost app checkurl $domain$path -a baikal
|
||||
|
@ -10,31 +11,51 @@ if [[ ! $? -eq 0 ]]; then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
# Install dependencies
|
||||
sudo apt-get install php5-sqlite php5-fpm sqlite
|
||||
# Install PHP dependency
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y php5-cli
|
||||
|
||||
# Copy files to the right place
|
||||
final_path=/var/www/baikal
|
||||
|
||||
sudo mkdir -p $final_path
|
||||
sudo cp -a ../sources/* $final_path
|
||||
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/baikal.conf
|
||||
sudo chown -R www-data:www-data $final_path
|
||||
sudo find $final_path -type d -exec chmod 755 {} \;
|
||||
sudo touch $final_path/Specific/ENABLE_INSTALL
|
||||
sudo chmod 755 $final_path/Specific
|
||||
sudo chmod 755 $final_path/Specific/db
|
||||
sudo chmod 755 $final_path/Specific/db/db.sqlite
|
||||
sudo chown -R www-data: $final_path
|
||||
sudo su -c "curl -sS https://getcomposer.org/installer | php -- --install-dir=$final_path" www-data
|
||||
sudo su -c "cd $final_path && php composer.phar install" www-data
|
||||
sudo rm $final_path/composer*
|
||||
|
||||
db_pwd=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{24\}\).*/\1/p')
|
||||
db_user=baikal
|
||||
sudo yunohost app initdb $db_user -p $db_pwd -s $(readlink -e ../sources/Core/Resources/Db/MySQL/db.sql)
|
||||
sudo yunohost app setting baikal mysqlpwd -v $db_pwd
|
||||
sed -i "s@YNH_TIMEZONE@$(cat /etc/timezone)@g" ../conf/config.php
|
||||
sed -i "s@YNH_ADMIN_PASSWORDHASH@$(echo -n admin:BaikalDAV:$admin_pwd | md5sum | cut -d ' ' -f 1)@g" ../conf/config.php
|
||||
|
||||
sed -i "s@YNH_LOCATION@$path@g" ../conf/config.system.php
|
||||
sed -i "s@YNH_DBNAME@$db_user@g" ../conf/config.system.php
|
||||
sed -i "s@YNH_DBUSER@$db_user@g" ../conf/config.system.php
|
||||
sed -i "s@YNH_DBPWD@$db_pwd@g" ../conf/config.system.php
|
||||
encrypt_key=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d 'A-Za-z0-9' | sed -n 's/\(.\{32\}\).*/\1/p')
|
||||
sudo yunohost app setting baikal encrypt_key -v $encrypt_key
|
||||
sed -i "s@YNH_ENCRYPTKEY@$encrypt_key@g" ../conf/config.system.php
|
||||
|
||||
sudo cp ../conf/config.php $final_path/Specific
|
||||
sudo cp ../conf/config.system.php $final_path/Specific
|
||||
|
||||
sudo chown -R root: $final_path
|
||||
sudo chown -R www-data: $final_path/Specific
|
||||
sudo find $final_path -type f | xargs sudo chmod 644
|
||||
sudo find $final_path -type d | xargs sudo chmod 755
|
||||
|
||||
# Change variables in Baikal configuration
|
||||
sudo sed -i "s@PATHTOCHANGE@$path@g" /etc/nginx/conf.d/$domain.d/baikal.conf
|
||||
sudo sed -i "s@ALIASTOCHANGE@$final_path/@g" /etc/nginx/conf.d/$domain.d/baikal.conf
|
||||
|
||||
# Change variables in Baikal sources for correct work in subpathes
|
||||
sudo sed -i "s@PROJECT_BASEURI_@\"$path/\"@g" $final_path/Core/Frameworks/Baikal/Model/Config/System.php
|
||||
sed -i "s@PATHTOCHANGE@$path@g" ../conf/nginx.conf
|
||||
sed -i "s@ALIASTOCHANGE@$final_path/html@g" ../conf/nginx.conf
|
||||
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/baikal.conf
|
||||
sudo chown root: /etc/nginx/conf.d/$domain.d/baikal.conf
|
||||
sudo chmod 600 /etc/nginx/conf.d/$domain.d/baikal.conf
|
||||
|
||||
# Reload Nginx and regenerate SSOwat conf
|
||||
sudo service php5-fpm restart
|
||||
sudo service nginx reload
|
||||
sudo yunohost app setting baikal skipped_uris -v "/"
|
||||
sudo yunohost app ssowatconf
|
||||
|
|
|
@ -1,16 +1,14 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Backuping db
|
||||
backup_path=/var/cache/yunohost/backups/baikal
|
||||
final_path=/var/www/baikal/
|
||||
|
||||
mkdir -p $backup_path
|
||||
sudo cp -a $final_path/Specific/* $backup_path
|
||||
db_user=baikal
|
||||
db_name=baikal
|
||||
root_pwd=$(sudo cat /etc/yunohost/mysql)
|
||||
mysql -u root -p$root_pwd -e "DROP DATABASE $db_name ; DROP USER $db_user@localhost ;"
|
||||
|
||||
# Removing executable files
|
||||
sudo rm -rf /var/www/baiakl
|
||||
sudo rm -rf /var/www/baikal
|
||||
domain=$(sudo yunohost app setting baikal domain)
|
||||
sudo rm -f /etc/nginx/conf.d/$domain.d/baikal.conf
|
||||
|
||||
# Restarting services
|
||||
sudo service php5-fpm restart
|
||||
sudo service nginx reload
|
||||
|
|
|
@ -26,4 +26,4 @@
|
|||
|
||||
define("BAIKAL_VERSION", "0.2.7");
|
||||
define("BAIKAL_HOMEPAGE", "http://baikal-server.com");
|
||||
define("PROJECT_PACKAGE", "flat");
|
||||
define("PROJECT_PACKAGE", "regular");
|
||||
|
|
136
sources/Core/Frameworks/Baikal/Core/AbstractExternalAuth.php
Normal file
|
@ -0,0 +1,136 @@
|
|||
<?php
|
||||
|
||||
namespace Baikal\Core;
|
||||
|
||||
/**
|
||||
* This is an abstract authentication, that allows to create external
|
||||
* authentication backends. User are automatic created, when the does not exists
|
||||
* in baikal (can disabled).
|
||||
*
|
||||
* @author Sascha Kuehndel (InuSasha) <dev@inusasha.de>
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
abstract class AbstractExternalAuth extends \Sabre\DAV\Auth\Backend\AbstractBasic {
|
||||
|
||||
/**
|
||||
* enable autocreation of user
|
||||
*
|
||||
* @var PDO
|
||||
*/
|
||||
protected $enableAutoCreation;
|
||||
|
||||
/**
|
||||
* Reference to PDO connection
|
||||
*
|
||||
* @var PDO
|
||||
*/
|
||||
private $pdo;
|
||||
|
||||
/**
|
||||
* PDO table name we'll be using
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
private $tableName;
|
||||
|
||||
/**
|
||||
* Creates the backend object.
|
||||
*
|
||||
* If the filename argument is passed in, it will parse out the specified file fist.
|
||||
*
|
||||
* @param PDO $pdo
|
||||
* @param string $realm
|
||||
* @param string $tableName The PDO table name to use
|
||||
*/
|
||||
public function __construct(\PDO $pdo, $realm = 'BaikalDAV', $tableName = 'users') {
|
||||
|
||||
$this->pdo = $pdo;
|
||||
$this->tableName = $tableName;
|
||||
$this->enableAutoCreation = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates a username and password
|
||||
*
|
||||
* This method should return true or false depending on if login
|
||||
* succeeded.
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return bool
|
||||
*/
|
||||
public function validateUserPass($username, $password) {
|
||||
|
||||
/* auth user agains backend */
|
||||
if (!$this->validateUserPassExternal($username, $password))
|
||||
return false;
|
||||
|
||||
/* check user exists already */
|
||||
$stmt = $this->pdo->prepare('SELECT username FROM '.$this->tableName.' WHERE username = ?');
|
||||
$stmt->execute(array($username));
|
||||
$result = $stmt->fetchAll();
|
||||
if( count($result) == 1) {
|
||||
$this->currentUser = $username;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* failed login, when new user should not create */
|
||||
if( !BAIKAL_DAV_AUTO_CREATE_USER || !$this->enableAutoCreation)
|
||||
return false;
|
||||
|
||||
/* create user */
|
||||
$this->autoUserCreation($username);
|
||||
$this->currentUser = $username;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates a username and password agains external backend
|
||||
*
|
||||
* This method should return true or false depending on if login
|
||||
* succeeded.
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return bool
|
||||
*/
|
||||
public abstract function validateUserPassExternal($username, $password);
|
||||
|
||||
/**
|
||||
* return the displayname and email from the external Backend
|
||||
*
|
||||
* @param string $username
|
||||
* @return array ('displayname' => string, 'email' => string)
|
||||
*/
|
||||
public function getAccountValues($username) {
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* create an internal user, when user not exists
|
||||
*
|
||||
* @param string $username
|
||||
*/
|
||||
private function autoUserCreation($username) {
|
||||
|
||||
/* get account values from backend */
|
||||
$values = $this->getAccountValues($username);
|
||||
if (!isset($values['displayname']) OR strlen($values['displayname']) === 0)
|
||||
$values['displayname'] = $username;
|
||||
if (!isset($values['email']) OR strlen($values['email']) === 0) {
|
||||
if(filter_var($username, FILTER_VALIDATE_EMAIL))
|
||||
$values['email'] = $username;
|
||||
else
|
||||
$values['email'] = 'unset-mail';
|
||||
}
|
||||
|
||||
/* create user */
|
||||
$user = new \Baikal\Model\User();
|
||||
$user->set('username', $username);
|
||||
$user->set('displayname', $values['displayname']);
|
||||
$user->set('email', $values['email']);
|
||||
$user->persist();
|
||||
}
|
||||
|
||||
}
|
75
sources/Core/Frameworks/Baikal/Core/LDAPUserBindAuth.php
Normal file
|
@ -0,0 +1,75 @@
|
|||
<?php
|
||||
|
||||
namespace Baikal\Core;
|
||||
|
||||
/**
|
||||
* This is an authentication backend that uses a ldap backend to authenticate user.
|
||||
*
|
||||
* @author Sascha Kuehndel (InuSasha) <dev@inusasha.de>
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class LDAPUserBindAuth extends AbstractExternalAuth {
|
||||
|
||||
/**
|
||||
* AccountValues for getAccountValues
|
||||
*
|
||||
* @var array ('displayname' => string, 'email' => string)
|
||||
*/
|
||||
private $accountValues;
|
||||
|
||||
/**
|
||||
* Validates a username and password over ldap
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return bool
|
||||
*/
|
||||
public function validateUserPassExternal($username, $password) {
|
||||
|
||||
/* create ldap connection */
|
||||
$conn = ldap_connect(BAIKAL_DAV_LDAP_URI);
|
||||
if (!$conn)
|
||||
return false;
|
||||
if (!ldap_set_option($conn,LDAP_OPT_PROTOCOL_VERSION,3))
|
||||
return false;
|
||||
|
||||
/* bind with user
|
||||
* error_handler have to change, because a failed bind raises an error
|
||||
* this raise a secuity issue because in the stack trace is the password of user readable
|
||||
*/
|
||||
$arr = explode('@', $username, 2);
|
||||
$dn = str_replace('%n', $username, BAIKAL_DAV_LDAP_DN_TEMPLATE);
|
||||
$dn = str_replace('%u', $arr[0], $dn);
|
||||
if(isset($arr[1])) $dn = str_replace('%d', $arr[1], $dn);
|
||||
|
||||
set_error_handler("\Baikal\Core\LDAPUserBindAuth::exception_error_handler");
|
||||
$bind = ldap_bind($conn, $dn, $password);
|
||||
restore_error_handler();
|
||||
if (!$bind) {
|
||||
ldap_close($conn);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* read displayname and email from user */
|
||||
$this->accountValues = array();
|
||||
$sr = ldap_read($conn, $dn, '(objectclass=*)', array(BAIKAL_DAV_LDAP_DISPLAYNAME_ATTR,BAIKAL_DAV_LDAP_EMAIL_ATTR));
|
||||
$entry = ldap_get_entries($conn, $sr);
|
||||
if (isset($entry[0][BAIKAL_DAV_LDAP_DISPLAYNAME_ATTR][0]))
|
||||
$this->accountValues['displayname'] = $entry[0][BAIKAL_DAV_LDAP_DISPLAYNAME_ATTR][0];
|
||||
if (isset($entry[0][BAIKAL_DAV_LDAP_EMAIL_ATTR][0]))
|
||||
$this->accountValues['email'] = $entry[0][BAIKAL_DAV_LDAP_EMAIL_ATTR][0];
|
||||
|
||||
/* close */
|
||||
ldap_close($conn);
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getAccountValues($username) {
|
||||
|
||||
return $this->accountValues;
|
||||
}
|
||||
|
||||
# WorkAround error_handler in failed bind of LDAP
|
||||
public static function exception_error_handler($errno, $errstr, $errfile, $errline) {
|
||||
}
|
||||
}
|
56
sources/Core/Frameworks/Baikal/Core/MailAuth.php
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
namespace Baikal\Core;
|
||||
|
||||
/**
|
||||
* This is an authentication backend that uses a pop3, imap or smtp backend to authenticate user.
|
||||
*
|
||||
* @author Sascha Kuehndel (InuSasha) <dev@inusasha.de>
|
||||
* @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
|
||||
*/
|
||||
class MailAuth extends AbstractExternalAuth {
|
||||
|
||||
/**
|
||||
* Validates a username and password over ldap
|
||||
*
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @return bool
|
||||
*/
|
||||
public function validateUserPassExternal($username, $password) {
|
||||
|
||||
/* build connection string */
|
||||
$cert = BAIKAL_DAV_MAIL_CHECK_CERT ? "/validate-cert" : "/novalidate-cert";
|
||||
$url = "";
|
||||
switch(BAIKAL_DAV_MAIL_PROTOCOL) {
|
||||
case "imap": $url = "{".BAIKAL_DAV_MAIL_SERVER."/imap/notls}INBOX"; break;
|
||||
case "imaps": $url = "{".BAIKAL_DAV_MAIL_SERVER."/imap/ssl${cert}}INBOX"; break;
|
||||
case "imaptls": $url = "{".BAIKAL_DAV_MAIL_SERVER."/imap/tls${cert}}INBOX"; break;
|
||||
case "pop3": $url = "{".BAIKAL_DAV_MAIL_SERVER."/pop3/notls}"; break;
|
||||
case "pop3s": $url = "{".BAIKAL_DAV_MAIL_SERVER."/pop3/ssl${cert}}"; break;
|
||||
case "pop3tls": $url = "{".BAIKAL_DAV_MAIL_SERVER."/pop3/tls${cert}}"; break;
|
||||
case "smtp": $url = "{".BAIKAL_DAV_MAIL_SERVER."/smtp/notls}"; break;
|
||||
case "smtps": $url = "{".BAIKAL_DAV_MAIL_SERVER."/smtp/ssl${cert}}"; break;
|
||||
case "smtptls": $url = "{".BAIKAL_DAV_MAIL_SERVER."/smtp/tls${cert}}"; break;
|
||||
}
|
||||
|
||||
/* connect to mail server (only one try) */
|
||||
set_error_handler("\Baikal\Core\MailAuth::exception_error_handler");
|
||||
$conn = imap_open($url, $username, $password, NULL, 0);
|
||||
restore_error_handler();
|
||||
if (!$conn)
|
||||
return false;
|
||||
|
||||
/* skip notices, warnings and errors */
|
||||
imap_errors();
|
||||
|
||||
/* close */
|
||||
imap_close($conn);
|
||||
return true;
|
||||
}
|
||||
|
||||
# WorkAround error_handler in failed login in imap_open
|
||||
public static function exception_error_handler($errno, $errstr, $errfile, $errline) {
|
||||
}
|
||||
}
|
||||
|
|
@ -207,417 +207,9 @@ CODE;
|
|||
}
|
||||
|
||||
public static function timezones() {
|
||||
$aZones = array(
|
||||
"Africa/Abidjan",
|
||||
"Africa/Accra",
|
||||
"Africa/Addis_Ababa",
|
||||
"Africa/Algiers",
|
||||
"Africa/Asmara",
|
||||
"Africa/Bamako",
|
||||
"Africa/Bangui",
|
||||
"Africa/Banjul",
|
||||
"Africa/Bissau",
|
||||
"Africa/Blantyre",
|
||||
"Africa/Brazzaville",
|
||||
"Africa/Bujumbura",
|
||||
"Africa/Cairo",
|
||||
"Africa/Casablanca",
|
||||
"Africa/Ceuta",
|
||||
"Africa/Conakry",
|
||||
"Africa/Dakar",
|
||||
"Africa/Dar_es_Salaam",
|
||||
"Africa/Djibouti",
|
||||
"Africa/Douala",
|
||||
"Africa/El_Aaiun",
|
||||
"Africa/Freetown",
|
||||
"Africa/Gaborone",
|
||||
"Africa/Harare",
|
||||
"Africa/Johannesburg",
|
||||
"Africa/Juba",
|
||||
"Africa/Kampala",
|
||||
"Africa/Khartoum",
|
||||
"Africa/Kigali",
|
||||
"Africa/Kinshasa",
|
||||
"Africa/Lagos",
|
||||
"Africa/Libreville",
|
||||
"Africa/Lome",
|
||||
"Africa/Luanda",
|
||||
"Africa/Lubumbashi",
|
||||
"Africa/Lusaka",
|
||||
"Africa/Malabo",
|
||||
"Africa/Maputo",
|
||||
"Africa/Maseru",
|
||||
"Africa/Mbabane",
|
||||
"Africa/Mogadishu",
|
||||
"Africa/Monrovia",
|
||||
"Africa/Nairobi",
|
||||
"Africa/Ndjamena",
|
||||
"Africa/Niamey",
|
||||
"Africa/Nouakchott",
|
||||
"Africa/Ouagadougou",
|
||||
"Africa/Porto-Novo",
|
||||
"Africa/Sao_Tome",
|
||||
"Africa/Tripoli",
|
||||
"Africa/Tunis",
|
||||
"Africa/Windhoek",
|
||||
"America/Adak",
|
||||
"America/Anchorage",
|
||||
"America/Anguilla",
|
||||
"America/Antigua",
|
||||
"America/Araguaina",
|
||||
"America/Argentina/Buenos_Aires",
|
||||
"America/Argentina/Catamarca",
|
||||
"America/Argentina/Cordoba",
|
||||
"America/Argentina/Jujuy",
|
||||
"America/Argentina/La_Rioja",
|
||||
"America/Argentina/Mendoza",
|
||||
"America/Argentina/Rio_Gallegos",
|
||||
"America/Argentina/Salta",
|
||||
"America/Argentina/San_Juan",
|
||||
"America/Argentina/San_Luis",
|
||||
"America/Argentina/Tucuman",
|
||||
"America/Argentina/Ushuaia",
|
||||
"America/Aruba",
|
||||
"America/Asuncion",
|
||||
"America/Atikokan",
|
||||
"America/Bahia",
|
||||
"America/Barbados",
|
||||
"America/Belem",
|
||||
"America/Belize",
|
||||
"America/Blanc-Sablon",
|
||||
"America/Boa_Vista",
|
||||
"America/Bogota",
|
||||
"America/Boise",
|
||||
"America/Cambridge_Bay",
|
||||
"America/Campo_Grande",
|
||||
"America/Cancun",
|
||||
"America/Caracas",
|
||||
"America/Cayenne",
|
||||
"America/Cayman",
|
||||
"America/Chicago",
|
||||
"America/Chihuahua",
|
||||
"America/Costa_Rica",
|
||||
"America/Cuiaba",
|
||||
"America/Curacao",
|
||||
"America/Danmarkshavn",
|
||||
"America/Dawson",
|
||||
"America/Dawson_Creek",
|
||||
"America/Denver",
|
||||
"America/Detroit",
|
||||
"America/Dominica",
|
||||
"America/Edmonton",
|
||||
"America/Eirunepe",
|
||||
"America/El_Salvador",
|
||||
"America/Felipe_Carrillo",
|
||||
"America/Fortaleza",
|
||||
"America/Glace_Bay",
|
||||
"America/Godthab",
|
||||
"America/Goose_Bay",
|
||||
"America/Grand_Turk",
|
||||
"America/Grenada",
|
||||
"America/Guadeloupe",
|
||||
"America/Guatemala",
|
||||
"America/Guayaquil",
|
||||
"America/Guyana",
|
||||
"America/Halifax",
|
||||
"America/Havana",
|
||||
"America/Hermosillo",
|
||||
"America/Indiana/Indianapolis",
|
||||
"America/Indiana/Knox",
|
||||
"America/Indiana/Marengo",
|
||||
"America/Indiana/Petersburg",
|
||||
"America/Indiana/Tell_City",
|
||||
"America/Indiana/Vevay",
|
||||
"America/Indiana/Vincennes",
|
||||
"America/Indiana/Winamac",
|
||||
"America/Inuvik",
|
||||
"America/Iqaluit",
|
||||
"America/Jamaica",
|
||||
"America/Juneau",
|
||||
"America/Kentucky/Louisville",
|
||||
"America/Kentucky/Monticello",
|
||||
"America/La_Paz",
|
||||
"America/Lima",
|
||||
"America/Los_Angeles",
|
||||
"America/Maceio",
|
||||
"America/Managua",
|
||||
"America/Manaus",
|
||||
"America/Marigot",
|
||||
"America/Martinique",
|
||||
"America/Matamoros",
|
||||
"America/Mazatlan",
|
||||
"America/Menominee",
|
||||
"America/Merida",
|
||||
"America/Mexico_City",
|
||||
"America/Miquelon",
|
||||
"America/Moncton",
|
||||
"America/Monterrey",
|
||||
"America/Montevideo",
|
||||
"America/Montreal",
|
||||
"America/Montserrat",
|
||||
"America/Nassau",
|
||||
"America/New_York",
|
||||
"America/Nipigon",
|
||||
"America/Nome",
|
||||
"America/Noronha",
|
||||
"America/North_Dakota/Center",
|
||||
"America/North_Dakota/New_Salem",
|
||||
"America/Ojinaga",
|
||||
"America/Panama",
|
||||
"America/Pangnirtung",
|
||||
"America/Paramaribo",
|
||||
"America/Phoenix",
|
||||
"America/Port-au-Prince",
|
||||
"America/Porto_Velho",
|
||||
"America/Port_of_Spain",
|
||||
"America/Puerto_Rico",
|
||||
"America/Rainy_River",
|
||||
"America/Rankin_Inlet",
|
||||
"America/Recife",
|
||||
"America/Regina",
|
||||
"America/Resolute",
|
||||
"America/Rio_Branco",
|
||||
"America/Santarem",
|
||||
"America/Santa_Isabel",
|
||||
"America/Santiago",
|
||||
"America/Santo_Domingo",
|
||||
"America/Sao_Paulo",
|
||||
"America/Scoresbysund",
|
||||
"America/Shiprock",
|
||||
"America/St_Barthelemy",
|
||||
"America/St_Johns",
|
||||
"America/St_Kitts",
|
||||
"America/St_Lucia",
|
||||
"America/St_Thomas",
|
||||
"America/St_Vincent",
|
||||
"America/Swift_Current",
|
||||
"America/Tegucigalpa",
|
||||
"America/Thule",
|
||||
"America/Thunder_Bay",
|
||||
"America/Tijuana",
|
||||
"America/Toronto",
|
||||
"America/Tortola",
|
||||
"America/Vancouver",
|
||||
"America/Whitehorse",
|
||||
"America/Winnipeg",
|
||||
"America/Yakutat",
|
||||
"America/Yellowknife",
|
||||
"Antarctica/Casey",
|
||||
"Antarctica/Davis",
|
||||
"Antarctica/DumontDUrville",
|
||||
"Antarctica/Mawson",
|
||||
"Antarctica/McMurdo",
|
||||
"Antarctica/Palmer",
|
||||
"Antarctica/Rothera",
|
||||
"Antarctica/South_Pole",
|
||||
"Antarctica/Syowa",
|
||||
"Antarctica/Vostok",
|
||||
"Arctic/Longyearbyen",
|
||||
"Asia/Aden",
|
||||
"Asia/Almaty",
|
||||
"Asia/Amman",
|
||||
"Asia/Anadyr",
|
||||
"Asia/Aqtau",
|
||||
"Asia/Aqtobe",
|
||||
"Asia/Ashgabat",
|
||||
"Asia/Baghdad",
|
||||
"Asia/Bahrain",
|
||||
"Asia/Baku",
|
||||
"Asia/Bangkok",
|
||||
"Asia/Beirut",
|
||||
"Asia/Bishkek",
|
||||
"Asia/Brunei",
|
||||
"Asia/Choibalsan",
|
||||
"Asia/Chongqing",
|
||||
"Asia/Colombo",
|
||||
"Asia/Damascus",
|
||||
"Asia/Dhaka",
|
||||
"Asia/Dili",
|
||||
"Asia/Dubai",
|
||||
"Asia/Dushanbe",
|
||||
"Asia/Gaza",
|
||||
"Asia/Harbin",
|
||||
"Asia/Hong_Kong",
|
||||
"Asia/Hovd",
|
||||
"Asia/Ho_Chi_Minh",
|
||||
"Asia/Irkutsk",
|
||||
"Asia/Jakarta",
|
||||
"Asia/Jayapura",
|
||||
"Asia/Jerusalem",
|
||||
"Asia/Kabul",
|
||||
"Asia/Kamchatka",
|
||||
"Asia/Karachi",
|
||||
"Asia/Kashgar",
|
||||
"Asia/Kathmandu",
|
||||
"Asia/Kolkata",
|
||||
"Asia/Krasnoyarsk",
|
||||
"Asia/Kuala_Lumpur",
|
||||
"Asia/Kuching",
|
||||
"Asia/Kuwait",
|
||||
"Asia/Macau",
|
||||
"Asia/Magadan",
|
||||
"Asia/Makassar",
|
||||
"Asia/Manila",
|
||||
"Asia/Muscat",
|
||||
"Asia/Nicosia",
|
||||
"Asia/Novokuznetsk",
|
||||
"Asia/Novosibirsk",
|
||||
"Asia/Omsk",
|
||||
"Asia/Oral",
|
||||
"Asia/Phnom_Penh",
|
||||
"Asia/Pontianak",
|
||||
"Asia/Pyongyang",
|
||||
"Asia/Qatar",
|
||||
"Asia/Qyzylorda",
|
||||
"Asia/Rangoon",
|
||||
"Asia/Riyadh",
|
||||
"Asia/Sakhalin",
|
||||
"Asia/Samarkand",
|
||||
"Asia/Seoul",
|
||||
"Asia/Shanghai",
|
||||
"Asia/Singapore",
|
||||
"Asia/Taipei",
|
||||
"Asia/Tashkent",
|
||||
"Asia/Tbilisi",
|
||||
"Asia/Tehran",
|
||||
"Asia/Thimphu",
|
||||
"Asia/Tokyo",
|
||||
"Asia/Ulaanbaatar",
|
||||
"Asia/Urumqi",
|
||||
"Asia/Vientiane",
|
||||
"Asia/Vladivostok",
|
||||
"Asia/Yakutsk",
|
||||
"Asia/Yekaterinburg",
|
||||
"Asia/Yerevan",
|
||||
"Atlantic/Azores",
|
||||
"Atlantic/Bermuda",
|
||||
"Atlantic/Canary",
|
||||
"Atlantic/Cape_Verde",
|
||||
"Atlantic/Faroe",
|
||||
"Atlantic/Madeira",
|
||||
"Atlantic/Reykjavik",
|
||||
"Atlantic/South_Georgia",
|
||||
"Atlantic/Stanley",
|
||||
"Atlantic/St_Helena",
|
||||
"Australia/Adelaide",
|
||||
"Australia/Brisbane",
|
||||
"Australia/Broken_Hill",
|
||||
"Australia/Currie",
|
||||
"Australia/Darwin",
|
||||
"Australia/Eucla",
|
||||
"Australia/Hobart",
|
||||
"Australia/Lindeman",
|
||||
"Australia/Lord_Howe",
|
||||
"Australia/Melbourne",
|
||||
"Australia/Perth",
|
||||
"Australia/Sydney",
|
||||
"Europe/Amsterdam",
|
||||
"Europe/Andorra",
|
||||
"Europe/Athens",
|
||||
"Europe/Belgrade",
|
||||
"Europe/Berlin",
|
||||
"Europe/Bratislava",
|
||||
"Europe/Brussels",
|
||||
"Europe/Bucharest",
|
||||
"Europe/Budapest",
|
||||
"Europe/Chisinau",
|
||||
"Europe/Copenhagen",
|
||||
"Europe/Dublin",
|
||||
"Europe/Gibraltar",
|
||||
"Europe/Guernsey",
|
||||
"Europe/Helsinki",
|
||||
"Europe/Isle_of_Man",
|
||||
"Europe/Istanbul",
|
||||
"Europe/Jersey",
|
||||
"Europe/Kaliningrad",
|
||||
"Europe/Kiev",
|
||||
"Europe/Lisbon",
|
||||
"Europe/Ljubljana",
|
||||
"Europe/London",
|
||||
"Europe/Luxembourg",
|
||||
"Europe/Madrid",
|
||||
"Europe/Malta",
|
||||
"Europe/Mariehamn",
|
||||
"Europe/Minsk",
|
||||
"Europe/Monaco",
|
||||
"Europe/Moscow",
|
||||
"Europe/Oslo",
|
||||
"Europe/Paris",
|
||||
"Europe/Podgorica",
|
||||
"Europe/Prague",
|
||||
"Europe/Riga",
|
||||
"Europe/Rome",
|
||||
"Europe/Samara",
|
||||
"Europe/San_Marino",
|
||||
"Europe/Sarajevo",
|
||||
"Europe/Simferopol",
|
||||
"Europe/Skopje",
|
||||
"Europe/Sofia",
|
||||
"Europe/Stockholm",
|
||||
"Europe/Tallinn",
|
||||
"Europe/Tirane",
|
||||
"Europe/Uzhgorod",
|
||||
"Europe/Vaduz",
|
||||
"Europe/Vatican",
|
||||
"Europe/Vienna",
|
||||
"Europe/Vilnius",
|
||||
"Europe/Volgograd",
|
||||
"Europe/Warsaw",
|
||||
"Europe/Zagreb",
|
||||
"Europe/Zaporozhye",
|
||||
"Europe/Zurich",
|
||||
"Indian/Antananarivo",
|
||||
"Indian/Chagos",
|
||||
"Indian/Christmas",
|
||||
"Indian/Cocos",
|
||||
"Indian/Comoro",
|
||||
"Indian/Kerguelen",
|
||||
"Indian/Mahe",
|
||||
"Indian/Maldives",
|
||||
"Indian/Mauritius",
|
||||
"Indian/Mayotte",
|
||||
"Indian/Reunion",
|
||||
"Pacific/Apia",
|
||||
"Pacific/Auckland",
|
||||
"Pacific/Chatham",
|
||||
"Pacific/Easter",
|
||||
"Pacific/Efate",
|
||||
"Pacific/Enderbury",
|
||||
"Pacific/Fakaofo",
|
||||
"Pacific/Fiji",
|
||||
"Pacific/Funafuti",
|
||||
"Pacific/Galapagos",
|
||||
"Pacific/Gambier",
|
||||
"Pacific/Guadalcanal",
|
||||
"Pacific/Guam",
|
||||
"Pacific/Honolulu",
|
||||
"Pacific/Johnston",
|
||||
"Pacific/Kiritimati",
|
||||
"Pacific/Kosrae",
|
||||
"Pacific/Kwajalein",
|
||||
"Pacific/Majuro",
|
||||
"Pacific/Marquesas",
|
||||
"Pacific/Midway",
|
||||
"Pacific/Nauru",
|
||||
"Pacific/Niue",
|
||||
"Pacific/Norfolk",
|
||||
"Pacific/Noumea",
|
||||
"Pacific/Pago_Pago",
|
||||
"Pacific/Palau",
|
||||
"Pacific/Pitcairn",
|
||||
"Pacific/Ponape",
|
||||
"Pacific/Port_Moresby",
|
||||
"Pacific/Rarotonga",
|
||||
"Pacific/Saipan",
|
||||
"Pacific/Tahiti",
|
||||
"Pacific/Tarawa",
|
||||
"Pacific/Tongatapu",
|
||||
"Pacific/Truk",
|
||||
"Pacific/Wake",
|
||||
"Pacific/Wallis",
|
||||
);
|
||||
$aZones = \DateTimeZone::listIdentifiers();
|
||||
|
||||
reset($aZones);
|
||||
return $aZones;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,6 +45,38 @@ class Standard extends \Baikal\Model\Config {
|
|||
"type" => "string",
|
||||
"comment" => "HTTP authentication type for WebDAV; default Digest"
|
||||
),
|
||||
"BAIKAL_DAV_LDAP_URI" => array(
|
||||
"type" => "string",
|
||||
"comment" => "URI to LDAP Server (for ldap-userbind auth); default ldapi:///"
|
||||
),
|
||||
"BAIKAL_DAV_LDAP_DN_TEMPLATE" => array(
|
||||
"type" => "string",
|
||||
"comment" => "User DN for bind; with replacments %n => username, %u => user part, %d => domain part of username"
|
||||
),
|
||||
"BAIKAL_DAV_LDAP_DISPLAYNAME_ATTR" => array(
|
||||
"type" => "string",
|
||||
"comment" => "LDAP-attribute for displayname; default cn"
|
||||
),
|
||||
"BAIKAL_DAV_LDAP_EMAIL_ATTR" => array(
|
||||
"type" => "string",
|
||||
"comment" => "LDAP-attribute for email; default mail"
|
||||
),
|
||||
"BAIKAL_DAV_MAIL_PROTOCOL" => array(
|
||||
"type" => "string",
|
||||
"comment" => "used protocol; default 'imap (TLS/StartTLS)'"
|
||||
),
|
||||
"BAIKAL_DAV_MAIL_SERVER" => array(
|
||||
"type" => "string",
|
||||
"comment" => "host:port of mail server; default localhost:143"
|
||||
),
|
||||
"BAIKAL_DAV_MAIL_CHECK_CERT" => array(
|
||||
"type" => "boolean",
|
||||
"comment" => "validate ssl-certificate; default yes"
|
||||
),
|
||||
"BAIKAL_DAV_AUTO_CREATE_USER" => array(
|
||||
"type" => "boolean",
|
||||
"comment" => "automatic creation of users; default yes"
|
||||
),
|
||||
"BAIKAL_ADMIN_ENABLED" => array(
|
||||
"type" => "boolean",
|
||||
"comment" => "Baïkal Web Admin ON/OFF switch; default TRUE",
|
||||
|
@ -65,6 +97,14 @@ class Standard extends \Baikal\Model\Config {
|
|||
"BAIKAL_CARD_ENABLED" => TRUE,
|
||||
"BAIKAL_CAL_ENABLED" => TRUE,
|
||||
"BAIKAL_DAV_AUTH_TYPE" => "Digest",
|
||||
"BAIKAL_DAV_LDAP_URI" => "ldapi:///",
|
||||
"BAIKAL_DAV_LDAP_DN_TEMPLATE" => "uid=%n,dc=example,dc=com",
|
||||
"BAIKAL_DAV_LDAP_DISPLAYNAME_ATTR" => "cn",
|
||||
"BAIKAL_DAV_LDAP_EMAIL_ATTR" => "mail",
|
||||
"BAIKAL_DAV_MAIL_PROTOCOL" => "imap (unencrypted)",
|
||||
"BAIKAL_DAV_MAIL_SERVER" => "localhost:143",
|
||||
"BAIKAL_DAV_MAIL_CHECK_CERT" => TRUE,
|
||||
"BAIKAL_DAV_AUTO_CREATE_USER" => TRUE,
|
||||
"BAIKAL_ADMIN_ENABLED" => TRUE,
|
||||
"BAIKAL_ADMIN_AUTOLOCKENABLED" => FALSE,
|
||||
"BAIKAL_ADMIN_PASSWORDHASH" => ""
|
||||
|
@ -94,9 +134,80 @@ class Standard extends \Baikal\Model\Config {
|
|||
$oMorpho->add(new \Formal\Element\Listbox(array(
|
||||
"prop" => "BAIKAL_DAV_AUTH_TYPE",
|
||||
"label" => "WebDAV authentication type",
|
||||
"options" => array( "Digest", "Basic" )
|
||||
"options" => array( "Digest", "Basic", "LDAP-UserBind", "Mail" )
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Text(array(
|
||||
"prop" => "BAIKAL_DAV_LDAP_URI",
|
||||
"label" => "LDAP URI",
|
||||
"class" => "auth_ldap-userbind"
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Text(array(
|
||||
"prop" => "BAIKAL_DAV_LDAP_DN_TEMPLATE",
|
||||
"label" => "LDAP DN template",
|
||||
"class" => "auth_ldap-userbind",
|
||||
"popover" => array(
|
||||
"title" => "posible placeholder",
|
||||
"content" => "<strong>%n</strong> - username<br /><strong>%u</strong> - user part of username , when it is an email address)<br /><strong>%d</strong> - domain part",
|
||||
)
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Text(array(
|
||||
"prop" => "BAIKAL_DAV_LDAP_DISPLAYNAME_ATTR",
|
||||
"label" => "LDAP attribute for DisplayName",
|
||||
"class" => "auth_ldap-userbind"
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Text(array(
|
||||
"prop" => "BAIKAL_DAV_LDAP_EMAIL_ATTR",
|
||||
"label" => "LDAP attribute for eMail",
|
||||
"class" => "auth_ldap-userbind"
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Listbox(array(
|
||||
"prop" => "BAIKAL_DAV_MAIL_PROTOCOL",
|
||||
"label" => "MailAuth Protocol",
|
||||
"class" => "auth_mail",
|
||||
"options" => array(
|
||||
"imap" => "imap (unencrypted)",
|
||||
"imaps" => "imaps (SSL)",
|
||||
"imaptls" => "imap (StartTLS)",
|
||||
"pop3" => "pop3 (unencrypted)",
|
||||
"pop3s" => "pop3s (SSL)",
|
||||
"pop3tls" => "pop3 (StartTLS)",
|
||||
"smtp" => "smtp (unencrypted)",
|
||||
"smtps" => "smtps (SSL)",
|
||||
"smtptls" => "smtp (StartTLS)"
|
||||
)
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Text(array(
|
||||
"prop" => "BAIKAL_DAV_MAIL_SERVER",
|
||||
"label" => "MailAuth Server",
|
||||
"class" => "auth_mail",
|
||||
"popover" => array(
|
||||
"title" => "Format",
|
||||
"content" => "host:port"
|
||||
)
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Checkbox(array(
|
||||
"prop" => "BAIKAL_DAV_MAIL_CHECK_CERT",
|
||||
"label" => "MailAuth Check SSL-Certificate",
|
||||
"class" => "auth_mail auth_mail_ssl",
|
||||
"popover" => array(
|
||||
"title" => "Security",
|
||||
"content" => "validate the server certificate"
|
||||
)
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Checkbox(array(
|
||||
"prop" => "BAIKAL_DAV_AUTO_CREATE_USER",
|
||||
"label" => "Automatic create users",
|
||||
"class" => "auth_mail auth_ldap-userbind"
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Password(array(
|
||||
"prop" => "BAIKAL_ADMIN_PASSWORDHASH",
|
||||
"label" => "Admin password",
|
||||
|
@ -207,6 +318,33 @@ define("BAIKAL_CAL_ENABLED", TRUE);
|
|||
# WebDAV authentication type; default Digest
|
||||
define("BAIKAL_DAV_AUTH_TYPE", "Digest");
|
||||
|
||||
# Auth Backend LDAP-UserBind; LDAP URI
|
||||
define("BAIKAL_DAV_LDAP_URI", 'ldapi:///');
|
||||
|
||||
# Auth Backend LDAP-UserBind; Template for userbind
|
||||
# %n => username
|
||||
# %u => user part of username when it is an email
|
||||
# %u => domain part of username when it is an email
|
||||
define("BAIKAL_DAV_LDAP_DN_TEMPLATE", 'cn=%u,dc=%d,ou=domains,o=server');
|
||||
|
||||
# Auth Backend LDAP-UserBind; attribute for displayname
|
||||
define("BAIKAL_DAV_LDAP_DISPLAYNAME_ATTR", 'cn');
|
||||
|
||||
# Auth Backend LDAP-UserBind; attribute for email
|
||||
define("BAIKAL_DAV_LDAP_EMAIL_ATTR", 'mail');
|
||||
|
||||
# Auth Backend Mail; protocol of service
|
||||
define("BAIKAL_DAV_MAIL_PROTOCOL", 'imap');
|
||||
|
||||
# Auth Backend Mail; server host:port
|
||||
define("BAIKAL_DAV_MAIL_SERVER", 'localhost:143');
|
||||
|
||||
# Auth Backend Mail; validate the ssl-certificate
|
||||
define("BAIKAL_DAV_MAIL_CHECK_CERT", TRUE);
|
||||
|
||||
# Auth Backends: automatic creation of users; default yes"
|
||||
define("BAIKAL_DAV_AUTO_CREATE_USER", TRUE);
|
||||
|
||||
# Baïkal Web Admin ON/OFF switch; default TRUE
|
||||
define("BAIKAL_ADMIN_ENABLED", TRUE);
|
||||
|
||||
|
@ -219,4 +357,4 @@ CODE;
|
|||
$sCode = trim($sCode);
|
||||
return $sCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -208,10 +208,10 @@ define("BAIKAL_PATH_SABREDAV", PROJECT_PATH_FRAMEWORKS . "SabreDAV/lib/Sabre/");
|
|||
define("BAIKAL_AUTH_REALM", "BaikalDAV");
|
||||
|
||||
# Should begin and end with a "/"
|
||||
define("BAIKAL_CARD_BASEURI", PROJECT_BASEURI_ . "card.php/");
|
||||
define("BAIKAL_CARD_BASEURI", PROJECT_BASEURI . "card.php/");
|
||||
|
||||
# Should begin and end with a "/"
|
||||
define("BAIKAL_CAL_BASEURI", PROJECT_BASEURI_ . "cal.php/");
|
||||
define("BAIKAL_CAL_BASEURI", PROJECT_BASEURI . "cal.php/");
|
||||
|
||||
# Define path to Baïkal Database SQLite file
|
||||
define("PROJECT_SQLITE_FILE", PROJECT_PATH_SPECIFIC . "db/db.sqlite");
|
||||
|
|
|
@ -226,37 +226,43 @@ class User extends \Flake\Core\Model\Db {
|
|||
"label" => "Email",
|
||||
"validation" => "required,email"
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Password(array(
|
||||
"prop" => "password",
|
||||
"label" => "Password",
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Password(array(
|
||||
"prop" => "passwordconfirm",
|
||||
"label" => "Confirm password",
|
||||
"validation" => "sameas:password",
|
||||
)));
|
||||
|
||||
|
||||
if($this->floating()) {
|
||||
$oMorpho->element("username")->setOption("help", "May be an email, but not forcibly.");
|
||||
$oMorpho->element("password")->setOption("validation", "required");
|
||||
} else {
|
||||
$sNotice = "-- Leave empty to keep current password --";
|
||||
$oMorpho->element("username")->setOption("readonly", true);
|
||||
}
|
||||
|
||||
if( BAIKAL_DAV_AUTH_TYPE == "Digest" || BAIKAL_DAV_AUTH_TYPE == "Basic") {
|
||||
$oMorpho->add(new \Formal\Element\Password(array(
|
||||
"prop" => "password",
|
||||
"label" => "Password",
|
||||
)));
|
||||
|
||||
$oMorpho->add(new \Formal\Element\Password(array(
|
||||
"prop" => "passwordconfirm",
|
||||
"label" => "Confirm password",
|
||||
"validation" => "sameas:password",
|
||||
)));
|
||||
|
||||
if($this->floating()) {
|
||||
$oMorpho->element("password")->setOption("validation", "required");
|
||||
} else {
|
||||
$sNotice = "-- Leave empty to keep current password --";
|
||||
|
||||
$oMorpho->element("password")->setOption("popover", array(
|
||||
"title" => "Password",
|
||||
"content" => "Write something here only if you want to change the user password."
|
||||
));
|
||||
$oMorpho->element("password")->setOption("popover", array(
|
||||
"title" => "Password",
|
||||
"content" => "Write something here only if you want to change the user password."
|
||||
));
|
||||
|
||||
$oMorpho->element("passwordconfirm")->setOption("popover", array(
|
||||
"title" => "Confirm password",
|
||||
"content" => "Write something here only if you want to change the user password."
|
||||
));
|
||||
$oMorpho->element("passwordconfirm")->setOption("popover", array(
|
||||
"title" => "Confirm password",
|
||||
"content" => "Write something here only if you want to change the user password."
|
||||
));
|
||||
|
||||
$oMorpho->element("password")->setOption("placeholder", $sNotice);
|
||||
$oMorpho->element("passwordconfirm")->setOption("placeholder", $sNotice);
|
||||
$oMorpho->element("password")->setOption("placeholder", $sNotice);
|
||||
$oMorpho->element("passwordconfirm")->setOption("placeholder", $sNotice);
|
||||
}
|
||||
}
|
||||
|
||||
return $oMorpho;
|
||||
|
|
80
sources/Core/Frameworks/Baikal/Scripts/package-flat.sh
Executable file
|
@ -0,0 +1,80 @@
|
|||
#!/usr/bin/env sh
|
||||
TEMPDATE="`date +%Y-%m-%d-%H-%M-%S`"
|
||||
TEMPDIR="/tmp/baikal-flat-$TEMPDATE-temp"
|
||||
TEMPARCHIVE="$TEMPDIR/temparchive.tgz"
|
||||
TEMPDIRDEREFERENCE="/tmp/baikal-flat-$TEMPDATE"
|
||||
|
||||
echo "########################################################################"
|
||||
echo "#"
|
||||
echo "# Baïkal Packaging script"
|
||||
echo "#"
|
||||
echo "# Packaging project for flat distribution (replacing symlinks"
|
||||
echo "# by their target). Useful for FTP deployment"
|
||||
echo "#"
|
||||
echo "# TEMPDIR: $TEMPDIR"
|
||||
|
||||
rm -rf /tmp/baikal-flat
|
||||
|
||||
# Export Project
|
||||
# Requires the git-archive-all script by https://github.com/Kentzo (https://github.com/Kentzo/git-archive-all)
|
||||
|
||||
mkdir $TEMPDIR && \
|
||||
git-archive-all --force-submodules $TEMPARCHIVE && \
|
||||
cd $TEMPDIR && tar -xzf $TEMPARCHIVE && rm $TEMPARCHIVE && \
|
||||
|
||||
# Dereferencig symlinks
|
||||
cp -RfL $TEMPDIR $TEMPDIRDEREFERENCE && \
|
||||
rm -Rf $TEMPDIR && \
|
||||
|
||||
TEMPDIR=$TEMPDIRDEREFERENCE/temparchive && \
|
||||
|
||||
# Jump to tempdir
|
||||
cd $TEMPDIR && \
|
||||
|
||||
# Cleaning Resources
|
||||
rm -f Core/Resources/Web/README.md && \
|
||||
rm -Rf Core/Resources/Web/TwitterBootstrap && \
|
||||
|
||||
# Cleaning Scripts
|
||||
rm -Rf Core/Scripts && \
|
||||
rm -Rf Core/Frameworks/Baikal/Scripts && \
|
||||
|
||||
# Cleaning WWWRoot
|
||||
rm -Rf Core/Frameworks/Baikal/WWWRoot && \
|
||||
rm -Rf Core/Frameworks/BaikalAdmin/WWWRoot && \
|
||||
|
||||
# Cleaning Specific/Virtualhosts
|
||||
rm -Rf Specific/virtualhosts && \
|
||||
|
||||
# Installing dependencies (composer)
|
||||
composer install && \
|
||||
|
||||
# Removing composer stuff
|
||||
rm -f composer.* && \
|
||||
|
||||
# Moving HTML roots
|
||||
mv html/* . && \
|
||||
mv html/.htaccess . && \
|
||||
rm -Rf html && \
|
||||
|
||||
# Tagging Distrib
|
||||
cat Core/Distrib.php | sed -e "s/\"regular\"/\"flat\"/g" > Core/Distrib2.php && \
|
||||
rm -f Core/Distrib.php && \
|
||||
mv Core/Distrib2.php Core/Distrib.php && \
|
||||
|
||||
# Deploy empty DB
|
||||
mkdir -p Specific/db && \
|
||||
cp Core/Resources/Db/SQLite/db.sqlite Specific/db && \
|
||||
|
||||
# Add ENABLE_INSTALL
|
||||
|
||||
touch Specific/ENABLE_INSTALL && \
|
||||
|
||||
# Zipping package
|
||||
cd .. && \
|
||||
mv $TEMPDIR baikal-flat && \
|
||||
zip -r baikal-flat.zip baikal-flat && \
|
||||
mv baikal-flat.zip ~/Desktop/ && \
|
||||
|
||||
# Displaying result
|
||||
echo "# Success: ~/Desktop/baikal-flat.zip"
|
53
sources/Core/Frameworks/Baikal/Scripts/package-regular.sh
Executable file
|
@ -0,0 +1,53 @@
|
|||
#!/usr/bin/env sh
|
||||
TEMPDATE="`date +%Y-%m-%d-%H-%M-%S`"
|
||||
TEMPDIR="/tmp/baikal-regular-$TEMPDATE"
|
||||
TEMPARCHIVE="$TEMPDIR/temparchive.tgz"
|
||||
|
||||
echo "########################################################################"
|
||||
echo "#"
|
||||
echo "# Baïkal Packaging script"
|
||||
echo "#"
|
||||
echo "# Packaging project for regular distribution"
|
||||
echo "#"
|
||||
echo "# TEMPDIR: $TEMPDIR"
|
||||
|
||||
rm -rf /tmp/baikal-regular
|
||||
|
||||
# Export Project
|
||||
# Requires the git-archive-all script by https://github.com/Kentzo (https://github.com/Kentzo/git-archive-all)
|
||||
|
||||
mkdir -p $TEMPDIR && \
|
||||
git-archive-all --force-submodules $TEMPARCHIVE && \
|
||||
cd $TEMPDIR && tar -xzf $TEMPARCHIVE && rm $TEMPARCHIVE && \
|
||||
|
||||
TEMPDIR=$TEMPDIR/temparchive && \
|
||||
|
||||
# Jump to tempdir
|
||||
cd $TEMPDIR && \
|
||||
|
||||
# Cleaning Scripts
|
||||
rm -Rf Core/Scripts && \
|
||||
rm -Rf Core/Frameworks/Baikal/Scripts && \
|
||||
|
||||
# Deploy empty DB
|
||||
mkdir -p Specific/db && \
|
||||
cp Core/Resources/Db/SQLite/db.sqlite Specific/db && \
|
||||
|
||||
# Add ENABLE_INSTALL
|
||||
|
||||
touch Specific/ENABLE_INSTALL && \
|
||||
|
||||
# Installing dependencies (composer)
|
||||
composer install && \
|
||||
|
||||
# Removing composer stuff
|
||||
rm -f composer.* && \
|
||||
|
||||
# GZipping package
|
||||
cd .. && \
|
||||
mv $TEMPDIR baikal-regular && \
|
||||
tar -cvzf baikal-regular.tgz baikal-regular && \
|
||||
mv baikal-regular.tgz ~/Desktop/ && \
|
||||
|
||||
# Displaying result
|
||||
echo "# Success: ~/Desktop/baikal-regular.tgz"
|
|
@ -55,10 +55,20 @@ if(!defined("BAIKAL_CAL_ENABLED") || BAIKAL_CAL_ENABLED !== TRUE) {
|
|||
}
|
||||
|
||||
# Backends
|
||||
if( BAIKAL_DAV_AUTH_TYPE == "Basic" || preg_match('/Windows-Phone-WebDAV-Client/i', $_SERVER['HTTP_USER_AGENT']) )
|
||||
$authBackend = new \Baikal\Core\PDOBasicAuth($GLOBALS["DB"]->getPDO(), BAIKAL_AUTH_REALM);
|
||||
else
|
||||
if( BAIKAL_DAV_AUTH_TYPE == "Digest" && !preg_match('/Windows-Phone-WebDAV-Client/i', $_SERVER['HTTP_USER_AGENT']))
|
||||
$authBackend = new \Sabre\DAV\Auth\Backend\PDO($GLOBALS["DB"]->getPDO());
|
||||
else {
|
||||
switch (strtoupper(BAIKAL_DAV_AUTH_TYPE)) {
|
||||
case "MAIL":
|
||||
$authBackend = new \Baikal\Core\MailAuth($GLOBALS["DB"]->getPDO(), BAIKAL_AUTH_REALM);
|
||||
break;
|
||||
case "LDAP-USERBIND":
|
||||
$authBackend = new \Baikal\Core\LDAPUserBindAuth($GLOBALS["DB"]->getPDO(), BAIKAL_AUTH_REALM);
|
||||
break;
|
||||
default:
|
||||
$authBackend = new \Baikal\Core\PDOBasicAuth($GLOBALS["DB"]->getPDO(), BAIKAL_AUTH_REALM);
|
||||
}
|
||||
}
|
||||
|
||||
$principalBackend = new \Sabre\DAVACL\PrincipalBackend\PDO($GLOBALS["DB"]->getPDO());
|
||||
$calendarBackend = new \Sabre\CalDAV\Backend\PDO($GLOBALS["DB"]->getPDO());
|
|
@ -52,10 +52,20 @@ if(!defined("BAIKAL_CARD_ENABLED") || BAIKAL_CARD_ENABLED !== TRUE) {
|
|||
}
|
||||
|
||||
# Backends
|
||||
if( BAIKAL_DAV_AUTH_TYPE == "Basic" || preg_match('/Windows-Phone-WebDAV-Client/i', $_SERVER['HTTP_USER_AGENT']) )
|
||||
$authBackend = new \Baikal\Core\PDOBasicAuth($GLOBALS["DB"]->getPDO(), BAIKAL_AUTH_REALM);
|
||||
else
|
||||
if( BAIKAL_DAV_AUTH_TYPE == "Digest" && !preg_match('/Windows-Phone-WebDAV-Client/i', $_SERVER['HTTP_USER_AGENT']))
|
||||
$authBackend = new \Sabre\DAV\Auth\Backend\PDO($GLOBALS["DB"]->getPDO());
|
||||
else {
|
||||
switch (strtoupper(BAIKAL_DAV_AUTH_TYPE)) {
|
||||
case "MAIL":
|
||||
$authBackend = new \Baikal\Core\MailAuth($GLOBALS["DB"]->getPDO(), BAIKAL_AUTH_REALM);
|
||||
break;
|
||||
case "LDAP-USERBIND":
|
||||
$authBackend = new \Baikal\Core\LDAPUserBindAuth($GLOBALS["DB"]->getPDO(), BAIKAL_AUTH_REALM);
|
||||
break;
|
||||
default:
|
||||
$authBackend = new \Baikal\Core\PDOBasicAuth($GLOBALS["DB"]->getPDO(), BAIKAL_AUTH_REALM);
|
||||
}
|
||||
}
|
||||
|
||||
$principalBackend = new \Sabre\DAVACL\PrincipalBackend\PDO($GLOBALS["DB"]->getPDO());
|
||||
$carddavBackend = new \Sabre\CardDAV\Backend\PDO($GLOBALS["DB"]->getPDO());
|
|
@ -48,6 +48,25 @@
|
|||
trigger: 'focus',
|
||||
placement: 'bottom'
|
||||
});
|
||||
|
||||
function toggleStandardAuthParameter() {
|
||||
$(".auth_ldap-userbind").hide();
|
||||
$(".auth_mail").hide();
|
||||
var type = ".auth_" + $("#BAIKAL_DAV_AUTH_TYPE").val().toLowerCase();
|
||||
$(type).show();
|
||||
toggleStandardAuthMailSSL();
|
||||
}
|
||||
function toggleStandardAuthMailSSL() {
|
||||
var val = $("#BAIKAL_DAV_MAIL_PROTOCOL").val();
|
||||
if ( val == "pop3" || val == "imap" || val == "smtp" ) {
|
||||
$(".auth_mail_ssl").hide();
|
||||
} else {
|
||||
$(".auth_mail_ssl").show();
|
||||
}
|
||||
}
|
||||
$("#BAIKAL_DAV_AUTH_TYPE").change(function() {toggleStandardAuthParameter();});
|
||||
$("#BAIKAL_DAV_MAIL_PROTOCOL").change(function() {toggleStandardAuthMailSSL();});
|
||||
toggleStandardAuthParameter();
|
||||
</script>
|
||||
{{ javascript }}
|
||||
</body>
|
||||
|
|
|
@ -56,6 +56,10 @@ class Checkbox extends \Formal\Element {
|
|||
$groupclass .= " error";
|
||||
}
|
||||
|
||||
if(trim($this->option("class")) !== "") {
|
||||
$groupclass .= " " . $this->option("class");
|
||||
}
|
||||
|
||||
if(($sHelp = trim($this->option("help"))) !== "") {
|
||||
$helpblock = "<p class=\"help-block\">" . $sHelp . "</p>";
|
||||
}
|
||||
|
|
|
@ -49,6 +49,10 @@ class Listbox extends \Formal\Element {
|
|||
$groupclass .= " error";
|
||||
}
|
||||
|
||||
if(trim($this->option("class")) !== "") {
|
||||
$groupclass .= " " . $this->option("class");
|
||||
}
|
||||
|
||||
$aOptions = $this->option("options");
|
||||
if(!is_array($aOptions)) {
|
||||
throw new \Exception("\Formal\Element\Listbox->render(): 'options' has to be an array.");
|
||||
|
|
1
sources/Core/Resources/Web/BaikalAdmin
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../Frameworks/BaikalAdmin/Resources
|
|
@ -1,461 +0,0 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
define("COLUMNS", 10);
|
||||
define("ROWS", 35);
|
||||
define("MATRIXWIDTH", 400);
|
||||
define("MATRIXHEIGHT", 1400);
|
||||
|
||||
echo generateSprite(getSymbols(), COLUMNS, ROWS, MATRIXWIDTH, MATRIXHEIGHT, "glyph-");
|
||||
|
||||
function getSymbols() {
|
||||
# Glyphicons Png names, without extension
|
||||
return array(
|
||||
"000_glass",
|
||||
"001_leaf",
|
||||
"002_dog",
|
||||
"003_user",
|
||||
"004_girl",
|
||||
"005_car",
|
||||
"006_user_add",
|
||||
"007_user_remove",
|
||||
"008_film",
|
||||
"009_magic",
|
||||
"010_envelope",
|
||||
"011_camera",
|
||||
"012_heart",
|
||||
"013_beach_umbrella",
|
||||
"014_train",
|
||||
"015_print",
|
||||
"016_bin",
|
||||
"017_music",
|
||||
"018_note",
|
||||
"019_cogwheel",
|
||||
"020_home",
|
||||
"021_snowflake",
|
||||
"022_fire",
|
||||
"023_cogwheels",
|
||||
"024_parents",
|
||||
"025_binoculars",
|
||||
"026_road",
|
||||
"027_search",
|
||||
"028_cars",
|
||||
"029_notes_2",
|
||||
"030_pencil",
|
||||
"031_bus",
|
||||
"032_wifi_alt",
|
||||
"033_luggage",
|
||||
"034_old_man",
|
||||
"035_woman",
|
||||
"036_file",
|
||||
"037_credit",
|
||||
"038_airplane",
|
||||
"039_notes",
|
||||
"040_stats",
|
||||
"041_charts",
|
||||
"042_pie_chart",
|
||||
"043_group",
|
||||
"044_keys",
|
||||
"045_calendar",
|
||||
"046_router",
|
||||
"047_camera_small",
|
||||
"048_dislikes",
|
||||
"049_star",
|
||||
"050_link",
|
||||
"051_eye_open",
|
||||
"052_eye_close",
|
||||
"053_alarm",
|
||||
"054_clock",
|
||||
"055_stopwatch",
|
||||
"056_projector",
|
||||
"057_history",
|
||||
"058_truck",
|
||||
"059_cargo",
|
||||
"060_compass",
|
||||
"061_keynote",
|
||||
"062_attach",
|
||||
"063_power",
|
||||
"064_lightbulb",
|
||||
"065_tag",
|
||||
"066_tags",
|
||||
"067_cleaning",
|
||||
"068_ruller",
|
||||
"069_gift",
|
||||
"070_umbrella",
|
||||
"071_book",
|
||||
"072_bookmark",
|
||||
"073_signal",
|
||||
"074_cup",
|
||||
"075_stroller",
|
||||
"076_headphones",
|
||||
"077_headset",
|
||||
"078_warning_sign",
|
||||
"079_signal",
|
||||
"080_retweet",
|
||||
"081_refresh",
|
||||
"082_roundabout",
|
||||
"083_random",
|
||||
"084_heat",
|
||||
"085_repeat",
|
||||
"086_display",
|
||||
"087_log_book",
|
||||
"088_adress_book",
|
||||
"089_magnet",
|
||||
"090_table",
|
||||
"091_adjust",
|
||||
"092_tint",
|
||||
"093_crop",
|
||||
"094_vector_path_square",
|
||||
"095_vector_path_circle",
|
||||
"096_vector_path_polygon",
|
||||
"097_vector_path_line",
|
||||
"098_vector_path_curve",
|
||||
"099_vector_path_all",
|
||||
"100_font",
|
||||
"101_italic",
|
||||
"102_bold",
|
||||
"103_text_underline",
|
||||
"104_text_strike",
|
||||
"105_text_height",
|
||||
"106_text_width",
|
||||
"107_text_resize",
|
||||
"108_left_indent",
|
||||
"109_right_indent",
|
||||
"110_align_left",
|
||||
"111_align_center",
|
||||
"112_align_right",
|
||||
"113_justify",
|
||||
"114_list",
|
||||
"115_text_smaller",
|
||||
"116_text_bigger",
|
||||
"117_embed",
|
||||
"118_embed_close",
|
||||
"119_adjust",
|
||||
"120_message_full",
|
||||
"121_message_empty",
|
||||
"122_message_in",
|
||||
"123_message_out",
|
||||
"124_message_plus",
|
||||
"125_message_minus",
|
||||
"126_message_ban",
|
||||
"127_message_flag",
|
||||
"128_message_lock",
|
||||
"129_message_new",
|
||||
"130_inbox",
|
||||
"131_inbox_plus",
|
||||
"132_inbox_minus",
|
||||
"133_inbox_lock",
|
||||
"134_inbox_in",
|
||||
"135_inbox_out",
|
||||
"136_computer_locked",
|
||||
"137_computer_service",
|
||||
"138_computer_proces",
|
||||
"139_phone",
|
||||
"140_database_lock",
|
||||
"141_database_plus",
|
||||
"142_database_minus",
|
||||
"143_database_ban",
|
||||
"144_folder_open",
|
||||
"145_folder_plus",
|
||||
"146_folder_minus",
|
||||
"147_folder_lock",
|
||||
"148_folder_flag",
|
||||
"149_folder_new",
|
||||
"150_check",
|
||||
"151_edit",
|
||||
"152_new_window",
|
||||
"153_more_windows",
|
||||
"154_show_big_thumbnails",
|
||||
"155_show_thumbnails",
|
||||
"156_show_thumbnails_with_lines",
|
||||
"157_show_lines",
|
||||
"158_playlist",
|
||||
"159_picture",
|
||||
"160_imac",
|
||||
"161_macbook",
|
||||
"162_ipad",
|
||||
"163_iphone",
|
||||
"164_iphone_transfer",
|
||||
"165_iphone_exchange",
|
||||
"166_ipod",
|
||||
"167_ipod_shuffle",
|
||||
"168_ear_plugs",
|
||||
"169_albums",
|
||||
"170_step_backward",
|
||||
"171_fast_backward",
|
||||
"172_rewind",
|
||||
"173_play",
|
||||
"174_pause",
|
||||
"175_stop",
|
||||
"176_forward",
|
||||
"177_fast_forward",
|
||||
"178_step_forward",
|
||||
"179_eject",
|
||||
"180_facetime_video",
|
||||
"181_download_alt",
|
||||
"182_mute",
|
||||
"183_volume_down",
|
||||
"184_volume_up",
|
||||
"185_screenshot",
|
||||
"186_move",
|
||||
"187_more",
|
||||
"188_brightness_reduce",
|
||||
"189_brightness_increase",
|
||||
"190_circle_plus",
|
||||
"191_circle_minus",
|
||||
"192_circle_remove",
|
||||
"193_circle_ok",
|
||||
"194_circle_question_mark",
|
||||
"195_circle_info",
|
||||
"196_circle_exclamation_mark",
|
||||
"197_remove",
|
||||
"198_ok",
|
||||
"199_ban",
|
||||
"200_download",
|
||||
"201_upload",
|
||||
"202_shopping_cart",
|
||||
"203_lock",
|
||||
"204_unlock",
|
||||
"205_electricity",
|
||||
"206_ok_2",
|
||||
"207_remove_2",
|
||||
"208_cart_out",
|
||||
"209_cart_in",
|
||||
"210_left_arrow",
|
||||
"211_right_arrow",
|
||||
"212_down_arrow",
|
||||
"213_up_arrow",
|
||||
"214_resize_small",
|
||||
"215_resize_full",
|
||||
"216_circle_arrow_left",
|
||||
"217_circle_arrow_right",
|
||||
"218_circle_arrow_right",
|
||||
"219_circle_arrow_right",
|
||||
"220_play_button",
|
||||
"221_unshare",
|
||||
"222_share",
|
||||
"223_thin_right_arrow",
|
||||
"224_thin_arrow_left",
|
||||
"225_bluetooth",
|
||||
"226_euro",
|
||||
"227_usd",
|
||||
"228_bp",
|
||||
"229_retweet_2",
|
||||
"230_moon",
|
||||
"231_sun",
|
||||
"232_cloud",
|
||||
"233_direction",
|
||||
"234_brush",
|
||||
"235_pen",
|
||||
"236_zoom_in",
|
||||
"237_zoom_out",
|
||||
"238_pin",
|
||||
"239_riflescope",
|
||||
"240_rotation_lock",
|
||||
"241_flash",
|
||||
"242_google_maps",
|
||||
"243_anchor",
|
||||
"244_conversation",
|
||||
"245_chat",
|
||||
"246_male",
|
||||
"247_female",
|
||||
"248_asterisk",
|
||||
"249_divide",
|
||||
"250_snorkel_diving",
|
||||
"251_scuba_diving",
|
||||
"252_oxygen_bottle",
|
||||
"253_fins",
|
||||
"254_fishes",
|
||||
"255_boat",
|
||||
"256_delete_point",
|
||||
"257_sheriffs_-star",
|
||||
"258_qrcode",
|
||||
"259_barcode",
|
||||
"260_pool",
|
||||
"261_buoy",
|
||||
"262_spade",
|
||||
"263_bank",
|
||||
"264_vcard",
|
||||
"265_electrical_plug",
|
||||
"266_flag",
|
||||
"267_credit_card",
|
||||
"268_keyboard_wireless",
|
||||
"269_keyboard_wired",
|
||||
"270_shield",
|
||||
"271_ring",
|
||||
"272_cake",
|
||||
"273_drink",
|
||||
"274_beer",
|
||||
"275_fast_food",
|
||||
"276_cutlery",
|
||||
"277_pizza",
|
||||
"278_birthday_cake",
|
||||
"279_tablet",
|
||||
"280_settings",
|
||||
"281_bullets",
|
||||
"282_cardio",
|
||||
"283_t-shirt",
|
||||
"284_pants",
|
||||
"285_sweater",
|
||||
"286_fabric",
|
||||
"287_leather",
|
||||
"288_scissors",
|
||||
"289_podium",
|
||||
"290_skull",
|
||||
"291_celebration",
|
||||
"292_tea_kettle",
|
||||
"293_french_press",
|
||||
"294_coffe_cup",
|
||||
"295_pot",
|
||||
"296_grater",
|
||||
"297_kettle",
|
||||
"298_hospital",
|
||||
"299_hospital_h",
|
||||
"300_microphone",
|
||||
"301_webcam",
|
||||
"302_temple_christianity_church",
|
||||
"303_temple_islam",
|
||||
"304_temple_hindu",
|
||||
"305_temple_buddhist",
|
||||
"306_electrical_socket_eu",
|
||||
"307_electrical_socket_us",
|
||||
"308_bomb",
|
||||
"309_comments",
|
||||
"310_flower",
|
||||
"311_baseball",
|
||||
"312_rugby",
|
||||
"313_ax",
|
||||
"314_table_tennis",
|
||||
"315_bowling",
|
||||
"316_tree_conifer",
|
||||
"317_tree_deciduous",
|
||||
"318_more-items",
|
||||
"319_sort",
|
||||
"320_facebook",
|
||||
"321_twitter_t",
|
||||
"322_twitter",
|
||||
"323_buzz",
|
||||
"324_vimeo",
|
||||
"325_flickr",
|
||||
"326_last_fm",
|
||||
"327_rss",
|
||||
"328_skype",
|
||||
"329_e-mail",
|
||||
"330_instapaper",
|
||||
"331_evernote",
|
||||
"332_xing",
|
||||
"333_zootool",
|
||||
"334_dribbble",
|
||||
"335_deviantart",
|
||||
"336_read_it_later",
|
||||
"337_linked_in",
|
||||
"338_forrst",
|
||||
"339_pinboard",
|
||||
"340_behance",
|
||||
"341_github",
|
||||
"342_youtube",
|
||||
"343_skitch",
|
||||
"344_4square",
|
||||
"345_quora",
|
||||
"346_google_plus",
|
||||
"347_spootify",
|
||||
"348_stumbleupon",
|
||||
"349_readability",
|
||||
);
|
||||
}
|
||||
|
||||
function generateSprite($aSymbols, $iCols, $iRows, $iPngWidth, $iPngHeight, $sClassPrefix) {
|
||||
$iKey = 0;
|
||||
|
||||
$aSprites = array();
|
||||
$iSymbolWidth = $iPngWidth / $iCols;
|
||||
$iSymbolHeight = $iPngHeight / $iRows;
|
||||
|
||||
foreach($aSymbols as $sSymbol) {
|
||||
$aParts = explode("_", strtolower($sSymbol));
|
||||
array_shift($aParts);
|
||||
$sClass = $sClassPrefix . implode("-", $aParts);
|
||||
|
||||
$iRowNum = intval($iKey / $iCols);
|
||||
$iColNum = $iKey % $iCols;
|
||||
|
||||
$iX = $iColNum * $iSymbolWidth;
|
||||
$iY = $iRowNum * $iSymbolHeight;
|
||||
|
||||
$aSprites[] = array(
|
||||
"class" => $sClass,
|
||||
"x" => round($iX),
|
||||
"y" => round($iY),
|
||||
"width" => ceil($iSymbolWidth),
|
||||
"height" => ceil($iSymbolHeight)
|
||||
);
|
||||
|
||||
$iKey++;
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
# Generate CSS
|
||||
|
||||
$iSpriteWidth = ceil($iSymbolWidth);
|
||||
$iSpriteHeight = ceil($iSymbolHeight);
|
||||
|
||||
$sCss =<<<CSS
|
||||
.btn-large [class^="{$sClassPrefix}"] {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.btn-small [class^="{$sClassPrefix}"] {
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.nav-list [class^="{$sClassPrefix}"] {
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
[class^="{$sClassPrefix}"],
|
||||
[class*=" {$sClassPrefix}"] {
|
||||
display: inline-block;
|
||||
width: {$iSpriteWidth}px;
|
||||
height: {$iSpriteHeight}px;
|
||||
line-height: {$iSpriteHeight}px;
|
||||
vertical-align: text-top;
|
||||
background-image: url("{$sClassPrefix}dark.png");
|
||||
background-position: {$iSpriteWidth}px {$iSpriteHeight}px;
|
||||
background-repeat: no-repeat;
|
||||
*margin-right: .3em;
|
||||
}
|
||||
[class^="{$sClassPrefix}"]:last-child,
|
||||
[class*=" {$sClassPrefix}"]:last-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
|
||||
.{$sClassPrefix}white {
|
||||
background-image: url("{$sClassPrefix}white.png");
|
||||
}
|
||||
|
||||
CSS;
|
||||
|
||||
reset($aSprites);
|
||||
foreach($aSprites as $iKey => $aSprite) {
|
||||
$iX = (-1 * intval($aSprite["x"]));
|
||||
$iY = (-1 * intval($aSprite["y"]));
|
||||
|
||||
if($iX < 0) {
|
||||
$iX .= "px";
|
||||
}
|
||||
|
||||
if($iY < 0) {
|
||||
$iY .= "px";
|
||||
}
|
||||
|
||||
$sCss .= <<<CSS
|
||||
.{$aSprite["class"]} {
|
||||
background-position: {$iX} {$iY};
|
||||
}
|
||||
|
||||
CSS;
|
||||
}
|
||||
|
||||
$sCss = "\n" . "/* " . count($aSprites) . " glyphs, generated on " . strftime("%Y-%m-%d %H:%M:%S") . "; C=" . $iCols . "; R=" . $iRows . "; W=" . $iPngWidth . "; H=" . $iPngHeight . "; PREFIX=" . $sClassPrefix . " */\n" . $sCss;
|
||||
return $sCss;
|
||||
}
|
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 227 KiB |
Before Width: | Height: | Size: 13 KiB |
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
|
||||
}
|
|
@ -1,114 +0,0 @@
|
|||
{% autoescape false %}
|
||||
{% set url = 'http://baikal-server.com' %}
|
||||
<style>
|
||||
.label-intext { vertical-align: top;}
|
||||
</style>
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-circle-info"></i>Dashboard</h1>
|
||||
</header>
|
||||
|
||||
<section id="about">
|
||||
<div class="page-header">
|
||||
<h1>About this system</h1>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="span3">
|
||||
<h2>Version</h2>
|
||||
<p>This systems runs<br />
|
||||
Baïkal <span class="label label-info label-intext">{{ BAIKAL_VERSION }}</span>, <em>{{ PROJECT_PACKAGE }}</em> package<br />
|
||||
<small><a href="{{ url }}">{{ url }}</a></small>
|
||||
</p>
|
||||
</div>
|
||||
<div class="span3">
|
||||
<h2>Services</h2>
|
||||
{% if BAIKAL_CAL_ENABLED %}
|
||||
{% set caldavclass = 'label-success' %}
|
||||
{% set caldavtext = 'On' %}
|
||||
{% else %}
|
||||
{% set caldavclass = 'label-important' %}
|
||||
{% set caldavtext = 'Off' %}
|
||||
{% endif %}
|
||||
|
||||
{% if BAIKAL_CARD_ENABLED %}
|
||||
{% set carddavclass = 'label-success' %}
|
||||
{% set carddavtext = 'On' %}
|
||||
{% else %}
|
||||
{% set carddavclass = 'label-important' %}
|
||||
{% set carddavtext = 'Off' %}
|
||||
{% endif %}
|
||||
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Web admin</td>
|
||||
<td><span class="label label-success label-intext">On</span></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CalDAV</td>
|
||||
<td><span class="label {{ caldavclass }} label-intext">{{ caldavtext }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CardDAV</td>
|
||||
<td><span class="label {{ carddavclass }} label-intext">{{ carddavtext }}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="span6">
|
||||
<h2>License and credits</h2>
|
||||
<p>Baïkal is open source software licensed under the terms of the GNU GPL v3.</p>
|
||||
<p>Baïkal is based upon other open source projects.<br />Read the <a href="https://github.com/jeromeschneider/Baikal/blob/master/README.md" target="_blank">README.md</a> file to learn about that.</p>
|
||||
<p>Baïkal is developed by <a href="https://github.com/jeromeschneider" target="_blank">Jérôme Schneider</a>.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="statistics">
|
||||
<div class="page-header">
|
||||
<h1>Statistics</h1>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="span4">
|
||||
<h2>Users</h2>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Registered users</td>
|
||||
<td><span class="badge">{{ nbusers }}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="span4">
|
||||
<h2>CalDAV</h2>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Number of calendars</td>
|
||||
<td><span class="badge">{{ nbcalendars }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Number of events</td>
|
||||
<td><span class="badge">{{ nbevents }}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="span4">
|
||||
<h2>CardDAV</h2>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Number of address books</td>
|
||||
<td><span class="badge">{{ nbbooks }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Number of contacts</td>
|
||||
<td><span class="badge">{{ nbcontacts }}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endautoescape %}
|
|
@ -1,11 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-magic"></i>Baïkal Database setup</h1>
|
||||
<p class="lead">Configure Baïkal Database.</p>
|
||||
</header>
|
||||
|
||||
<a id="formid"></a>
|
||||
{{ message }}
|
||||
{{ form }}
|
||||
|
||||
{% endautoescape %}
|
|
@ -1,11 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-magic"></i>Baïkal initialization wizard</h1>
|
||||
<p class="lead">Configure your new Baïkal <strong>{{ baikalversion }}</strong> installation.</p>
|
||||
</header>
|
||||
|
||||
<a id="formid"></a>
|
||||
{{ message }}
|
||||
{{ form }}
|
||||
|
||||
{% endautoescape %}
|
|
@ -1,27 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-lock"></i>Authentication</h1>
|
||||
<p class="lead">Please authenticate to access Baïkal Web Admin.</p>
|
||||
</header>
|
||||
|
||||
{{ message }}
|
||||
|
||||
<form class="form-horizontal" action="{{ actionurl }}" method="post" enctype="multipart/formdata">
|
||||
<input type="hidden" name="{{ submittedflagname }}" value="1" />
|
||||
<fieldset>
|
||||
<p>
|
||||
<label for="login">Login</label>
|
||||
<input type="text" name="login" value="{{ login }}" />
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label for="password">Password</label>
|
||||
<input type="password" name="password" value="{{ password }}" />
|
||||
</p>
|
||||
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-primary">Authenticate</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
{% endautoescape %}
|
|
@ -1,23 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<div class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</a>
|
||||
<a class="brand" href="{{ homelink }}"><img style="vertical-align: text-top; line-height: 20px;" src="res/core/BaikalAdmin/Templates/Page/baikal-text-20.png" /> Web Admin</a>
|
||||
<div class="nav-collapse">
|
||||
<ul class="nav">
|
||||
<li class="{{ activehome }}"> <a href="{{ homelink }}">Dashboard</a></li>
|
||||
<li class="{{ activeusers }}"> <a href="{{ userslink }}">Users and resources</a></li>
|
||||
<li class="{{ activesettingsstandard }}"> <a href="{{ settingsstandardlink }}">Settings</a></li>
|
||||
<li class="{{ activesettingssystem }}"> <a href="{{ settingssystemlink }}">System settings</a></li>
|
||||
<li> <a href="{{ logoutlink }}"><i class="icon-eject icon-white"></i> Logout</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endautoescape %}
|
|
@ -1,7 +0,0 @@
|
|||
<div class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand"><img style="vertical-align: text-top; line-height: 20px;" src="res/core/BaikalAdmin/Templates/Page/baikal-text-20.png" /> Web Admin</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,7 +0,0 @@
|
|||
<div class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand"><img style="vertical-align: text-top; line-height: 20px;" src="res/core/BaikalAdmin/Templates/Page/baikal-text-20.png" /> Install Tool</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
Before Width: | Height: | Size: 1.4 KiB |
|
@ -1,55 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>{{ pagetitle }}</title>
|
||||
<base href="{{ baseurl }}" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
<!-- Le styles -->
|
||||
<link href="res/core/TwitterBootstrap/css/bootstrap.css" rel="stylesheet" />
|
||||
<link href="res/core/BaikalAdmin/GlyphiconsPro/glyphpro.css" rel="stylesheet" />
|
||||
<link href="res/core/BaikalAdmin/GlyphiconsPro/glyphpro-2x.css" rel="stylesheet" />
|
||||
<link href="res/core/BaikalAdmin/Templates/Page/style.css" rel="stylesheet" />
|
||||
<link href="res/core/TwitterBootstrap/css/bootstrap-responsive.css" rel="stylesheet" />
|
||||
|
||||
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="res/core/BaikalAdmin/html5.js"></script>
|
||||
<![endif]-->
|
||||
{{ head }}
|
||||
</head>
|
||||
<body>
|
||||
{{ navbar }}
|
||||
|
||||
<div class="container">
|
||||
{{ Payload }}
|
||||
</div> <!-- /container -->
|
||||
|
||||
<!-- Le javascript
|
||||
================================================== -->
|
||||
<!-- Placed at the end of the document so the pages load faster -->
|
||||
<script src="res/core/TwitterBootstrap/js/jquery-1.7.1.min.js"></script>
|
||||
<script src="res/core/TwitterBootstrap/js/bootstrap.min.js"></script>
|
||||
<script src="res/core/TwitterBootstrap/js/bootstrap-tooltip.js"></script>
|
||||
<script src="res/core/TwitterBootstrap/js/bootstrap-popover.js"></script>
|
||||
<script type="text/javascript">
|
||||
$("[rel=tooltip]").tooltip();
|
||||
$(".popover-hover").popover();
|
||||
$(".popover-focus").popover({
|
||||
trigger: 'focus'
|
||||
});
|
||||
$(".popover-focus-top").popover({
|
||||
trigger: 'focus',
|
||||
placement: 'top'
|
||||
});
|
||||
$(".popover-focus-bottom").popover({
|
||||
trigger: 'focus',
|
||||
placement: 'bottom'
|
||||
});
|
||||
</script>
|
||||
{{ javascript }}
|
||||
</body>
|
||||
</html>
|
||||
{% endautoescape %}
|
|
@ -1,83 +0,0 @@
|
|||
/* generics */
|
||||
|
||||
body {
|
||||
padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
|
||||
}
|
||||
|
||||
.table thead th {
|
||||
background-color: #777;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.table-striped tbody tr:nth-child(even) td, .table-striped tbody tr:nth-child(even) th {
|
||||
background-color: rgb(240, 240, 240);
|
||||
}
|
||||
|
||||
table .no-border-left { border-left: none !important;}
|
||||
table p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
p.lead { line-height: 40px;}
|
||||
|
||||
|
||||
/* Jumbotrons
|
||||
-------------------------------------------------- */
|
||||
.jumbotron {
|
||||
position: relative;
|
||||
}
|
||||
.jumbotron h1 {
|
||||
font-size: 40px;
|
||||
font-weight: bold;
|
||||
letter-spacing: -1px;
|
||||
line-height: 90px;
|
||||
}
|
||||
.jumbotron p {
|
||||
margin-bottom: 18px;
|
||||
font-weight: 300;
|
||||
}
|
||||
.jumbotron .btn-large {
|
||||
font-size: 20px;
|
||||
font-weight: normal;
|
||||
padding: 14px 24px;
|
||||
margin-right: 10px;
|
||||
-webkit-border-radius: 6px;
|
||||
-moz-border-radius: 6px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.jumbotron .btn-large small {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@media (max-width: 550px) {
|
||||
.jumbotron h1 {
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
letter-spacing: -1px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
p.lead {
|
||||
font-size: 14px;
|
||||
line-height: 14px;
|
||||
}
|
||||
|
||||
[class^="glyph2x-"],
|
||||
[class*=" glyph2x-"] {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Address books */
|
||||
table.addressbooks .col-displayname { width: 20%;}
|
||||
table.addressbooks .col-description { width: 55%;}
|
||||
table.addressbooks .col-actions { width: 25%;}
|
||||
|
||||
/* Calendars */
|
||||
table.calendars .col-displayname { width: 20%;}
|
||||
table.calendars .col-description { width: 55%;}
|
||||
table.calendars .col-actions { width: 25%;}
|
||||
|
||||
/* Users */
|
||||
table.users .col-id { width: 2%;}
|
||||
table.users .col-username { width: 45%;}
|
|
@ -1,7 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-adjust"></i>Baïkal settings</h1>
|
||||
</header>
|
||||
|
||||
{{ form }}
|
||||
{% endautoescape %}
|
|
@ -1,9 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-adjust"></i>Baïkal system settings</h1>
|
||||
</header>
|
||||
|
||||
{{ message }}
|
||||
{{ form }}
|
||||
|
||||
{% endautoescape %}
|
|
@ -1,36 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="{{ titleicon }}"></i>Address Books</h1>
|
||||
<p class="lead">Manage Address Books for<i class="{{ modelicon }}"></i><strong>{{ modellabel }}</strong>.</p>
|
||||
<p class="pull-left"><a href="{{ linkback }}" class="btn"><i class="icon-chevron-left"></i> Back to users list</a></p>
|
||||
<p class="pull-right"><a class="btn btn btn-inverse" href="{{ linknew }}"><i class="icon-white {{ addressbookicon }}"></i> + Add address book</a></p>
|
||||
</header>
|
||||
|
||||
<table class="table table-bordered table-striped addressbooks">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Display name</th>
|
||||
<th>Description</th>
|
||||
<th class="no-border-left"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for addressbook in addressbooks %}
|
||||
<tr>
|
||||
<td class="col-displayname"><i class="{{ addressbook.icon }}"></i>{{ addressbook.label|escape }}</td>
|
||||
<td class="col-description">{{ addressbook.description|escape }}</td>
|
||||
<td class="col-actions no-border-left">
|
||||
<p class="pull-right">
|
||||
<nobr><a class="btn btn-primary" href="{{ addressbook.linkedit }}"><i class="icon-edit icon-white"></i> Edit</a></nobr>
|
||||
<nobr><a class="btn btn-danger" href="{{ addressbook.linkdelete }}"><i class="icon-remove icon-white"></i> Delete</a></nobr>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<a id='form'></a>
|
||||
{{ messages }}
|
||||
{{ form }}
|
||||
{% endautoescape %}
|
|
@ -1,36 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="{{ titleicon }}"></i>Calendars</h1>
|
||||
<p class="lead">Manage Calendars for<i class="{{ modelicon }}"></i><strong>{{ modellabel }}</strong>.</p>
|
||||
<p class="pull-left"><a href="{{ linkback }}" class="btn"><i class="icon-chevron-left"></i> Back to users list</a></p>
|
||||
<p class="pull-right"><a class="btn btn btn-inverse" href="{{ linknew }}"><i class="icon-white {{ calendaricon }}"></i> + Add calendar</a></p>
|
||||
</header>
|
||||
|
||||
<table class="table table-bordered table-striped calendars">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Display name</th>
|
||||
<th>Description</th>
|
||||
<th class="no-border-left"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for calendar in calendars %}
|
||||
<tr>
|
||||
<td class="col-displayname"><i class="{{ calendar.icon }}"></i>{{ calendar.label|escape }}</td>
|
||||
<td class="col-description">{{ calendar.description|escape }}</td>
|
||||
<td class="col-actions no-border-left">
|
||||
<p class="pull-right">
|
||||
<nobr><a class="btn btn-primary" href="{{ calendar.linkedit }}"><i class="icon-edit icon-white"></i> Edit</a></nobr>
|
||||
<nobr><a class="btn btn-danger" href="{{ calendar.linkdelete }}"><i class="icon-remove icon-white"></i> Delete</a></nobr>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<a id='form'></a>
|
||||
{{ messages }}
|
||||
{{ form }}
|
||||
{% endautoescape %}
|
|
@ -1,30 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-group"></i>Users</h1>
|
||||
<p class="lead pull-left">Manage Baïkal user accounts, and associated resources.</p>
|
||||
<p class="lead pull-right"><a class="btn btn btn-inverse" href="{{ controller.linkNew() }}"><i class="icon-white {{ usericon }}"></i> + Add user</a></p>
|
||||
</header>
|
||||
|
||||
<table class="table table-bordered table-striped users">
|
||||
{% for user in users %}
|
||||
<tr>
|
||||
<td class="col-username">
|
||||
<i class="{{ usericon }}"></i> <strong>{{ user.username|escape }}</strong><br />
|
||||
{{ user.displayname|escape }} <a href="{{ user.mailtouri|escape }}"><{{ user.email|escape }}></a>
|
||||
</td>
|
||||
<td class="col-actions no-border-left">
|
||||
<p class="pull-right">
|
||||
<nobr><a class="btn" href="{{ user.linkcalendars }}"><i class="{{ calendaricon }}"></i> Calendars</a></nobr>
|
||||
<nobr><a class="btn" href="{{ user.linkaddressbooks }}"><i class="icon-book"></i> Address Books</a></nobr>
|
||||
<nobr><a class="btn btn-primary" href="{{ user.linkedit }}"><i class="icon-edit icon-white"></i> Edit</a></nobr>
|
||||
<nobr><a class="btn btn-danger" href="{{ user.linkdelete }}"><i class="icon-remove icon-white"></i> Delete</a></nobr>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
<a id='form'></a>
|
||||
{{ messages }}
|
||||
{{ form }}
|
||||
{% endautoescape %}
|
|
@ -1,8 +0,0 @@
|
|||
/*
|
||||
HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||
*/
|
||||
(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
|
||||
a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}</style>";
|
||||
c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
|
||||
"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);
|
||||
if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);
|
1
sources/Core/Resources/Web/TwitterBootstrap
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../Frameworks/TwitterBootstrap
|
2
sources/Specific/.htaccess
Normal file
|
@ -0,0 +1,2 @@
|
|||
Order allow,deny
|
||||
Deny from all
|
4
sources/Specific/db/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Ignore everything in this directory
|
||||
*
|
||||
# Except this file
|
||||
!.gitignore
|
16
sources/Specific/virtualhosts/baikal.apache2
Normal file
|
@ -0,0 +1,16 @@
|
|||
<VirtualHost *:80>
|
||||
|
||||
DocumentRoot /var/www/dav.mydomain.com/html
|
||||
ServerName dav.mydomain.com
|
||||
|
||||
RewriteEngine On
|
||||
RewriteRule /.well-known/carddav /card.php [R,L]
|
||||
RewriteRule /.well-known/caldav /cal.php [R,L]
|
||||
|
||||
<Directory "/var/www/dav.mydomain.com/html">
|
||||
Options None
|
||||
Options +FollowSymlinks
|
||||
AllowOverride All
|
||||
</Directory>
|
||||
|
||||
</VirtualHost>
|
31
sources/Specific/virtualhosts/baikal.nginx
Normal file
|
@ -0,0 +1,31 @@
|
|||
server {
|
||||
listen 80;
|
||||
server_name dav.mydomain.com;
|
||||
|
||||
root /var/www/dav.mydomain.com;
|
||||
index index.php;
|
||||
|
||||
rewrite ^/.well-known/caldav /cal.php redirect;
|
||||
rewrite ^/.well-known/carddav /card.php redirect;
|
||||
|
||||
charset utf-8;
|
||||
|
||||
location ~ /(\.ht|Core|Specific) {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
location ~ ^(.+\.php)(.*)$ {
|
||||
try_files $fastcgi_script_name =404;
|
||||
fastcgi_split_path_info ^(.+\.php)(.*)$;
|
||||
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
|
||||
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||
include /etc/nginx/fastcgi_params;
|
||||
}
|
||||
|
||||
error_page 500 502 503 504 /50x.html;
|
||||
location = /50x.html {
|
||||
root /var/www/nginx-default;
|
||||
}
|
||||
}
|
29
sources/composer.json
Normal file
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"name": "jeromeschneider/baikal",
|
||||
"description": "Baïkal is a lightweight CalDAV + CardDAV server based on PHP, SQLite and SabreDAV",
|
||||
"keywords": ["Framework", "WebDAV", "CalDAV", "CardDAV", "iCalendar"],
|
||||
"homepage": "http://code.google.com/p/sabredav/",
|
||||
"license" : "GPL-3.0",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Jérôme Schneider",
|
||||
"email": "mail@jeromeschneider.fr",
|
||||
"homepage" : "http://jerome.io",
|
||||
"role" : "Developer"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php" : ">=5.3.1",
|
||||
"sabre/dav" : "1.8.*"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-0" : {
|
||||
"Baikal" : "Core/Frameworks/",
|
||||
"Flake" : "Core/Frameworks/",
|
||||
"Formal" : "Core/Frameworks/"
|
||||
}
|
||||
},
|
||||
"support" : {
|
||||
"source" : "https://github.com/jeromeschneider/Baikal"
|
||||
}
|
||||
}
|
16
sources/html/.htaccess
Normal file
|
@ -0,0 +1,16 @@
|
|||
# Disabling cache management
|
||||
# that could cause problems with DAV requests
|
||||
# Useful only for Apache servers, with AllowOverride All
|
||||
# (ie, .htaccess files enabled)
|
||||
|
||||
# Allow HTTP headers with Apache/FastCGI
|
||||
# See http://code.google.com/p/sabredav/wiki/Authentication#Apache_+_(Fast)CGI
|
||||
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
|
||||
</IfModule>
|
||||
|
||||
<IfModule mod_expires.c>
|
||||
ExpiresActive Off
|
||||
</IfModule>
|
1
sources/html/admin/index.php
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../Core/Frameworks/BaikalAdmin/WWWRoot/index.php
|
1
sources/html/admin/install/index.php
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../../Core/Frameworks/BaikalAdmin/WWWRoot/install/index.php
|
1
sources/html/cal.php
Symbolic link
|
@ -0,0 +1 @@
|
|||
../Core/Frameworks/Baikal/WWWRoot/cal.php
|
1
sources/html/card.php
Symbolic link
|
@ -0,0 +1 @@
|
|||
../Core/Frameworks/Baikal/WWWRoot/card.php
|
1
sources/html/index.php
Symbolic link
|
@ -0,0 +1 @@
|
|||
../Core/Frameworks/Baikal/WWWRoot/index.php
|
1
sources/html/res/core
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../Core/Resources/Web
|
|
@ -1,461 +0,0 @@
|
|||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
define("COLUMNS", 10);
|
||||
define("ROWS", 35);
|
||||
define("MATRIXWIDTH", 400);
|
||||
define("MATRIXHEIGHT", 1400);
|
||||
|
||||
echo generateSprite(getSymbols(), COLUMNS, ROWS, MATRIXWIDTH, MATRIXHEIGHT, "glyph-");
|
||||
|
||||
function getSymbols() {
|
||||
# Glyphicons Png names, without extension
|
||||
return array(
|
||||
"000_glass",
|
||||
"001_leaf",
|
||||
"002_dog",
|
||||
"003_user",
|
||||
"004_girl",
|
||||
"005_car",
|
||||
"006_user_add",
|
||||
"007_user_remove",
|
||||
"008_film",
|
||||
"009_magic",
|
||||
"010_envelope",
|
||||
"011_camera",
|
||||
"012_heart",
|
||||
"013_beach_umbrella",
|
||||
"014_train",
|
||||
"015_print",
|
||||
"016_bin",
|
||||
"017_music",
|
||||
"018_note",
|
||||
"019_cogwheel",
|
||||
"020_home",
|
||||
"021_snowflake",
|
||||
"022_fire",
|
||||
"023_cogwheels",
|
||||
"024_parents",
|
||||
"025_binoculars",
|
||||
"026_road",
|
||||
"027_search",
|
||||
"028_cars",
|
||||
"029_notes_2",
|
||||
"030_pencil",
|
||||
"031_bus",
|
||||
"032_wifi_alt",
|
||||
"033_luggage",
|
||||
"034_old_man",
|
||||
"035_woman",
|
||||
"036_file",
|
||||
"037_credit",
|
||||
"038_airplane",
|
||||
"039_notes",
|
||||
"040_stats",
|
||||
"041_charts",
|
||||
"042_pie_chart",
|
||||
"043_group",
|
||||
"044_keys",
|
||||
"045_calendar",
|
||||
"046_router",
|
||||
"047_camera_small",
|
||||
"048_dislikes",
|
||||
"049_star",
|
||||
"050_link",
|
||||
"051_eye_open",
|
||||
"052_eye_close",
|
||||
"053_alarm",
|
||||
"054_clock",
|
||||
"055_stopwatch",
|
||||
"056_projector",
|
||||
"057_history",
|
||||
"058_truck",
|
||||
"059_cargo",
|
||||
"060_compass",
|
||||
"061_keynote",
|
||||
"062_attach",
|
||||
"063_power",
|
||||
"064_lightbulb",
|
||||
"065_tag",
|
||||
"066_tags",
|
||||
"067_cleaning",
|
||||
"068_ruller",
|
||||
"069_gift",
|
||||
"070_umbrella",
|
||||
"071_book",
|
||||
"072_bookmark",
|
||||
"073_signal",
|
||||
"074_cup",
|
||||
"075_stroller",
|
||||
"076_headphones",
|
||||
"077_headset",
|
||||
"078_warning_sign",
|
||||
"079_signal",
|
||||
"080_retweet",
|
||||
"081_refresh",
|
||||
"082_roundabout",
|
||||
"083_random",
|
||||
"084_heat",
|
||||
"085_repeat",
|
||||
"086_display",
|
||||
"087_log_book",
|
||||
"088_adress_book",
|
||||
"089_magnet",
|
||||
"090_table",
|
||||
"091_adjust",
|
||||
"092_tint",
|
||||
"093_crop",
|
||||
"094_vector_path_square",
|
||||
"095_vector_path_circle",
|
||||
"096_vector_path_polygon",
|
||||
"097_vector_path_line",
|
||||
"098_vector_path_curve",
|
||||
"099_vector_path_all",
|
||||
"100_font",
|
||||
"101_italic",
|
||||
"102_bold",
|
||||
"103_text_underline",
|
||||
"104_text_strike",
|
||||
"105_text_height",
|
||||
"106_text_width",
|
||||
"107_text_resize",
|
||||
"108_left_indent",
|
||||
"109_right_indent",
|
||||
"110_align_left",
|
||||
"111_align_center",
|
||||
"112_align_right",
|
||||
"113_justify",
|
||||
"114_list",
|
||||
"115_text_smaller",
|
||||
"116_text_bigger",
|
||||
"117_embed",
|
||||
"118_embed_close",
|
||||
"119_adjust",
|
||||
"120_message_full",
|
||||
"121_message_empty",
|
||||
"122_message_in",
|
||||
"123_message_out",
|
||||
"124_message_plus",
|
||||
"125_message_minus",
|
||||
"126_message_ban",
|
||||
"127_message_flag",
|
||||
"128_message_lock",
|
||||
"129_message_new",
|
||||
"130_inbox",
|
||||
"131_inbox_plus",
|
||||
"132_inbox_minus",
|
||||
"133_inbox_lock",
|
||||
"134_inbox_in",
|
||||
"135_inbox_out",
|
||||
"136_computer_locked",
|
||||
"137_computer_service",
|
||||
"138_computer_proces",
|
||||
"139_phone",
|
||||
"140_database_lock",
|
||||
"141_database_plus",
|
||||
"142_database_minus",
|
||||
"143_database_ban",
|
||||
"144_folder_open",
|
||||
"145_folder_plus",
|
||||
"146_folder_minus",
|
||||
"147_folder_lock",
|
||||
"148_folder_flag",
|
||||
"149_folder_new",
|
||||
"150_check",
|
||||
"151_edit",
|
||||
"152_new_window",
|
||||
"153_more_windows",
|
||||
"154_show_big_thumbnails",
|
||||
"155_show_thumbnails",
|
||||
"156_show_thumbnails_with_lines",
|
||||
"157_show_lines",
|
||||
"158_playlist",
|
||||
"159_picture",
|
||||
"160_imac",
|
||||
"161_macbook",
|
||||
"162_ipad",
|
||||
"163_iphone",
|
||||
"164_iphone_transfer",
|
||||
"165_iphone_exchange",
|
||||
"166_ipod",
|
||||
"167_ipod_shuffle",
|
||||
"168_ear_plugs",
|
||||
"169_albums",
|
||||
"170_step_backward",
|
||||
"171_fast_backward",
|
||||
"172_rewind",
|
||||
"173_play",
|
||||
"174_pause",
|
||||
"175_stop",
|
||||
"176_forward",
|
||||
"177_fast_forward",
|
||||
"178_step_forward",
|
||||
"179_eject",
|
||||
"180_facetime_video",
|
||||
"181_download_alt",
|
||||
"182_mute",
|
||||
"183_volume_down",
|
||||
"184_volume_up",
|
||||
"185_screenshot",
|
||||
"186_move",
|
||||
"187_more",
|
||||
"188_brightness_reduce",
|
||||
"189_brightness_increase",
|
||||
"190_circle_plus",
|
||||
"191_circle_minus",
|
||||
"192_circle_remove",
|
||||
"193_circle_ok",
|
||||
"194_circle_question_mark",
|
||||
"195_circle_info",
|
||||
"196_circle_exclamation_mark",
|
||||
"197_remove",
|
||||
"198_ok",
|
||||
"199_ban",
|
||||
"200_download",
|
||||
"201_upload",
|
||||
"202_shopping_cart",
|
||||
"203_lock",
|
||||
"204_unlock",
|
||||
"205_electricity",
|
||||
"206_ok_2",
|
||||
"207_remove_2",
|
||||
"208_cart_out",
|
||||
"209_cart_in",
|
||||
"210_left_arrow",
|
||||
"211_right_arrow",
|
||||
"212_down_arrow",
|
||||
"213_up_arrow",
|
||||
"214_resize_small",
|
||||
"215_resize_full",
|
||||
"216_circle_arrow_left",
|
||||
"217_circle_arrow_right",
|
||||
"218_circle_arrow_right",
|
||||
"219_circle_arrow_right",
|
||||
"220_play_button",
|
||||
"221_unshare",
|
||||
"222_share",
|
||||
"223_thin_right_arrow",
|
||||
"224_thin_arrow_left",
|
||||
"225_bluetooth",
|
||||
"226_euro",
|
||||
"227_usd",
|
||||
"228_bp",
|
||||
"229_retweet_2",
|
||||
"230_moon",
|
||||
"231_sun",
|
||||
"232_cloud",
|
||||
"233_direction",
|
||||
"234_brush",
|
||||
"235_pen",
|
||||
"236_zoom_in",
|
||||
"237_zoom_out",
|
||||
"238_pin",
|
||||
"239_riflescope",
|
||||
"240_rotation_lock",
|
||||
"241_flash",
|
||||
"242_google_maps",
|
||||
"243_anchor",
|
||||
"244_conversation",
|
||||
"245_chat",
|
||||
"246_male",
|
||||
"247_female",
|
||||
"248_asterisk",
|
||||
"249_divide",
|
||||
"250_snorkel_diving",
|
||||
"251_scuba_diving",
|
||||
"252_oxygen_bottle",
|
||||
"253_fins",
|
||||
"254_fishes",
|
||||
"255_boat",
|
||||
"256_delete_point",
|
||||
"257_sheriffs_-star",
|
||||
"258_qrcode",
|
||||
"259_barcode",
|
||||
"260_pool",
|
||||
"261_buoy",
|
||||
"262_spade",
|
||||
"263_bank",
|
||||
"264_vcard",
|
||||
"265_electrical_plug",
|
||||
"266_flag",
|
||||
"267_credit_card",
|
||||
"268_keyboard_wireless",
|
||||
"269_keyboard_wired",
|
||||
"270_shield",
|
||||
"271_ring",
|
||||
"272_cake",
|
||||
"273_drink",
|
||||
"274_beer",
|
||||
"275_fast_food",
|
||||
"276_cutlery",
|
||||
"277_pizza",
|
||||
"278_birthday_cake",
|
||||
"279_tablet",
|
||||
"280_settings",
|
||||
"281_bullets",
|
||||
"282_cardio",
|
||||
"283_t-shirt",
|
||||
"284_pants",
|
||||
"285_sweater",
|
||||
"286_fabric",
|
||||
"287_leather",
|
||||
"288_scissors",
|
||||
"289_podium",
|
||||
"290_skull",
|
||||
"291_celebration",
|
||||
"292_tea_kettle",
|
||||
"293_french_press",
|
||||
"294_coffe_cup",
|
||||
"295_pot",
|
||||
"296_grater",
|
||||
"297_kettle",
|
||||
"298_hospital",
|
||||
"299_hospital_h",
|
||||
"300_microphone",
|
||||
"301_webcam",
|
||||
"302_temple_christianity_church",
|
||||
"303_temple_islam",
|
||||
"304_temple_hindu",
|
||||
"305_temple_buddhist",
|
||||
"306_electrical_socket_eu",
|
||||
"307_electrical_socket_us",
|
||||
"308_bomb",
|
||||
"309_comments",
|
||||
"310_flower",
|
||||
"311_baseball",
|
||||
"312_rugby",
|
||||
"313_ax",
|
||||
"314_table_tennis",
|
||||
"315_bowling",
|
||||
"316_tree_conifer",
|
||||
"317_tree_deciduous",
|
||||
"318_more-items",
|
||||
"319_sort",
|
||||
"320_facebook",
|
||||
"321_twitter_t",
|
||||
"322_twitter",
|
||||
"323_buzz",
|
||||
"324_vimeo",
|
||||
"325_flickr",
|
||||
"326_last_fm",
|
||||
"327_rss",
|
||||
"328_skype",
|
||||
"329_e-mail",
|
||||
"330_instapaper",
|
||||
"331_evernote",
|
||||
"332_xing",
|
||||
"333_zootool",
|
||||
"334_dribbble",
|
||||
"335_deviantart",
|
||||
"336_read_it_later",
|
||||
"337_linked_in",
|
||||
"338_forrst",
|
||||
"339_pinboard",
|
||||
"340_behance",
|
||||
"341_github",
|
||||
"342_youtube",
|
||||
"343_skitch",
|
||||
"344_4square",
|
||||
"345_quora",
|
||||
"346_google_plus",
|
||||
"347_spootify",
|
||||
"348_stumbleupon",
|
||||
"349_readability",
|
||||
);
|
||||
}
|
||||
|
||||
function generateSprite($aSymbols, $iCols, $iRows, $iPngWidth, $iPngHeight, $sClassPrefix) {
|
||||
$iKey = 0;
|
||||
|
||||
$aSprites = array();
|
||||
$iSymbolWidth = $iPngWidth / $iCols;
|
||||
$iSymbolHeight = $iPngHeight / $iRows;
|
||||
|
||||
foreach($aSymbols as $sSymbol) {
|
||||
$aParts = explode("_", strtolower($sSymbol));
|
||||
array_shift($aParts);
|
||||
$sClass = $sClassPrefix . implode("-", $aParts);
|
||||
|
||||
$iRowNum = intval($iKey / $iCols);
|
||||
$iColNum = $iKey % $iCols;
|
||||
|
||||
$iX = $iColNum * $iSymbolWidth;
|
||||
$iY = $iRowNum * $iSymbolHeight;
|
||||
|
||||
$aSprites[] = array(
|
||||
"class" => $sClass,
|
||||
"x" => round($iX),
|
||||
"y" => round($iY),
|
||||
"width" => ceil($iSymbolWidth),
|
||||
"height" => ceil($iSymbolHeight)
|
||||
);
|
||||
|
||||
$iKey++;
|
||||
}
|
||||
|
||||
##########################################################################
|
||||
# Generate CSS
|
||||
|
||||
$iSpriteWidth = ceil($iSymbolWidth);
|
||||
$iSpriteHeight = ceil($iSymbolHeight);
|
||||
|
||||
$sCss =<<<CSS
|
||||
.btn-large [class^="{$sClassPrefix}"] {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.btn-small [class^="{$sClassPrefix}"] {
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
.nav-list [class^="{$sClassPrefix}"] {
|
||||
margin-right: 2px;
|
||||
}
|
||||
|
||||
[class^="{$sClassPrefix}"],
|
||||
[class*=" {$sClassPrefix}"] {
|
||||
display: inline-block;
|
||||
width: {$iSpriteWidth}px;
|
||||
height: {$iSpriteHeight}px;
|
||||
line-height: {$iSpriteHeight}px;
|
||||
vertical-align: text-top;
|
||||
background-image: url("{$sClassPrefix}dark.png");
|
||||
background-position: {$iSpriteWidth}px {$iSpriteHeight}px;
|
||||
background-repeat: no-repeat;
|
||||
*margin-right: .3em;
|
||||
}
|
||||
[class^="{$sClassPrefix}"]:last-child,
|
||||
[class*=" {$sClassPrefix}"]:last-child {
|
||||
*margin-left: 0;
|
||||
}
|
||||
|
||||
.{$sClassPrefix}white {
|
||||
background-image: url("{$sClassPrefix}white.png");
|
||||
}
|
||||
|
||||
CSS;
|
||||
|
||||
reset($aSprites);
|
||||
foreach($aSprites as $iKey => $aSprite) {
|
||||
$iX = (-1 * intval($aSprite["x"]));
|
||||
$iY = (-1 * intval($aSprite["y"]));
|
||||
|
||||
if($iX < 0) {
|
||||
$iX .= "px";
|
||||
}
|
||||
|
||||
if($iY < 0) {
|
||||
$iY .= "px";
|
||||
}
|
||||
|
||||
$sCss .= <<<CSS
|
||||
.{$aSprite["class"]} {
|
||||
background-position: {$iX} {$iY};
|
||||
}
|
||||
|
||||
CSS;
|
||||
}
|
||||
|
||||
$sCss = "\n" . "/* " . count($aSprites) . " glyphs, generated on " . strftime("%Y-%m-%d %H:%M:%S") . "; C=" . $iCols . "; R=" . $iRows . "; W=" . $iPngWidth . "; H=" . $iPngHeight . "; PREFIX=" . $sClassPrefix . " */\n" . $sCss;
|
||||
return $sCss;
|
||||
}
|
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 227 KiB |
Before Width: | Height: | Size: 13 KiB |
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
|
||||
}
|
|
@ -1,114 +0,0 @@
|
|||
{% autoescape false %}
|
||||
{% set url = 'http://baikal-server.com' %}
|
||||
<style>
|
||||
.label-intext { vertical-align: top;}
|
||||
</style>
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-circle-info"></i>Dashboard</h1>
|
||||
</header>
|
||||
|
||||
<section id="about">
|
||||
<div class="page-header">
|
||||
<h1>About this system</h1>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="span3">
|
||||
<h2>Version</h2>
|
||||
<p>This systems runs<br />
|
||||
Baïkal <span class="label label-info label-intext">{{ BAIKAL_VERSION }}</span>, <em>{{ PROJECT_PACKAGE }}</em> package<br />
|
||||
<small><a href="{{ url }}">{{ url }}</a></small>
|
||||
</p>
|
||||
</div>
|
||||
<div class="span3">
|
||||
<h2>Services</h2>
|
||||
{% if BAIKAL_CAL_ENABLED %}
|
||||
{% set caldavclass = 'label-success' %}
|
||||
{% set caldavtext = 'On' %}
|
||||
{% else %}
|
||||
{% set caldavclass = 'label-important' %}
|
||||
{% set caldavtext = 'Off' %}
|
||||
{% endif %}
|
||||
|
||||
{% if BAIKAL_CARD_ENABLED %}
|
||||
{% set carddavclass = 'label-success' %}
|
||||
{% set carddavtext = 'On' %}
|
||||
{% else %}
|
||||
{% set carddavclass = 'label-important' %}
|
||||
{% set carddavtext = 'Off' %}
|
||||
{% endif %}
|
||||
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Web admin</td>
|
||||
<td><span class="label label-success label-intext">On</span></p></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CalDAV</td>
|
||||
<td><span class="label {{ caldavclass }} label-intext">{{ caldavtext }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>CardDAV</td>
|
||||
<td><span class="label {{ carddavclass }} label-intext">{{ carddavtext }}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="span6">
|
||||
<h2>License and credits</h2>
|
||||
<p>Baïkal is open source software licensed under the terms of the GNU GPL v3.</p>
|
||||
<p>Baïkal is based upon other open source projects.<br />Read the <a href="https://github.com/jeromeschneider/Baikal/blob/master/README.md" target="_blank">README.md</a> file to learn about that.</p>
|
||||
<p>Baïkal is developed by <a href="https://github.com/jeromeschneider" target="_blank">Jérôme Schneider</a>.
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="statistics">
|
||||
<div class="page-header">
|
||||
<h1>Statistics</h1>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="span4">
|
||||
<h2>Users</h2>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Registered users</td>
|
||||
<td><span class="badge">{{ nbusers }}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="span4">
|
||||
<h2>CalDAV</h2>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Number of calendars</td>
|
||||
<td><span class="badge">{{ nbcalendars }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Number of events</td>
|
||||
<td><span class="badge">{{ nbevents }}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="span4">
|
||||
<h2>CardDAV</h2>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Number of address books</td>
|
||||
<td><span class="badge">{{ nbbooks }}</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Number of contacts</td>
|
||||
<td><span class="badge">{{ nbcontacts }}</span></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endautoescape %}
|
|
@ -1,11 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-magic"></i>Baïkal Database setup</h1>
|
||||
<p class="lead">Configure Baïkal Database.</p>
|
||||
</header>
|
||||
|
||||
<a id="formid"></a>
|
||||
{{ message }}
|
||||
{{ form }}
|
||||
|
||||
{% endautoescape %}
|
|
@ -1,11 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-magic"></i>Baïkal initialization wizard</h1>
|
||||
<p class="lead">Configure your new Baïkal <strong>{{ baikalversion }}</strong> installation.</p>
|
||||
</header>
|
||||
|
||||
<a id="formid"></a>
|
||||
{{ message }}
|
||||
{{ form }}
|
||||
|
||||
{% endautoescape %}
|
|
@ -1,27 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-lock"></i>Authentication</h1>
|
||||
<p class="lead">Please authenticate to access Baïkal Web Admin.</p>
|
||||
</header>
|
||||
|
||||
{{ message }}
|
||||
|
||||
<form class="form-horizontal" action="{{ actionurl }}" method="post" enctype="multipart/formdata">
|
||||
<input type="hidden" name="{{ submittedflagname }}" value="1" />
|
||||
<fieldset>
|
||||
<p>
|
||||
<label for="login">Login</label>
|
||||
<input type="text" name="login" value="{{ login }}" />
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<label for="password">Password</label>
|
||||
<input type="password" name="password" value="{{ password }}" />
|
||||
</p>
|
||||
|
||||
<div class="form-actions">
|
||||
<button type="submit" class="btn btn-primary">Authenticate</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</form>
|
||||
{% endautoescape %}
|
|
@ -1,23 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<div class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</a>
|
||||
<a class="brand" href="{{ homelink }}"><img style="vertical-align: text-top; line-height: 20px;" src="res/core/BaikalAdmin/Templates/Page/baikal-text-20.png" /> Web Admin</a>
|
||||
<div class="nav-collapse">
|
||||
<ul class="nav">
|
||||
<li class="{{ activehome }}"> <a href="{{ homelink }}">Dashboard</a></li>
|
||||
<li class="{{ activeusers }}"> <a href="{{ userslink }}">Users and resources</a></li>
|
||||
<li class="{{ activesettingsstandard }}"> <a href="{{ settingsstandardlink }}">Settings</a></li>
|
||||
<li class="{{ activesettingssystem }}"> <a href="{{ settingssystemlink }}">System settings</a></li>
|
||||
<li> <a href="{{ logoutlink }}"><i class="icon-eject icon-white"></i> Logout</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endautoescape %}
|
|
@ -1,7 +0,0 @@
|
|||
<div class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand"><img style="vertical-align: text-top; line-height: 20px;" src="res/core/BaikalAdmin/Templates/Page/baikal-text-20.png" /> Web Admin</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,7 +0,0 @@
|
|||
<div class="navbar navbar-fixed-top">
|
||||
<div class="navbar-inner">
|
||||
<div class="container">
|
||||
<a class="brand"><img style="vertical-align: text-top; line-height: 20px;" src="res/core/BaikalAdmin/Templates/Page/baikal-text-20.png" /> Install Tool</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
Before Width: | Height: | Size: 1.4 KiB |
|
@ -1,55 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>{{ pagetitle }}</title>
|
||||
<base href="{{ baseurl }}" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
<!-- Le styles -->
|
||||
<link href="res/core/TwitterBootstrap/css/bootstrap.css" rel="stylesheet" />
|
||||
<link href="res/core/BaikalAdmin/GlyphiconsPro/glyphpro.css" rel="stylesheet" />
|
||||
<link href="res/core/BaikalAdmin/GlyphiconsPro/glyphpro-2x.css" rel="stylesheet" />
|
||||
<link href="res/core/BaikalAdmin/Templates/Page/style.css" rel="stylesheet" />
|
||||
<link href="res/core/TwitterBootstrap/css/bootstrap-responsive.css" rel="stylesheet" />
|
||||
|
||||
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="res/core/BaikalAdmin/html5.js"></script>
|
||||
<![endif]-->
|
||||
{{ head }}
|
||||
</head>
|
||||
<body>
|
||||
{{ navbar }}
|
||||
|
||||
<div class="container">
|
||||
{{ Payload }}
|
||||
</div> <!-- /container -->
|
||||
|
||||
<!-- Le javascript
|
||||
================================================== -->
|
||||
<!-- Placed at the end of the document so the pages load faster -->
|
||||
<script src="res/core/TwitterBootstrap/js/jquery-1.7.1.min.js"></script>
|
||||
<script src="res/core/TwitterBootstrap/js/bootstrap.min.js"></script>
|
||||
<script src="res/core/TwitterBootstrap/js/bootstrap-tooltip.js"></script>
|
||||
<script src="res/core/TwitterBootstrap/js/bootstrap-popover.js"></script>
|
||||
<script type="text/javascript">
|
||||
$("[rel=tooltip]").tooltip();
|
||||
$(".popover-hover").popover();
|
||||
$(".popover-focus").popover({
|
||||
trigger: 'focus'
|
||||
});
|
||||
$(".popover-focus-top").popover({
|
||||
trigger: 'focus',
|
||||
placement: 'top'
|
||||
});
|
||||
$(".popover-focus-bottom").popover({
|
||||
trigger: 'focus',
|
||||
placement: 'bottom'
|
||||
});
|
||||
</script>
|
||||
{{ javascript }}
|
||||
</body>
|
||||
</html>
|
||||
{% endautoescape %}
|
|
@ -1,83 +0,0 @@
|
|||
/* generics */
|
||||
|
||||
body {
|
||||
padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */
|
||||
}
|
||||
|
||||
.table thead th {
|
||||
background-color: #777;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.table-striped tbody tr:nth-child(even) td, .table-striped tbody tr:nth-child(even) th {
|
||||
background-color: rgb(240, 240, 240);
|
||||
}
|
||||
|
||||
table .no-border-left { border-left: none !important;}
|
||||
table p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
p.lead { line-height: 40px;}
|
||||
|
||||
|
||||
/* Jumbotrons
|
||||
-------------------------------------------------- */
|
||||
.jumbotron {
|
||||
position: relative;
|
||||
}
|
||||
.jumbotron h1 {
|
||||
font-size: 40px;
|
||||
font-weight: bold;
|
||||
letter-spacing: -1px;
|
||||
line-height: 90px;
|
||||
}
|
||||
.jumbotron p {
|
||||
margin-bottom: 18px;
|
||||
font-weight: 300;
|
||||
}
|
||||
.jumbotron .btn-large {
|
||||
font-size: 20px;
|
||||
font-weight: normal;
|
||||
padding: 14px 24px;
|
||||
margin-right: 10px;
|
||||
-webkit-border-radius: 6px;
|
||||
-moz-border-radius: 6px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
.jumbotron .btn-large small {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@media (max-width: 550px) {
|
||||
.jumbotron h1 {
|
||||
font-size: 20px;
|
||||
font-weight: bold;
|
||||
letter-spacing: -1px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
p.lead {
|
||||
font-size: 14px;
|
||||
line-height: 14px;
|
||||
}
|
||||
|
||||
[class^="glyph2x-"],
|
||||
[class*=" glyph2x-"] {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Address books */
|
||||
table.addressbooks .col-displayname { width: 20%;}
|
||||
table.addressbooks .col-description { width: 55%;}
|
||||
table.addressbooks .col-actions { width: 25%;}
|
||||
|
||||
/* Calendars */
|
||||
table.calendars .col-displayname { width: 20%;}
|
||||
table.calendars .col-description { width: 55%;}
|
||||
table.calendars .col-actions { width: 25%;}
|
||||
|
||||
/* Users */
|
||||
table.users .col-id { width: 2%;}
|
||||
table.users .col-username { width: 45%;}
|
|
@ -1,7 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-adjust"></i>Baïkal settings</h1>
|
||||
</header>
|
||||
|
||||
{{ form }}
|
||||
{% endautoescape %}
|
|
@ -1,9 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-adjust"></i>Baïkal system settings</h1>
|
||||
</header>
|
||||
|
||||
{{ message }}
|
||||
{{ form }}
|
||||
|
||||
{% endautoescape %}
|
|
@ -1,36 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="{{ titleicon }}"></i>Address Books</h1>
|
||||
<p class="lead">Manage Address Books for<i class="{{ modelicon }}"></i><strong>{{ modellabel }}</strong>.</p>
|
||||
<p class="pull-left"><a href="{{ linkback }}" class="btn"><i class="icon-chevron-left"></i> Back to users list</a></p>
|
||||
<p class="pull-right"><a class="btn btn btn-inverse" href="{{ linknew }}"><i class="icon-white {{ addressbookicon }}"></i> + Add address book</a></p>
|
||||
</header>
|
||||
|
||||
<table class="table table-bordered table-striped addressbooks">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Display name</th>
|
||||
<th>Description</th>
|
||||
<th class="no-border-left"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for addressbook in addressbooks %}
|
||||
<tr>
|
||||
<td class="col-displayname"><i class="{{ addressbook.icon }}"></i>{{ addressbook.label|escape }}</td>
|
||||
<td class="col-description">{{ addressbook.description|escape }}</td>
|
||||
<td class="col-actions no-border-left">
|
||||
<p class="pull-right">
|
||||
<nobr><a class="btn btn-primary" href="{{ addressbook.linkedit }}"><i class="icon-edit icon-white"></i> Edit</a></nobr>
|
||||
<nobr><a class="btn btn-danger" href="{{ addressbook.linkdelete }}"><i class="icon-remove icon-white"></i> Delete</a></nobr>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<a id='form'></a>
|
||||
{{ messages }}
|
||||
{{ form }}
|
||||
{% endautoescape %}
|
|
@ -1,36 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="{{ titleicon }}"></i>Calendars</h1>
|
||||
<p class="lead">Manage Calendars for<i class="{{ modelicon }}"></i><strong>{{ modellabel }}</strong>.</p>
|
||||
<p class="pull-left"><a href="{{ linkback }}" class="btn"><i class="icon-chevron-left"></i> Back to users list</a></p>
|
||||
<p class="pull-right"><a class="btn btn btn-inverse" href="{{ linknew }}"><i class="icon-white {{ calendaricon }}"></i> + Add calendar</a></p>
|
||||
</header>
|
||||
|
||||
<table class="table table-bordered table-striped calendars">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Display name</th>
|
||||
<th>Description</th>
|
||||
<th class="no-border-left"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for calendar in calendars %}
|
||||
<tr>
|
||||
<td class="col-displayname"><i class="{{ calendar.icon }}"></i>{{ calendar.label|escape }}</td>
|
||||
<td class="col-description">{{ calendar.description|escape }}</td>
|
||||
<td class="col-actions no-border-left">
|
||||
<p class="pull-right">
|
||||
<nobr><a class="btn btn-primary" href="{{ calendar.linkedit }}"><i class="icon-edit icon-white"></i> Edit</a></nobr>
|
||||
<nobr><a class="btn btn-danger" href="{{ calendar.linkdelete }}"><i class="icon-remove icon-white"></i> Delete</a></nobr>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<a id='form'></a>
|
||||
{{ messages }}
|
||||
{{ form }}
|
||||
{% endautoescape %}
|
|
@ -1,30 +0,0 @@
|
|||
{% autoescape false %}
|
||||
<header class="jumbotron subhead" id="overview">
|
||||
<h1><i class="glyph2x-group"></i>Users</h1>
|
||||
<p class="lead pull-left">Manage Baïkal user accounts, and associated resources.</p>
|
||||
<p class="lead pull-right"><a class="btn btn btn-inverse" href="{{ controller.linkNew() }}"><i class="icon-white {{ usericon }}"></i> + Add user</a></p>
|
||||
</header>
|
||||
|
||||
<table class="table table-bordered table-striped users">
|
||||
{% for user in users %}
|
||||
<tr>
|
||||
<td class="col-username">
|
||||
<i class="{{ usericon }}"></i> <strong>{{ user.username|escape }}</strong><br />
|
||||
{{ user.displayname|escape }} <a href="{{ user.mailtouri|escape }}"><{{ user.email|escape }}></a>
|
||||
</td>
|
||||
<td class="col-actions no-border-left">
|
||||
<p class="pull-right">
|
||||
<nobr><a class="btn" href="{{ user.linkcalendars }}"><i class="{{ calendaricon }}"></i> Calendars</a></nobr>
|
||||
<nobr><a class="btn" href="{{ user.linkaddressbooks }}"><i class="icon-book"></i> Address Books</a></nobr>
|
||||
<nobr><a class="btn btn-primary" href="{{ user.linkedit }}"><i class="icon-edit icon-white"></i> Edit</a></nobr>
|
||||
<nobr><a class="btn btn-danger" href="{{ user.linkdelete }}"><i class="icon-remove icon-white"></i> Delete</a></nobr>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
|
||||
<a id='form'></a>
|
||||
{{ messages }}
|
||||
{{ form }}
|
||||
{% endautoescape %}
|
|
@ -1,8 +0,0 @@
|
|||
/*
|
||||
HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||
*/
|
||||
(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
|
||||
a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}</style>";
|
||||
c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
|
||||
"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);
|
||||
if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);
|
|
@ -1,690 +0,0 @@
|
|||
/*!
|
||||
* Bootstrap Responsive v2.0.2
|
||||
*
|
||||
* Copyright 2012 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 @twitter by @mdo and @fat.
|
||||
*/
|
||||
.clearfix {
|
||||
*zoom: 1;
|
||||
}
|
||||
.clearfix:before,
|
||||
.clearfix:after {
|
||||
display: table;
|
||||
content: "";
|
||||
}
|
||||
.clearfix:after {
|
||||
clear: both;
|
||||
}
|
||||
.hide-text {
|
||||
overflow: hidden;
|
||||
text-indent: 100%;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.input-block-level {
|
||||
display: block;
|
||||
width: 100%;
|
||||
min-height: 28px;
|
||||
/* Make inputs at least the height of their button counterpart */
|
||||
|
||||
/* Makes inputs behave like true block-level elements */
|
||||
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
-ms-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.hidden {
|
||||
display: none;
|
||||
visibility: hidden;
|
||||
}
|
||||
.visible-phone {
|
||||
display: none;
|
||||
}
|
||||
.visible-tablet {
|
||||
display: none;
|
||||
}
|
||||
.visible-desktop {
|
||||
display: block;
|
||||
}
|
||||
.hidden-phone {
|
||||
display: block;
|
||||
}
|
||||
.hidden-tablet {
|
||||
display: block;
|
||||
}
|
||||
.hidden-desktop {
|
||||
display: none;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.visible-phone {
|
||||
display: block;
|
||||
}
|
||||
.hidden-phone {
|
||||
display: none;
|
||||
}
|
||||
.hidden-desktop {
|
||||
display: block;
|
||||
}
|
||||
.visible-desktop {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) and (max-width: 979px) {
|
||||
.visible-tablet {
|
||||
display: block;
|
||||
}
|
||||
.hidden-tablet {
|
||||
display: none;
|
||||
}
|
||||
.hidden-desktop {
|
||||
display: block;
|
||||
}
|
||||
.visible-desktop {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
@media (max-width: 480px) {
|
||||
.nav-collapse {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
}
|
||||
.page-header h1 small {
|
||||
display: block;
|
||||
line-height: 18px;
|
||||
}
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
.form-horizontal .control-group > label {
|
||||
float: none;
|
||||
width: auto;
|
||||
padding-top: 0;
|
||||
text-align: left;
|
||||
}
|
||||
.form-horizontal .controls {
|
||||
margin-left: 0;
|
||||
}
|
||||
.form-horizontal .control-list {
|
||||
padding-top: 0;
|
||||
}
|
||||
.form-horizontal .form-actions {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.modal {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
left: 10px;
|
||||
right: 10px;
|
||||
width: auto;
|
||||
margin: 0;
|
||||
}
|
||||
.modal.fade.in {
|
||||
top: auto;
|
||||
}
|
||||
.modal-header .close {
|
||||
padding: 10px;
|
||||
margin: -10px;
|
||||
}
|
||||
.carousel-caption {
|
||||
position: static;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
body {
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
/* .navbar-fixed-top {
|
||||
margin-left: -20px;
|
||||
margin-right: -20px;
|
||||
}*/
|
||||
.container {
|
||||
width: auto;
|
||||
}
|
||||
.row-fluid {
|
||||
width: 100%;
|
||||
}
|
||||
.row {
|
||||
margin-left: 0;
|
||||
}
|
||||
.row > [class*="span"],
|
||||
.row-fluid > [class*="span"] {
|
||||
float: none;
|
||||
display: block;
|
||||
width: auto;
|
||||
margin: 0;
|
||||
}
|
||||
.thumbnails [class*="span"] {
|
||||
width: auto;
|
||||
}
|
||||
input[class*="span"],
|
||||
select[class*="span"],
|
||||
textarea[class*="span"],
|
||||
.uneditable-input {
|
||||
display: block;
|
||||
width: 100%;
|
||||
min-height: 28px;
|
||||
/* Make inputs at least the height of their button counterpart */
|
||||
|
||||
/* Makes inputs behave like true block-level elements */
|
||||
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
-ms-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.input-prepend input[class*="span"],
|
||||
.input-append input[class*="span"] {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) and (max-width: 979px) {
|
||||
.row {
|
||||
margin-left: -20px;
|
||||
*zoom: 1;
|
||||
}
|
||||
.row:before,
|
||||
.row:after {
|
||||
display: table;
|
||||
content: "";
|
||||
}
|
||||
.row:after {
|
||||
clear: both;
|
||||
}
|
||||
[class*="span"] {
|
||||
float: left;
|
||||
margin-left: 20px;
|
||||
}
|
||||
.container,
|
||||
.navbar-fixed-top .container,
|
||||
.navbar-fixed-bottom .container {
|
||||
width: 724px;
|
||||
}
|
||||
.span12 {
|
||||
width: 724px;
|
||||
}
|
||||
.span11 {
|
||||
width: 662px;
|
||||
}
|
||||
.span10 {
|
||||
width: 600px;
|
||||
}
|
||||
.span9 {
|
||||
width: 538px;
|
||||
}
|
||||
.span8 {
|
||||
width: 476px;
|
||||
}
|
||||
.span7 {
|
||||
width: 414px;
|
||||
}
|
||||
.span6 {
|
||||
width: 352px;
|
||||
}
|
||||
.span5 {
|
||||
width: 290px;
|
||||
}
|
||||
.span4 {
|
||||
width: 228px;
|
||||
}
|
||||
.span3 {
|
||||
width: 166px;
|
||||
}
|
||||
.span2 {
|
||||
width: 104px;
|
||||
}
|
||||
.span1 {
|
||||
width: 42px;
|
||||
}
|
||||
.offset12 {
|
||||
margin-left: 764px;
|
||||
}
|
||||
.offset11 {
|
||||
margin-left: 702px;
|
||||
}
|
||||
.offset10 {
|
||||
margin-left: 640px;
|
||||
}
|
||||
.offset9 {
|
||||
margin-left: 578px;
|
||||
}
|
||||
.offset8 {
|
||||
margin-left: 516px;
|
||||
}
|
||||
.offset7 {
|
||||
margin-left: 454px;
|
||||
}
|
||||
.offset6 {
|
||||
margin-left: 392px;
|
||||
}
|
||||
.offset5 {
|
||||
margin-left: 330px;
|
||||
}
|
||||
.offset4 {
|
||||
margin-left: 268px;
|
||||
}
|
||||
.offset3 {
|
||||
margin-left: 206px;
|
||||
}
|
||||
.offset2 {
|
||||
margin-left: 144px;
|
||||
}
|
||||
.offset1 {
|
||||
margin-left: 82px;
|
||||
}
|
||||
.row-fluid {
|
||||
width: 100%;
|
||||
*zoom: 1;
|
||||
}
|
||||
.row-fluid:before,
|
||||
.row-fluid:after {
|
||||
display: table;
|
||||
content: "";
|
||||
}
|
||||
.row-fluid:after {
|
||||
clear: both;
|
||||
}
|
||||
.row-fluid > [class*="span"] {
|
||||
float: left;
|
||||
margin-left: 2.762430939%;
|
||||
}
|
||||
.row-fluid > [class*="span"]:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
.row-fluid > .span12 {
|
||||
width: 99.999999993%;
|
||||
}
|
||||
.row-fluid > .span11 {
|
||||
width: 91.436464082%;
|
||||
}
|
||||
.row-fluid > .span10 {
|
||||
width: 82.87292817100001%;
|
||||
}
|
||||
.row-fluid > .span9 {
|
||||
width: 74.30939226%;
|
||||
}
|
||||
.row-fluid > .span8 {
|
||||
width: 65.74585634900001%;
|
||||
}
|
||||
.row-fluid > .span7 {
|
||||
width: 57.182320438000005%;
|
||||
}
|
||||
.row-fluid > .span6 {
|
||||
width: 48.618784527%;
|
||||
}
|
||||
.row-fluid > .span5 {
|
||||
width: 40.055248616%;
|
||||
}
|
||||
.row-fluid > .span4 {
|
||||
width: 31.491712705%;
|
||||
}
|
||||
.row-fluid > .span3 {
|
||||
width: 22.928176794%;
|
||||
}
|
||||
.row-fluid > .span2 {
|
||||
width: 14.364640883%;
|
||||
}
|
||||
.row-fluid > .span1 {
|
||||
width: 5.801104972%;
|
||||
}
|
||||
input,
|
||||
textarea,
|
||||
.uneditable-input {
|
||||
margin-left: 0;
|
||||
}
|
||||
input.span12, textarea.span12, .uneditable-input.span12 {
|
||||
width: 714px;
|
||||
}
|
||||
input.span11, textarea.span11, .uneditable-input.span11 {
|
||||
width: 652px;
|
||||
}
|
||||
input.span10, textarea.span10, .uneditable-input.span10 {
|
||||
width: 590px;
|
||||
}
|
||||
input.span9, textarea.span9, .uneditable-input.span9 {
|
||||
width: 528px;
|
||||
}
|
||||
input.span8, textarea.span8, .uneditable-input.span8 {
|
||||
width: 466px;
|
||||
}
|
||||
input.span7, textarea.span7, .uneditable-input.span7 {
|
||||
width: 404px;
|
||||
}
|
||||
input.span6, textarea.span6, .uneditable-input.span6 {
|
||||
width: 342px;
|
||||
}
|
||||
input.span5, textarea.span5, .uneditable-input.span5 {
|
||||
width: 280px;
|
||||
}
|
||||
input.span4, textarea.span4, .uneditable-input.span4 {
|
||||
width: 218px;
|
||||
}
|
||||
input.span3, textarea.span3, .uneditable-input.span3 {
|
||||
width: 156px;
|
||||
}
|
||||
input.span2, textarea.span2, .uneditable-input.span2 {
|
||||
width: 94px;
|
||||
}
|
||||
input.span1, textarea.span1, .uneditable-input.span1 {
|
||||
width: 32px;
|
||||
}
|
||||
}
|
||||
@media (max-width: 550px) {
|
||||
body {
|
||||
padding-top: 0;
|
||||
}
|
||||
.navbar-fixed-top {
|
||||
margin-left: -20px;
|
||||
margin-right: -20px;
|
||||
}
|
||||
.navbar-fixed-top {
|
||||
position: static;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
.navbar-fixed-top .navbar-inner {
|
||||
padding: 5px;
|
||||
}
|
||||
.navbar .container {
|
||||
width: auto;
|
||||
padding: 0;
|
||||
}
|
||||
.navbar .brand {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
margin: 0 0 0 -5px;
|
||||
}
|
||||
.navbar .nav-collapse {
|
||||
clear: left;
|
||||
}
|
||||
.navbar .nav {
|
||||
float: none;
|
||||
margin: 0 0 9px;
|
||||
}
|
||||
.navbar .nav > li {
|
||||
float: none;
|
||||
}
|
||||
.navbar .nav > li > a {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
.navbar .nav > .divider-vertical {
|
||||
display: none;
|
||||
}
|
||||
.navbar .nav .nav-header {
|
||||
color: #999999;
|
||||
text-shadow: none;
|
||||
}
|
||||
.navbar .nav > li > a,
|
||||
.navbar .dropdown-menu a {
|
||||
padding: 6px 15px;
|
||||
font-weight: bold;
|
||||
color: #999999;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.navbar .dropdown-menu li + li a {
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
.navbar .nav > li > a:hover,
|
||||
.navbar .dropdown-menu a:hover {
|
||||
background-color: #222222;
|
||||
}
|
||||
.navbar .dropdown-menu {
|
||||
position: static;
|
||||
top: auto;
|
||||
left: auto;
|
||||
float: none;
|
||||
display: block;
|
||||
max-width: none;
|
||||
margin: 0 15px;
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
-webkit-border-radius: 0;
|
||||
-moz-border-radius: 0;
|
||||
border-radius: 0;
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.navbar .dropdown-menu:before,
|
||||
.navbar .dropdown-menu:after {
|
||||
display: none;
|
||||
}
|
||||
.navbar .dropdown-menu .divider {
|
||||
display: none;
|
||||
}
|
||||
.navbar-form,
|
||||
.navbar-search {
|
||||
float: none;
|
||||
padding: 9px 15px;
|
||||
margin: 9px 0;
|
||||
border-top: 1px solid #222222;
|
||||
border-bottom: 1px solid #222222;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
|
||||
-moz-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);
|
||||
}
|
||||
.navbar .nav.pull-right {
|
||||
float: none;
|
||||
margin-left: 0;
|
||||
}
|
||||
.navbar-static .navbar-inner {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
.btn-navbar {
|
||||
display: block;
|
||||
}
|
||||
.nav-collapse {
|
||||
overflow: hidden;
|
||||
height: 0;
|
||||
}
|
||||
}
|
||||
@media (min-width: 980px) {
|
||||
.nav-collapse.collapse {
|
||||
height: auto !important;
|
||||
overflow: visible !important;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1200px) {
|
||||
.row {
|
||||
margin-left: -30px;
|
||||
*zoom: 1;
|
||||
}
|
||||
.row:before,
|
||||
.row:after {
|
||||
display: table;
|
||||
content: "";
|
||||
}
|
||||
.row:after {
|
||||
clear: both;
|
||||
}
|
||||
[class*="span"] {
|
||||
float: left;
|
||||
margin-left: 30px;
|
||||
}
|
||||
.container,
|
||||
.navbar-fixed-top .container,
|
||||
.navbar-fixed-bottom .container {
|
||||
width: 1170px;
|
||||
}
|
||||
.span12 {
|
||||
width: 1170px;
|
||||
}
|
||||
.span11 {
|
||||
width: 1070px;
|
||||
}
|
||||
.span10 {
|
||||
width: 970px;
|
||||
}
|
||||
.span9 {
|
||||
width: 870px;
|
||||
}
|
||||
.span8 {
|
||||
width: 770px;
|
||||
}
|
||||
.span7 {
|
||||
width: 670px;
|
||||
}
|
||||
.span6 {
|
||||
width: 570px;
|
||||
}
|
||||
.span5 {
|
||||
width: 470px;
|
||||
}
|
||||
.span4 {
|
||||
width: 370px;
|
||||
}
|
||||
.span3 {
|
||||
width: 270px;
|
||||
}
|
||||
.span2 {
|
||||
width: 170px;
|
||||
}
|
||||
.span1 {
|
||||
width: 70px;
|
||||
}
|
||||
.offset12 {
|
||||
margin-left: 1230px;
|
||||
}
|
||||
.offset11 {
|
||||
margin-left: 1130px;
|
||||
}
|
||||
.offset10 {
|
||||
margin-left: 1030px;
|
||||
}
|
||||
.offset9 {
|
||||
margin-left: 930px;
|
||||
}
|
||||
.offset8 {
|
||||
margin-left: 830px;
|
||||
}
|
||||
.offset7 {
|
||||
margin-left: 730px;
|
||||
}
|
||||
.offset6 {
|
||||
margin-left: 630px;
|
||||
}
|
||||
.offset5 {
|
||||
margin-left: 530px;
|
||||
}
|
||||
.offset4 {
|
||||
margin-left: 430px;
|
||||
}
|
||||
.offset3 {
|
||||
margin-left: 330px;
|
||||
}
|
||||
.offset2 {
|
||||
margin-left: 230px;
|
||||
}
|
||||
.offset1 {
|
||||
margin-left: 130px;
|
||||
}
|
||||
.row-fluid {
|
||||
width: 100%;
|
||||
*zoom: 1;
|
||||
}
|
||||
.row-fluid:before,
|
||||
.row-fluid:after {
|
||||
display: table;
|
||||
content: "";
|
||||
}
|
||||
.row-fluid:after {
|
||||
clear: both;
|
||||
}
|
||||
.row-fluid > [class*="span"] {
|
||||
float: left;
|
||||
margin-left: 2.564102564%;
|
||||
}
|
||||
.row-fluid > [class*="span"]:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
.row-fluid > .span12 {
|
||||
width: 100%;
|
||||
}
|
||||
.row-fluid > .span11 {
|
||||
width: 91.45299145300001%;
|
||||
}
|
||||
.row-fluid > .span10 {
|
||||
width: 82.905982906%;
|
||||
}
|
||||
.row-fluid > .span9 {
|
||||
width: 74.358974359%;
|
||||
}
|
||||
.row-fluid > .span8 {
|
||||
width: 65.81196581200001%;
|
||||
}
|
||||
.row-fluid > .span7 {
|
||||
width: 57.264957265%;
|
||||
}
|
||||
.row-fluid > .span6 {
|
||||
width: 48.717948718%;
|
||||
}
|
||||
.row-fluid > .span5 {
|
||||
width: 40.170940171000005%;
|
||||
}
|
||||
.row-fluid > .span4 {
|
||||
width: 31.623931624%;
|
||||
}
|
||||
.row-fluid > .span3 {
|
||||
width: 23.076923077%;
|
||||
}
|
||||
.row-fluid > .span2 {
|
||||
width: 14.529914530000001%;
|
||||
}
|
||||
.row-fluid > .span1 {
|
||||
width: 5.982905983%;
|
||||
}
|
||||
input,
|
||||
textarea,
|
||||
.uneditable-input {
|
||||
margin-left: 0;
|
||||
}
|
||||
input.span12, textarea.span12, .uneditable-input.span12 {
|
||||
width: 1160px;
|
||||
}
|
||||
input.span11, textarea.span11, .uneditable-input.span11 {
|
||||
width: 1060px;
|
||||
}
|
||||
input.span10, textarea.span10, .uneditable-input.span10 {
|
||||
width: 960px;
|
||||
}
|
||||
input.span9, textarea.span9, .uneditable-input.span9 {
|
||||
width: 860px;
|
||||
}
|
||||
input.span8, textarea.span8, .uneditable-input.span8 {
|
||||
width: 760px;
|
||||
}
|
||||
input.span7, textarea.span7, .uneditable-input.span7 {
|
||||
width: 660px;
|
||||
}
|
||||
input.span6, textarea.span6, .uneditable-input.span6 {
|
||||
width: 560px;
|
||||
}
|
||||
input.span5, textarea.span5, .uneditable-input.span5 {
|
||||
width: 460px;
|
||||
}
|
||||
input.span4, textarea.span4, .uneditable-input.span4 {
|
||||
width: 360px;
|
||||
}
|
||||
input.span3, textarea.span3, .uneditable-input.span3 {
|
||||
width: 260px;
|
||||
}
|
||||
input.span2, textarea.span2, .uneditable-input.span2 {
|
||||
width: 160px;
|
||||
}
|
||||
input.span1, textarea.span1, .uneditable-input.span1 {
|
||||
width: 60px;
|
||||
}
|
||||
.thumbnails {
|
||||
margin-left: -30px;
|
||||
}
|
||||
.thumbnails > li {
|
||||
margin-left: 30px;
|
||||
}
|
||||
}
|
3990
sources/res/core/TwitterBootstrap/css/bootstrap.css
vendored
|
@ -1,689 +0,0 @@
|
|||
article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
|
||||
audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
|
||||
audio:not([controls]){display:none;}
|
||||
html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
|
||||
a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
|
||||
a:hover,a:active{outline:0;}
|
||||
sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;}
|
||||
sup{top:-0.5em;}
|
||||
sub{bottom:-0.25em;}
|
||||
img{height:auto;border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;}
|
||||
button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;}
|
||||
button,input{*overflow:visible;line-height:normal;}
|
||||
button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;}
|
||||
button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
|
||||
input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;}
|
||||
input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;}
|
||||
textarea{overflow:auto;vertical-align:top;}
|
||||
.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";}
|
||||
.clearfix:after{clear:both;}
|
||||
.hide-text{overflow:hidden;text-indent:100%;white-space:nowrap;}
|
||||
.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;}
|
||||
body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;}
|
||||
a{color:#0088cc;text-decoration:none;}
|
||||
a:hover{color:#005580;text-decoration:underline;}
|
||||
.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";}
|
||||
.row:after{clear:both;}
|
||||
[class*="span"]{float:left;margin-left:20px;}
|
||||
.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;}
|
||||
.span12{width:940px;}
|
||||
.span11{width:860px;}
|
||||
.span10{width:780px;}
|
||||
.span9{width:700px;}
|
||||
.span8{width:620px;}
|
||||
.span7{width:540px;}
|
||||
.span6{width:460px;}
|
||||
.span5{width:380px;}
|
||||
.span4{width:300px;}
|
||||
.span3{width:220px;}
|
||||
.span2{width:140px;}
|
||||
.span1{width:60px;}
|
||||
.offset12{margin-left:980px;}
|
||||
.offset11{margin-left:900px;}
|
||||
.offset10{margin-left:820px;}
|
||||
.offset9{margin-left:740px;}
|
||||
.offset8{margin-left:660px;}
|
||||
.offset7{margin-left:580px;}
|
||||
.offset6{margin-left:500px;}
|
||||
.offset5{margin-left:420px;}
|
||||
.offset4{margin-left:340px;}
|
||||
.offset3{margin-left:260px;}
|
||||
.offset2{margin-left:180px;}
|
||||
.offset1{margin-left:100px;}
|
||||
.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";}
|
||||
.row-fluid:after{clear:both;}
|
||||
.row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;}
|
||||
.row-fluid>[class*="span"]:first-child{margin-left:0;}
|
||||
.row-fluid > .span12{width:99.99999998999999%;}
|
||||
.row-fluid > .span11{width:91.489361693%;}
|
||||
.row-fluid > .span10{width:82.97872339599999%;}
|
||||
.row-fluid > .span9{width:74.468085099%;}
|
||||
.row-fluid > .span8{width:65.95744680199999%;}
|
||||
.row-fluid > .span7{width:57.446808505%;}
|
||||
.row-fluid > .span6{width:48.93617020799999%;}
|
||||
.row-fluid > .span5{width:40.425531911%;}
|
||||
.row-fluid > .span4{width:31.914893614%;}
|
||||
.row-fluid > .span3{width:23.404255317%;}
|
||||
.row-fluid > .span2{width:14.89361702%;}
|
||||
.row-fluid > .span1{width:6.382978723%;}
|
||||
.container{margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";}
|
||||
.container:after{clear:both;}
|
||||
.container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";}
|
||||
.container-fluid:after{clear:both;}
|
||||
p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;}
|
||||
.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;}
|
||||
h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;}
|
||||
h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;}
|
||||
h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;}
|
||||
h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;}
|
||||
h4,h5,h6{line-height:18px;}
|
||||
h4{font-size:14px;}h4 small{font-size:12px;}
|
||||
h5{font-size:12px;}
|
||||
h6{font-size:11px;color:#999999;text-transform:uppercase;}
|
||||
.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;}
|
||||
.page-header h1{line-height:1;}
|
||||
ul,ol{padding:0;margin:0 0 9px 25px;}
|
||||
ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
|
||||
ul{list-style:disc;}
|
||||
ol{list-style:decimal;}
|
||||
li{line-height:18px;}
|
||||
ul.unstyled,ol.unstyled{margin-left:0;list-style:none;}
|
||||
dl{margin-bottom:18px;}
|
||||
dt,dd{line-height:18px;}
|
||||
dt{font-weight:bold;line-height:17px;}
|
||||
dd{margin-left:9px;}
|
||||
.dl-horizontal dt{float:left;clear:left;width:120px;text-align:right;}
|
||||
.dl-horizontal dd{margin-left:130px;}
|
||||
hr{margin:18px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;}
|
||||
strong{font-weight:bold;}
|
||||
em{font-style:italic;}
|
||||
.muted{color:#999999;}
|
||||
abbr[title]{border-bottom:1px dotted #ddd;cursor:help;}
|
||||
abbr.initialism{font-size:90%;text-transform:uppercase;}
|
||||
blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;}
|
||||
blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';}
|
||||
blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;}
|
||||
q:before,q:after,blockquote:before,blockquote:after{content:"";}
|
||||
address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;}
|
||||
small{font-size:100%;}
|
||||
cite{font-style:normal;}
|
||||
code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
|
||||
code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;}
|
||||
pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;}pre.prettyprint{margin-bottom:18px;}
|
||||
pre code{padding:0;color:inherit;background-color:transparent;border:0;}
|
||||
.pre-scrollable{max-height:340px;overflow-y:scroll;}
|
||||
form{margin:0 0 18px;}
|
||||
fieldset{padding:0;margin:0;border:0;}
|
||||
legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;}legend small{font-size:13.5px;color:#999999;}
|
||||
label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px;}
|
||||
input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;}
|
||||
label{display:block;margin-bottom:5px;color:#333333;}
|
||||
input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #cccccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
|
||||
.uneditable-textarea{width:auto;height:auto;}
|
||||
label input,label textarea,label select{display:block;}
|
||||
input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0 \9;}
|
||||
input[type="image"]{border:0;}
|
||||
input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
|
||||
input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;}
|
||||
select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;}
|
||||
input[type="file"]{line-height:18px \9;}
|
||||
select{width:220px;background-color:#ffffff;}
|
||||
select[multiple],select[size]{height:auto;}
|
||||
input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
|
||||
textarea{height:auto;}
|
||||
input[type="hidden"]{display:none;}
|
||||
.radio,.checkbox{padding-left:18px;}
|
||||
.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;}
|
||||
.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;}
|
||||
.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;}
|
||||
.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;}
|
||||
input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-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 linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;}
|
||||
input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;}
|
||||
input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
|
||||
.input-mini{width:60px;}
|
||||
.input-small{width:90px;}
|
||||
.input-medium{width:150px;}
|
||||
.input-large{width:210px;}
|
||||
.input-xlarge{width:270px;}
|
||||
.input-xxlarge{width:530px;}
|
||||
input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;}
|
||||
input,textarea,.uneditable-input{margin-left:0;}
|
||||
input.span12, textarea.span12, .uneditable-input.span12{width:930px;}
|
||||
input.span11, textarea.span11, .uneditable-input.span11{width:850px;}
|
||||
input.span10, textarea.span10, .uneditable-input.span10{width:770px;}
|
||||
input.span9, textarea.span9, .uneditable-input.span9{width:690px;}
|
||||
input.span8, textarea.span8, .uneditable-input.span8{width:610px;}
|
||||
input.span7, textarea.span7, .uneditable-input.span7{width:530px;}
|
||||
input.span6, textarea.span6, .uneditable-input.span6{width:450px;}
|
||||
input.span5, textarea.span5, .uneditable-input.span5{width:370px;}
|
||||
input.span4, textarea.span4, .uneditable-input.span4{width:290px;}
|
||||
input.span3, textarea.span3, .uneditable-input.span3{width:210px;}
|
||||
input.span2, textarea.span2, .uneditable-input.span2{width:130px;}
|
||||
input.span1, textarea.span1, .uneditable-input.span1{width:50px;}
|
||||
input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#eeeeee;border-color:#ddd;cursor:not-allowed;}
|
||||
.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;}
|
||||
.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;}
|
||||
.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;}
|
||||
.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;}
|
||||
.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392;}
|
||||
.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;}
|
||||
.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;}
|
||||
.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;}
|
||||
.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;}
|
||||
input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;}
|
||||
.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#eeeeee;border-top:1px solid #ddd;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";}
|
||||
.form-actions:after{clear:both;}
|
||||
.uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;}
|
||||
:-moz-placeholder{color:#999999;}
|
||||
::-webkit-input-placeholder{color:#999999;}
|
||||
.help-block,.help-inline{color:#555555;}
|
||||
.help-block{display:block;margin-bottom:9px;}
|
||||
.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;}
|
||||
.input-prepend,.input-append{margin-bottom:5px;}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{*margin-left:0;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;}
|
||||
.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;}
|
||||
.input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #ffffff;vertical-align:middle;background-color:#eeeeee;border:1px solid #ccc;}
|
||||
.input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
|
||||
.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;}
|
||||
.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;}
|
||||
.input-append input,.input-append select .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
|
||||
.input-append .uneditable-input{border-left-color:#eee;border-right-color:#ccc;}
|
||||
.input-append .add-on,.input-append .btn{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
|
||||
.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
|
||||
.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
|
||||
.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
|
||||
.search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;}
|
||||
.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;margin-bottom:0;}
|
||||
.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;}
|
||||
.form-search label,.form-inline label{display:inline-block;}
|
||||
.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;}
|
||||
.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;}
|
||||
.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px;}
|
||||
.control-group{margin-bottom:9px;}
|
||||
legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;}
|
||||
.form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";}
|
||||
.form-horizontal .control-group:after{clear:both;}
|
||||
.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right;}
|
||||
.form-horizontal .controls{margin-left:160px;*display:inline-block;*margin-left:0;*padding-left:20px;}
|
||||
.form-horizontal .help-block{margin-top:9px;margin-bottom:0;}
|
||||
.form-horizontal .form-actions{padding-left:160px;}
|
||||
table{max-width:100%;border-collapse:collapse;border-spacing:0;background-color:transparent;}
|
||||
.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;}
|
||||
.table th{font-weight:bold;}
|
||||
.table thead th{vertical-align:bottom;}
|
||||
.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;}
|
||||
.table tbody+tbody{border-top:2px solid #dddddd;}
|
||||
.table-condensed th,.table-condensed td{padding:4px 5px;}
|
||||
.table-bordered{border:1px solid #dddddd;border-left:0;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;}
|
||||
.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;}
|
||||
.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;}
|
||||
.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;}
|
||||
.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;}
|
||||
.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;}
|
||||
.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;}
|
||||
.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;}
|
||||
table .span1{float:none;width:44px;margin-left:0;}
|
||||
table .span2{float:none;width:124px;margin-left:0;}
|
||||
table .span3{float:none;width:204px;margin-left:0;}
|
||||
table .span4{float:none;width:284px;margin-left:0;}
|
||||
table .span5{float:none;width:364px;margin-left:0;}
|
||||
table .span6{float:none;width:444px;margin-left:0;}
|
||||
table .span7{float:none;width:524px;margin-left:0;}
|
||||
table .span8{float:none;width:604px;margin-left:0;}
|
||||
table .span9{float:none;width:684px;margin-left:0;}
|
||||
table .span10{float:none;width:764px;margin-left:0;}
|
||||
table .span11{float:none;width:844px;margin-left:0;}
|
||||
table .span12{float:none;width:924px;margin-left:0;}
|
||||
table .span13{float:none;width:1004px;margin-left:0;}
|
||||
table .span14{float:none;width:1084px;margin-left:0;}
|
||||
table .span15{float:none;width:1164px;margin-left:0;}
|
||||
table .span16{float:none;width:1244px;margin-left:0;}
|
||||
table .span17{float:none;width:1324px;margin-left:0;}
|
||||
table .span18{float:none;width:1404px;margin-left:0;}
|
||||
table .span19{float:none;width:1484px;margin-left:0;}
|
||||
table .span20{float:none;width:1564px;margin-left:0;}
|
||||
table .span21{float:none;width:1644px;margin-left:0;}
|
||||
table .span22{float:none;width:1724px;margin-left:0;}
|
||||
table .span23{float:none;width:1804px;margin-left:0;}
|
||||
table .span24{float:none;width:1884px;margin-left:0;}
|
||||
[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0;}
|
||||
.icon-white{background-image:url("../img/glyphicons-halflings-white.png");}
|
||||
.icon-glass{background-position:0 0;}
|
||||
.icon-music{background-position:-24px 0;}
|
||||
.icon-search{background-position:-48px 0;}
|
||||
.icon-envelope{background-position:-72px 0;}
|
||||
.icon-heart{background-position:-96px 0;}
|
||||
.icon-star{background-position:-120px 0;}
|
||||
.icon-star-empty{background-position:-144px 0;}
|
||||
.icon-user{background-position:-168px 0;}
|
||||
.icon-film{background-position:-192px 0;}
|
||||
.icon-th-large{background-position:-216px 0;}
|
||||
.icon-th{background-position:-240px 0;}
|
||||
.icon-th-list{background-position:-264px 0;}
|
||||
.icon-ok{background-position:-288px 0;}
|
||||
.icon-remove{background-position:-312px 0;}
|
||||
.icon-zoom-in{background-position:-336px 0;}
|
||||
.icon-zoom-out{background-position:-360px 0;}
|
||||
.icon-off{background-position:-384px 0;}
|
||||
.icon-signal{background-position:-408px 0;}
|
||||
.icon-cog{background-position:-432px 0;}
|
||||
.icon-trash{background-position:-456px 0;}
|
||||
.icon-home{background-position:0 -24px;}
|
||||
.icon-file{background-position:-24px -24px;}
|
||||
.icon-time{background-position:-48px -24px;}
|
||||
.icon-road{background-position:-72px -24px;}
|
||||
.icon-download-alt{background-position:-96px -24px;}
|
||||
.icon-download{background-position:-120px -24px;}
|
||||
.icon-upload{background-position:-144px -24px;}
|
||||
.icon-inbox{background-position:-168px -24px;}
|
||||
.icon-play-circle{background-position:-192px -24px;}
|
||||
.icon-repeat{background-position:-216px -24px;}
|
||||
.icon-refresh{background-position:-240px -24px;}
|
||||
.icon-list-alt{background-position:-264px -24px;}
|
||||
.icon-lock{background-position:-287px -24px;}
|
||||
.icon-flag{background-position:-312px -24px;}
|
||||
.icon-headphones{background-position:-336px -24px;}
|
||||
.icon-volume-off{background-position:-360px -24px;}
|
||||
.icon-volume-down{background-position:-384px -24px;}
|
||||
.icon-volume-up{background-position:-408px -24px;}
|
||||
.icon-qrcode{background-position:-432px -24px;}
|
||||
.icon-barcode{background-position:-456px -24px;}
|
||||
.icon-tag{background-position:0 -48px;}
|
||||
.icon-tags{background-position:-25px -48px;}
|
||||
.icon-book{background-position:-48px -48px;}
|
||||
.icon-bookmark{background-position:-72px -48px;}
|
||||
.icon-print{background-position:-96px -48px;}
|
||||
.icon-camera{background-position:-120px -48px;}
|
||||
.icon-font{background-position:-144px -48px;}
|
||||
.icon-bold{background-position:-167px -48px;}
|
||||
.icon-italic{background-position:-192px -48px;}
|
||||
.icon-text-height{background-position:-216px -48px;}
|
||||
.icon-text-width{background-position:-240px -48px;}
|
||||
.icon-align-left{background-position:-264px -48px;}
|
||||
.icon-align-center{background-position:-288px -48px;}
|
||||
.icon-align-right{background-position:-312px -48px;}
|
||||
.icon-align-justify{background-position:-336px -48px;}
|
||||
.icon-list{background-position:-360px -48px;}
|
||||
.icon-indent-left{background-position:-384px -48px;}
|
||||
.icon-indent-right{background-position:-408px -48px;}
|
||||
.icon-facetime-video{background-position:-432px -48px;}
|
||||
.icon-picture{background-position:-456px -48px;}
|
||||
.icon-pencil{background-position:0 -72px;}
|
||||
.icon-map-marker{background-position:-24px -72px;}
|
||||
.icon-adjust{background-position:-48px -72px;}
|
||||
.icon-tint{background-position:-72px -72px;}
|
||||
.icon-edit{background-position:-96px -72px;}
|
||||
.icon-share{background-position:-120px -72px;}
|
||||
.icon-check{background-position:-144px -72px;}
|
||||
.icon-move{background-position:-168px -72px;}
|
||||
.icon-step-backward{background-position:-192px -72px;}
|
||||
.icon-fast-backward{background-position:-216px -72px;}
|
||||
.icon-backward{background-position:-240px -72px;}
|
||||
.icon-play{background-position:-264px -72px;}
|
||||
.icon-pause{background-position:-288px -72px;}
|
||||
.icon-stop{background-position:-312px -72px;}
|
||||
.icon-forward{background-position:-336px -72px;}
|
||||
.icon-fast-forward{background-position:-360px -72px;}
|
||||
.icon-step-forward{background-position:-384px -72px;}
|
||||
.icon-eject{background-position:-408px -72px;}
|
||||
.icon-chevron-left{background-position:-432px -72px;}
|
||||
.icon-chevron-right{background-position:-456px -72px;}
|
||||
.icon-plus-sign{background-position:0 -96px;}
|
||||
.icon-minus-sign{background-position:-24px -96px;}
|
||||
.icon-remove-sign{background-position:-48px -96px;}
|
||||
.icon-ok-sign{background-position:-72px -96px;}
|
||||
.icon-question-sign{background-position:-96px -96px;}
|
||||
.icon-info-sign{background-position:-120px -96px;}
|
||||
.icon-screenshot{background-position:-144px -96px;}
|
||||
.icon-remove-circle{background-position:-168px -96px;}
|
||||
.icon-ok-circle{background-position:-192px -96px;}
|
||||
.icon-ban-circle{background-position:-216px -96px;}
|
||||
.icon-arrow-left{background-position:-240px -96px;}
|
||||
.icon-arrow-right{background-position:-264px -96px;}
|
||||
.icon-arrow-up{background-position:-289px -96px;}
|
||||
.icon-arrow-down{background-position:-312px -96px;}
|
||||
.icon-share-alt{background-position:-336px -96px;}
|
||||
.icon-resize-full{background-position:-360px -96px;}
|
||||
.icon-resize-small{background-position:-384px -96px;}
|
||||
.icon-plus{background-position:-408px -96px;}
|
||||
.icon-minus{background-position:-433px -96px;}
|
||||
.icon-asterisk{background-position:-456px -96px;}
|
||||
.icon-exclamation-sign{background-position:0 -120px;}
|
||||
.icon-gift{background-position:-24px -120px;}
|
||||
.icon-leaf{background-position:-48px -120px;}
|
||||
.icon-fire{background-position:-72px -120px;}
|
||||
.icon-eye-open{background-position:-96px -120px;}
|
||||
.icon-eye-close{background-position:-120px -120px;}
|
||||
.icon-warning-sign{background-position:-144px -120px;}
|
||||
.icon-plane{background-position:-168px -120px;}
|
||||
.icon-calendar{background-position:-192px -120px;}
|
||||
.icon-random{background-position:-216px -120px;}
|
||||
.icon-comment{background-position:-240px -120px;}
|
||||
.icon-magnet{background-position:-264px -120px;}
|
||||
.icon-chevron-up{background-position:-288px -120px;}
|
||||
.icon-chevron-down{background-position:-313px -119px;}
|
||||
.icon-retweet{background-position:-336px -120px;}
|
||||
.icon-shopping-cart{background-position:-360px -120px;}
|
||||
.icon-folder-close{background-position:-384px -120px;}
|
||||
.icon-folder-open{background-position:-408px -120px;}
|
||||
.icon-resize-vertical{background-position:-432px -119px;}
|
||||
.icon-resize-horizontal{background-position:-456px -118px;}
|
||||
.dropdown{position:relative;}
|
||||
.dropdown-toggle{*margin-bottom:-3px;}
|
||||
.dropdown-toggle:active,.open .dropdown-toggle{outline:0;}
|
||||
.caret{display:inline-block;width:0;height:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"";}
|
||||
.dropdown .caret{margin-top:8px;margin-left:2px;}
|
||||
.dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);}
|
||||
.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.pull-right{right:0;left:auto;}
|
||||
.dropdown-menu .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;}
|
||||
.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#333333;white-space:nowrap;}
|
||||
.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;}
|
||||
.dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);}
|
||||
.dropdown.open .dropdown-menu{display:block;}
|
||||
.pull-right .dropdown-menu{left:auto;right:0;}
|
||||
.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"\2191";}
|
||||
.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;}
|
||||
.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
|
||||
.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-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-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
|
||||
.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
|
||||
.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;}
|
||||
.collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;}
|
||||
.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;}
|
||||
.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);border:1px solid #cccccc;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;*margin-left:.3em;}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;}
|
||||
.btn:active,.btn.active{background-color:#cccccc \9;}
|
||||
.btn:first-child{*margin-left:0;}
|
||||
.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;}
|
||||
.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;}
|
||||
.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;outline:0;}
|
||||
.btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
|
||||
.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
|
||||
.btn-large [class^="icon-"]{margin-top:1px;}
|
||||
.btn-small{padding:5px 9px;font-size:11px;line-height:16px;}
|
||||
.btn-small [class^="icon-"]{margin-top:-1px;}
|
||||
.btn-mini{padding:2px 6px;font-size:11px;line-height:14px;}
|
||||
.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;}
|
||||
.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);}
|
||||
.btn-primary{background-color:#0074cc;background-image:-moz-linear-gradient(top, #0088cc, #0055cc);background-image:-ms-linear-gradient(top, #0088cc, #0055cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));background-image:-webkit-linear-gradient(top, #0088cc, #0055cc);background-image:-o-linear-gradient(top, #0088cc, #0055cc);background-image:linear-gradient(top, #0088cc, #0055cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);border-color:#0055cc #0055cc #003580;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0055cc;}
|
||||
.btn-primary:active,.btn-primary.active{background-color:#004099 \9;}
|
||||
.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;}
|
||||
.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;}
|
||||
.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;}
|
||||
.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;}
|
||||
.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;}
|
||||
.btn-success:active,.btn-success.active{background-color:#408140 \9;}
|
||||
.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;}
|
||||
.btn-info:active,.btn-info.active{background-color:#24748c \9;}
|
||||
.btn-inverse{background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222222;}
|
||||
.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;}
|
||||
button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;}
|
||||
button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;}
|
||||
button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;}
|
||||
button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;}
|
||||
.btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";}
|
||||
.btn-group:after{clear:both;}
|
||||
.btn-group:first-child{*margin-left:0;}
|
||||
.btn-group+.btn-group{margin-left:5px;}
|
||||
.btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;}
|
||||
.btn-group .btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
|
||||
.btn-group .btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;}
|
||||
.btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;}
|
||||
.btn-group .btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;}
|
||||
.btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;}
|
||||
.btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;}
|
||||
.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;}
|
||||
.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:3px;*padding-bottom:3px;}
|
||||
.btn-group .btn-mini.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:1px;*padding-bottom:1px;}
|
||||
.btn-group .btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px;}
|
||||
.btn-group .btn-large.dropdown-toggle{padding-left:12px;padding-right:12px;}
|
||||
.btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
|
||||
.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);}
|
||||
.btn .caret{margin-top:7px;margin-left:0;}
|
||||
.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);}
|
||||
.btn-mini .caret{margin-top:5px;}
|
||||
.btn-small .caret{margin-top:6px;}
|
||||
.btn-large .caret{margin-top:6px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
|
||||
.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);}
|
||||
.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#c09853;}
|
||||
.alert-heading{color:inherit;}
|
||||
.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;}
|
||||
.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;}
|
||||
.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;}
|
||||
.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;}
|
||||
.alert-block{padding-top:14px;padding-bottom:14px;}
|
||||
.alert-block>p,.alert-block>ul{margin-bottom:0;}
|
||||
.alert-block p+p{margin-top:5px;}
|
||||
.nav{margin-left:0;margin-bottom:18px;list-style:none;}
|
||||
.nav>li>a{display:block;}
|
||||
.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;}
|
||||
.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;}
|
||||
.nav li+.nav-header{margin-top:9px;}
|
||||
.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;}
|
||||
.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}
|
||||
.nav-list>li>a{padding:3px 15px;}
|
||||
.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;}
|
||||
.nav-list [class^="icon-"]{margin-right:2px;}
|
||||
.nav-list .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;}
|
||||
.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";}
|
||||
.nav-tabs:after,.nav-pills:after{clear:both;}
|
||||
.nav-tabs>li,.nav-pills>li{float:left;}
|
||||
.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;}
|
||||
.nav-tabs{border-bottom:1px solid #ddd;}
|
||||
.nav-tabs>li{margin-bottom:-1px;}
|
||||
.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:18px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;}
|
||||
.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;}
|
||||
.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}
|
||||
.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#0088cc;}
|
||||
.nav-stacked>li{float:none;}
|
||||
.nav-stacked>li>a{margin-right:0;}
|
||||
.nav-tabs.nav-stacked{border-bottom:0;}
|
||||
.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
|
||||
.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}
|
||||
.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}
|
||||
.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;}
|
||||
.nav-pills.nav-stacked>li>a{margin-bottom:3px;}
|
||||
.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;}
|
||||
.nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;}
|
||||
.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
|
||||
.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;}
|
||||
.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580;}
|
||||
.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;border-bottom-color:#333333;}
|
||||
.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;}
|
||||
.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;}
|
||||
.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);}
|
||||
.tabs-stacked .open>a:hover{border-color:#999999;}
|
||||
.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";}
|
||||
.tabbable:after{clear:both;}
|
||||
.tab-content{display:table;width:100%;}
|
||||
.tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;}
|
||||
.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;}
|
||||
.tab-content>.active,.pill-content>.active{display:block;}
|
||||
.tabs-below .nav-tabs{border-top:1px solid #ddd;}
|
||||
.tabs-below .nav-tabs>li{margin-top:-1px;margin-bottom:0;}
|
||||
.tabs-below .nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below .nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;}
|
||||
.tabs-below .nav-tabs .active>a,.tabs-below .nav-tabs .active>a:hover{border-color:transparent #ddd #ddd #ddd;}
|
||||
.tabs-left .nav-tabs>li,.tabs-right .nav-tabs>li{float:none;}
|
||||
.tabs-left .nav-tabs>li>a,.tabs-right .nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;}
|
||||
.tabs-left .nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;}
|
||||
.tabs-left .nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;}
|
||||
.tabs-left .nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;}
|
||||
.tabs-left .nav-tabs .active>a,.tabs-left .nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;}
|
||||
.tabs-right .nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;}
|
||||
.tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;}
|
||||
.tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;}
|
||||
.tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;}
|
||||
.navbar{*position:relative;*z-index:2;overflow:visible;margin-bottom:18px;}
|
||||
.navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);}
|
||||
.navbar .container{width:auto;}
|
||||
.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;}
|
||||
.btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;}
|
||||
.btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);}
|
||||
.btn-navbar .icon-bar+.icon-bar{margin-top:3px;}
|
||||
.nav-collapse.collapse{height:auto;}
|
||||
.navbar{color:#999999;}.navbar .brand:hover{text-decoration:none;}
|
||||
.navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;}
|
||||
.navbar .navbar-text{margin-bottom:0;line-height:40px;}
|
||||
.navbar .btn,.navbar .btn-group{margin-top:5px;}
|
||||
.navbar .btn-group .btn{margin-top:0;}
|
||||
.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";}
|
||||
.navbar-form:after{clear:both;}
|
||||
.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;}
|
||||
.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0;}
|
||||
.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;}
|
||||
.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;}
|
||||
.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;background-color:#626262;border:1px solid #151515;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query:-moz-placeholder{color:#cccccc;}
|
||||
.navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;}
|
||||
.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;}
|
||||
.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;}
|
||||
.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;}
|
||||
.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;}
|
||||
.navbar-fixed-top{top:0;}
|
||||
.navbar-fixed-bottom{bottom:0;}
|
||||
.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;}
|
||||
.navbar .nav.pull-right{float:right;}
|
||||
.navbar .nav>li{display:block;float:left;}
|
||||
.navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}
|
||||
.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;}
|
||||
.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;}
|
||||
.navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;}
|
||||
.navbar .nav.pull-right{margin-left:10px;margin-right:0;}
|
||||
.navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;}
|
||||
.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;}
|
||||
.navbar-fixed-bottom .dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;}
|
||||
.navbar-fixed-bottom .dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;}
|
||||
.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;}
|
||||
.navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);}
|
||||
.navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;}
|
||||
.navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;}
|
||||
.navbar .nav.pull-right .dropdown-menu,.navbar .nav .dropdown-menu.pull-right{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before,.navbar .nav .dropdown-menu.pull-right:before{left:auto;right:12px;}
|
||||
.navbar .nav.pull-right .dropdown-menu:after,.navbar .nav .dropdown-menu.pull-right:after{left:auto;right:13px;}
|
||||
.breadcrumb{padding:7px 14px;margin:0 0 18px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;}
|
||||
.breadcrumb .divider{padding:0 5px;color:#999999;}
|
||||
.breadcrumb .active a{color:#333333;}
|
||||
.pagination{height:36px;margin:18px 0;}
|
||||
.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);}
|
||||
.pagination li{display:inline;}
|
||||
.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;}
|
||||
.pagination a:hover,.pagination .active a{background-color:#f5f5f5;}
|
||||
.pagination .active a{color:#999999;cursor:default;}
|
||||
.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;}
|
||||
.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
|
||||
.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
|
||||
.pagination-centered{text-align:center;}
|
||||
.pagination-right{text-align:right;}
|
||||
.pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";}
|
||||
.pager:after{clear:both;}
|
||||
.pager li{display:inline;}
|
||||
.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}
|
||||
.pager a:hover{text-decoration:none;background-color:#f5f5f5;}
|
||||
.pager .next a{float:right;}
|
||||
.pager .previous a{float:left;}
|
||||
.pager .disabled a,.pager .disabled a:hover{color:#999999;background-color:#fff;cursor:default;}
|
||||
.modal-open .dropdown-menu{z-index:2050;}
|
||||
.modal-open .dropdown.open{*z-index:2050;}
|
||||
.modal-open .popover{z-index:2060;}
|
||||
.modal-open .tooltip{z-index:2070;}
|
||||
.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;}
|
||||
.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);}
|
||||
.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;}
|
||||
.modal.fade.in{top:50%;}
|
||||
.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;}
|
||||
.modal-body{overflow-y:auto;max-height:400px;padding:15px;}
|
||||
.modal-form{margin-bottom:0;}
|
||||
.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";}
|
||||
.modal-footer:after{clear:both;}
|
||||
.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;}
|
||||
.modal-footer .btn-group .btn+.btn{margin-left:-1px;}
|
||||
.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);}
|
||||
.tooltip.top{margin-top:-2px;}
|
||||
.tooltip.right{margin-left:2px;}
|
||||
.tooltip.bottom{margin-top:2px;}
|
||||
.tooltip.left{margin-left:-2px;}
|
||||
.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
|
||||
.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
|
||||
.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
|
||||
.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
|
||||
.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
|
||||
.tooltip-arrow{position:absolute;width:0;height:0;}
|
||||
.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;}
|
||||
.popover.right{margin-left:5px;}
|
||||
.popover.bottom{margin-top:5px;}
|
||||
.popover.left{margin-left:-5px;}
|
||||
.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
|
||||
.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
|
||||
.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
|
||||
.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
|
||||
.popover .arrow{position:absolute;width:0;height:0;}
|
||||
.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);}
|
||||
.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;}
|
||||
.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;}
|
||||
.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";}
|
||||
.thumbnails:after{clear:both;}
|
||||
.thumbnails>li{float:left;margin:0 0 18px 20px;}
|
||||
.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);}
|
||||
a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);}
|
||||
.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;}
|
||||
.thumbnail .caption{padding:9px;}
|
||||
.label{padding:1px 4px 2px;font-size:10.998px;font-weight:bold;line-height:13px;color:#ffffff;vertical-align:middle;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
|
||||
.label:hover{color:#ffffff;text-decoration:none;}
|
||||
.label-important{background-color:#b94a48;}
|
||||
.label-important:hover{background-color:#953b39;}
|
||||
.label-warning{background-color:#f89406;}
|
||||
.label-warning:hover{background-color:#c67605;}
|
||||
.label-success{background-color:#468847;}
|
||||
.label-success:hover{background-color:#356635;}
|
||||
.label-info{background-color:#3a87ad;}
|
||||
.label-info:hover{background-color:#2d6987;}
|
||||
.label-inverse{background-color:#333333;}
|
||||
.label-inverse:hover{background-color:#1a1a1a;}
|
||||
.badge{padding:1px 9px 2px;font-size:12.025px;font-weight:bold;white-space:nowrap;color:#ffffff;background-color:#999999;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;}
|
||||
.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;}
|
||||
.badge-error{background-color:#b94a48;}
|
||||
.badge-error:hover{background-color:#953b39;}
|
||||
.badge-warning{background-color:#f89406;}
|
||||
.badge-warning:hover{background-color:#c67605;}
|
||||
.badge-success{background-color:#468847;}
|
||||
.badge-success:hover{background-color:#356635;}
|
||||
.badge-info{background-color:#3a87ad;}
|
||||
.badge-info:hover{background-color:#2d6987;}
|
||||
.badge-inverse{background-color:#333333;}
|
||||
.badge-inverse:hover{background-color:#1a1a1a;}
|
||||
@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-ms-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
|
||||
.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-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-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;}
|
||||
.progress-striped .bar{background-color:#149bdf;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:-ms-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:-o-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);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;}
|
||||
.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;}
|
||||
.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, 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);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);}
|
||||
.progress-danger.progress-striped .bar{background-color:#ee5f5b;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:-ms-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:-o-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-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);}
|
||||
.progress-success.progress-striped .bar{background-color:#62c462;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:-ms-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:-o-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-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);}
|
||||
.progress-info.progress-striped .bar{background-color:#5bc0de;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:-ms-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:-o-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-warning .bar{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);}
|
||||
.progress-warning.progress-striped .bar{background-color:#fbb450;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:-ms-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:-o-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);}
|
||||
.accordion{margin-bottom:18px;}
|
||||
.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
|
||||
.accordion-heading{border-bottom:0;}
|
||||
.accordion-heading .accordion-toggle{display:block;padding:8px 15px;}
|
||||
.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;}
|
||||
.carousel{position:relative;margin-bottom:18px;line-height:1;}
|
||||
.carousel-inner{overflow:hidden;width:100%;position:relative;}
|
||||
.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;}
|
||||
.carousel .item>img{display:block;line-height:1;}
|
||||
.carousel .active,.carousel .next,.carousel .prev{display:block;}
|
||||
.carousel .active{left:0;}
|
||||
.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;}
|
||||
.carousel .next{left:100%;}
|
||||
.carousel .prev{left:-100%;}
|
||||
.carousel .next.left,.carousel .prev.right{left:0;}
|
||||
.carousel .active.left{left:-100%;}
|
||||
.carousel .active.right{left:100%;}
|
||||
.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;}
|
||||
.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);}
|
||||
.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);}
|
||||
.carousel-caption h4,.carousel-caption p{color:#ffffff;}
|
||||
.hero-unit{padding:60px;margin-bottom:30px;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;}
|
||||
.hero-unit p{font-size:18px;font-weight:200;line-height:27px;color:inherit;}
|
||||
.pull-right{float:right;}
|
||||
.pull-left{float:left;}
|
||||
.hide{display:none;}
|
||||
.show{display:block;}
|
||||
.invisible{visibility:hidden;}
|
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 13 KiB |
|
@ -1,95 +0,0 @@
|
|||
/* ===========================================================
|
||||
* bootstrap-popover.js v2.0.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#popovers
|
||||
* ===========================================================
|
||||
* 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"
|
||||
|
||||
var Popover = function ( element, options ) {
|
||||
this.init('popover', element, options)
|
||||
}
|
||||
|
||||
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
|
||||
========================================== */
|
||||
|
||||
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
|
||||
|
||||
constructor: Popover
|
||||
|
||||
, setContent: function () {
|
||||
var $tip = this.tip()
|
||||
, title = this.getTitle()
|
||||
, content = this.getContent()
|
||||
|
||||
$tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
|
||||
$tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
|
||||
|
||||
$tip.removeClass('fade top bottom left right in')
|
||||
}
|
||||
|
||||
, hasContent: function () {
|
||||
return this.getTitle() || this.getContent()
|
||||
}
|
||||
|
||||
, getContent: function () {
|
||||
var content
|
||||
, $e = this.$element
|
||||
, o = this.options
|
||||
|
||||
content = $e.attr('data-content')
|
||||
|| (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
|
||||
|
||||
content = content.toString().replace(/(^\s*|\s*$)/, "")
|
||||
|
||||
return content
|
||||
}
|
||||
|
||||
, tip: function() {
|
||||
if (!this.$tip) {
|
||||
this.$tip = $(this.options.template)
|
||||
}
|
||||
return this.$tip
|
||||
}
|
||||
|
||||
})
|
||||
|
||||
|
||||
/* POPOVER PLUGIN DEFINITION
|
||||
* ======================= */
|
||||
|
||||
$.fn.popover = function ( option ) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('popover')
|
||||
, options = typeof option == 'object' && option
|
||||
if (!data) $this.data('popover', (data = new Popover(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.popover.Constructor = Popover
|
||||
|
||||
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
|
||||
placement: 'right'
|
||||
, content: ''
|
||||
, template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
|
||||
})
|
||||
|
||||
}( window.jQuery );
|
|
@ -1,270 +0,0 @@
|
|||
/* ===========================================================
|
||||
* bootstrap-tooltip.js v2.0.2
|
||||
* http://twitter.github.com/bootstrap/javascript.html#tooltips
|
||||
* Inspired by the original jQuery.tipsy by Jason Frame
|
||||
* ===========================================================
|
||||
* 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"
|
||||
|
||||
/* TOOLTIP PUBLIC CLASS DEFINITION
|
||||
* =============================== */
|
||||
|
||||
var Tooltip = function ( element, options ) {
|
||||
this.init('tooltip', element, options)
|
||||
}
|
||||
|
||||
Tooltip.prototype = {
|
||||
|
||||
constructor: Tooltip
|
||||
|
||||
, init: function ( type, element, options ) {
|
||||
var eventIn
|
||||
, eventOut
|
||||
|
||||
this.type = type
|
||||
this.$element = $(element)
|
||||
this.options = this.getOptions(options)
|
||||
this.enabled = true
|
||||
|
||||
if (this.options.trigger != 'manual') {
|
||||
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
|
||||
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
|
||||
this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
|
||||
this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
|
||||
}
|
||||
|
||||
this.options.selector ?
|
||||
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
|
||||
this.fixTitle()
|
||||
}
|
||||
|
||||
, getOptions: function ( options ) {
|
||||
options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
|
||||
|
||||
if (options.delay && typeof options.delay == 'number') {
|
||||
options.delay = {
|
||||
show: options.delay
|
||||
, hide: options.delay
|
||||
}
|
||||
}
|
||||
|
||||
return options
|
||||
}
|
||||
|
||||
, enter: function ( e ) {
|
||||
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
|
||||
|
||||
if (!self.options.delay || !self.options.delay.show) {
|
||||
self.show()
|
||||
} else {
|
||||
self.hoverState = 'in'
|
||||
setTimeout(function() {
|
||||
if (self.hoverState == 'in') {
|
||||
self.show()
|
||||
}
|
||||
}, self.options.delay.show)
|
||||
}
|
||||
}
|
||||
|
||||
, leave: function ( e ) {
|
||||
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
|
||||
|
||||
if (!self.options.delay || !self.options.delay.hide) {
|
||||
self.hide()
|
||||
} else {
|
||||
self.hoverState = 'out'
|
||||
setTimeout(function() {
|
||||
if (self.hoverState == 'out') {
|
||||
self.hide()
|
||||
}
|
||||
}, self.options.delay.hide)
|
||||
}
|
||||
}
|
||||
|
||||
, show: function () {
|
||||
var $tip
|
||||
, inside
|
||||
, pos
|
||||
, actualWidth
|
||||
, actualHeight
|
||||
, placement
|
||||
, tp
|
||||
|
||||
if (this.hasContent() && this.enabled) {
|
||||
$tip = this.tip()
|
||||
this.setContent()
|
||||
|
||||
if (this.options.animation) {
|
||||
$tip.addClass('fade')
|
||||
}
|
||||
|
||||
placement = typeof this.options.placement == 'function' ?
|
||||
this.options.placement.call(this, $tip[0], this.$element[0]) :
|
||||
this.options.placement
|
||||
|
||||
inside = /in/.test(placement)
|
||||
|
||||
$tip
|
||||
.remove()
|
||||
.css({ top: 0, left: 0, display: 'block' })
|
||||
.appendTo(inside ? this.$element : document.body)
|
||||
|
||||
pos = this.getPosition(inside)
|
||||
|
||||
actualWidth = $tip[0].offsetWidth
|
||||
actualHeight = $tip[0].offsetHeight
|
||||
|
||||
switch (inside ? placement.split(' ')[1] : placement) {
|
||||
case 'bottom':
|
||||
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
|
||||
break
|
||||
case 'top':
|
||||
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
|
||||
break
|
||||
case 'left':
|
||||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
|
||||
break
|
||||
case 'right':
|
||||
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
|
||||
break
|
||||
}
|
||||
|
||||
$tip
|
||||
.css(tp)
|
||||
.addClass(placement)
|
||||
.addClass('in')
|
||||
}
|
||||
}
|
||||
|
||||
, setContent: function () {
|
||||
var $tip = this.tip()
|
||||
$tip.find('.tooltip-inner').html(this.getTitle())
|
||||
$tip.removeClass('fade in top bottom left right')
|
||||
}
|
||||
|
||||
, hide: function () {
|
||||
var that = this
|
||||
, $tip = this.tip()
|
||||
|
||||
$tip.removeClass('in')
|
||||
|
||||
function removeWithAnimation() {
|
||||
var timeout = setTimeout(function () {
|
||||
$tip.off($.support.transition.end).remove()
|
||||
}, 500)
|
||||
|
||||
$tip.one($.support.transition.end, function () {
|
||||
clearTimeout(timeout)
|
||||
$tip.remove()
|
||||
})
|
||||
}
|
||||
|
||||
$.support.transition && this.$tip.hasClass('fade') ?
|
||||
removeWithAnimation() :
|
||||
$tip.remove()
|
||||
}
|
||||
|
||||
, fixTitle: function () {
|
||||
var $e = this.$element
|
||||
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
|
||||
$e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
|
||||
}
|
||||
}
|
||||
|
||||
, hasContent: function () {
|
||||
return this.getTitle()
|
||||
}
|
||||
|
||||
, getPosition: function (inside) {
|
||||
return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
|
||||
width: this.$element[0].offsetWidth
|
||||
, height: this.$element[0].offsetHeight
|
||||
})
|
||||
}
|
||||
|
||||
, getTitle: function () {
|
||||
var title
|
||||
, $e = this.$element
|
||||
, o = this.options
|
||||
|
||||
title = $e.attr('data-original-title')
|
||||
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
|
||||
|
||||
title = (title || '').toString().replace(/(^\s*|\s*$)/, "")
|
||||
|
||||
return title
|
||||
}
|
||||
|
||||
, tip: function () {
|
||||
return this.$tip = this.$tip || $(this.options.template)
|
||||
}
|
||||
|
||||
, validate: function () {
|
||||
if (!this.$element[0].parentNode) {
|
||||
this.hide()
|
||||
this.$element = null
|
||||
this.options = null
|
||||
}
|
||||
}
|
||||
|
||||
, enable: function () {
|
||||
this.enabled = true
|
||||
}
|
||||
|
||||
, disable: function () {
|
||||
this.enabled = false
|
||||
}
|
||||
|
||||
, toggleEnabled: function () {
|
||||
this.enabled = !this.enabled
|
||||
}
|
||||
|
||||
, toggle: function () {
|
||||
this[this.tip().hasClass('in') ? 'hide' : 'show']()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* TOOLTIP PLUGIN DEFINITION
|
||||
* ========================= */
|
||||
|
||||
$.fn.tooltip = function ( option ) {
|
||||
return this.each(function () {
|
||||
var $this = $(this)
|
||||
, data = $this.data('tooltip')
|
||||
, options = typeof option == 'object' && option
|
||||
if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
|
||||
if (typeof option == 'string') data[option]()
|
||||
})
|
||||
}
|
||||
|
||||
$.fn.tooltip.Constructor = Tooltip
|
||||
|
||||
$.fn.tooltip.defaults = {
|
||||
animation: true
|
||||
, delay: 0
|
||||
, selector: false
|
||||
, placement: 'top'
|
||||
, trigger: 'hover'
|
||||
, title: ''
|
||||
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
|
||||
}
|
||||
|
||||
}( window.jQuery );
|