Commit f2032c26 by 张恒

j

parents
node_modules
/.idea
.sass-cache/
.DS_Store
*.css.map
Thumbs.db
.phpstorm.meta.php
#Application/Common/Conf
\ No newline at end of file
<component name="ProjectDictionaryState">
<dictionary name="zhangheng" />
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="compass-library">
<CLASSES>
<root url="file:///usr/local/lib/ruby/gems/2.4.0/gems/compass-core-1.0.3" />
</CLASSES>
<SOURCES />
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JsFlowSettings">
<service-enabled>false</service-enabled>
<exe-path />
<annotation-enable>false</annotation-enable>
<other-services-enabled>false</other-services-enabled>
</component>
<component name="ProjectInspectionProfilesVisibleTreeState">
<entry key="Project Default">
<profile-state>
<expanded-state>
<State>
<id />
</State>
<State>
<id>CSS</id>
</State>
<State>
<id>Probable bugsCSS</id>
</State>
<State>
<id>RELAX NG</id>
</State>
<State>
<id>Sass/SCSS</id>
</State>
<State>
<id>XPath</id>
</State>
<State>
<id>XSLT</id>
</State>
</expanded-state>
<selected-state>
<State>
<id>SassScssResolvedByNameOnly</id>
</State>
</selected-state>
</profile-state>
</entry>
</component>
<component name="VagrantProjectSettings">
<option name="instanceFolder" value="" />
<option name="provider" value="" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/sx-prize.iml" filepath="$PROJECT_DIR$/.idea/sx-prize.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="CompassSettings">
<option name="compassConfigPath" value="$MODULE_DIR$/config.rb" />
<option name="compassExecutableFilePath" value="/usr/local/bin/compass" />
<option name="compassSupportEnabled" value="true" />
<option name="importPaths">
<list>
<option value="/usr/local/lib/ruby/gems/2.4.0/gems/compass-core-1.0.3/stylesheets" />
</list>
</option>
</component>
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module-library">
<library name="PHP Runtime" type="php">
<CLASSES>
<root url="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard" />
</CLASSES>
<SOURCES>
<root url="jar://$APPLICATION_HOME_DIR$/plugins/php/lib/php.jar!/stubs/standard" />
</SOURCES>
</library>
</orderEntry>
<orderEntry type="library" name="compass-library" level="project" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectTasksOptions">
<TaskOptions isEnabled="true">
<option name="arguments" value="compile /Users/zhangheng/Documents/xiangmu/sx-prize $UnixSeparators($FilePath$)$" />
<option name="checkSyntaxErrors" value="true" />
<option name="description" />
<option name="exitCodeBehavior" value="ERROR" />
<option name="fileExtension" value="scss" />
<option name="immediateSync" value="true" />
<option name="name" value="Compass SCSS" />
<option name="output" value="$PROJECT_DIR$" />
<option name="outputFilters">
<array />
</option>
<option name="outputFromStdout" value="false" />
<option name="program" value="/usr/local/bin/compass" />
<option name="scopeName" value="Project Files" />
<option name="trackOnlyRoot" value="true" />
<option name="workingDir" value="$PROJECT_DIR$" />
<envs />
</TaskOptions>
</component>
</project>
\ No newline at end of file
\ No newline at end of file
<?php
return array(
// 额外配置文件
'LOAD_EXT_CONFIG' => 'db,route',
// cookie签名使用,防止用户伪造
'COOKIE_SIGN' => 'your_cookie_sign_used_in_singed_cookie',
// 微信授权,通过key、token调用智达接口并验证智达返回数据
'AUTH_SUPPORT_FAKE_OPENID' => true,
'AUTH_APP_ID' => 'wx4c3c856ab83a946b',
'AUTH_CLIENT_ID' => 'zhida_app',
'AUTH_CLIENT_PASSWORD' => 'izhida',
/* CDN路径配置。配置之后可以在模版文件中使用__CDN__ */
// '__CDN__' => 'http://static3.izhida.cn/cdn1/dencare-photo/v1.1.5',
'__CDN__' => '/Public/static', // @readme <-- 上线时修改这里
'URL_MODEL' => 3,
'STORAGE_PATH' => WEB_ROOT_PATH . '/Data/Storage',
'DEFAULT_FILTER' => '', // 默认参数过滤方法 用于I函数...。注意这块不能修改!!!!
'MODULE_ALLOW_LIST' => array('Home', 'Cli', 'Api', 'User'),
'SHOW_PAGE_TRACE' => false,
'ERROR_PAGE' =>'/50x.html',
'SITE_URL' => 'http://' . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'moli.gnhj.izhida.cn'),
'PUBLISH_MODE' => 'production', // development,test,production
// 'UPLOAD_SITEIMG_QINIU' => array(
// 'maxSize' => 5 * 1024 * 1024,//文件大小
// 'rootPath' => './',
// 'saveName' => array('uniqid', ''),
// 'driver' => 'Qiniu',
// 'driverConfig' => array(
// 'accessKey' => 'ggMPohY9_87Q69nDYUMwvR7XqlLYAREH-btbJG3U',
// 'secrectKey' => 'OPzIqCWVMDs7tAYjPi9Hn7JkxBj2CtHARCCEnrdd',
// 'domain' => '7xou29.media1.z0.glb.clouddn.com',
// 'bucket' => 'zhida-stream',
//// 'domain' => '7xjtzd.com2.z0.glb.qiniucdn.com',
//// 'bucket' => 'zhida-yingxiaoyi',
// ),
// ),
);
\ No newline at end of file
<?php
return array(
'DB_TYPE' => 'mysql',
'DB_HOST' => 'localhost',
'DB_PORT' => '3306',
'DB_NAME' => 'dev_sx_20190705', // <--- 修改这里
'DB_USER' => 'dev', // <--- 修改这里
'DB_PWD' => '1q2w3e', // <--- 修改这里
'DB_PREFIX' => '',
'DB_CHARSET' => 'utf8mb4',
);
//return array(
// 'DB_TYPE' => 'mysql',
// 'DB_HOST' => 'izhidaicbc2.mysql.rds.aliyuncs.com',
// 'DB_PORT' => '3306',
// 'DB_NAME' => 'project_dencare_20170121_photo', // <--- 修改这里
// 'DB_USER' => 'zhida', // <--- 修改这里
// 'DB_PWD' => 'zhida_app_1212', // <--- 修改这里
// 'DB_PREFIX' => '',
// 'DB_CHARSET' => 'utf8mb4',
//);
\ No newline at end of file
\ No newline at end of file
<?php
/**
* 网站路由配置
* @package YiCms
* @author YiCms
* */
return array(
/* 路由设置 */
'URL_MODEL' => 3, //URL访问模式
'URL_ROUTER_ON' => true, //开启路由
'URL_HTML_SUFFIX' => 'shtml', //伪静态后缀
'URL_ROUTE_RULES' => array(//定义路由规则
'auth' => 'Home/Index/auth',
'sso_broker' => 'User/SSOBroker/index',
),
);
\ No newline at end of file
<?php
namespace Home\Controller;
use Think\Log;
use SignedCookie;
use Zhida\OAuthHelperV3;
trait ControllerTrait
{
protected function get_user_info_from_cookie()
{
if ($this->debug) {
$user = M('User')->find();
return $user;
}
$cookie_secret = C('cookie_sign');
$openid = \SignedCookie::get_cookie($this->cookie_uid_key, $cookie_secret, 86400 * 60);
if (!$openid) {
return false;
}
$user = M('User')->where(array('openid' => $openid))->find();
return $user;
}
protected function request_auth($redirect_url = '/')
{
$app_id = C('auth_app_id');
$client_id = C('auth_client_id');
$client_password = C('auth_client_password');
$support_fake_openid = C('AUTH_SUPPORT_FAKE_OPENID') ? '1' : '';
$helper = new OAuthHelperV3($app_id, $client_id, $client_password, $support_fake_openid);
$site_url = C('SITE_URL');
if (!$site_url) {
$sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
$site_url = $sys_protocal . $_SERVER['HTTP_HOST'];
}
$callback_url = "{$site_url}/auth?";
$state = 1;
SignedCookie::set_cookie("redirect_back", $redirect_url, C('cookie_sign'), 86400 * 60);
$auth_url = $helper->auth_url($callback_url, $this->auth_type, $state);
redirect($auth_url);
// var_dump($auth_url);
exit(0);
}
protected function get_url()
{
$sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
$php_self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
$path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
$relate_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $php_self . (isset($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : $path_info);
return $sys_protocal . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '') . $relate_url;
}
public function auth()
{
//如果是分享出去的链接,重新授权
if (!empty($_GET['from'])) {
$this->request_auth();
exit(0);
}
$app_id = C('auth_app_id');
$client_id = C('auth_client_id');
$client_password = C('auth_client_password');
$support_fake_openid = C('AUTH_SUPPORT_FAKE_OPENID') ? '1' : '';
$helper = new OAuthHelperV3($app_id, $client_id, $client_password, $support_fake_openid);
$check = $helper->check_callback_param_signature($_GET);
if (!$check) {
exit('auth failed');
}
$data = $helper->callback_data($_GET);
if (!$data['openid']) {
exit('auth failed');
}
$openid = $data['openid'];
if ($this->auth_type == OAuthHelperV3::SCOPE_BASE) {
$user = array(
'openid' => $openid
);
} else {
// $user = $data['user'];
unset($data['privilege']);
$user = array();
$user['openid'] = $data['user']['openid'];
$user['nickname'] = $data['user']['nickname'];
$user['region'] = $data['user']['city'];
// $user['city'] = $data['user']['city'];
// $user['sex'] = $data['user']['sex'];
$user['headimgurl'] = preg_replace('@(/0)$@', '/132', $data['user']['headimgurl']);
$user['info'] = json_encode($data);
}
SignedCookie::set_cookie($this->cookie_uid_key, $openid, C('cookie_sign'), 86400 * 60);
$old_user = M('User')->where(array('openid' => $openid))->find();
if ($old_user) {
M('User')->token(false)->where(array('openid' => $openid))->save($user);
} else {
$user['created_at'] = $_SERVER['REQUEST_TIME'];
// $user['reg_ip'] = $this->getIP();
// $user['last_visit'] = time();
$user['last_ip'] = $this->getIP();
M('User')->token(false)->add($user);
}
$_SESSION['is_wechat'] = 1;
$_SESSION['openid'] = $openid;
if ($data['state'] == 1) {
$redirect_url = SignedCookie::get_cookie("redirect_back", C('cookie_sign'), 86400 * 60);
if (empty($redirect_url)) {
// redirect("/");
exit(0);
}
cookie("redirect_back", null);
redirect($redirect_url);
exit(0);
}
cookie("redirect_back", null);
// redirect("/");
exit(0);
}
// protected function log_user_action($user_id, $action_name,
// $action_value_str,
// $action_value_int = null)
// {
// M('UserActionLog')->add(array(
// 'user_id' => $user_id,
// 'action_name' => $action_name,
// 'action_key' => hexdec(substr(md5($action_name), 0, 15)),
// 'action_value_str' => $action_value_str,
// 'action_value_int' => $action_value_int,
// 'created_at' => time(),
// ));
// }
function getIP()
{
if (isSet($_SERVER)) {
if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isSet($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv('HTTP_X_FORWARDED_FOR')) {
$realip = getenv('HTTP_X_FORWARDED_FOR');
} elseif (getenv('HTTP_CLIENT_IP')) {
$realip = getenv('HTTP_CLIENT_IP');
} else {
$realip = getenv('REMOTE_ADDR');
}
}
return current(explode(',', $realip));
}
function getTicketToken(){
$token =$this->getToken();
$res = file_get_contents( 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$token.'&type=wx_card' );
$res = json_decode( $res , true );
// echo 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$token.'&type=wx_card';
// print_r( $res );
if( $res['ticket'] ){
$replace = array();
$replace['cache_key'] = 'card_tickets';
$replace['cache_value'] = $res['ticket'];
$replace['expire_time'] = time() + $res['expires_in'];
return $res['ticket'];
}
}
function getToken(){
$res = file_get_contents( 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxb94a85a067854e61&secret=c5c89c3b6fbd8031b1533b012e981670');
$res = json_decode( $res , true );
if( $res['access_token'] ){
$replace = array();
$replace['cache_key'] = 'access_token';
$replace['cache_value'] = $res['access_token'];
$replace['expire_time'] = time() + $res['expires_in'] - 5;
return $res['access_token'];
}
}
function isWeixin()
{
//return true;
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {
return true;
}
return false;
}
public function debug_open()
{
session('X-DEBUG', 1);
echo 'success';
redirect("/");
}
public function debug_close()
{
session('X-DEBUG', null);
echo 'success';
}
public function test_magic()
{
cookie('X-PUB_MODE', 'development');
redirect("/");
}
}
\ No newline at end of file
<?php
namespace Home\Controller;
use Redis;
use Think\Upload\Driver\Qiniu\QiniuStorage;
use SignedCookie;
use Think\Controller;
use Zhida\OAuthHelperV3;
use Think\Log;
class IndexController extends Controller
{
private $auth_type = OAuthHelperV3::SCOPE_BASE;
// private $auth_type = OAuthHelperV3::SCOPE_USERINFO;
private $cookie_uid_key = 'mtime-laopao-v1';
private $debug = 1;
private $today;
use ControllerTrait;
public function _initialize()
{
$this->debug = $this->debug && session('X-DEBUG') ? true : false;
$pub_mode = C('PUBLISH_MODE');
if (ACTION_NAME != 'test_magic' && ACTION_NAME != 'debug_close' && ACTION_NAME != 'debug_open'
&& $pub_mode != 'production'
&& cookie('X-PUB_MODE') != 'development'
) {
header("Content-type: text/html; charset=utf-8");
echo '活动尚未开始,敬请期待';
exit(0);
}
$this->today = date('Ymd');
}
//$user = $this->get_user_info_from_cookie();
//if (!$user) {
//$this->ajaxReturn(array(
//'errcode' => 1,
//'errmsg' => '用户信息错误',
//));
//return;
//}
public function index()
{
$user = $this->get_user_info_from_cookie();
if (!$user) {
$this->request_auth($this->get_url());
return;
}
$this->display();
}
public function get_random_prize($user)
{
$v = rand(0, 1000000) / 1000000;
$today_ratio = 1;
if ($v > $today_ratio) {
return false;
}
$now = time();
$from = strtotime(date('Y-m-d', $now));
$to = strtotime(date('Y-m-d', $now + 86400));
$req_type = array();
$type_list = array(1);
foreach ($type_list as $type) {
$c = M('prize')->where(array(
'type' => $type,
'is_get' => 1,
))->count();
if ($type == 1) {
if ($c >= 1000) {
continue;
}
}
$req_type[] = $type;
}
if (empty($req_type)) {
return false;
}
$prize = M('Prize')->where(array(
'is_get' => 0,
'user_id' => 0,
'type' => array('in', $req_type),
))->order('rand()')->limit(1)->find();
if (!$prize) {
return false;
}
$result = M('Prize')->where(array(
'id' => $prize['id'],
'is_get' => 0,
'user_id' => 0,
))->save(array(
'is_get' => 1,
'user_id' => $user['id'],
'take_time' => $now,
'last_ip' => $this->getIP()
));
if ($result > 0) {
return $prize;
}
return false;
}
public function tryPrize()
{
$user = $this->get_user_info_from_cookie();
if (!$user) {
$this->ajaxReturn(array(
'errcode' => 1,
'errmsg' => '用户信息错误',
));
return;
}
$type_sate = $c = M('Sate')->where(array(
'id' => 1,
))->getField('sate');
if ($type_sate == 0) {
$this->ajaxReturn(array(
'errcode' => 1,
'errmsg' => '用户信息错误',
));
return;
}
$prize = M('Prize')->where(array(
'user_id' => $user['id']
))->find();
if ($prize) {
$this->ajaxReturn(array(
'errcode' => 0,
'errmsg' => null,
'data' => array(
'prize' => 1,
'url' => $prize['prize_url'],
'type'=>1,
)
));
return;
}
$ip = M('Prize')->where(array(
'last_ip' => $user['last_ip']
))->count();
if ($ip >= 9) {
$this->ajaxReturn(array(
'errcode' => 0,
'errmsg' => null,
'data' => array(
'prize' => 0,
)
));
return;
}
$prize = $this->get_random_prize($user);
if ($prize) {
$this->ajaxReturn(array(
'errcode' => 0,
'errmsg' => null,
'data' => array(
'prize' => 1,
'url' => $prize['prize_url'],
'type'=>0,
)
));
} else {
$this->ajaxReturn(array(
'errcode' => 0,
'errmsg' => null,
'data' => array(
'prize' => 0,
)
));
}
}
public function ceshi()
{
for ($i = 0; $i < 40; $i++) {
M('Prize')->add(array(
'prize_url' => 'https://www.baidu.com/',
'type' => 1
));
}
}
}
<!DOCTYPE html>
<html>
<head>
<meta name="apple-mobile-web-app-capable" content="yes">
<meta http-equiv="imagetoolbar" content="no">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1, user-scalable=no">
<!--禁止IOS识别号码 -->
<meta content="email=no" name="format-detection"/>
<script type="text/javascript" src="__CDN__/js/jquery-2.1.3.min.js"></script>
<script type="text/javascript">
if (/Android (\d+\.\d+)/.test(navigator.userAgent)) {
var version = parseFloat(RegExp.$1);
if (version > 2.3) {
var phoneScale = parseInt(window.screen.width) / 640;
document.write('<meta name="viewport" content="width=640, minimum-scale = ' + phoneScale + ', maximum-scale = ' + phoneScale + ', target-densitydpi=device-dpi">');
} else {
document.write('<meta name="viewport" content="width=640, target-densitydpi=device-dpi">');
}
} else {
document.write('<meta name="viewport" content="width=640, user-scalable=no, target-densitydpi=device-dpi">');
}
// (function (doc, win) {
// var docEl = doc.documentElement,
// resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
// recalc = function () {
// var clientWidth = docEl.clientWidth;
// if (!clientWidth) return;
// if(clientWidth>=640){
// docEl.style.fontSize = '100px';
// }else{
// docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';
// }
// };
//
// if (!doc.addEventListener) return;
// win.addEventListener(resizeEvt, recalc, false);
// doc.addEventListener('DOMContentLoaded', recalc, false);
// })(document, window);
</script>
<title>现在大乐透</title>
<link href="__CDN__/css/main.css?t=1.85" rel="stylesheet">
<style>
</style>
</head>
<body ontouchmove="return false;">
<div id="container">
<div class="btn-prize">点击抽奖</div>
</div>
<script>
if (!/android/i.test(navigator.userAgent)) {
var t = window.screen.height;
if (t == '812') {
$('html').css('height','1234px');
$('body').css('height','1234px');
}
}
</script>
<script>
{*window.type='{:$type}'*}
</script>
<script type="text/javascript"
src="http://api2.izhida.cn/wechat_js_config?app_id=wx4c3c856ab83a946b&v=1.2.1&api_list=all&app_stat_key=t6NkwipRePFcidTJ"></script>
<script type="text/javascript" src="__CDN__/js/jquery.qrcode.min.js"></script>
<script type="text/javascript" src="__CDN__/js/index.js?t=1.53"></script>
<link href="__CDN__/css/notify.css" rel="stylesheet">
<script type="text/javascript" src="__CDN__/js/jquery-notify.js?t=1.1"></script>
</body>
</html>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
if (/Android (\d+\.\d+)/.test(navigator.userAgent)) {
var version = parseFloat(RegExp.$1);
if (version > 2.3) {
var phoneScale = parseInt(window.screen.width) / 640;
document.write('<meta name="viewport" content="width=640, minimum-scale = ' + phoneScale + ', maximum-scale = ' + phoneScale + ', target-densitydpi=device-dpi">');
} else {
document.write('<meta name="viewport" content="width=640, target-densitydpi=device-dpi">');
}
} else {
document.write('<meta name="viewport" content="width=640, user-scalable=no, target-densitydpi=device-dpi">');
}
</script>
<meta name="format-detection" content="telephone=no"/>
<meta name="apple-mobile-web-app-capable" content="yes">
<title>新年好口福,17喜刷刷</title>
<link href="__CDN__/css/main.css" rel="stylesheet">
<style>
</style>
</head>
<body>
<div id="container">
<div id="page_share" class="page page_share" style="display: block">
<img class="photo_three" src='{:$photo_url}'>
<div class="btn_home"></div>
</div>
</div>
<script>
window.id='{:$id}';
window.base_resource_url = '__CDN__';
</script>
<script type="text/javascript"
src="http://api2.izhida.cn/wechat_js_config?app_id=wx4c3c856ab83a946b&v=1.2.1&api_list=all&app_stat_key=FhDnDjEF8Zjw52Xk"></script>
<script type="text/javascript" src="__CDN__/js/jquery-2.1.3.min.js"></script>
<
<link href="__CDN__/css/notify.css" rel="stylesheet">
<script type="text/javascript" src="__CDN__/js/jquery-notify.js"></script>
<script>
$('.btn_home').on('click',function(){
window.location.href = '/';
});
if (/android/i.test(navigator.userAgent)) {
$('.btn_home').css('top','877px');
}
window.wx && wx.ready(function () {
var base = location.origin;
var wxFriendData = {
'link':'http://dencare-photo.izhida.cn/index/share?id='+window.id,
'imgUrl':base + '/Public/static/images/share.jpg',
'desc': '我为登康点赞,17刷新荣耀,尽享冷热酸甜想吃就吃!',
'title': '新年好口福,17喜刷刷',
trigger: function () {
},
success: function () {
}
};
var wxTimelineData = {
'link':'http://dencare-photo.izhida.cn/index/share?id='+window.id,
'imgUrl':base + '/Public/static/images/share.jpg',
'title': '#新年好口福,17喜刷刷#定制属于您的2017新年喜刷刷海报',
trigger: function () {
},
success: function () {
}
};
wx.onMenuShareAppMessage(wxFriendData);
wx.onMenuShareTimeline(wxTimelineData);
});
</script>
</body>
</html>
\ No newline at end of file
<?php
namespace User\Common;
/**
* Class SSOHelper
* @package Home\Common
*/
class SSOHelper
{
const BASE_SSO_LOGIN_URL = 'http://pro.izhida.cn/sso_login';
const BASE_SSO_TICKET_URL = 'http://pro.izhida.cn/sso_ticket';
public static function check_login($app, $redirect_back_url = '')
{
if (empty($redirect_back_url)) {
$redirect_back_url = self::get_url();
}
if (session('sso_auth_user') && session('sso_auth_timestamp') > time()) {
return true;
}
$callback_url = self::get_callback_url();
$sso_url = self::BASE_SSO_LOGIN_URL . '?' . http_build_query(array(
'cb' => $callback_url,
'app' => $app,
'state' => $redirect_back_url,
));
redirect($sso_url);
return false;
}
public static function check_ticket($ticket)
{
vendor('Requests.Requests');
\Requests::register_autoloader();
$url = SSOHelper::BASE_SSO_TICKET_URL;
$response = \Requests::request($url, null, array('ticket' => $ticket));
$result = json_decode($response->body, true);
var_dump($result);
if (empty($result) || $result['errcode'] != 0) {
exit('login failed');
}
return array($result['data']['user'], $result['data']['state']);
}
private static function get_url()
{
$sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
$php_self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
$path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
$relate_url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $php_self . (isset($_SERVER['QUERY_STRING']) ? '?' . $_SERVER['QUERY_STRING'] : $path_info);
return $sys_protocal . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '') . $relate_url;
}
private static function get_callback_url()
{
$callback_url = C('SSO_CALLBACK_URL');
if (!empty($callback_url)) {
return $callback_url;
}
$sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
$php_self = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
$path_info = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
$relate_url = isset($_SERVER['REQUEST_URI'])
? $_SERVER['REQUEST_URI']
: $php_self . (isset($_SERVER['QUERY_STRING']) ? '?' . '' : $path_info);
return $sys_protocal . $_SERVER['HTTP_HOST'] . '/User/sso_broker';
}
}
\ No newline at end of file
<?php
if (!defined('THINK_PATH')) {
die('Hacking attempt');
}
function session_uid()
{
return session('uid');
}
function smarty_function_resource($params, Smarty_Internal_Template $template)
{
$type = $params['type'];
$file = $params['file'];
if (array_key_exists('domain', $params)) {
$domain = $params['domain'];
} else {
$domain = null;
}
if (empty($file)) {
trigger_error("static_resource: function call file not allowed", E_USER_ERROR);
return '';
}
// 'Module://you_file_path'
if (preg_match('#(.*?)@(.*?)://(.*?)$#', $file, $m)) {
$url = '/Apps/' . $m[1] . '/Group' . $m[2] . '/' . $m[3];
$file = WEB_ROOT_PATH . $url;
} elseif (preg_match('#__ROOT__://(.*?)$#', $file, $m)) {
$url = '/' . $m[1];
$file = WEB_ROOT_PATH . '/' . $m[1];
} else {
trigger_error("static_resource: function call file not allowed", E_USER_ERROR);
}
$url = str_replace('//', '/', $url);
if ($domain) {
$url = C('SITE_URL') . $url;
}
$mtime = filemtime($file);
if ($mtime === null) {
return '<!-- ' . $params['file'] . ' NOT FOUND! -->';
}
if ($type == 'css') {
return <<<END
<link rel="stylesheet" type="text/css" href="$url?$mtime"/>
END;
} elseif ($type == 'js') {
return <<<END
<script src='$url?$mtime' type='text/javascript'></script>
END;
} elseif ($type == 'image') {
return "$url?$mtime";
} elseif ($type == 'file') {
return "$url?$mtime";
} else {
return '<!-- UNKNOWN type:$type! -->';
}
}
// TODO(august) delete code
function smarty_function_static($params, Smarty_Internal_Template $template)
{
// {static type=css|js|image file=xxxx}
$type = $params['type'];
$file = $params['file'];
if (array_key_exists('domain', $params)) {
$domain = $params['domain'];
} else {
$domain = null;
}
if (empty($file)) {
trigger_error("static_resource: function call file not allowed", E_USER_ERROR);
return '';
}
// __APP_RES__/js/a.js ==> AppsStatic/MODULE_NAME/Public/js/a.js
// /Base/js/a.js
// /Common/js/a.js
$group = GROUP_NAME;
if (strpos($file, '__BASE_RES__') === 0) {
$module = 'Base';
$left = str_replace('__BASE_RES__', '', $file);
} elseif (strpos($file, '__APP_RES__') === 0) {
$module = ADDON_APP_NAME;
$left = str_replace('__APP_RES__', '', $file);
} else {
$pos = strpos($file, '/', 1);
$module = str_replace('/', '', substr($file, 0, $pos + 1));
$left = substr($file, $pos + 1);
}
foreach (array('Home', 'User', 'Wap', 'Admin') as $tmp_group) {
if (stripos($left, "@$tmp_group/") !== false) {
$group = $tmp_group;
$left = str_ireplace("@$group/", '', $left);
break;
}
}
$url = "/Apps/$module/Group$group/Public/$left";
if ($domain) {
$url = C('SITE_URL') . $url;
}
$url = str_replace('//', '/', $url);
$real_file = ADDON_PATH . $module . '/Group' . $group . '/Public' . $left;
$mtime = filemtime($real_file);
if ($mtime === null) {
return '<!-- ' . $params['file'] . ' NOT FOUND! -->';
}
if ($type == 'css') {
return <<<END
<link rel="stylesheet" type="text/css" href="$url?$mtime"/>
END;
} elseif ($type == 'js') {
return <<<END
<script src='$url?$mtime' type='text/javascript'></script>
END;
} elseif ($type == 'image') {
return "$url?$mtime";
} else {
return '<!-- UNKNOWN type:$type! -->';
}
}
\ No newline at end of file
<?php
namespace User\Controller;
use User\Common\SSOHelper;
use Think\Controller;
class BackendController extends Controller
{
public function __construct()
{
parent::__construct();
// $domain = C('APP_DOMAIN');
// if (empty($domain)) {
// $domain = $_SERVER['HTTP_HOST'];
// }
// SSOHelper::check_login($domain);
}
}
\ No newline at end of file
<?php
namespace User\Controller;
class BaseUserController extends BackendController
{
public function _initialize()
{
$menu = $this->getMenuTree();
$this->assign('menu', $menu);
}
protected function ajaxReturnSuccess($data = array(), $errcode = 0, $errmsg = null, $type = '')
{
$this->ajaxReturn(array('errcode' => $errcode, 'errmsg' => $errmsg, 'data' => $data),
$type);
}
protected function ajaxReturnError($errcode, $errmsg, $data = null, $type = null)
{
$this->ajaxReturn(array('errcode' => $errcode, 'errmsg' => $errmsg, 'data' => $data),
$type);
}
protected function getMenuTree()
{
// [ item(id|parent_id|title|url|active|type| children => [item] )
// db, item
$item_list = [
['id' => 1, 'parent_id' => 0, 'title' => '数据统计', 'url' => 'User/Report/index', 'seq' => 1,
'default' => true, 'match_type' => 'url', 'children' => null, 'css_class' => null],
['id' => 2, 'parent_id' => 0, 'title' => '中奖信息', 'url' => 'User/Check/index', 'seq' => 1,
'default' => false, 'match_type' => 'url', 'children' => null, 'css_class' => null],
];
$tree = $this->buildTreeChildren($item_list, 0);
return $tree;
}
private function buildTreeChildren($item_list, $parent_id)
{
$children = [];
foreach ($item_list as $item) {
if ($item['parent_id'] == $parent_id) {
$item['children'] = $this->buildTreeChildren($item_list, $item['id']);
if (preg_match('@^([^/]*?)/([^/]*?)/([^/]*?)$@', $item['url'], $m)) {
if (CONTROLLER_NAME == $m[2] && ACTION_NAME == $m[3]) {
$item['active'] = true;
}
}
$item['href'] = U($item['url']);
$children[] = $item;
}
}
if ($children) {
usort($children, function ($a, $b) {
if ($a['seq'] - $b['seq']) {
return $a['seq'] - $b['seq'];
}
return $a['id'] - $b['id'];
});
}
return empty($children) ? null : $children;
}
}
\ No newline at end of file
<?php
namespace User\Controller;
use Think\Page;
class CheckController extends BaseUserController
{
public function index()
{
$sql = "select a.id,a.nickname,a.headimgurl,a.region,b.take_time from user a left join prize b on b.user_id = a.id where is_get=1 ";
$list = M()->query($sql);
$this->assign('list', $list);
$this->display();
}
}
\ No newline at end of file
<?php
namespace User\Controller;
use Think\Controller;
class HomeController extends Controller
{
public function index()
{
$url = "/user/index/index";
redirect($url);
}
private function match_password($passwd, $db_passwd)
{
$salt = substr($db_passwd, 0, 6);
$v = md5($salt . $passwd);
return $salt . $v === $db_passwd;
}
public function signin()
{
if (!IS_POST) {
$this->display();
return;
}
$user = D('AdminUser');
$name = I('post.name');
$password = I('post.password');
// $user_data = $user->where(array('status' => 1, 'name' => $name))->find();
// if (!$user_data) {
// $error = '�û�������';
// $this->assign('error', $error);
// $this->display();
// return;
// }
//
// if (!$this->match_password($password, $user_data['password'])) {
// $error = '�û�����������';
// $this->assign('error', $error);
// $this->display();
// return;
// }
if ($name != 'admin' || $password != '123456') {
$error = '�û�����������';
$this->assign('error', $error);
$this->display();
return;
}
\SignedCookie::set_cookie('xuid', 12344321, C('COOKIE_SIGN'), 86000);
$url = "/user/index/index";
redirect($url);
return;
}
}
\ No newline at end of file
<?php
namespace User\Controller;
use Think\Log;
class IndexController extends BaseUserController
{
public function index()
{
$url = U('User/Report/index');
redirect($url);
}
}
\ No newline at end of file
<?php
namespace User\Controller;
use Zhida\ExcelExporter;
class ReportController extends BaseUserController
{
const APP_NAME = "dfzc-znts";
public function index()
{
$this->mobile();
return;
}
public function mobile()
{
$channel = $_GET['channel'];
if (!$channel) {
$channel = '__all__';
}
$url = "http://api2.izhida.cn/tongjiV2/report?app_stat_key=t6NkwipRePFcidTJ&app_stat_secret=yK48QGN2em3MjiZA";
$content = file_get_contents($url);
$data = json_decode($content, true);
$data_list = $data['data'];
$event_meta_list = $this->get_event_meta();
$this->assign('event_meta_list', $event_meta_list);
$this->assign('data_list', $data_list[$channel]);
$this->display("Report_index");
}
public function export_pvuv()
{
$channel = $_GET['channel'];
if (!$channel) {
$channel = '__all__';
}
$url = "http://api2.izhida.cn/tongjiV2/report?app_stat_key=t6NkwipRePFcidTJ&app_stat_secret=yK48QGN2em3MjiZA";
$content = file_get_contents($url);
$data = json_decode($content, true);
$data_list = $data['data'][$channel];
$default_0 = function ($v) {
if (isset($v)) {
return $v;
}
return 0;
};
$columns = array(
array('日期', 'date'),
array('UV', 'index_uv', $default_0),
array('PV', 'index_pv', $default_0),
array('分享给朋友或微信群人数', 'share_uv_friend', $default_0),
array('分享给朋友或微信群次数', 'share_pv_friend', $default_0),
array('分享朋友圈人数', 'share_uv_timeline', $default_0),
array('分享朋友圈次数', 'share_pv_timeline', $default_0),
array('来自朋友圈人数', 'from_uv_timeline', $default_0),
array('来自朋友圈次数', 'from_pv_timeline', $default_0),
array('来自微信群人数', 'from_uv_groupmessage', $default_0),
array('来自微信群次数', 'from_pv_groupmessage', $default_0),
array('来自好友人数', 'from_uv_singlemessage', $default_0),
array('来自好友次数', 'from_pv_singlemessage', $default_0),
);
$file_name = 'pvuv_' . date('Y-m-d_H:i:s');
ExcelExporter::export($file_name, $columns, $data_list, 'pvuv');
}
public function export_photo()
{
$sql = "select a.id,a.nickname,a.headimgurl,a.region,b.take_time from user a left join prize b on b.user_id = a.id where is_get=1 ";
$list = M()->query($sql);
$default_0 = function ($v) {
if (isset($v)) {
return $v;
}
return 0;
};
$columns = array(
array('id', 'id', $default_0),
array('名字', 'nickname', $default_0),
array('地区', 'region', $default_0),
array('头像', 'headimgurl', $default_0),
array('时间', 'take_time', $default_0),
);
$file_name = 'prize_' . date('Y-m-d_H:i:s');
ExcelExporter::export($file_name, $columns, $list, 'prize');
}
public function open()
{
$type_sate = $c = M('Sate')->where(array(
'id' => 1,
))->save(array(
'sate' => 1,
));
}
public function stop()
{
$type_sate = $c = M('Sate')->where(array(
'id' => 1,
))->save(array(
'sate' => 0,
));
}
private function get_event_meta()
{
$event_meta_list = array(
array("screen_name" => "UV", "item_name" => "index_uv", "type" => 'uv',),
array("screen_name" => "PV", "item_name" => "index_pv", "type" => 'pv',),
array("screen_name" => "分享给朋友或微信群人数", "item_name" => "share_uv_friend", "type" => 'uv',),
array("screen_name" => "分享给朋友或微信群次数", "item_name" => "share_pv_friend", "type" => 'pv',),
array("screen_name" => "分享朋友圈人数", "item_name" => "share_uv_timeline", "type" => 'uv',),
array("screen_name" => "分享朋友圈次数", "item_name" => "share_pv_timeline", "type" => 'pv',),
array("screen_name" => "来自朋友圈人数", "item_name" => "from_uv_timeline", "type" => 'uv',),
array("screen_name" => "来自朋友圈次数", "item_name" => "from_pv_timeline", "type" => 'pv',),
array("screen_name" => "来自微信群人数", "item_name" => "from_uv_groupmessage", "type" => 'uv',),
array("screen_name" => "来自微信群次数", "item_name" => "from_pv_groupmessage", "type" => 'pv',),
array("screen_name" => "来自好友人数", "item_name" => "from_uv_singlemessage", "type" => 'uv',),
array("screen_name" => "来自好友次数", "item_name" => "from_pv_singlemessage", "type" => 'pv',),
);
foreach ($event_meta_list as &$item) {
if (empty($item['item_name'])) {
if ($item['condition']['category'] == "system") {
$item['item_name'] = $item['condition']["event_action"];
} else {
$arr = array();
if (!empty($item['event_value'])) {
$arr[] = $item['category'];
$arr[] = $item['event_action'];
$arr[] = $item['event_name'];
$arr[] = $item['event_value'];
} elseif (!empty($item['event_name'])) {
$arr[] = $item['category'];
$arr[] = $item['event_action'];
$arr[] = $item['event_name'];
} elseif (!empty($item['event_action'])) {
$arr[] = $item['category'];
$arr[] = $item['event_action'];
} elseif (!empty($item['category'])) {
$arr[] = $item['category'];
} else {
continue;
}
$item_name = join('$', $arr);
if ($item['type'] == 'pv') {
$item_name .= '$__pv__';
} else {
$item_name .= '$__uv__';
}
$item['item_name'] = $item_name;
}
}
}
unset($item);
return $event_meta_list;
}
}
\ No newline at end of file
<?php
namespace User\Controller;
use User\Common\SSOHelper;
use Think\Controller;
class SSOBrokerController extends Controller
{
public function index()
{
$ticket = $_GET['ticket'];
if (empty($ticket)) {
exit('not login');
}
list($user, $redirect_url) = SSOHelper::check_ticket($ticket);
session('sso_auth_user', $user);
session('sso_auth_timestamp', time() + 30 * 60);
redirect($redirect_url);
}
}
\ No newline at end of file
{:extends file="groupuser_layout.tpl"}
{:block name=header_css append}
<style>
.photo{
height: 120px;
width: auto;
}
</style>
{:/block}
{:block name="content_title"}
{:/block}
{:block name="content_breadcrumb"}
{:/block}
{:block name="content_body"}
<div class="row" id="keyword-index-page">
<div class="col-sm-12 col-md-12">
<table class="wechat-account-table table table-striped mb30">
<thead>
<tr>
<th width="8%">ID</th>
<th width="20%">名字</th>
<th width="20%">地区</th>
<th width="20%">头像</th>
<th width="20%">时间</th>
</tr>
</thead>
<tbody>
{:foreach from=$list item="item" name="list"}
<tr>
<td class="vertical-mid">
{:$item.id}
</td>
<td class="vertical-mid">
{:$item.nickname}
</td>
<td class="vertical-mid">
{:$item.region}
</td>
<td class="vertical-mid js-photo-size">
<img src="{:$item.headimgurl}" style="width: 100px;height: 100px">
</td>
<td class="vertical-mid js-photo-size">
{:$item.take_time|date_format:'m-d H:i:s'}
</td>
</tr>
{:foreachelse}
<td colspan="7" class="text-center">暂无</td>
{:/foreach}
</tbody>
</table>
{:if $page}
<div>
<span class="pull-right single-msg-page">{:$page}</span
</div>
{:/if}
</div>
</div>
{:/block}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="/Public/static/admin/images/favicon.ico" type="image/png">
<title>登录</title>
<link href="/Public/static/admin/css/style.default.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="/Public/static/admin/js/html5shiv.js"></script>
<script src="/Public/static/admin/js/respond.min.js"></script>
<![endif]-->
</head>
<body class="signin">
<!-- Preloader -->
<div id="preloader">
<div id="status"><i class="fa fa-spinner fa-spin"></i></div>
</div>
<section>
<div class="signinpanel">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<form id="signin-form" method="post" action="/user/home/signin">
<h4 class="nomargin">登录</h4>
<p class="mt5 mb20"></p>
{:if $error}
<div class="mb10">
<label class="signin-error error">{:$error|escape}</label>
</div>
{:/if}
<input type="text" class="form-control uname" placeholder="用户名"
id="name" name="name" autofocus="autofocus"/>
<input type="password" class="form-control pword" placeholder="密码"
id="password" name="password" autocomplete="off" />
<button class="btn btn-success btn-block">登录</button>
</form>
</div><!-- col-sm-5 -->
</div><!-- row -->
<div class="signup-footer">
<div class="text-center">
&copy; 2003-2014 PwC. All rights reserved.
</div>
</div>
</div><!-- signin -->
</section>
<script src="/Public/static/admin/js/jquery-1.10.2.min.js"></script>
<script src="/Public/static/admin/js/jquery-migrate-1.2.1.min.js"></script>
<script src="/Public/static/admin/js/bootstrap.min.js"></script>
<script src="/Public/static/admin/js/modernizr.min.js"></script>
<script src="/Public/static/admin/js/jquery.cookies.js"></script>
<script src="/Public/static/admin/js/toggles.min.js"></script>
<script src="/Public/static/admin/js/retina.min.js"></script>
<script src="/Public/static/admin/js/custom.js"></script>
<script src="/Public/static/admin/js/jquery.validate.js"></script>
<script src="/Public/static/admin/js/jquery.validate.cn_msg.js"></script>
</body>
</html>
{:extends file="groupuser_layout.tpl"}
{:block name=header_css append}
{:/block}
{:block name="content_title"}
{:/block}
{:block name="content_breadcrumb"}
{:/block}
{:block name="content_body"}
<div>
<a class="btn btn-default" target="_blank" href="{:url controller='user/report/export_pvuv'}">导出统计数据</a>
<a class="btn btn-default" target="_blank" href="{:url controller='user/report/export_photo'}">导出中奖信息</a>
<a class="btn btn-default" target="_blank" href="{:url controller='user/report/open'}">打开游戏</a>
<a class="btn btn-default" target="_blank" href="{:url controller='user/report/stop'}">关闭游戏</a>
</div>
<br>
<br>
<table class="table" class="table table-striped">
<thead>
<tr>
<th>日期</th>
{:foreach from=$event_meta_list item=event_config}
<th>{:$event_config['screen_name']|escape}</th>
{:/foreach}
</tr>
</thead>
<tbody>
{:foreach from=$data_list item=data}
<tr>
<td>{:$data['date']}</td>
{:foreach from=$event_meta_list item=event_config}
<td>
{:$data[$event_config['item_name']]|default:0}
</td>
{:/foreach}
</tr>
{:/foreach}
</tbody>
</table>
{:/block}
{:block name="body_js" append}
{:/block}
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="__CDN__/admin/images/favicon.ico" type="image/png">
<title>{:block name=title}{:C('SITE_TITLE')}{:/block}</title>
{:block name=header_css}
<link href="__CDN__/admin/css/style.default.css" rel="stylesheet">
<link href="__CDN__/admin/css/jquery.gritter.css" rel="stylesheet">
{:/block}
{:block name=header_js}
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="__CDN__/admin/js/html5shiv.js"></script>
<script src="__CDN__/admin/js/respond.min.js"></script>
<![endif]-->
{:/block}
</head>
<body id="{:block name="page_id"}{:/block}">
<!-- Preloader -->
<div id="preloader">
<div id="status"><i class="fa fa-spinner fa-spin"></i></div>
</div>
<section>
<div class="leftpanel">
<div class="logopanel">
<h1><span>[</span>智达轻应用<span>]</span></h1>
</div><!-- logopanel -->
<div class="leftpanelinner">
<!-- This is only visible to small devices -->
<div class="visible-xs hidden-sm hidden-md hidden-lg">
<div class="media userlogged">
<div class="media-body">
<h4>{:$smarty.session.sso_auth_user.name}</h4>
</div>
</div>
<h5 class="sidebartitle actitle">帐号</h5>
<!--
<ul class="nav nav-pills nav-stacked nav-bracket mb30">
{:*<li><a href="{:U("User/Login/change_pass")}"><i class="fa fa-gear"></i> 修改密码</a></li>*}
{:*<li><a href="{:U("User/Login/logout")}"><i class="glyphicon glyphicon-log-out"></i> 退出</a></li>*}
</ul>
-->
</div>
<h5 class="sidebartitle">&nbsp;</h5>
<ul class="nav nav-pills nav-stacked nav-bracket">
{:foreach from=$menu item=menu_node}
<li {:if $menu_node.active}class="active"{:/if}>
<a href="{:$menu_node.href}">
<i class="fa {:$menu_node.css_class}"></i> <span>{:$menu_node.title|escape}</span>
</a>
{:if $menu_node.children}
<ul class="children">
{:foreach from=$menu_node.children item=child_node}
<li {:if $child_node.active}class="active"{:/if}>
<a href="{:$child_node.href}">
<i class="fa {:$child_node.css_class}"></i> <span>{:$child_node.title|escape}</span>
</a>
</li>
{:/foreach}
</ul>
{:/if}
</li>
{:/foreach}
</ul>
</div><!-- leftpanelinner -->
</div><!-- leftpanel -->
<div class="mainpanel">
<div class="headerbar">
<a class="menutoggle"><i class="fa fa-bars"></i></a>
<div class="header-right">
<ul class="headermenu">
<li class="mr30">
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
{:$smarty.session.sso_auth_user.name}
{:*<span class="caret"></span>*}
</button>
<!--
<ul class="dropdown-menu dropdown-menu-usermenu pull-right">
{:*<li><a href="{:url controller="Base@user://WechatAccount/change_pass"}"><i class="fa fa-gear"></i> 修改密码</a></li>*}
{:*<li><a href="{:url controller="User/Index/logout"}"><i class="glyphicon glyphicon-log-out"></i> 退出</a></li>*}
</ul>
-->
</div>
</li>
</ul>
</div><!-- header-right -->
</div><!-- headerbar -->
<div class="pageheader" style="display: none;">
<h2>
{:block name=content_title}<i class="fa fa-home"></i>控制面板{:/block}
</h2>
<div class="breadcrumb-wrapper">
<span class="label">当前页面:</span>
<ol class="breadcrumb">
{:block name=content_breadcrumb}{:/block}
</ol>
</div>
</div>
<div class="contentpanel" id="js-content-body">
{:block name="content_body"}{:/block}
</div><!-- contentpanel -->
</div><!-- mainpanel -->
</section>
{:block name="body_js"}
<script src="__CDN__/admin/js/jquery-1.10.2.min.js"></script>
<script src="__CDN__/admin/js/jquery-migrate-1.2.1.min.js"></script>
<script src="__CDN__/admin/js/jquery-ui-1.10.3.min.js"></script>
<script src="__CDN__/admin/js/bootstrap.min.js"></script>
<script src="__CDN__/admin/js/modernizr.min.js"></script>
<script src="__CDN__/admin/js/jquery.datatables.min.js"></script>
<script src="__CDN__/admin/js/jquery.cookies.js"></script>
<script src="__CDN__/admin/js/toggles.min.js"></script>
<script src="__CDN__/admin/js/custom.js"></script>
<script src="__CDN__/admin/js/bootbox.js"></script>
<script src="__CDN__/admin/js/jquery.gritter.min.js"></script>
{:/block}
</body>
</html>
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
options: {
//定义一个用于插入合并输出文件之间的字符
separator: ';\n'
},
js: {
//用于连接的文件
src: [
'./Public/static/js/jquery-notify.min.js',
'./Public/static/js/index.min.js'
],
//返回的JS文件位置
dest: './Public/static/js//<%= pkg.name %>.min.js'
}
},
uglify: {
options: {
sourceMap: false,
mangle: true,
compress: true,
except: ['jQuery']
},
dest: {
files: {
'Public/static/js/jquery-notify.min.js': ['Public/static/js/jquery-notify.js'],
'Public/static/js/index.min.js': ['Public/static/js/index.js']
}
}
},
compass: {
dist: {
options: {
config: 'config.rb'
}
}
},
cssmin: {
options: {},
target: {
files: {
'Public/static/css/main_all.min.css': ['Public/static/css/notify.css', 'Public/static/css/main.css']
}
}
},
watch: {
compass: {
files: ['Public/static/css/*.scss'],
tasks: ['compass']
}
}
});
grunt.registerTask('js_build', ['uglify', 'concat']);
grunt.registerTask('css_build', ['compass', 'cssmin']);
grunt.registerTask('default', ['js_build', 'css_build']);
grunt.registerTask('dev', ['watch']);
grunt.registerTask('compass', ['compass']);
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-compass');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-cssmin');
};
\ No newline at end of file
/*!
* Timepicker Component for Twitter Bootstrap
*
* Copyright 2013 Joris de Wit
*
* Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/.bootstrap-timepicker{position:relative}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu{left:auto;right:0}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before{left:auto;right:12px}.bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after{left:auto;right:13px}.bootstrap-timepicker .add-on{cursor:pointer}.bootstrap-timepicker .add-on i{display:inline-block;width:16px;height:16px}.bootstrap-timepicker-widget.dropdown-menu{padding:2px 3px 2px 2px}.bootstrap-timepicker-widget.dropdown-menu.open{display:inline-block}.bootstrap-timepicker-widget.dropdown-menu:before{border-bottom:7px solid rgba(0,0,0,0.2);border-left:7px solid transparent;border-right:7px solid transparent;content:"";display:inline-block;left:9px;position:absolute;top:-7px}.bootstrap-timepicker-widget.dropdown-menu:after{border-bottom:6px solid #fff;border-left:6px solid transparent;border-right:6px solid transparent;content:"";display:inline-block;left:10px;position:absolute;top:-6px}.bootstrap-timepicker-widget a.btn,.bootstrap-timepicker-widget input{border-radius:4px}.bootstrap-timepicker-widget table{width:100%;margin:0}.bootstrap-timepicker-widget table td{text-align:center;height:30px;margin:0;padding:2px}.bootstrap-timepicker-widget table td:not(.separator){min-width:30px}.bootstrap-timepicker-widget table td span{width:100%}.bootstrap-timepicker-widget table td a{border:1px transparent solid;width:100%;display:inline-block;margin:0;padding:8px 0;outline:0;color:#333}.bootstrap-timepicker-widget table td a:hover{text-decoration:none;background-color:#eee;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;border-color:#ddd}.bootstrap-timepicker-widget table td a i{margin-top:2px}.bootstrap-timepicker-widget table td input{width:25px;margin:0;text-align:center}.bootstrap-timepicker-widget .modal-content{padding:4px}@media(min-width:767px){.bootstrap-timepicker-widget.modal{width:200px;margin-left:-100px}}@media(max-width:767px){.bootstrap-timepicker{width:100%}.bootstrap-timepicker .dropdown-menu{width:100%}}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
.colorpicker {
width: 356px;
height: 176px;
overflow: hidden;
position: absolute;
background: url(../images/colorpicker/colorpicker_background.png);
font-family: Arial, Helvetica, sans-serif;
display: none;
}
.colorpicker_color {
width: 150px;
height: 150px;
left: 14px;
top: 13px;
position: absolute;
background: #f00;
overflow: hidden;
cursor: crosshair;
}
.colorpicker_color div {
position: absolute;
top: 0;
left: 0;
width: 150px;
height: 150px;
background: url(../images/colorpicker/colorpicker_overlay.png);
}
.colorpicker_color div div {
position: absolute;
top: 0;
left: 0;
width: 11px;
height: 11px;
overflow: hidden;
background: url(../images/colorpicker/colorpicker_select.gif);
margin: -5px 0 0 -5px;
}
.colorpicker_hue {
position: absolute;
top: 13px;
left: 171px;
width: 35px;
height: 150px;
cursor: n-resize;
}
.colorpicker_hue div {
position: absolute;
width: 35px;
height: 9px;
overflow: hidden;
background: url(../images/colorpicker/colorpicker_indic.gif) left top;
margin: -4px 0 0 0;
left: 0px;
}
.colorpicker_new_color {
position: absolute;
width: 60px;
height: 30px;
left: 213px;
top: 13px;
background: #f00;
}
.colorpicker_current_color {
position: absolute;
width: 60px;
height: 30px;
left: 283px;
top: 13px;
background: #f00;
}
.colorpicker input {
background-color: transparent !important;
border: 1px solid transparent !important;
position: absolute !important;
font-size: 10px !important;
font-family: Arial, Helvetica, sans-serif !important;
color: #898989 !important;
top: 4px !important;
right: 11px !important;
text-align: right !important;
margin: 0 !important;
padding: 0 !important;
height: 11px !important;
-moz-box-shadow: none !important;
-webkit-box-shadow: none !important;
box-shadow: none !important;
}
.colorpicker_hex {
position: absolute;
width: 72px;
height: 22px;
background: url(../images/colorpicker/colorpicker_hex.png) top;
left: 212px;
top: 142px;
}
.colorpicker_hex input {
right: 6px;
}
.colorpicker_field {
height: 22px;
width: 62px;
background-position: top;
position: absolute;
}
.colorpicker_field span {
position: absolute;
width: 12px;
height: 22px;
overflow: hidden;
top: 0;
right: 0;
cursor: n-resize;
}
.colorpicker_rgb_r {
background-image: url(../images/colorpicker/colorpicker_rgb_r.png);
top: 52px;
left: 212px;
}
.colorpicker_rgb_g {
background-image: url(../images/colorpicker/colorpicker_rgb_g.png);
top: 82px;
left: 212px;
}
.colorpicker_rgb_b {
background-image: url(../images/colorpicker/colorpicker_rgb_b.png);
top: 112px;
left: 212px;
}
.colorpicker_hsb_h {
background-image: url(../images/colorpicker/colorpicker_hsb_h.png);
top: 52px;
left: 282px;
}
.colorpicker_hsb_s {
background-image: url(../images/colorpicker/colorpicker_hsb_s.png);
top: 82px;
left: 282px;
}
.colorpicker_hsb_b {
background-image: url(../images/colorpicker/colorpicker_hsb_b.png);
top: 112px;
left: 282px;
}
.colorpicker_submit {
position: absolute;
width: 22px;
height: 22px;
background: url(../images/colorpicker/colorpicker_submit.png) top;
left: 322px;
top: 142px;
overflow: hidden;
}
.colorpicker_focus {
background-position: center;
}
.colorpicker_hex.colorpicker_focus {
background-position: bottom;
}
.colorpicker_submit.colorpicker_focus {
background-position: bottom;
}
.colorpicker_slider {
background-position: bottom;
}
.colorselector {
display: inline-block; height: 28px; width: 28x; vertical-align: middle;
position: relative; vertical-align: middle; margin-left: 5px;
}
.colorselector span {
display: block; height: 28px; width: 28px; position: absolute; left: 0; top: 0; cursor: pointer;
background: #000 url(../images/colorpicker/select2.png) no-repeat -4px -4px;
}
/*!
* Stylesheet for the Date Range Picker, for use with Bootstrap 3.x
*
* Copyright 2013 Dan Grossman ( http://www.dangrossman.info )
* Licensed under the Apache License v2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Built for http://www.improvely.com
*/
.daterangepicker.dropdown-menu {
max-width: none;
z-index: 3000;
}
.daterangepicker.opensleft .ranges, .daterangepicker.opensleft .calendar {
float: left;
margin: 4px;
}
.daterangepicker.opensright .ranges, .daterangepicker.opensright .calendar {
float: right;
margin: 4px;
}
.daterangepicker .ranges {
width: 180px;
text-align: left;
}
.daterangepicker .ranges .range_inputs>div {
float: left;
}
.daterangepicker .ranges .range_inputs>div:nth-child(2) {
padding-left: 11px;
}
.daterangepicker .calendar {
display: none;
max-width: 270px;
}
.daterangepicker.show-calendar .calendar {
display: block;
}
.daterangepicker .calendar.single .calendar-date {
border: none;
}
.daterangepicker .calendar th, .daterangepicker .calendar td {
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
white-space: nowrap;
text-align: center;
min-width: 32px;
}
.daterangepicker .daterangepicker_start_input label,
.daterangepicker .daterangepicker_end_input label {
color: #333;
display: block;
font-size: 11px;
font-weight: normal;
height: 20px;
line-height: 20px;
margin-bottom: 2px;
text-shadow: #fff 1px 1px 0px;
text-transform: uppercase;
width: 74px;
}
.daterangepicker .ranges input {
font-size: 11px;
}
.daterangepicker .ranges .input-mini {
background-color: #eee;
border: 1px solid #ccc;
border-radius: 4px;
color: #555;
display: block;
font-size: 11px;
height: 30px;
line-height: 30px;
vertical-align: middle;
margin: 0 0 10px 0;
padding: 0 6px;
width: 84px;
}
.daterangepicker .ranges ul {
list-style: none;
margin: 0;
padding: 0;
}
.daterangepicker .ranges li {
font-size: 13px;
background: #f5f5f5;
border: 1px solid #f5f5f5;
color: #08c;
padding: 3px 12px;
margin-bottom: 8px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
cursor: pointer;
}
.daterangepicker .ranges li.active, .daterangepicker .ranges li:hover {
background: #08c;
border: 1px solid #08c;
color: #fff;
}
.daterangepicker .calendar-date {
border: 1px solid #ddd;
padding: 4px;
border-radius: 4px;
background: #fff;
}
.daterangepicker .calendar-time {
text-align: center;
margin: 8px auto 0 auto;
line-height: 30px;
}
.daterangepicker {
position: absolute;
background: #fff;
top: 100px;
left: 20px;
padding: 4px;
margin-top: 1px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
.daterangepicker.opensleft:before {
position: absolute;
top: -7px;
right: 9px;
display: inline-block;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-left: 7px solid transparent;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
.daterangepicker.opensleft:after {
position: absolute;
top: -6px;
right: 10px;
display: inline-block;
border-right: 6px solid transparent;
border-bottom: 6px solid #fff;
border-left: 6px solid transparent;
content: '';
}
.daterangepicker.opensright:before {
position: absolute;
top: -7px;
left: 9px;
display: inline-block;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-left: 7px solid transparent;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
.daterangepicker.opensright:after {
position: absolute;
top: -6px;
left: 10px;
display: inline-block;
border-right: 6px solid transparent;
border-bottom: 6px solid #fff;
border-left: 6px solid transparent;
content: '';
}
.daterangepicker table {
width: 100%;
margin: 0;
}
.daterangepicker td, .daterangepicker th {
text-align: center;
width: 20px;
height: 20px;
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
cursor: pointer;
white-space: nowrap;
}
.daterangepicker td.off {
color: #999;
}
.daterangepicker td.disabled {
color: #999;
}
.daterangepicker td.available:hover, .daterangepicker th.available:hover {
background: #eee;
}
.daterangepicker td.in-range {
background: #ebf4f8;
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
}
.daterangepicker td.active, .daterangepicker td.active:hover {
background-color: #357ebd;
border-color: #3071a9;
color: #fff;
}
.daterangepicker td.week, .daterangepicker th.week {
font-size: 80%;
color: #ccc;
}
.daterangepicker select.monthselect, .daterangepicker select.yearselect {
font-size: 12px;
padding: 1px;
height: auto;
margin: 0;
cursor: default;
}
.daterangepicker select.monthselect {
margin-right: 2%;
width: 56%;
}
.daterangepicker select.yearselect {
width: 40%;
}
.daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.ampmselect {
width: 50px;
margin-bottom: 0;
}
.daterangepicker_start_input {
float: left;
}
.daterangepicker_end_input {
float: left;
padding-left: 11px
}
.daterangepicker th.month {
width: auto;
}
body, h1, h2, h3, h4, h5, .subtitle, .gen-list li .name, .table th, strong,
input, select, textarea {
font-family: 'Helvetica Neue', 'HelveticaNeue', Helvetica, sans-serif !important;
}
.subtitle, .gen-list li .name, .table th, .panel-alt .panel-title, strong
.widget-messaging .sender, strong, .blog-title {
font-weight: bold;
}
.form-control {
padding: 9px 10px 8.5px;
}
\ No newline at end of file
body, h1, h2, h3, h4, h5, .subtitle, .gen-list li .name, .table th, strong,
input, select, textarea {
font-family: 'RobotoRegular', Helvetica, sans-serif !important;
}
.subtitle, .gen-list li .name, .table th, .panel-alt .panel-title, strong
.widget-messaging .sender, strong {
font-weight: normal !important;
font-family: 'RobotoBold', Helvetica, sans-serif !important;
}
\ No newline at end of file
/*
* Swiper 2.6.1
* Mobile touch slider and framework with hardware accelerated transitions
*
* http://www.idangero.us/sliders/swiper/
*
* Copyright 2010-2014, Vladimir Kharlampidi
* The iDangero.us
* http://www.idangero.us/
*
* Licensed under GPL & MIT
*
* Released on: May 6, 2014
*/
.swiper-container {
margin:0 auto;
position:relative;
overflow:hidden;
-webkit-backface-visibility:hidden;
-moz-backface-visibility:hidden;
-ms-backface-visibility:hidden;
-o-backface-visibility:hidden;
backface-visibility:hidden;
/* Fix of Webkit flickering */
z-index:1;
}
.swiper-wrapper {
position:relative;
width:100%;
-webkit-transition-property:-webkit-transform, left, top;
-webkit-transition-duration:0s;
-webkit-transform:translate3d(0px,0,0);
-webkit-transition-timing-function:ease;
-moz-transition-property:-moz-transform, left, top;
-moz-transition-duration:0s;
-moz-transform:translate3d(0px,0,0);
-moz-transition-timing-function:ease;
-o-transition-property:-o-transform, left, top;
-o-transition-duration:0s;
-o-transform:translate3d(0px,0,0);
-o-transition-timing-function:ease;
-o-transform:translate(0px,0px);
-ms-transition-property:-ms-transform, left, top;
-ms-transition-duration:0s;
-ms-transform:translate3d(0px,0,0);
-ms-transition-timing-function:ease;
transition-property:transform, left, top;
transition-duration:0s;
transform:translate3d(0px,0,0);
transition-timing-function:ease;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
}
.swiper-free-mode > .swiper-wrapper {
-webkit-transition-timing-function: ease-out;
-moz-transition-timing-function: ease-out;
-ms-transition-timing-function: ease-out;
-o-transition-timing-function: ease-out;
transition-timing-function: ease-out;
margin: 0 auto;
}
.swiper-slide {
float: left;
}
/* IE10 Windows Phone 8 Fixes */
.swiper-wp8-horizontal {
-ms-touch-action: pan-y;
}
.swiper-wp8-vertical {
-ms-touch-action: pan-x;
}
/* ===============================================================
Your custom styles, here you need to specify container's and slide's
sizes, pagination, etc.
================================================================*/
.swiper-container {
/* Specify Swiper's Size: */
/*width:200px;
height: 100px;*/
}
.swiper-slide {
/* Specify Slides's Size: */
/*width: 100%;
height: 100%;*/
}
.swiper-slide-active {
/* Specific active slide styling: */
}
.swiper-slide-visible {
/* Specific visible slide styling: */
}
/* ===============================================================
Pagination Styles
================================================================*/
.swiper-pagination-switch {
/* Stylize pagination button: */
}
.swiper-active-switch {
/* Specific active button style: */
}
.swiper-visible-switch {
/* Specific visible button style: */
}
<!DOCTYPE html>
<html>
<head>
<title>Forbidden</title>
</head>
<body>
<h2>Forbidden</h2>
</body>
</html>
/**** Isotope Filtering ****/
.isotope-item {
z-index: 2;
}
.isotope-hidden.isotope-item {
pointer-events: none;
z-index: 1;
}
/**** Isotope CSS3 transitions ****/
.isotope,
.isotope .isotope-item {
-webkit-transition-duration: 0.8s;
-moz-transition-duration: 0.8s;
-ms-transition-duration: 0.8s;
-o-transition-duration: 0.8s;
transition-duration: 0.8s;
}
.isotope {
-webkit-transition-property: height, width;
-moz-transition-property: height, width;
-ms-transition-property: height, width;
-o-transition-property: height, width;
transition-property: height, width;
}
.isotope .isotope-item {
-webkit-transition-property: -webkit-transform, opacity;
-moz-transition-property: -moz-transform, opacity;
-ms-transition-property: -ms-transform, opacity;
-o-transition-property: -o-transform, opacity;
transition-property: transform, opacity;
}
/**** disabling Isotope CSS3 transitions ****/
.isotope.no-transition,
.isotope.no-transition .isotope-item,
.isotope .isotope-item.no-transition {
-webkit-transition-duration: 0s;
-moz-transition-duration: 0s;
-ms-transition-duration: 0s;
-o-transition-duration: 0s;
transition-duration: 0s;
}
/* End: Recommended Isotope styles */
/* disable CSS transitions for containers with infinite scrolling*/
.isotope.infinite-scrolling {
-webkit-transition: none;
-moz-transition: none;
-ms-transition: none;
-o-transition: none;
transition: none;
}
\ No newline at end of file
.dataTables_wrapper {
position: relative;
clear: both;
*zoom: 1;
}
.dataTables_length {
float: left;
margin-bottom: 10px;
}
.dataTables_length::after {
clear: both;
display: block;
content: '';
}
.dataTables_length label {
display: inline-block;
}
.dataTable {
display: inline-table;
}
.dataTable:before {
display: block;
clear: both;
content: '';
}
.dataTable thead > tr > th {
background-color: transparent;
background-repeat: no-repeat;
background-position: 97% center;
}
.dataTables_filter {
float: right;
text-align: right;
margin-bottom: 10px;
}
.dataTables_filter:after {
display: block;
clear: both;
content: '';
}
.dataTables_filter input {
border: 1px solid #ddd;
padding: 10px;
font-zize: 13px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
margin-left: 5px;
}
.dataTables_filter input:focus {
border-color: #999;
-moz-box-shadow: 3px 3px 0 rgba(0,0,0,0.05);
-webkit-box-shadow: 3px 3px 0 rgba(0,0,0,0.05);
box-shadow: 3px 3px 0 rgba(0,0,0,0.05);
}
.dataTables_info {
clear: both;
float: left;
}
.dataTables_paginate {
float: right;
text-align: right;
}
/* Two button pagination - previous / next */
.paginate_disabled_previous,
.paginate_enabled_previous,
.paginate_disabled_next,
.paginate_enabled_next {
float: left;
cursor: pointer;
padding: 6px 15px;
display: inline-block;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
color: #666;
}
.paginate_enabled_previous,
.paginate_enabled_next {
color: #fff;
background: #428BCA;
border: 1px solid #357EBD;
}
.paginate_enabled_previous:hover,
.paginate_enabled_next:hover {
color: #fff;
background: #3276B1;
border-color: #285E8E;
color: #fff;
text-decoration: none;
}
.paginate_disabled_previous,
.paginate_disabled_next {
border: 1px solid #ccc;
background-color: #ddd;
color: #999;
}
.paginate_disabled_previous:hover,
.paginate_disabled_next:hover {
text-decoration: none;
color: #999;
cursor: default;
}
.paginate_disabled_next,
.paginate_enabled_next {
margin-left: 5px;
}
/* Full number pagination */
.paging_full_numbers {
line-height: 22px;
}
.paging_full_numbers a:active {
outline: none
}
.paging_full_numbers a:hover {
text-decoration: none;
}
.paging_full_numbers a.paginate_button,
.paging_full_numbers a.paginate_active {
border: 1px solid #ddd;
padding: 6px 12px;
margin-right: 5px;
cursor: pointer;
color: #636E7B;
line-height: 21px;
float: left;
position: relative;
background: #fff;
display: inline-block;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
.paging_full_numbers > li:first-child > a,
.paging_full_numbers > li:first-child > span {
border-bottom-left-radius: 3px;
border-top-left-radius: 3px;
}
.paging_full_numbers a.paginate_button:hover {
text-decoration: none !important;
background-color: #E4E7EA;
}
.paging_full_numbers a.paginate_active {
background-color: #1CAF9A;
border-color: #1CAF9A;
color: #fff;
}
.paging_full_numbers a:focus {
text-decoration: none;
}
.paging_full_numbers a.last {
margin-right: 0;
}
.paginate_button_disabled {
opacity: 0.5;
}
.paginate_button_disabled:hover {
cursor: default !important;
background-color: #fff !important;
}
/*
* Processing indicator
*/
.dataTables_processing {
position: absolute;
top: 50%;
left: 50%;
width: 250px;
height: 30px;
margin-left: -125px;
margin-top: -15px;
padding: 14px 0 2px 0;
border: 1px solid #ddd;
text-align: center;
color: #999;
font-size: 14px;
background-color: white;
}
/*
* Sorting
*/
.sorting {
background-image: url('../images/sort_both.png');
}
.sorting_asc {
background-image: url('../images/sort_asc.png');
}
.sorting_desc {
background-image: url('../images/sort_desc.png');
}
.sorting_asc_disabled {
background-image: url('../images/sort_asc_disabled.png');
}
.sorting_desc_disabled {
background-image: url('../images/sort_desc_disabled.png');
}
table.dataTable thead th:active,
table.dataTable thead td:active {
outline: none;
}
/*
* Scrolling
*/
.dataTables_scroll {
clear: both;
}
.dataTables_scrollBody {
*margin-top: -1px;
-webkit-overflow-scrolling: touch;
}
/* jQuery Gridly
* Copyright 2013 Kevin Sylvestre
* 1.1.4
*/
.gridly, .gridly > :not(.dragging) {
-webkit-transition: all 0.4s ease-in-out;
-moz-transition: all 0.4s ease-in-out;
transition: all 0.4s ease-in-out; }
.gridly .dragging {
z-index: 800; }
#gritter-notice-wrapper {
position:fixed;
top:20px;
right:20px;
width:301px;
z-index:9999;
}
.gritter-item-wrapper {
position:relative;
margin:0 0 10px 0;
background: #000;
background: rgba(0,0,0,0.75);
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
.growl-primary {
background: rgba(66,139,202,0.80);
}
.growl-success {
background: rgba(28,175,154,0.80);
}
.growl-warning {
background: rgba(240,173,78,0.80);
}
.growl-danger {
background: rgba(217,83,79,0.80);
}
.growl-info {
background: rgba(91,192,222,0.80);
}
.gritter-item {
display:block;
color:#eee;
padding: 15px;
font-size: 11px;
}
.gritter-item p {
padding:0;
margin:0;
word-wrap:break-word;
line-height: 18px;
font-size: 13px;
opacity: 0.75;
}
.gritter-close {
display:none;
position:absolute;
top: 10px;
right: 10px;
background: url(../images/close-white.png) no-repeat center center;
cursor:pointer;
width:10px;
height:11px;
text-indent:-9999em;
opacity: 0.5;
}
.gritter-title {
font-size: 14px;
padding:0 0 7px 0;
display:block;
font-family: 'LatoBold';
}
.gritter-image {
width:48px;
height:48px;
float:left;
}
.gritter-with-image,
.gritter-without-image {
padding:0;
}
.gritter-with-image {
width:220px;
float:right;
padding-left: 10px;
}
/* for the light (white) version of the gritter notice */
.gritter-light .gritter-item {
background: #fff;
background: rgba(255,255,255,0.75);
color: #666;
}
#gritter-notice-wrapper{
top: auto;
left: 50%;
margin-left: -150px;
bottom: 55%;
right: auto;
position: fixed;
}
#gritter-notice-wrapper p{
text-align: center;
}
\ No newline at end of file
div.tagsinput {
border:1px solid #ccc;
background: #FFF;
padding:5px;
width:300px;
height:100px;
overflow-y: auto;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
}
div.tagsinput span.tag {
display: block;
float: left;
padding: 2px 5px;
text-decoration:none;
background: #1caf9a;
color: #fff;
margin-right: 5px;
margin-bottom:5px;
font-size:13px;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
border-radius: 2px;
}
div.tagsinput span.tag a {
font-weight: bold;
color: #fff;
opacity: 0.5;
text-decoration: none;
font-size: 11px;
}
div.tagsinput span.tag a:hover {
opacity: 1;
}
div.tagsinput input {
width: 80px;
margin: 0px;
font-size: 13px;
border: 1px solid transparent;
padding: 5px;
background: transparent;
color: #000;
outline: 0px;
margin-right: 5px;
margin-bottom: 5px;
}
div.tagsinput div {
display: block;
float: left;
}
.tags_clear {
clear: both;
width: 100%;
height: 0px;
}
.not_valid {
background: #FBD8DB !important;
color: #90111A !important;
}
/* Generated by Font Squirrel (http://www.fontsquirrel.com) on January 26, 2013 07:16:15 AM America/New_York */
@font-face {
font-family: 'LatoBlackItalic';
src: url('../fonts/lato/Lato-BlaIta-webfont.eot');
src: url('../fonts/lato/Lato-BlaIta-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/lato/Lato-BlaIta-webfont.woff') format('woff'),
url('../fonts/lato/Lato-BlaIta-webfont.ttf') format('truetype'),
url('../fonts/lato/Lato-BlaIta-webfont.svg#LatoBlackItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LatoBlack';
src: url('../fonts/lato/Lato-Bla-webfont.eot');
src: url('../fonts/lato/Lato-Bla-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/lato/Lato-Bla-webfont.woff') format('woff'),
url('../fonts/lato/Lato-Bla-webfont.ttf') format('truetype'),
url('../fonts/lato/Lato-Bla-webfont.svg#LatoBlack') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LatoBoldItalic';
src: url('../fonts/lato/Lato-BolIta-webfont.eot');
src: url('../fonts/lato/Lato-BolIta-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/lato/Lato-BolIta-webfont.woff') format('woff'),
url('../fonts/lato/Lato-BolIta-webfont.ttf') format('truetype'),
url('../fonts/lato/Lato-BolIta-webfont.svg#LatoBoldItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LatoBold';
src: url('../fonts/lato/Lato-Bol-webfont.eot');
src: url('../fonts/lato/Lato-Bol-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/lato/Lato-Bol-webfont.woff') format('woff'),
url('../fonts/lato/Lato-Bol-webfont.ttf') format('truetype'),
url('../fonts/lato/Lato-Bol-webfont.svg#LatoBold') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LatoItalic';
src: url('../fonts/lato/Lato-RegIta-webfont.eot');
src: url('../fonts/lato/Lato-RegIta-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/lato/Lato-RegIta-webfont.woff') format('woff'),
url('../fonts/lato/Lato-RegIta-webfont.ttf') format('truetype'),
url('../fonts/lato/Lato-RegIta-webfont.svg#LatoItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LatoRegular';
src: url('../fonts/lato/Lato-Reg-webfont.eot');
src: url('../fonts/lato/Lato-Reg-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/lato/Lato-Reg-webfont.woff') format('woff'),
url('../fonts/lato/Lato-Reg-webfont.ttf') format('truetype'),
url('../fonts/lato/Lato-Reg-webfont.svg#LatoRegular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LatoLightItalic';
src: url('../fonts/lato/Lato-LigIta-webfont.eot');
src: url('../fonts/lato/Lato-LigIta-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/lato/Lato-LigIta-webfont.woff') format('woff'),
url('../fonts/lato/Lato-LigIta-webfont.ttf') format('truetype'),
url('../fonts/lato/Lato-LigIta-webfont.svg#LatoLightItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LatoLight';
src: url('../fonts/lato/Lato-Lig-webfont.eot');
src: url('../fonts/lato/Lato-Lig-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/lato/Lato-Lig-webfont.woff') format('woff'),
url('../fonts/lato/Lato-Lig-webfont.ttf') format('truetype'),
url('../fonts/lato/Lato-Lig-webfont.svg#LatoLight') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LatoHairlineItalic';
src: url('../fonts/lato/Lato-HaiIta-webfont.eot');
src: url('../fonts/lato/Lato-HaiIta-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/lato/Lato-HaiIta-webfont.woff') format('woff'),
url('../fonts/lato/Lato-HaiIta-webfont.ttf') format('truetype'),
url('../fonts/lato/Lato-HaiIta-webfont.svg#LatoHairlineItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'LatoHairline';
src: url('../fonts/lato/Lato-Hai-webfont.eot');
src: url('../fonts/lato/Lato-Hai-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/lato/Lato-Hai-webfont.woff') format('woff'),
url('../fonts/lato/Lato-Hai-webfont.ttf') format('truetype'),
url('../fonts/lato/Lato-Hai-webfont.svg#LatoHairline') format('svg');
font-weight: normal;
font-style: normal;
}
.morris-hover {
position: absolute;
z-index: 1000;
}
.morris-hover.morris-default-style {
border-radius: 3px;
padding: 6px;
color: #333;
background: rgba(255, 255, 255, 0.8);
border: 1px solid #ddd;
font-size: 12px;
text-align: center;
}
.morris-hover.morris-default-style .morris-hover-row-label {
font-weight: bold;
margin: 0.25em 0;
}
.morris-hover.morris-default-style .morris-hover-point{
white-space: nowrap;
margin: 0.1em 0;
}
/*
HTML5 Reset :: style.css
----------------------------------------------------------
We have learned much from/been inspired by/taken code where offered from:
Eric Meyer :: http://meyerweb.com
HTML5 Doctor :: http://html5doctor.com
and the HTML5 Boilerplate :: http://html5boilerplate.com
-------------------------------------------------------------------------------*/
/* Let's default this puppy out
-------------------------------------------------------------------------------*/
html, body, body div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, figure, footer, header, menu, nav, section, time, mark, audio, video, details, summary {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font-weight: normal;
vertical-align: baseline;
background: transparent;
}
article, aside, figure, footer, header, nav, section, details, summary {display: block;}
/* Handle box-sizing while better addressing child elements:
http://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ */
html {
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
/* consider resetting the default cursor: https://gist.github.com/murtaugh/5247154 */
/* Responsive images and other embedded objects
Note: keeping IMG here will cause problems if you're using foreground images as sprites.
If this default setting for images is causing issues, you might want to replace it with a .responsive class instead. */
img,
object,
embed {max-width: 100%;}
/* force a vertical scrollbar to prevent a jumpy page */
html {overflow-y: scroll;}
/* we use a lot of ULs that aren't bulleted.
don't forget to restore the bullets within content. */
ul {list-style: none;}
blockquote, q {quotes: none;}
blockquote:before,
blockquote:after,
q:before,
q:after {content: ''; content: none;}
a {margin: 0; padding: 0; font-size: 100%; vertical-align: baseline; background: transparent;}
del {text-decoration: line-through;}
abbr[title], dfn[title] {border-bottom: 1px dotted #000; cursor: help;}
/* tables still need cellspacing="0" in the markup */
table {border-collapse: collapse; border-spacing: 0;}
th {font-weight: bold; vertical-align: bottom;}
td {font-weight: normal; vertical-align: top;}
hr {display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0;}
input, select {vertical-align: middle;}
pre {
white-space: pre; /* CSS2 */
white-space: pre-wrap; /* CSS 2.1 */
white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */
word-wrap: break-word; /* IE */
}
input[type="radio"] {vertical-align: text-bottom;}
input[type="checkbox"] {vertical-align: bottom;}
.ie7 input[type="checkbox"] {vertical-align: baseline;}
.ie6 input {vertical-align: text-bottom;}
select, input, textarea {font: 99% sans-serif;}
table {font-size: inherit; font: 100%;}
small {font-size: 85%;}
strong {font-weight: bold;}
td, td img {vertical-align: top;}
/* Make sure sup and sub don't mess with your line-heights http://gist.github.com/413930 */
sub, sup {font-size: 75%; line-height: 0; position: relative;}
sup {top: -0.5em;}
sub {bottom: -0.25em;}
/* standardize any monospaced elements */
pre, code, kbd, samp {font-family: monospace, sans-serif;}
/* hand cursor on clickable elements */
.clickable,
label,
input[type=button],
input[type=submit],
input[type=file],
button {cursor: pointer;}
/* Webkit browsers add a 2px margin outside the chrome of form elements */
button, input, select, textarea {margin: 0;}
/* make buttons play nice in IE */
button,
input[type=button] {width: auto; overflow: visible;}
/* scale images in IE7 more attractively */
.ie7 img {-ms-interpolation-mode: bicubic;}
/* prevent BG image flicker upon hover
(commented out as usage is rare, and the filter syntax messes with some pre-processors)
.ie6 html {filter: expression(document.execCommand("BackgroundImageCache", false, true));}
*/
/* let's clear some floats */
.clearfix:before, .clearfix:after { content: "\0020"; display: block; height: 0; overflow: hidden; }
.clearfix:after { clear: both; }
.clearfix { zoom: 1; }
\ No newline at end of file
@font-face {
font-family: 'RobotoRegular';
src: url('../fonts/roboto/Roboto-Regular-webfont.eot');
src: url('../fonts/roboto/Roboto-Regular-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-Regular-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-Regular-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-Regular-webfont.svg#RobotoRegular') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoItalic';
src: url('../fonts/roboto/Roboto-Italic-webfont.eot');
src: url('../fonts/roboto/Roboto-Italic-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-Italic-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-Italic-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-Italic-webfont.svg#RobotoItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoBold';
src: url('../fonts/roboto/Roboto-Bold-webfont.eot');
src: url('../fonts/roboto/Roboto-Bold-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-Bold-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-Bold-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-Bold-webfont.svg#RobotoBold') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoBoldItalic';
src: url('../fonts/roboto/Roboto-BoldItalic-webfont.eot');
src: url('../fonts/roboto/Roboto-BoldItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-BoldItalic-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-BoldItalic-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-BoldItalic-webfont.svg#RobotoBoldItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoCondensed';
src: url('../fonts/roboto/Roboto-Condensed-webfont.eot');
src: url('../fonts/roboto/Roboto-Condensed-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-Condensed-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-Condensed-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-Condensed-webfont.svg#RobotoCondensed') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoCondensedItalic';
src: url('../fonts/roboto/Roboto-CondensedItalic-webfont.eot');
src: url('../fonts/roboto/Roboto-CondensedItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-CondensedItalic-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-CondensedItalic-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-CondensedItalic-webfont.svg#RobotoCondensedItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoBoldCondensed';
src: url('../fonts/roboto/Roboto-BoldCondensed-webfont.eot');
src: url('../fonts/roboto/Roboto-BoldCondensed-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-BoldCondensed-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-BoldCondensed-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-BoldCondensed-webfont.svg#RobotoBoldCondensed') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoBoldCondensedItalic';
src: url('../fonts/roboto/Roboto-BoldCondensedItalic-webfont.eot');
src: url('../fonts/roboto/Roboto-BoldCondensedItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-BoldCondensedItalic-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-BoldCondensedItalic-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-BoldCondensedItalic-webfont.svg#RobotoBoldCondensedItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoThin';
src: url('../fonts/roboto/Roboto-Thin-webfont.eot');
src: url('../fonts/roboto/Roboto-Thin-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-Thin-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-Thin-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-Thin-webfont.svg#RobotoThin') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoThinItalic';
src: url('../fonts/roboto/Roboto-ThinItalic-webfont.eot');
src: url('../fonts/roboto/Roboto-ThinItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-ThinItalic-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-ThinItalic-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-ThinItalic-webfont.svg#RobotoThinItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoLight';
src: url('../fonts/roboto/Roboto-Light-webfont.eot');
src: url('../fonts/roboto/Roboto-Light-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-Light-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-Light-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-Light-webfont.svg#RobotoLight') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoLightItalic';
src: url('../fonts/roboto/Roboto-LightItalic-webfont.eot');
src: url('../fonts/roboto/Roboto-LightItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-LightItalic-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-LightItalic-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-LightItalic-webfont.svg#RobotoLightItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoMedium';
src: url('../fonts/roboto/Roboto-Medium-webfont.eot');
src: url('../fonts/roboto/Roboto-Medium-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-Medium-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-Medium-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-Medium-webfont.svg#RobotoMedium') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoMediumItalic';
src: url('../fonts/roboto/Roboto-MediumItalic-webfont.eot');
src: url('../fonts/roboto/Roboto-MediumItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-MediumItalic-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-MediumItalic-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-MediumItalic-webfont.svg#RobotoMediumItalic') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoBlack';
src: url('../fonts/roboto/Roboto-Black-webfont.eot');
src: url('../fonts/roboto/Roboto-Black-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-Black-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-Black-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-Black-webfont.svg#RobotoBlack') format('svg');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'RobotoBlackItalic';
src: url('../fonts/roboto/Roboto-BlackItalic-webfont.eot');
src: url('../fonts/roboto/Roboto-BlackItalic-webfont.eot?#iefix') format('embedded-opentype'),
url('../fonts/roboto/Roboto-BlackItalic-webfont.woff') format('woff'),
url('../fonts/roboto/Roboto-BlackItalic-webfont.ttf') format('truetype'),
url('../fonts/roboto/Roboto-BlackItalic-webfont.svg#RobotoBlackItalic') format('svg');
font-weight: normal;
font-style: normal;
}
body {
background: #fff;
}
/*** HEADER ***/
.logopanel,
.headerbar {
background: #1d2939;
border-bottom: 1px solid #1d2939;
}
.logopanel h1 {
color: #fff;
}
.headerbar {
border-color: rgba(255,255,255,0.05);
}
.menutoggle {
border-color: rgba(255,255,255,0.05);
color: #fff;
}
.menutoggle:hover {
background: rgba(0,0,0,0.1);
color: #fff;
}
.headerbar .searchform input {
background: none;
border-color: rgba(255,255,255,0.05);
}
.headermenu > li {
border-color: rgba(255,255,255,0.05);
}
.headermenu .tp-icon,
.headermenu .dropdown-toggle {
background: none;
}
.headermenu .tp-icon {
color: rgba(255,255,255,0.5);
}
.headermenu .chat-icon {
border: 0;
}
.headermenu .dropdown-menu {
margin-top: 1px;
}
.headermenu .dropdown-toggle:hover,
.headermenu .dropdown-toggle:focus,
.headermenu .dropdown-toggle:active,
.headermenu .dropdown-toggle.active,
.headermenu .open .dropdown-toggle.dropdown-toggle {
background: rgba(0,0,0,0.1);
color: rgba(255,255,255,0.8);
}
.dropdown-menu-head .title {
background: #fff;
border: 1px solid #ddd;
border-bottom-color: #eee;
border-top: 0;
}
.headermenu .dropdown-menu:after {
border-bottom-color: #fff;
}
.headermenu .dropdown-menu-usermenu {
background: #fff;
border: 1px solid #ddd;
border-top: 0;
}
.leftpanel-collapsed .headerbar {
border-left: 0;
margin-left: -52px;
}
/*** LEFT PANEL ***/
.nav-bracket > li > a {
color: #333;
}
.nav-bracket > li.active > a {
-moz-box-shadow: 0 3px 0 rgba(0, 0, 0, 0.05);
-webkit-box-shadow: 0 3px 0 rgba(0, 0, 0, 0.05);
box-shadow: 0 3px 0 rgba(0, 0, 0, 0.05);
}
.nav-bracket > li > a:hover,
.nav-bracket > li > a:active,
.nav-bracket > li.nav-active > a {
background-color: #eee;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.nav-bracket > li.nav-parent > a:hover {
background-color: #eee;
}
.infosummary .datainfo h4 {
color: #333;
}
.infosummary li,
.infosummary ul {
border-color: rgba(0,0,0,0.1);
}
.leftpanel-collapsed .nav-bracket li.nav-hover ul {
background-color: #fff;
}
.leftpanel-collapsed .nav-bracket li a span {
background: #eee;
}
.nav-bracket > li.nav-parent.active > a,
.nav-bracket > li.nav-active.active > a,
.nav-bracket > li.nav-active.active > a:hover {
background-color: #1CAF9A;
}
/*** MAIN PANEL ***/
.pageheader,
.contentpanel {
border-left: 1px solid #e7e7e7;
}
/*** RIGHT PANEL ***/
.rightpanel .nav-tabs {
background: #e4e7ea;
}
.rightpanel .nav-tabs > li > a {
color: rgba(0,0,0,0.5);
}
.rightpanel .nav-tabs > .active > a,
.rightpanel .nav-tabs > .active > a:hover,
.rightpanel .nav-tabs > .active > a:focus {
background-color: #fff;
color: #333;
}
.chatuserlist .online .media-body strong {
color: #1CAF9A;
}
/*** HORIZONTAL MENU ***/
.headerbar .navhor-bracket > li > a {
color: #ccc;
}
.headerbar .logopanel {
border-right: 0;
}
.headerbar .navhor-bracket > li > a {
padding: 15px 15px 13px 15px;
}
.headerbar .navhor-bracket > li .dropdown-menu {
border-top: 0;
}
.toggle-slide {
overflow: hidden;
cursor: pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
direction: ltr;
}
.toggle-slide .toggle-on,.toggle-slide .toggle-off,.toggle-slide .toggle-blob {
float: left;
}
.toggle-slide .toggle-blob {
position: relative;
z-index: 99;
cursor: hand;
cursor: grab;
cursor: -moz-grab;
cursor: -webkit-grab;
}
.toggle-slide {
overflow: hidden;
cursor: pointer;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
direction: ltr;
}
.toggle-slide .toggle-on,.toggle-slide .toggle-off,.toggle-slide .toggle-blob {
float: left;
}
.toggle-slide .toggle-blob {
position: relative;
z-index: 99;
cursor: hand;
cursor: grab;
cursor: -moz-grab;
cursor: -webkit-grab;
}
/*** THEMES ***/
.toggle-default .toggle-slide {
border: 1px solid #ccc;
}
.toggle-default .toggle-slide.active {
border-color: #999;
}
.toggle-default .toggle-slide .toggle-on,
.toggle-default .toggle-slide .toggle-off,
.toggle-default .toggle-slide .toggle-blob {
font-size: 11px;
font-weight: 500;
}
.toggle-default .toggle-slide .toggle-on,
.toggle-default .toggle-select .toggle-inner .active {
background: #999;
color: #fff;
}
.toggle-default .toggle-slide .toggle-off,
.toggle-default .toggle-select .toggle-on {
color: #666;
background: #f7f7f7;
}
.toggle-default .toggle-slide .toggle-blob {
background: #fff;
border-right: 1px solid #ccc;
}
.toggle-default .toggle-slide.active .toggle-blob {
border-left: 1px solid #999;
border-right: 0;
}
.toggle-default .toggle-slide .toggle-blob:hover {
background: #fcfcfc;
}
/* toggle primary */
.toggle-primary .toggle-slide {
border: 1px solid #999;
}
.toggle-primary .toggle-slide.active {
border-color: #357EBD;
}
.toggle-primary .toggle-slide .toggle-on,
.toggle-primary .toggle-slide .toggle-off,
.toggle-primary .toggle-slide .toggle-blob {
font-size: 11px;
font-weight: 500;
}
.toggle-primary .toggle-slide .toggle-on,
.toggle-primary .toggle-select .toggle-inner .active {
background: #428BCA;
color: #fff;
}
.toggle-primary .toggle-slide .toggle-off,
.toggle-primary .toggle-select .toggle-on {
color: #fff;
background: #bbb;
}
.toggle-primary .toggle-slide .toggle-blob {
background: #fff;
border-right: 1px solid #999;
}
.toggle-primary .toggle-slide.active .toggle-blob {
border-left: 1px solid #357EBD;
border-right: 0;
}
.toggle-primary .toggle-slide .toggle-blob:hover {
background: #fcfcfc;
}
/* toggle success */
.toggle-success .toggle-slide {
border: 1px solid #999;
}
.toggle-success .toggle-slide.active {
border-color: #1CAF9A;
}
.toggle-success .toggle-slide .toggle-on,
.toggle-success .toggle-slide .toggle-off,
.toggle-success .toggle-slide .toggle-blob {
font-size: 11px;
font-weight: 500;
}
.toggle-success .toggle-slide .toggle-on,
.toggle-success .toggle-select .toggle-inner .active {
background: #1CAF9A;
color: #fff;
}
.toggle-success .toggle-slide .toggle-off,
.toggle-success .toggle-select .toggle-on {
color: #fff;
background: #bbb;
}
.toggle-success .toggle-slide .toggle-blob {
background: #fff;
border-right: 1px solid #999;
}
.toggle-success .toggle-slide.active .toggle-blob {
border-left: 1px solid #4CAE4C;
border-right: 0;
}
.toggle-success .toggle-slide .toggle-blob:hover {
background: #fcfcfc;
}
/* toggle warning */
.toggle-warning .toggle-slide {
border: 1px solid #999;
}
.toggle-warning .toggle-slide.active {
border-color: #EEA236;
}
.toggle-warning .toggle-slide .toggle-on,
.toggle-warning .toggle-slide .toggle-off,
.toggle-warning .toggle-slide .toggle-blob {
font-size: 11px;
font-weight: 500;
}
.toggle-warning .toggle-slide .toggle-on,
.toggle-warning .toggle-select .toggle-inner .active {
background: #F0AD4E;
color: #fff;
}
.toggle-warning .toggle-slide .toggle-off,
.toggle-warning .toggle-select .toggle-on {
color: #fff;
background: #bbb;
}
.toggle-warning .toggle-slide .toggle-blob {
background: #fff;
border-right: 1px solid #999;
}
.toggle-warning .toggle-slide.active .toggle-blob {
border-left: 1px solid #EEA236;
border-right: 0;
}
.toggle-warning .toggle-slide .toggle-blob:hover {
background: #fcfcfc;
}
/* toggle danger */
.toggle-danger .toggle-slide {
border: 1px solid #999;
}
.toggle-danger .toggle-slide.active {
border-color: #D43F3A;
}
.toggle-danger .toggle-slide .toggle-on,
.toggle-danger .toggle-slide .toggle-off,
.toggle-danger .toggle-slide .toggle-blob {
font-size: 11px;
font-weight: 500;
}
.toggle-danger .toggle-slide .toggle-on,
.toggle-danger .toggle-select .toggle-inner .active {
background: #D9534F;
color: #fff;
}
.toggle-danger .toggle-slide .toggle-off,
.toggle-danger .toggle-select .toggle-on {
color: #fff;
background: #bbb;
}
.toggle-danger .toggle-slide .toggle-blob {
background: #fff;
border-right: 1px solid #999;
}
.toggle-danger .toggle-slide.active .toggle-blob {
border-left: 1px solid #D43F3A;
border-right: 0;
}
.toggle-danger .toggle-slide .toggle-blob:hover {
background: #fcfcfc;
}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment