Version 2.0
实现基本功能 实现了基本界面admin.php 支持查看各种信息,支持自动base64解码 todolist keepsession 认证 完全启用CSP 我的js js模板 为实现一些jqxgrid无法实现的功能改动了jqx库,详见diff文件夹
217
admin.php
@@ -1,3 +1,218 @@
|
|||||||
<?php
|
<?php
|
||||||
|
define("IN_XSS_PLATFORM",true);
|
||||||
|
require("auth.php");
|
||||||
?>
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="static/css/bootstrap.min.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="static/css/Site.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="static/css/notification.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="static/css/jqx.base.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="static/css/jqx.office.css" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="static/css/animate.css" type="text/css" />
|
||||||
|
|
||||||
|
<script type="text/javascript" src="static/js/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/bootstrap.min.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jquery-ui.min.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/notification.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/localization.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxcore.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxdata.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxbuttons.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxscrollbar.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxmenu.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxgrid.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxgrid.selection.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxgrid.edit.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxgrid.sort.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxtabs.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/getTheme.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxgrid.columnsresize.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxwindow.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxdropdownlist.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxgrid.pager.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxlistbox.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/loadgrid.js"></script>
|
||||||
|
<script type="text/javascript" src="static/js/jqxgrid.filter.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="container-fluid">
|
||||||
|
<div class="row row-offcanvas row-offcanvas-left">
|
||||||
|
<div id="nav-section" class="col-xs-12 column">
|
||||||
|
<div class="navbar-default">
|
||||||
|
<button id="toggle-button" type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<h1 id="dash-logo" class="center-block">Blue-Lotus</h1>
|
||||||
|
<div class="collapse navbar-collapse" id="sidebar-nav" role="navigation">
|
||||||
|
<ul id="Tab" class="nav">
|
||||||
|
<li class="active">
|
||||||
|
<a href="#panel" data-toggle="tab">
|
||||||
|
<span class="icon icon-chart-column"></span>接收面板</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#js" data-toggle="tab">
|
||||||
|
<span class="icon icon-star-empty"></span>我的JS</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#template" data-toggle="tab">
|
||||||
|
<span class="icon icon-faves"></span>公共模板</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="#aboutus" data-toggle="tab">
|
||||||
|
<span class="icon icon-info"></span>关于</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<span id="rights">Copyright © 2015-2016 Powered by Firesun</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="tab-content">
|
||||||
|
|
||||||
|
<div id="panel" class="tab-pane active main-section col-xs-12 column">
|
||||||
|
<div class="main-section-header row">
|
||||||
|
<h2 class="eam-efficiency col-xs-3">XSS接收面板</h2>
|
||||||
|
<div style="clear:both;"></div>
|
||||||
|
</div>
|
||||||
|
<div id="panelGrid"></div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div id="js" class="tab-pane main-section col-xs-12 column">
|
||||||
|
<div class="main-section-header row">
|
||||||
|
<h2 class="eam-efficiency col-xs-3">我的js</h2>
|
||||||
|
<div style="clear:both;"></div>
|
||||||
|
</div>
|
||||||
|
<div id="myJS"></div>
|
||||||
|
</div>
|
||||||
|
<div id="template" class="tab-pane main-section col-xs-12 column">
|
||||||
|
<div class="main-section-header row">
|
||||||
|
<h2 class="eam-efficiency col-xs-3">js模板</h2>
|
||||||
|
<div style="clear:both;"></div>
|
||||||
|
</div>
|
||||||
|
<div id="jsTemplate"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="aboutus" class="tab-pane main-section col-xs-12 column">
|
||||||
|
<div class="main-section-header row">
|
||||||
|
<h2 class="eam-efficiency col-xs-3">关于</h2>
|
||||||
|
<div style="clear:both;"></div>
|
||||||
|
</div>
|
||||||
|
<div id="about_detail"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="notifications-bottom-right"></div>
|
||||||
|
|
||||||
|
<div style="display: none;">
|
||||||
|
|
||||||
|
|
||||||
|
<div id="searchWindow" class="windows">
|
||||||
|
<div>
|
||||||
|
查找记录</div>
|
||||||
|
<div style="overflow: hidden;">
|
||||||
|
<div>
|
||||||
|
关键字:</div>
|
||||||
|
<div style='margin-top:5px;'>
|
||||||
|
<input id='inputField' type="text" class="jqx-input" style="width: 200px; height: 23px;" />
|
||||||
|
</div>
|
||||||
|
<div style="margin-top: 7px; clear: both;">
|
||||||
|
列名:</div>
|
||||||
|
<div style='margin-top:5px;'>
|
||||||
|
<div id='dropdownlist'>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="button" style='margin-top: 15px; margin-left: 50px; float: left;' value="查找" id="findButton" />
|
||||||
|
<input type="button" style='margin-left: 5px; margin-top: 15px; float: left;' value="清除" id="clearButton" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="deleteConfirmWindow" class="windows">
|
||||||
|
<div>
|
||||||
|
<img width="14" height="14" src="static/images/help.png" alt="" />
|
||||||
|
确认</div>
|
||||||
|
<div>
|
||||||
|
<div style="margin: 5px;">
|
||||||
|
您确认执行删除操作么?
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div style="float: right; margin-top: 15px;">
|
||||||
|
<input type="button" id="deleteConfirm_ok" value="确认" style="margin-right: 10px" />
|
||||||
|
<input type="button" id="deleteConfirm_cancel" value="取消" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="clearConfirmWindow" class="windows">
|
||||||
|
<div>
|
||||||
|
<img width="14" height="14" src="static/images/help.png" alt="" />
|
||||||
|
确认</div>
|
||||||
|
<div>
|
||||||
|
<div style="margin: 5px;">
|
||||||
|
您确认清空所有记录么?
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div style="float: right; margin-top: 15px;">
|
||||||
|
<input type="button" id="clearConfirm_ok" value="确认" style="margin-right: 10px" />
|
||||||
|
<input type="button" id="clearConfirm_cancel" value="取消" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="failedWindow" class="windows">
|
||||||
|
<div>
|
||||||
|
<img width="14" height="14" src="static/images/close.png" alt="" />
|
||||||
|
失败</div>
|
||||||
|
<div>
|
||||||
|
<div style="margin: 5px;">
|
||||||
|
操作失败!
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div style="float: right; margin-top: 15px;">
|
||||||
|
<input type="button" id="failed_ok" value="确认" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div >
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script id="xss-detail-template" type="text/template">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div style='margin: 10px;'>
|
||||||
|
<ul style='margin-left: 30px;'>
|
||||||
|
<li>GET</li>
|
||||||
|
<li>POST</li>
|
||||||
|
<li>Cookie</li>
|
||||||
|
<li>HTTP请求信息</li>
|
||||||
|
<li>其他信息</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<div class='get_grid'></div>
|
||||||
|
<div class='post_grid'></div>
|
||||||
|
<div class='cookie_grid'></div>
|
||||||
|
<div class='headers_grid'></div>
|
||||||
|
<div class='information'></div>
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|||||||
4
aes.php
@@ -1,4 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
if(!defined('IN_XSS_PLATFORM')) {
|
||||||
|
exit('Access Denied');
|
||||||
|
}
|
||||||
|
|
||||||
/*Aes.php
|
/*Aes.php
|
||||||
*Date 2009/09/04
|
*Date 2009/09/04
|
||||||
*Auth song_qilin
|
*Auth song_qilin
|
||||||
|
|||||||
90
api.php
@@ -1,90 +0,0 @@
|
|||||||
<?php
|
|
||||||
require('auth.php');
|
|
||||||
require_once("util.php");
|
|
||||||
require_once("config.php");
|
|
||||||
require_once("dio.php");
|
|
||||||
header('Content-Type: application/json');
|
|
||||||
if(isset($_GET['cmd']))
|
|
||||||
{
|
|
||||||
switch($_GET['cmd'])
|
|
||||||
{
|
|
||||||
case 'list':
|
|
||||||
echo json_encode(dirList());
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'get':
|
|
||||||
if(isset($_GET['id'])&&preg_match('/^[0-9]{10}$/',$_GET['id']))
|
|
||||||
echo json_encode(loadInfo($_GET['id']));
|
|
||||||
else
|
|
||||||
echo json_encode(false);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'del':
|
|
||||||
if(isset($_GET['id'])&&preg_match('/^[0-9]{10}$/',$_GET['id']))
|
|
||||||
echo json_encode(delInfo($_GET['id']));
|
|
||||||
else
|
|
||||||
echo json_encode(false);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'clear':
|
|
||||||
clearInfo();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function dirList() {
|
|
||||||
|
|
||||||
$list=array();
|
|
||||||
$files = glob(DATA_PATH . '/*.php');
|
|
||||||
|
|
||||||
foreach ($files as $file) {
|
|
||||||
//$listinfo=array();
|
|
||||||
$info=loadInfo(basename($file,".php"));
|
|
||||||
|
|
||||||
//$listinfo["request_time"]=$info["request_time"];
|
|
||||||
//$listinfo['user_IP']=$info['user_IP'];
|
|
||||||
//$listinfo['location']=$info['location'];
|
|
||||||
|
|
||||||
//$listinfo['request_method']=$info['request_method'];
|
|
||||||
|
|
||||||
|
|
||||||
$data_type=array();
|
|
||||||
if(count($info['get_data'])>0)
|
|
||||||
{
|
|
||||||
$get_keys=array();
|
|
||||||
foreach($info['get_data'] as $k => $v) {
|
|
||||||
$get_keys[]=$k;
|
|
||||||
}
|
|
||||||
$data_type['GET']=$get_keys;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(count($info['post_data'])>0)
|
|
||||||
{
|
|
||||||
$post_keys=array();
|
|
||||||
foreach($info['post_data'] as $k => $v) {
|
|
||||||
$post_keys[]=$k;
|
|
||||||
}
|
|
||||||
$data_type['POST']=$post_keys;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if(count($info['cookie_data'])>0)
|
|
||||||
{
|
|
||||||
$cookie_keys=array();
|
|
||||||
foreach($info['cookie_data'] as $k => $v) {
|
|
||||||
$cookie_keys[]=$k;
|
|
||||||
}
|
|
||||||
$data_type['COOKIE']=$cookie_keys;
|
|
||||||
}
|
|
||||||
|
|
||||||
$info['data_type']=json_encode($data_type);
|
|
||||||
|
|
||||||
$list[]= $info;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return $list;
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
7
auth.php
@@ -1,3 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
|
if(!defined('IN_XSS_PLATFORM')) {
|
||||||
|
exit('Access Denied');
|
||||||
|
}
|
||||||
|
header("Content-Security-Policy: default-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'; frame-src 'none' ");
|
||||||
|
header("X-Content-Security-Policy: default-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'; frame-src 'none' ");
|
||||||
|
header("X-WebKit-CSP: default-src 'self'; object-src 'none'; style-src 'self' 'unsafe-inline'; frame-src 'none' ");
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
@@ -1,7 +1,12 @@
|
|||||||
<?php
|
<?php
|
||||||
|
if(!defined('IN_XSS_PLATFORM')) {
|
||||||
|
exit('Access Denied');
|
||||||
|
}
|
||||||
|
|
||||||
define('PASS', 'bluelotus');
|
define('PASS', 'bluelotus');
|
||||||
define('DATA_PATH', 'data');
|
define('DATA_PATH', 'data');
|
||||||
define('ENABLE_ENCRYPT', true);
|
define('ENABLE_ENCRYPT', true);
|
||||||
define('ENCRYPT_PASS', "bluelotus");
|
define('ENCRYPT_PASS', "bluelotus");
|
||||||
define('KEEP_SESSION', true);
|
define('KEEP_SESSION', true);
|
||||||
|
define('IPDATA_PATH', "qqwry.dat");
|
||||||
?>
|
?>
|
||||||
@@ -1 +0,0 @@
|
|||||||
Boom has been planted!
|
|
||||||
49
diff/jqxgrid.js.diff
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
diff --git a/jqxgrid.js b/jqxgrid.js
|
||||||
|
index 97dd39c..605cf30 100644
|
||||||
|
--- a/jqxgrid.js
|
||||||
|
+++ b/jqxgrid.js
|
||||||
|
@@ -288,9 +288,9 @@ License: http://jqwidgets.com/license/
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (h.autorowheight && !h.autoheight && !h.pageable) {
|
||||||
|
- throw new Error('jqxGrid: "autorowheight" requires setting the "autoheight" or "pageable" property to true!');
|
||||||
|
- h.host.remove();
|
||||||
|
- return
|
||||||
|
+ //throw new Error('jqxGrid: "autorowheight" requires setting the "autoheight" or "pageable" property to true!');
|
||||||
|
+ //h.host.remove();
|
||||||
|
+ //return
|
||||||
|
}
|
||||||
|
if (h.virtualmode && h.rendergridrows == null) {
|
||||||
|
throw new Error('jqxGrid: "virtualmode" requires setting the "rendergridrows"!');
|
||||||
|
@@ -6038,6 +6042,13 @@ License: http://jqwidgets.com/license/
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ else{
|
||||||
|
+ var o = n - e;
|
||||||
|
+ var g = this.vScrollInstance.max;
|
||||||
|
+ this.vScrollBar.jqxScrollBar({
|
||||||
|
+ max: o
|
||||||
|
+ });
|
||||||
|
+ }
|
||||||
|
} else {
|
||||||
|
this.vScrollBar.jqxScrollBar({
|
||||||
|
value: 0,
|
||||||
|
@@ -6584,7 +6595,7 @@ License: http://jqwidgets.com/license/
|
||||||
|
if (ad.group != undefined && this._rendergroup) {
|
||||||
|
this._rendergroup(P, k, ad, am, r, ab, J)
|
||||||
|
}
|
||||||
|
- if (this.autorowheight && (this.autoheight || this.pageable)) {
|
||||||
|
+ if (this.autorowheight) {// && (this.autoheight || this.pageable)) {
|
||||||
|
var O = this.rowsheight;
|
||||||
|
for (var V = d; V < aa; V++) {
|
||||||
|
if (this.editable && this.editcell && this.editcell.column == this.columns.records[V].datafield && this.editcell.row == this.getboundindex(ad)) {
|
||||||
|
@@ -6661,7 +6672,7 @@ License: http://jqwidgets.com/license/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- if ((this.autoheight || this.pageable) && this.autorowheight) {
|
||||||
|
+ if (this.autorowheight) {//(this.autoheight || this.pageable) &&
|
||||||
|
this._pagescache = new Array();
|
||||||
|
var W = 0;
|
||||||
|
var g = 0;
|
||||||
30
diff/jqxgrid.selection.js.diff
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
diff --git a/jqxgrid.selection.js b/jqxgrid.selection.js
|
||||||
|
index 2fe844f..3cda160 100644
|
||||||
|
--- a/jqxgrid.selection.js
|
||||||
|
+++ b/jqxgrid.selection.js
|
||||||
|
@@ -1398,16 +1398,17 @@ License: http://jqwidgets.com/license/
|
||||||
|
if (A.altKey) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
+ /*
|
||||||
|
if (A.ctrlKey || A.metaKey) {
|
||||||
|
if (this.clipboard) {
|
||||||
|
var b = String.fromCharCode(H).toLowerCase();
|
||||||
|
if (this.clipboardbegin) {
|
||||||
|
var j = null;
|
||||||
|
if (b == "c") {
|
||||||
|
j = this.clipboardbegin("copy", this.copyselection())
|
||||||
|
} else {
|
||||||
|
if (b == "x") {
|
||||||
|
j = this.clipboardbegin("cut", this.copyselection())
|
||||||
|
} else {
|
||||||
|
if (b == "v") {
|
||||||
|
j = this.clipboardbegin("paste")
|
||||||
|
@@ -1488,6 +1489,7 @@ License: http://jqwidgets.com/license/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ */
|
||||||
|
var n = Math.round(t._gettableheight());
|
||||||
|
var y = Math.round(n / t.rowsheight);
|
||||||
|
var f = t.getdatainformation();
|
||||||
18
dio.php
@@ -1,6 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
if(!defined('IN_XSS_PLATFORM')) {
|
||||||
|
exit('Access Denied');
|
||||||
|
}
|
||||||
require_once("config.php");
|
require_once("config.php");
|
||||||
require_once("util.php");
|
require_once("functions.php");
|
||||||
|
|
||||||
function saveInfo($info,$filename)
|
function saveInfo($info,$filename)
|
||||||
{
|
{
|
||||||
@@ -35,6 +38,17 @@ function loadInfo($filename)
|
|||||||
return false;
|
return false;
|
||||||
$info=json_decode($info, true);
|
$info=json_decode($info, true);
|
||||||
|
|
||||||
|
|
||||||
|
$isChange=false;
|
||||||
|
if(!isset($info['location']))
|
||||||
|
{
|
||||||
|
$info['location']=convertip($info['user_IP'],IPDATA_PATH);
|
||||||
|
$isChange=true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($isChange)
|
||||||
|
saveInfo(json_encode($info),$filename);
|
||||||
|
|
||||||
return $info;
|
return $info;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,6 +65,6 @@ function clearInfo()
|
|||||||
foreach ($files as $file) {
|
foreach ($files as $file) {
|
||||||
unlink($file);
|
unlink($file);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
253
functions.php
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
<?php
|
||||||
|
if(!defined('IN_XSS_PLATFORM')) {
|
||||||
|
exit('Access Denied');
|
||||||
|
}
|
||||||
|
require_once("aes.php");
|
||||||
|
|
||||||
|
if (!function_exists('getallheaders')) {
|
||||||
|
function getallheaders() {
|
||||||
|
foreach ($_SERVER as $name => $value) {
|
||||||
|
if (substr($name, 0, 5) == 'HTTP_') {
|
||||||
|
$headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $headers;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function isKeepSession($info){
|
||||||
|
$keepsession=false;
|
||||||
|
foreach($info['cookie_data'] as $k => $v) {
|
||||||
|
if($k==="keepsession")
|
||||||
|
$keepsession=($v==="1"?true:false);
|
||||||
|
}
|
||||||
|
foreach($info['post_data'] as $k => $v) {
|
||||||
|
if($k==="keepsession")
|
||||||
|
$keepsession=($v==="1"?true:false);
|
||||||
|
}
|
||||||
|
foreach($info['get_data'] as $k => $v) {
|
||||||
|
if($k==="keepsession")
|
||||||
|
$keepsession=($v==="1"?true:false);
|
||||||
|
}
|
||||||
|
return $keepsession;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function stripStr($str){
|
||||||
|
if(get_magic_quotes_gpc())
|
||||||
|
$str=stripslashes($str);
|
||||||
|
return addslashes(htmlspecialchars($str,ENT_QUOTES,'UTF-8'));
|
||||||
|
}
|
||||||
|
|
||||||
|
function stripArr($arr){
|
||||||
|
$new_arr=array();
|
||||||
|
foreach($arr as $k => $v) {
|
||||||
|
$new_arr[stripStr($k)] = stripStr($v);
|
||||||
|
}
|
||||||
|
return $new_arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function tryBase64Decode($arr)
|
||||||
|
{
|
||||||
|
if(isset($arr)&&count($arr)>0)
|
||||||
|
{
|
||||||
|
$isChanged=0;
|
||||||
|
|
||||||
|
$new_arr = array();
|
||||||
|
foreach($arr as $k => $v) {
|
||||||
|
$decoded_v="";
|
||||||
|
if(isBase64Formatted($v)) {
|
||||||
|
$decoded_v=base64_decode($v);
|
||||||
|
$isChanged=1;
|
||||||
|
}
|
||||||
|
$new_arr[$k]=$decoded_v;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($isChanged)
|
||||||
|
return $new_arr;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isBase64Formatted($str)
|
||||||
|
{
|
||||||
|
if(preg_match('/^[A-Za-z0-9+\/=]+$/',$str))
|
||||||
|
if ($str == base64_encode(base64_decode($str)))
|
||||||
|
if(preg_match('/^[A-Za-z0-9\x00-\x80~!@#$%&_+-=:";\'<>,\/"\[\]\\\^\.\|\?\*\+\(\)\{\}\s]+$/',base64_decode($str)))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function encrypt($info,$encryptPass)
|
||||||
|
{
|
||||||
|
return AESEncryptCtr($info,$encryptPass);
|
||||||
|
}
|
||||||
|
|
||||||
|
function decrypt($info,$encryptPass)
|
||||||
|
{
|
||||||
|
return AESDecryptCtr($info,$encryptPass);
|
||||||
|
}
|
||||||
|
|
||||||
|
function convertip($ip, $ipdatafile) {
|
||||||
|
$ipaddr = '未知';
|
||||||
|
if(preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/", $ip)) {
|
||||||
|
$iparray = explode('.', $ip);
|
||||||
|
if($iparray[0] == 10 || $iparray[0] == 127 || ($iparray[0] == 192 && $iparray[1] == 168) || ($iparray[0] == 172 && ($iparray[1] >= 16 && $iparray[1] <= 31))) {
|
||||||
|
$ipaddr = '局域网';
|
||||||
|
} elseif($iparray[0] > 255 || $iparray[1] > 255 || $iparray[2] > 255 || $iparray[3] > 255) {
|
||||||
|
$ipaddr = '错误ip';
|
||||||
|
} else {
|
||||||
|
if(@file_exists($ipdatafile)) {
|
||||||
|
if(!$fd = @fopen($ipdatafile, 'rb')) {
|
||||||
|
return 'ip库出错';
|
||||||
|
}
|
||||||
|
|
||||||
|
$ip = explode('.', $ip);
|
||||||
|
$ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];
|
||||||
|
|
||||||
|
if(!($DataBegin = fread($fd, 4)) || !($DataEnd = fread($fd, 4)) ) return;
|
||||||
|
@$ipbegin = implode('', unpack('L', $DataBegin));
|
||||||
|
if($ipbegin < 0) $ipbegin += pow(2, 32);
|
||||||
|
@$ipend = implode('', unpack('L', $DataEnd));
|
||||||
|
if($ipend < 0) $ipend += pow(2, 32);
|
||||||
|
$ipAllNum = ($ipend - $ipbegin) / 7 + 1;
|
||||||
|
|
||||||
|
$BeginNum = $ip2num = $ip1num = 0;
|
||||||
|
$ipAddr1 = $ipAddr2 = '';
|
||||||
|
$EndNum = $ipAllNum;
|
||||||
|
|
||||||
|
while($ip1num > $ipNum || $ip2num < $ipNum) {
|
||||||
|
$Middle= intval(($EndNum + $BeginNum) / 2);
|
||||||
|
|
||||||
|
fseek($fd, $ipbegin + 7 * $Middle);
|
||||||
|
$ipData1 = fread($fd, 4);
|
||||||
|
if(strlen($ipData1) < 4) {
|
||||||
|
fclose($fd);
|
||||||
|
return '系统错误';
|
||||||
|
}
|
||||||
|
$ip1num = implode('', unpack('L', $ipData1));
|
||||||
|
if($ip1num < 0) $ip1num += pow(2, 32);
|
||||||
|
|
||||||
|
if($ip1num > $ipNum) {
|
||||||
|
$EndNum = $Middle;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$DataSeek = fread($fd, 3);
|
||||||
|
if(strlen($DataSeek) < 3) {
|
||||||
|
fclose($fd);
|
||||||
|
return '系统错误';
|
||||||
|
}
|
||||||
|
$DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
|
||||||
|
fseek($fd, $DataSeek);
|
||||||
|
$ipData2 = fread($fd, 4);
|
||||||
|
if(strlen($ipData2) < 4) {
|
||||||
|
fclose($fd);
|
||||||
|
return '系统错误';
|
||||||
|
}
|
||||||
|
$ip2num = implode('', unpack('L', $ipData2));
|
||||||
|
if($ip2num < 0) $ip2num += pow(2, 32);
|
||||||
|
|
||||||
|
if($ip2num < $ipNum) {
|
||||||
|
if($Middle == $BeginNum) {
|
||||||
|
fclose($fd);
|
||||||
|
return '未知';
|
||||||
|
}
|
||||||
|
$BeginNum = $Middle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$ipFlag = fread($fd, 1);
|
||||||
|
if($ipFlag == chr(1)) {
|
||||||
|
$ipSeek = fread($fd, 3);
|
||||||
|
if(strlen($ipSeek) < 3) {
|
||||||
|
fclose($fd);
|
||||||
|
return '系统错误';
|
||||||
|
}
|
||||||
|
$ipSeek = implode('', unpack('L', $ipSeek.chr(0)));
|
||||||
|
fseek($fd, $ipSeek);
|
||||||
|
$ipFlag = fread($fd, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($ipFlag == chr(2)) {
|
||||||
|
$AddrSeek = fread($fd, 3);
|
||||||
|
if(strlen($AddrSeek) < 3) {
|
||||||
|
fclose($fd);
|
||||||
|
return '系统错误';
|
||||||
|
}
|
||||||
|
$ipFlag = fread($fd, 1);
|
||||||
|
if($ipFlag == chr(2)) {
|
||||||
|
$AddrSeek2 = fread($fd, 3);
|
||||||
|
if(strlen($AddrSeek2) < 3) {
|
||||||
|
fclose($fd);
|
||||||
|
return '系统错误';
|
||||||
|
}
|
||||||
|
$AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
|
||||||
|
fseek($fd, $AddrSeek2);
|
||||||
|
} else {
|
||||||
|
fseek($fd, -1, SEEK_CUR);
|
||||||
|
}
|
||||||
|
|
||||||
|
while(($char = fread($fd, 1)) != chr(0))
|
||||||
|
$ipAddr2 .= $char;
|
||||||
|
|
||||||
|
$AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
|
||||||
|
fseek($fd, $AddrSeek);
|
||||||
|
|
||||||
|
while(($char = fread($fd, 1)) != chr(0))
|
||||||
|
$ipAddr1 .= $char;
|
||||||
|
} else {
|
||||||
|
fseek($fd, -1, SEEK_CUR);
|
||||||
|
while(($char = fread($fd, 1)) != chr(0))
|
||||||
|
$ipAddr1 .= $char;
|
||||||
|
|
||||||
|
$ipFlag = fread($fd, 1);
|
||||||
|
if($ipFlag == chr(2)) {
|
||||||
|
$AddrSeek2 = fread($fd, 3);
|
||||||
|
if(strlen($AddrSeek2) < 3) {
|
||||||
|
fclose($fd);
|
||||||
|
return '系统错误';
|
||||||
|
}
|
||||||
|
$AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
|
||||||
|
fseek($fd, $AddrSeek2);
|
||||||
|
} else {
|
||||||
|
fseek($fd, -1, SEEK_CUR);
|
||||||
|
}
|
||||||
|
while(($char = fread($fd, 1)) != chr(0))
|
||||||
|
$ipAddr2 .= $char;
|
||||||
|
}
|
||||||
|
fclose($fd);
|
||||||
|
|
||||||
|
$ipAddr1 = iconv("gb18030", "utf-8//IGNORE", $ipAddr1);
|
||||||
|
if($ipAddr2){
|
||||||
|
if(ord($ipAddr2{0}) == 2)
|
||||||
|
$ipAddr2 = "";
|
||||||
|
else
|
||||||
|
$ipAddr2 = iconv("gb18030", "utf-8//IGNORE", $ipAddr2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(preg_match('/http/i', $ipAddr2)) {
|
||||||
|
$ipAddr2 = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$ipaddr = $ipAddr1.$ipAddr2;
|
||||||
|
$ipaddr = preg_replace('/CZ88\.NET/is', '', $ipaddr);
|
||||||
|
$ipaddr = preg_replace('/^\s*/is', '', $ipaddr);
|
||||||
|
$ipaddr = preg_replace('/\s*$/is', '', $ipaddr);
|
||||||
|
if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {
|
||||||
|
$ipaddr = '未知';
|
||||||
|
}
|
||||||
|
return htmlspecialchars($ipaddr,ENT_QUOTES,'UTF-8');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $ipaddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
||||||
10
index.php
@@ -1,16 +1,16 @@
|
|||||||
<?php
|
<?php
|
||||||
|
define("IN_XSS_PLATFORM",true);
|
||||||
//sometimes we only need "referfer".
|
//sometimes we only need "referfer".
|
||||||
/*
|
/*
|
||||||
if(count($_GET)==0&&count($_POST)==0&&count($_COOKIE)==0)
|
if(count($_GET)==0&&count($_POST)==0&&count($_COOKIE)==0)
|
||||||
exit();
|
exit();
|
||||||
*/
|
*/
|
||||||
require_once("util.php");
|
require_once("functions.php");
|
||||||
require_once("dio.php");
|
require_once("dio.php");
|
||||||
|
|
||||||
$info = array();
|
$info = array();
|
||||||
|
|
||||||
$user_IP = getIP();
|
$user_IP = isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:"unknown";
|
||||||
$user_port = isset($_SERVER['REMOTE_PORT'])?$_SERVER['REMOTE_PORT']:"unknown";
|
$user_port = isset($_SERVER['REMOTE_PORT'])?$_SERVER['REMOTE_PORT']:"unknown";
|
||||||
$protocol = isset($_SERVER['SERVER_PROTOCOL'])?$_SERVER['SERVER_PROTOCOL']:"unknown";
|
$protocol = isset($_SERVER['SERVER_PROTOCOL'])?$_SERVER['SERVER_PROTOCOL']:"unknown";
|
||||||
$request_method = isset($_SERVER['REQUEST_METHOD'])?$_SERVER['REQUEST_METHOD']:"unknown";
|
$request_method = isset($_SERVER['REQUEST_METHOD'])?$_SERVER['REQUEST_METHOD']:"unknown";
|
||||||
@@ -32,7 +32,6 @@ $info['protocol'] = stripStr($protocol);
|
|||||||
$info['request_method'] = stripStr($request_method);
|
$info['request_method'] = stripStr($request_method);
|
||||||
$info['request_URI'] = stripStr($request_URI);
|
$info['request_URI'] = stripStr($request_URI);
|
||||||
$info['request_time'] = stripStr($request_time);
|
$info['request_time'] = stripStr($request_time);
|
||||||
|
|
||||||
$info['headers_data'] = stripArr($headers_data);
|
$info['headers_data'] = stripArr($headers_data);
|
||||||
|
|
||||||
$info['get_data'] = stripArr($get_data);
|
$info['get_data'] = stripArr($get_data);
|
||||||
@@ -47,6 +46,7 @@ $info['cookie_data'] = stripArr($cookie_data);
|
|||||||
if($decoded_cookie_data)
|
if($decoded_cookie_data)
|
||||||
$info['decoded_cookie_data'] = stripArr($decoded_cookie_data);
|
$info['decoded_cookie_data'] = stripArr($decoded_cookie_data);
|
||||||
|
|
||||||
saveInfo(json_encode($info),$request_time);
|
$info['keepsession']=isKeepSession($info)?true:false;
|
||||||
|
|
||||||
|
saveInfo(json_encode($info),$request_time);
|
||||||
?>
|
?>
|
||||||
12
keepsession.php
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
define("IN_XSS_PLATFORM",true);
|
||||||
|
|
||||||
|
if(!defined('IN_XSS_PLATFORM')) {
|
||||||
|
exit('Access Denied');
|
||||||
|
}
|
||||||
|
require_once("config.php");
|
||||||
|
require_once("functions.php");
|
||||||
|
require_once("dio.php");
|
||||||
|
//to do
|
||||||
|
|
||||||
|
?>
|
||||||
BIN
static/css/Fonts/icomoon.eot
Normal file
15
static/css/Fonts/icomoon.svg
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<metadata>Generated by IcoMoon</metadata>
|
||||||
|
<defs>
|
||||||
|
<font id="icomoon" horiz-adv-x="512">
|
||||||
|
<font-face units-per-em="512" ascent="480" descent="-32" />
|
||||||
|
<missing-glyph horiz-adv-x="512" />
|
||||||
|
<glyph unicode=" " d="" horiz-adv-x="256" />
|
||||||
|
<glyph unicode="" d="M312 72c0-30.797-25.203-56-56-56v0c-30.801 0-56 25.203-56 56v160c0 30.801 25.199 56 56 56v0c30.797 0 56-25.199 56-56v-160zM312 376c0-30.801-25.203-56-56-56v0c-30.801 0-56 25.199-56 56v0c0 30.801 25.199 56 56 56v0c30.797 0 56-25.199 56-56v0z" />
|
||||||
|
<glyph unicode="" d="M124.063 272.297c0 26.398 20.801 53.824 46.219 60.941l136.719 38.281c25.422 7.121 46.219 26.207 46.219 42.426 0 16.215-20.797 23.664-46.219 16.543l-185.328-51.887c-25.426-7.121-46.215-34.547-46.215-60.945v-215.094c0-26.406 10.933-44.938 24.305-41.203 13.367 3.75 24.301 28.406 24.301 54.813v156.125zM205 309.168c-25.426-7.121-46.222-34.543-46.222-60.946v-195.66c0-26.406 20.797-42.18 46.222-35.063l185.328 51.883c25.422 7.133 46.219 34.547 46.219 60.945v195.664c0 26.399-20.805 42.176-46.219 35.054l-185.328-51.879zM351.594 156.515c6.797-18.508-2.203-28.242-20-21.64-17.797 6.594-46.922-3.75-64.719-23-17.793-19.258-26.793-15.922-19.996 7.414 6.801 23.336-2.199 47.836-20 54.445-17.801 6.601-14.359 18.406 7.641 26.219 22 7.828 45.551 33.313 52.356 56.649 6.797 23.336 17.922 27.285 24.719 8.781 6.805-18.504 30.367-27.246 52.359-19.422 21.992 7.816 25.43-1.535 7.64-20.801-17.797-19.254-26.797-50.145-20-68.645z" />
|
||||||
|
<glyph unicode="" d="M374.182 185.598l32.291-168.709-150.473 82.844-150.474-82.844 32.289 168.709-125.288 117.507 170.432 21.427 73.041 155.47 73.041-155.469 170.427-21.427-125.286-117.508zM300.527 288.752l-44.528 94.781-44.531-94.781-103.901-13.063 76.383-71.641-19.688-102.85 91.738 50.505 91.735-50.506-19.685 102.85 76.383 71.641-103.904 13.063z" />
|
||||||
|
<glyph unicode="" d="M127.999 64.002c-17.672 0-32.001 14.325-32.001 31.998v128.004c0 17.672 14.329 31.997 32.001 31.997 17.672 0 32.001-14.325 32.001-31.997v-128.004c0-17.672-14.329-31.998-32.001-31.998v0zM223.999 64.002c-17.672 0-32.001 14.325-32.001 31.998v64.004c0 17.67 14.329 31.998 32.001 31.998 17.672 0 32.001-14.328 32.001-31.998v-64.004c0-17.672-14.329-31.998-32.001-31.998v0zM319.998 64.002c-17.672 0-32 14.325-32 31.998v160.001c0 17.672 14.328 32.001 32 32.001 17.673 0 32.002-14.329 32.002-32.001v-160.001c0-17.672-14.33-31.998-32.002-31.998v0zM415.998 64.002c-17.672 0-32 14.325-32 31.998v256.001c0 17.675 14.328 32.001 32 32.001 17.676 0 32.002-14.326 32.002-32.001v-256.001c0-17.672-14.326-31.998-32.002-31.998v0z" />
|
||||||
|
<glyph unicode="" d="M368 480h-224c-26.4 0-48-21.6-48-48v-416c0-26.4 21.6-48 48-48h224c26.4 0 48 21.6 48 48v416c0 26.4-21.6 48-48 48zM192 456h128v-16h-128v16zM256 0c-17.673 0-32 14.327-32 32s14.327 32 32 32 32-14.327 32-32-14.327-32-32-32zM384 96h-256v320h256v-320z" />
|
||||||
|
</font></defs></svg>
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
BIN
static/css/Fonts/icomoon.ttf
Normal file
BIN
static/css/Fonts/icomoon.woff
Normal file
200
static/css/Site.css
Normal file
@@ -0,0 +1,200 @@
|
|||||||
|
html, body, div, span, iframe,
|
||||||
|
h1, h2, h3, h4, h5, h6, p, a, img, dl, dt, dd, ol, ul, li,
|
||||||
|
table, tfoot, thead, tr, th, td,
|
||||||
|
article, aside, canvas, details, footer, header, section {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
font-size: 100%;
|
||||||
|
font: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* HTML5 display-role reset for older browsers */
|
||||||
|
body {
|
||||||
|
line-height: 1;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol, ul {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
html, body {
|
||||||
|
height: 100%;
|
||||||
|
font-family: 'Microsoft YaHei','Open Sans',arial,sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body,
|
||||||
|
.container-fluid,
|
||||||
|
.row,
|
||||||
|
.column{
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* font */
|
||||||
|
@font-face {
|
||||||
|
font-family: 'icomoon';
|
||||||
|
src:url('Fonts/icomoon.eot?c8m22a');
|
||||||
|
src:url('Fonts/icomoon.eot?#iefixc8m22a') format('embedded-opentype'),
|
||||||
|
url('Fonts/icomoon.woff?c8m22a') format('woff'),
|
||||||
|
url('Fonts/icomoon.ttf?c8m22a') format('truetype'),
|
||||||
|
url('Fonts/icomoon.svg?c8m22a#icomoon') format('svg');
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
[class^="icon-"], [class*=" icon-"] {
|
||||||
|
font-family: 'icomoon';
|
||||||
|
speak: none;
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-variant: normal;
|
||||||
|
text-transform: none;
|
||||||
|
line-height: 1;
|
||||||
|
|
||||||
|
/* Better Font Rendering =========== */
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-info:before {
|
||||||
|
content: "\e600";
|
||||||
|
}
|
||||||
|
.icon-faves:before {
|
||||||
|
content: "\e601";
|
||||||
|
}
|
||||||
|
.icon-star-empty:before {
|
||||||
|
content: "\e602";
|
||||||
|
}
|
||||||
|
.icon-chart-column:before {
|
||||||
|
content: "\e603";
|
||||||
|
}
|
||||||
|
.icon-mobile:before {
|
||||||
|
content: "\e604";
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
margin-right: 0.917em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Bootstrap overrides*/
|
||||||
|
.row,
|
||||||
|
.container-fluid {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column{
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.windows {
|
||||||
|
-moz-box-shadow: 0px 0px 10px rgba(0,0,0,0.5);
|
||||||
|
-webkit-box-shadow: 0px 0px 10px rgba(0,0,0,0.5);
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Nav section */
|
||||||
|
#nav-section{
|
||||||
|
background-color: #35373d;
|
||||||
|
width: 220px;
|
||||||
|
float: left;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-section li {
|
||||||
|
border-bottom: 1px solid #4a4b51;
|
||||||
|
white-space:nowrap;
|
||||||
|
font-size: 11px;
|
||||||
|
line-height: 11px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-section li a {
|
||||||
|
color: #b8bbc2;
|
||||||
|
text-transform: uppercase;
|
||||||
|
text-decoration: none;
|
||||||
|
margin-left: 2em;
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 2em 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-section li:hover {
|
||||||
|
background-color: #212329;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-section li.active {
|
||||||
|
background-color: #0d1016;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav > li > a:hover,
|
||||||
|
.nav > li > a:focus {
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dash-logo {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #1996e4;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sidebar-nav{
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#rights {
|
||||||
|
color: #848690;
|
||||||
|
font-size: 10px;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Toggle button */
|
||||||
|
#toggle-button {
|
||||||
|
margin-top: 27px;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toggle-button:hover,
|
||||||
|
#toggle-button:focus {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toggle-button .icon-bar {
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Main section */
|
||||||
|
.main-section {
|
||||||
|
float: none;
|
||||||
|
width: auto;
|
||||||
|
overflow: hidden;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
#dash-logo,
|
||||||
|
.main-section-header > h2{
|
||||||
|
font-size: 18px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
line-height: 26px;
|
||||||
|
padding-top: 30px;
|
||||||
|
padding-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-section-header > h2 {
|
||||||
|
padding-left: 1.667em;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-section-header {
|
||||||
|
height: auto;
|
||||||
|
border-bottom: 1px solid #ededee;
|
||||||
|
-moz-box-shadow: 1px 0 4px #ededee;
|
||||||
|
-webkit-box-shadow: 1px 0 4px #ededee;
|
||||||
|
box-shadow: 1px 0 4px #ededee;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
3158
static/css/animate.css
vendored
Normal file
7
static/css/bootstrap.min.css
vendored
Normal file
6156
static/css/jqx.base.css
Normal file
262
static/css/jqx.office.css
Normal file
@@ -0,0 +1,262 @@
|
|||||||
|
.jqx-rc-tl-office
|
||||||
|
{
|
||||||
|
-moz-border-radius-topleft: 0px;
|
||||||
|
-webkit-border-top-left-radius: 0px;
|
||||||
|
border-top-left-radius: 0px;
|
||||||
|
}
|
||||||
|
.jqx-rc-tr-office
|
||||||
|
{
|
||||||
|
-moz-border-radius-topright: 0px;
|
||||||
|
-webkit-border-top-right-radius: 0px;
|
||||||
|
border-top-right-radius: 0px;
|
||||||
|
}
|
||||||
|
.jqx-rc-bl-office
|
||||||
|
{
|
||||||
|
-moz-border-radius-bottomleft: 0px;
|
||||||
|
-webkit-border-bottom-left-radius: 0px;
|
||||||
|
border-bottom-left-radius: 0px;
|
||||||
|
}
|
||||||
|
.jqx-rc-br-office
|
||||||
|
{
|
||||||
|
-moz-border-radius-bottomright: 0px;
|
||||||
|
-webkit-border-bottom-right-radius: 0px;
|
||||||
|
border-bottom-right-radius: 0px;
|
||||||
|
}
|
||||||
|
/*top rounded Corners*/
|
||||||
|
.jqx-rc-t-office
|
||||||
|
{
|
||||||
|
-moz-border-radius-topleft: 0px;
|
||||||
|
-webkit-border-top-left-radius: 0px;
|
||||||
|
border-top-left-radius: 0px;
|
||||||
|
-moz-border-radius-topright: 0px;
|
||||||
|
-webkit-border-top-right-radius: 0px;
|
||||||
|
border-top-right-radius: 0px;
|
||||||
|
}
|
||||||
|
/*bottom rounded Corners*/
|
||||||
|
.jqx-rc-b-office
|
||||||
|
{
|
||||||
|
-moz-border-radius-bottomleft: 0px;
|
||||||
|
-webkit-border-bottom-left-radius: 0px;
|
||||||
|
border-bottom-left-radius: 0px;
|
||||||
|
-moz-border-radius-bottomright: 0px;
|
||||||
|
-webkit-border-bottom-right-radius: 0px;
|
||||||
|
border-bottom-right-radius: 0px;
|
||||||
|
}
|
||||||
|
/*right rounded Corners*/
|
||||||
|
.jqx-rc-r-office
|
||||||
|
{
|
||||||
|
-moz-border-radius-topright: 0px;
|
||||||
|
-webkit-border-top-right-radius: 0px;
|
||||||
|
border-top-right-radius: 0px;
|
||||||
|
-moz-border-radius-bottomright: 0px;
|
||||||
|
-webkit-border-bottom-right-radius: 0px;
|
||||||
|
border-bottom-right-radius: 0px;
|
||||||
|
}
|
||||||
|
/*left rounded Corners*/
|
||||||
|
.jqx-rc-l-office
|
||||||
|
{
|
||||||
|
-moz-border-radius-topleft: 0px;
|
||||||
|
-webkit-border-top-left-radius: 0px;
|
||||||
|
border-top-left-radius: 0px;
|
||||||
|
-moz-border-radius-bottomleft: 0px;
|
||||||
|
-webkit-border-bottom-left-radius: 0px;
|
||||||
|
border-bottom-left-radius: 0px;
|
||||||
|
}
|
||||||
|
/*all rounded Corners*/
|
||||||
|
.jqx-rc-all-office
|
||||||
|
{
|
||||||
|
-moz-border-radius: 0px;
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
.jqx-widget-office {
|
||||||
|
font-family: Calibri;
|
||||||
|
}
|
||||||
|
.jqx-widget-content-office{font-family: Calibri; border-color: #d4d4d4; color: #444444; background-color: #fff;}
|
||||||
|
.jqx-widget-header-office{font-family: Calibri; color: #444444; border-color:#d4d4d4; background-color:#ffffff;}
|
||||||
|
|
||||||
|
.jqx-fill-state-normal-office{font-family: Calibri; border-color: #d4d4d4; color: #444444; background: #fdfdfd;}
|
||||||
|
.jqx-grid-cell-sort-alt-office, .jqx-grid-cell-filter-alt-office, .jqx-grid-cell-pinned-office, .jqx-grid-cell-alt-office, .jqx-grid-cell-sort-office{ background:#ededed; color: #000;}
|
||||||
|
.jqx-button-office {border-color: #d4d4d4;}
|
||||||
|
.jqx-fill-state-hover-office{border-color:#86bfa0; color: #000; background:#d3f0e0;}
|
||||||
|
.jqx-input-office, .jqx-input-button-content-office {border-color: #d4d4d4;}
|
||||||
|
.jqx-fill-state-focus-office, .jqx-combobox-content-focus-office, .jqx-numberinput-focus, .jqx-datetimeinput-office .jqx-fill-state-hover-office, .jqx-datetimeinput-office .jqx-fill-state-pressed-office{ border-color: #86bfa0; }
|
||||||
|
.jqx-fill-state-pressed-office{border-color:#429366; color: #000; background:#86bfa0;}
|
||||||
|
|
||||||
|
.jqx-scrollbar-state-normal-office, .jqx-grid-bottomright-office, .jqx-panel-bottomright-office, .jqx-listbox-bottomright-office{background:#f3f3f3;}
|
||||||
|
.jqx-widget-office .jqx-grid-column-header-office, .jqx-grid-cell-office, .jqx-widget-office .jqx-grid-cell-office, .jqx-widget-office .jqx-grid-group-cell-office, .jqx-grid-group-cell-office{font-family: Calibri; border-color:#f3f3f3;}
|
||||||
|
.jqx-tabs-title-bottom-office, .jqx-tabs-title-office{color: #666666;}
|
||||||
|
.jqx-tabs-title-hover-bottom-office, .jqx-tabs-title-hover-top-office{color: #217346; background: transparent; border-color: transparent;}
|
||||||
|
.jqx-tabs-title-selected-bottom-office, .jqx-tabs-selection-tracker-bottom-office, .jqx-tabs-title-selected-top-office, .jqx-tabs-selection-tracker-top-office{font-weight: bold; color: #217346; border-color:#d4d4d4; border-bottom:1px solid #fff; background:#fff}
|
||||||
|
.jqx-menu-vertical-office{background: #fff; border-color: #d4d4d4;}
|
||||||
|
.jqx-widget-office .jqx-grid-cell-office, .jqx-widget-office .jqx-grid-column-header-office, .jqx-widget-office .jqx-grid-group-cell-office {color: #000; border-color: #d4d4d4;}
|
||||||
|
.jqx-widget-office .jqx-grid-column-menubutton-office, .jqx-widget-office .jqx-grid-column-sortascbutton-office, .jqx-widget-office .jqx-grid-column-sortdescbutton-office, .jqx-widget-office .jqx-grid-column-filterbutton-office {
|
||||||
|
background-color: transparent;
|
||||||
|
border-color: #d4d4d4;
|
||||||
|
}
|
||||||
|
.jqx-input-button-header-office, .jqx-calendar-title-header-office, .jqx-grid-office .jqx-widget-header-office, .jqx-grid-header-office, .jqx-grid-column-header-office, .jqx-grid-office {font-family: Calibri; border-color: #d4d4d4; color: #444444; background: #fff;}
|
||||||
|
.jqx-window-header-office{font-family: Calibri; color: #444444; background: #fff;}
|
||||||
|
.jqx-grid-column-menubutton-office {
|
||||||
|
background-image: url('../images/office-icon-down.png');
|
||||||
|
}
|
||||||
|
/*applied to the column's sort button when the sort order is ascending.*/
|
||||||
|
.jqx-grid-column-sortascbutton-office {
|
||||||
|
background-image: url('../images/office-icon-up.png');
|
||||||
|
}
|
||||||
|
.jqx-grid-column-sortdescbutton-office {
|
||||||
|
background-image: url('../images/office-icon-down.png');
|
||||||
|
}
|
||||||
|
.jqx-checkbox-hover-office {
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.jqx-radiobutton-hover-office {
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
.jqx-scrollbar-thumb-state-normal-horizontal-office, .jqx-scrollbar-thumb-state-normal-office {
|
||||||
|
background: #ffffff; border-color: #d4d4d4;
|
||||||
|
}
|
||||||
|
.jqx-scrollbar-thumb-state-hover-horizontal-office, .jqx-scrollbar-thumb-state-hover-office {
|
||||||
|
background: #f0f0f0; border-color: #d4d4d4;
|
||||||
|
}
|
||||||
|
.jqx-scrollbar-thumb-state-pressed-horizontal-office, .jqx-scrollbar-thumb-state-pressed-office {
|
||||||
|
background: #f0f0f0; border-color: #777777;
|
||||||
|
}
|
||||||
|
.jqx-scrollbar-button-state-normal-office
|
||||||
|
{
|
||||||
|
border: 1px solid #d4d4d4;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
/*applied to the scrollbar buttons in hovered state.*/
|
||||||
|
.jqx-scrollbar-button-state-hover-office
|
||||||
|
{
|
||||||
|
border: 1px solid #777777;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
/*applied to the scrollbar buttons in pressed state.*/
|
||||||
|
.jqx-scrollbar-button-state-pressed-office
|
||||||
|
{
|
||||||
|
border: 1px solid #777777;
|
||||||
|
background: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*icons*/
|
||||||
|
.jqx-window-collapse-button-office
|
||||||
|
{
|
||||||
|
background-image: url(../images/office-icon-up.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
.jqx-window-collapse-button-collapsed-office {
|
||||||
|
background-image: url(../images/office-icon-down.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
.jqx-icon-arrow-up-office, .jqx-expander-arrow-bottom-office, .jqx-menu-item-arrow-up-office
|
||||||
|
{
|
||||||
|
background-image: url('../images/office-icon-up.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
.jqx-icon-arrow-down-office, .jqx-expander-arrow-top-office, .jqx-tree-item-arrow-expand-office, .jqx-tree-item-arrow-expand-hover-office, .jqx-menu-item-arrow-down-office
|
||||||
|
{
|
||||||
|
background-image: url('../images/office-icon-down.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
.jqx-icon-arrow-left-office, .jqx-menu-item-arrow-left-office
|
||||||
|
{
|
||||||
|
background-image: url('../images/office-icon-left.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
.jqx-icon-arrow-right-office, .jqx-menu-item-arrow-right-office, .jqx-tree-item-arrow-collapse-office, .jqx-tree-item-arrow-collapse-hover-office
|
||||||
|
{
|
||||||
|
background-image: url('../images/office-icon-right.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
.jqx-tabs-arrow-left-office, .jqx-tree-item-arrow-collapse-rtl-office, .jqx-tree-item-arrow-collapse-hover-rtl-office
|
||||||
|
{
|
||||||
|
background-image: url('../images/office-icon-left.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
.jqx-tabs-arrow-right-office
|
||||||
|
{
|
||||||
|
background-image: url('../images/office-icon-right.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jqx-menu-item-arrow-up-selected-office, .jqx-icon-arrow-up-selected-office{background-image:url('../images/office-icon-up.png');background-repeat:no-repeat;background-position:center;}
|
||||||
|
.jqx-menu-item-arrow-down-selected-office, .jqx-icon-arrow-down-selected-office{background-image:url('../images/office-icon-down.png');background-repeat:no-repeat;background-position:center;}
|
||||||
|
.jqx-menu-item-arrow-left-selected-office, .jqx-icon-arrow-left-selected-office{background-image:url('../images/office-icon-left.png');background-repeat:no-repeat;background-position:center;}
|
||||||
|
.jqx-menu-item-arrow-right-selected-office, .jqx-icon-arrow-right-selected-office{background-image:url('../images/office-icon-right.png');background-repeat:no-repeat;background-position:center;}
|
||||||
|
.jqx-tabs-close-button-office{background-image:url(../images/close.png); background-repeat:no-repeat; background-position:center;}
|
||||||
|
.jqx-tabs-close-button-selected-office{background-image:url(../images/close.png); background-repeat:no-repeat; background-position:center;}
|
||||||
|
.jqx-tabs-close-button-hover-office{background-image:url(../images/close.png); background-repeat:no-repeat; background-position:center;}
|
||||||
|
.jqx-expander-arrow-bottom-office,.jqx-scrollbar-office .jqx-icon-arrow-up-selected-office{background-image:url('../images/office-icon-up.png'); background-repeat:no-repeat; background-position:center;}
|
||||||
|
.jqx-expander-arrow-top-office, .jqx-scrollbar-office .jqx-icon-arrow-down-selected-office{background-image:url('../images/office-icon-down.png'); background-repeat:no-repeat; background-position:center;}
|
||||||
|
.jqx-scrollbar-office .jqx-icon-arrow-left-selected-office{background-image:url('../images/office-icon-left.png'); background-repeat:no-repeat; background-position:center;}
|
||||||
|
.jqx-scrollbar-office .jqx-icon-arrow-right-selected-office{background-image:url('../images/office-icon-right.png');background-repeat:no-repeat; background-position:center;}
|
||||||
|
.jqx-slider-slider-office
|
||||||
|
{
|
||||||
|
}
|
||||||
|
.jqx-slider-button-office
|
||||||
|
{
|
||||||
|
-moz-border-radius: 9px;
|
||||||
|
-webkit-border-radius: 9px;
|
||||||
|
border-radius: 9px;
|
||||||
|
}
|
||||||
|
.jqx-input-button-content-office
|
||||||
|
{
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jqx-dropdownlist-state-normal-office, .jqx-dropdownlist-state-hover-office, .jqx-dropdownlist-state-selected-office,
|
||||||
|
.jqx-scrollbar-button-state-hover-office, .jqx-scrollbar-button-state-normal-office, .jqx-scrollbar-button-state-pressed-office,
|
||||||
|
.jqx-scrollbar-thumb-state-normal-horizontal-office, .jqx-scrollbar-thumb-state-hover-horizontal-office, .jqx-scrollbar-thumb-state-pressed-horizontal-office,
|
||||||
|
.jqx-scrollbar-thumb-state-normal-office, .jqx-scrollbar-thumb-state-pressed-office, .jqx-button-office, .jqx-tree-item-hover-office, .jqx-tree-item-selected-office,
|
||||||
|
.jqx-tree-item-office, .jqx-menu-item-office, .jqx-menu-item-hover-office, .jqx-menu-item-selected-office, .jqx-menu-item-top-office, .jqx-menu-item-top-hover-office,
|
||||||
|
.jqx-menu-item-top-selected-office, .jqx-slider-button-office, .jqx-slider-slider-office
|
||||||
|
{
|
||||||
|
-webkit-transition: background-color 100ms linear;
|
||||||
|
-moz-transition: background-color 100ms linear;
|
||||||
|
-o-transition: background-color 100ms linear;
|
||||||
|
-ms-transition: background-color 100ms linear;
|
||||||
|
transition: background-color 100ms linear;
|
||||||
|
}
|
||||||
|
.jqx-switchbutton-office {
|
||||||
|
-moz-border-radius: 0px;
|
||||||
|
-webkit-border-radius: 0px;
|
||||||
|
border-radius: 0px;
|
||||||
|
border: 2px solid #a6a6a6;
|
||||||
|
}
|
||||||
|
.jqx-switchbutton-thumb-office {
|
||||||
|
width: 12px;
|
||||||
|
background: #000;
|
||||||
|
border: 1px solid #000;
|
||||||
|
}
|
||||||
|
.jqx-switchbutton-label-on-office {
|
||||||
|
background: #429366;
|
||||||
|
color: #429366;
|
||||||
|
}
|
||||||
|
.jqx-switchbutton-label-off-office {
|
||||||
|
background: #a6a6a6;
|
||||||
|
color: #a6a6a6;
|
||||||
|
}
|
||||||
|
.jqx-icon-arrow-first-metro
|
||||||
|
{
|
||||||
|
background-image: url('../images/office-icon-first.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
.jqx-icon-arrow-last-metro
|
||||||
|
{
|
||||||
|
background-image: url('../images/office-icon-last.png');
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jqx-switchbutton-wrapper-office {
|
||||||
|
}
|
||||||
|
.jqx-layout-office
|
||||||
|
{
|
||||||
|
background-color: #d4d4d4;
|
||||||
|
}
|
||||||
176
static/css/notification.css
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
#notifications-bottom-right {
|
||||||
|
position: absolute;
|
||||||
|
width: 360px;
|
||||||
|
right: 20px;
|
||||||
|
bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.webpushtipoutter {
|
||||||
|
z-index:9999;
|
||||||
|
position:absolute;
|
||||||
|
right:5px;
|
||||||
|
bottom:5px;
|
||||||
|
_width:330px;
|
||||||
|
}
|
||||||
|
.webpushtipinner {
|
||||||
|
position:relative;
|
||||||
|
height:66px;
|
||||||
|
padding:7px;
|
||||||
|
}
|
||||||
|
.newmailNotifyBox {
|
||||||
|
position:absolute;
|
||||||
|
bottom:0;
|
||||||
|
right:0;
|
||||||
|
z-index:5;
|
||||||
|
padding:8px 17px 7px 0;
|
||||||
|
overflow:hidden;
|
||||||
|
}
|
||||||
|
.newmailNotifyItem {
|
||||||
|
position:relative;
|
||||||
|
width:305px;
|
||||||
|
height:69px;
|
||||||
|
margin-bottom:10px;
|
||||||
|
padding:1px;
|
||||||
|
border-radius:5px;
|
||||||
|
-webkit-border-radius:5px;
|
||||||
|
box-shadow:0 2px 5px rgba(0,0,0,0.2);
|
||||||
|
-webkit-box-shadow:0 2px 5px rgba(0,0,0,0.2);
|
||||||
|
background:#ADBFC8;
|
||||||
|
background:-moz-linear-gradient(top,#C4D1D7,#98AFBA);
|
||||||
|
background:-webkit-gradient(linear,0 0,0 bottom,from(#C4D1D7),to(#98AFBA));
|
||||||
|
background:-o-linear-gradient(top,#C4D1D7,#98AFBA);
|
||||||
|
-moz-transition:box-shadow 1s;
|
||||||
|
}
|
||||||
|
.newmailNotifyItem:hover .newmailNotify {
|
||||||
|
box-shadow:0 0 5px #8EC7EF inset;
|
||||||
|
-webkit-box-shadow:0 0 5px #8EC7EF inset;
|
||||||
|
}
|
||||||
|
.newmailNotifyItem:hover .notify_type {
|
||||||
|
background:transparent;
|
||||||
|
*background:#EEF6F9;
|
||||||
|
}
|
||||||
|
.newmailNotify {
|
||||||
|
height:66px;
|
||||||
|
background:#F7FDFF;
|
||||||
|
cursor:pointer;
|
||||||
|
border-radius:5px;
|
||||||
|
-webkit-border-radius:5px;
|
||||||
|
box-shadow:0 0 9px #E5EFF5 inset;
|
||||||
|
-webkit-box-shadow:0 0 9px #E5EFF5 inset;
|
||||||
|
}
|
||||||
|
.newmailNotify .notify_close {
|
||||||
|
position:absolute;
|
||||||
|
top:-6px;
|
||||||
|
top:4px\9;
|
||||||
|
right:-6px;
|
||||||
|
right:4px\9;
|
||||||
|
width:15px;
|
||||||
|
height:15px;
|
||||||
|
height:14px\9;
|
||||||
|
overflow:hidden;
|
||||||
|
|
||||||
|
background:url(../images/mail.png) no-repeat -106px -18px #B6CFDA;
|
||||||
|
opacity:0;
|
||||||
|
filter:alpha(opacity=0);
|
||||||
|
border-radius:10px;
|
||||||
|
-webkit-border-radius:10px;
|
||||||
|
-moz-transition:opacity 0.2s ease;
|
||||||
|
-webkit-transition:opacity 0.1s ease;
|
||||||
|
_filter:alpha(opacity=100);
|
||||||
|
}
|
||||||
|
.newmailNotify:hover .notify_close:hover,.hover .notify_close:hover {
|
||||||
|
opacity:1;
|
||||||
|
filter:alpha(opacity=100);
|
||||||
|
}
|
||||||
|
.newmailNotify:hover .notify_close:active,.hover .notify_close:active {
|
||||||
|
opacity:1;
|
||||||
|
filter:alpha(opacity=100);
|
||||||
|
}
|
||||||
|
.newmailNotify:hover .notify_close,.hover .notify_close {
|
||||||
|
opacity:0.8;
|
||||||
|
filter:alpha(opacity=80);
|
||||||
|
}
|
||||||
|
.newmailNotify .notify_type {
|
||||||
|
position:relative;
|
||||||
|
float:left;
|
||||||
|
width:60px;
|
||||||
|
height:66px;
|
||||||
|
border-right:1px solid #CBDAE1;
|
||||||
|
background:#EEF6F9;
|
||||||
|
border-radius:5px 0 0 5px;
|
||||||
|
-webkit-border-radius:5px 0 0 5px;
|
||||||
|
}
|
||||||
|
.newmailNotify .notify_type span {
|
||||||
|
display:inline-block;
|
||||||
|
width:32px;
|
||||||
|
height:34px;
|
||||||
|
margin:16px 0 0 16px;
|
||||||
|
background:url(../images/notify_letter.png) no-repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
.newmailNotify .notify_type label {
|
||||||
|
position:absolute;
|
||||||
|
top:12px;
|
||||||
|
right:10px;
|
||||||
|
+right:5px;
|
||||||
|
text-align:center;
|
||||||
|
overflow:visible;
|
||||||
|
}
|
||||||
|
.newmailNotify .notify_type em {
|
||||||
|
display:inline-block;
|
||||||
|
cursor:pinter;
|
||||||
|
min-width:13px;
|
||||||
|
margin-right:-50%;
|
||||||
|
+margin-right:0;
|
||||||
|
padding:0 2px;
|
||||||
|
+padding:0 2px 2px;
|
||||||
|
border:1px solid white;
|
||||||
|
line-height:15px;
|
||||||
|
color:white;
|
||||||
|
font-weight:bold;
|
||||||
|
font-style:normal;
|
||||||
|
background:#D40707;
|
||||||
|
border-radius:8px;
|
||||||
|
-webkit-border-radius:8px;
|
||||||
|
background:-moz-linear-gradient(top,#E80505,#C70909);
|
||||||
|
background:-webkit-gradient(linear,0 0,0 bottom,from(#E80505),to(#C70909));
|
||||||
|
background:-o-linear-gradient(top,#E80505,#C70909);
|
||||||
|
}
|
||||||
|
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||||
|
.newmailNotify .notify_type em {
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
}.newmailNotify .notify_content {
|
||||||
|
margin-left:66px;
|
||||||
|
overflow:hidden;
|
||||||
|
width:230px;
|
||||||
|
}
|
||||||
|
.newmailNotify p {
|
||||||
|
margin:0;
|
||||||
|
padding:2px 0 1px;
|
||||||
|
white-space:normal;
|
||||||
|
white-space:nowrap\9;
|
||||||
|
_white-space:normal;
|
||||||
|
height:auto\9;
|
||||||
|
_height:16px;
|
||||||
|
_line-height:16px;
|
||||||
|
overflow:hidden;
|
||||||
|
text-overflow:ellipsis;
|
||||||
|
}
|
||||||
|
@media screen and (-webkit-min-device-pixel-ratio:0) {
|
||||||
|
.newmailNotify p {
|
||||||
|
margin-top: 2px;
|
||||||
|
white-space:nowrap;
|
||||||
|
overflow:hidden;
|
||||||
|
text-overflow:ellipsis;
|
||||||
|
}
|
||||||
|
}.newmailNotify .notify_location {
|
||||||
|
padding:7px 0 1px;
|
||||||
|
font-size:12px;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.newmailNotify .notify_digest {
|
||||||
|
color:#8596A9;
|
||||||
|
padding-top:2px
|
||||||
|
}
|
||||||
BIN
static/images/add.png
Normal file
|
After Width: | Height: | Size: 807 B |
BIN
static/images/clear.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
static/images/close.png
Normal file
|
After Width: | Height: | Size: 307 B |
BIN
static/images/delete.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
static/images/drag.png
Normal file
|
After Width: | Height: | Size: 541 B |
BIN
static/images/dragcancel.png
Normal file
|
After Width: | Height: | Size: 334 B |
BIN
static/images/filter.png
Normal file
|
After Width: | Height: | Size: 352 B |
BIN
static/images/help.png
Normal file
|
After Width: | Height: | Size: 817 B |
BIN
static/images/icon-calendar.png
Normal file
|
After Width: | Height: | Size: 478 B |
BIN
static/images/icon-cancel.png
Normal file
|
After Width: | Height: | Size: 333 B |
BIN
static/images/icon-delete.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
static/images/icon-down.png
Normal file
|
After Width: | Height: | Size: 142 B |
BIN
static/images/icon-edit.png
Normal file
|
After Width: | Height: | Size: 405 B |
BIN
static/images/icon-first.png
Normal file
|
After Width: | Height: | Size: 152 B |
BIN
static/images/icon-last.png
Normal file
|
After Width: | Height: | Size: 153 B |
BIN
static/images/icon-left.png
Normal file
|
After Width: | Height: | Size: 139 B |
BIN
static/images/icon-recurrence.png
Normal file
|
After Width: | Height: | Size: 295 B |
BIN
static/images/icon-right.png
Normal file
|
After Width: | Height: | Size: 143 B |
BIN
static/images/icon-save.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
static/images/icon-time.png
Normal file
|
After Width: | Height: | Size: 556 B |
BIN
static/images/icon-up.png
Normal file
|
After Width: | Height: | Size: 130 B |
BIN
static/images/loader.gif
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
static/images/mail.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
static/images/notify_letter.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
static/images/office-icon-down.png
Normal file
|
After Width: | Height: | Size: 160 B |
BIN
static/images/office-icon-left.png
Normal file
|
After Width: | Height: | Size: 154 B |
BIN
static/images/office-icon-right.png
Normal file
|
After Width: | Height: | Size: 157 B |
BIN
static/images/office-icon-up.png
Normal file
|
After Width: | Height: | Size: 146 B |
BIN
static/images/refresh.png
Normal file
|
After Width: | Height: | Size: 881 B |
BIN
static/images/search.png
Normal file
|
After Width: | Height: | Size: 414 B |
BIN
static/images/sortasc.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
static/images/sortdesc.png
Normal file
|
After Width: | Height: | Size: 500 B |
BIN
static/images/sortremove.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
6
static/js/bootstrap.min.js
vendored
Normal file
55
static/js/getTheme.js
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
function getTheme() {
|
||||||
|
var theme = "office";
|
||||||
|
var url = "../css/jqx."+theme+".css";
|
||||||
|
|
||||||
|
if (document.createStyleSheet != undefined) {
|
||||||
|
var hasStyle = false;
|
||||||
|
$.each(document.styleSheets, function (index, value) {
|
||||||
|
if (value.href != undefined && value.href.indexOf(theme) != -1) {
|
||||||
|
hasStyle = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!hasStyle) {
|
||||||
|
document.createStyleSheet(url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var hasStyle = false;
|
||||||
|
if (document.styleSheets) {
|
||||||
|
$.each(document.styleSheets, function (index, value) {
|
||||||
|
if (value.href != undefined && value.href.indexOf(theme) != -1) {
|
||||||
|
hasStyle = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (!hasStyle) {
|
||||||
|
var link = $('<link rel="stylesheet" href="' + url + '" media="screen" />');
|
||||||
|
link[0].onload = function () {
|
||||||
|
if ($.jqx && $.jqx.ready) {
|
||||||
|
$.jqx.ready();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
$(document).find('head').append(link);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$.jqx = $.jqx || {};
|
||||||
|
$.jqx.theme = theme;
|
||||||
|
return theme;
|
||||||
|
};
|
||||||
|
var theme = '';
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (jQuery) {
|
||||||
|
theme = getTheme();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$(document).ready(function () {
|
||||||
|
theme = getThemegetThemegetThemegetThemegetThemegetTheme();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (error) {
|
||||||
|
var er = error;
|
||||||
|
}
|
||||||
7
static/js/jquery-ui.min.js
vendored
Normal file
4
static/js/jquery.min.js
vendored
Normal file
7
static/js/jqxbuttons.js
Normal file
7
static/js/jqxcore.js
Normal file
7
static/js/jqxdata.js
Normal file
7
static/js/jqxdropdownlist.js
Normal file
7
static/js/jqxgrid.columnsresize.js
Normal file
7
static/js/jqxgrid.edit.js
Normal file
7
static/js/jqxgrid.filter.js
Normal file
13340
static/js/jqxgrid.js
Normal file
7
static/js/jqxgrid.pager.js
Normal file
2062
static/js/jqxgrid.selection.js
Normal file
7
static/js/jqxgrid.sort.js
Normal file
7
static/js/jqxlistbox.js
Normal file
7
static/js/jqxmenu.js
Normal file
7
static/js/jqxscrollbar.js
Normal file
7
static/js/jqxtabs.js
Normal file
7
static/js/jqxwindow.js
Normal file
758
static/js/loadgrid.js
Normal file
@@ -0,0 +1,758 @@
|
|||||||
|
//全局变量
|
||||||
|
var urlbase="../../api.php";//api.php基地址
|
||||||
|
var messageList=null;//记录缓存,用于判断是否有新的记录
|
||||||
|
var setIntervalID=null;//定时器ID,用于网络自适应,调节timeout
|
||||||
|
var interval=1000;//向服务器获取记录的时间间隔,同时也是ajax timeout时间
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function () {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
|
||||||
|
var source =
|
||||||
|
{
|
||||||
|
datatype: "json",
|
||||||
|
datafields: [
|
||||||
|
{ name: 'user_IP' },
|
||||||
|
{ name: 'location'},
|
||||||
|
{ name: 'data_type'},
|
||||||
|
{ name: 'keepsession' },
|
||||||
|
{ name: 'user_port'},
|
||||||
|
{ name: 'protocol'},
|
||||||
|
{ name: 'request_method' },
|
||||||
|
{ name: 'request_URI' },
|
||||||
|
{ name: 'request_time' },
|
||||||
|
{ name: 'headers_data' },
|
||||||
|
{ name: 'get_data' },
|
||||||
|
{ name: 'post_data' },
|
||||||
|
{ name: 'cookie_data' },
|
||||||
|
{ name: 'decoded_get_data' },
|
||||||
|
{ name: 'decoded_post_data' },
|
||||||
|
{ name: 'decoded_cookie_data' },
|
||||||
|
{ name: 'request_date_string' },
|
||||||
|
{ name: 'request_time_string' },
|
||||||
|
{ name: 'request_date_and_time_string' },
|
||||||
|
{ name: 'client' },
|
||||||
|
|
||||||
|
],
|
||||||
|
id: 'request_time',
|
||||||
|
url: urlbase+"?cmd=list",
|
||||||
|
root: 'data',
|
||||||
|
};
|
||||||
|
|
||||||
|
var dataAdapter = new $.jqx.dataAdapter(source,{
|
||||||
|
downloadComplete: function (data, status, xhr) {
|
||||||
|
if(status=="success")
|
||||||
|
{
|
||||||
|
var i = data.length;
|
||||||
|
while (i--) {
|
||||||
|
var date=new Date(data[i].request_time*1000)
|
||||||
|
data[i].request_date_string=date.getFullYear()+ "年" +(date.getMonth() + 1) + "月" + date.getDate()+ "日";
|
||||||
|
data[i].request_time_string=date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();
|
||||||
|
data[i].request_date_and_time_string=data[i].request_date_string+" "+data[i].request_time_string;
|
||||||
|
data[i].keepsession=(data[i].keepsession==true)?"是":"否";
|
||||||
|
data[i].client=data[i].headers_data["User-Agent"]?get_client_info(data[i].headers_data["User-Agent"]):"未知";
|
||||||
|
|
||||||
|
|
||||||
|
var data_type=new Object();
|
||||||
|
var get_keys=Object.keys(data[i].get_data);
|
||||||
|
var post_keys=Object.keys(data[i].post_data);
|
||||||
|
var cookie_keys=Object.keys(data[i].cookie_data);
|
||||||
|
if(get_keys.length>0)
|
||||||
|
data_type.GET=get_keys;
|
||||||
|
if(post_keys.length>0)
|
||||||
|
data_type.POST=post_keys;
|
||||||
|
if(cookie_keys.length>0)
|
||||||
|
data_type.COOKIE=cookie_keys;
|
||||||
|
|
||||||
|
data[i].data_type =JSON.stringify(data_type);
|
||||||
|
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
var initrowdetails = function (index, parentElement, gridElement, datarecord) {
|
||||||
|
var tabsdiv = null;
|
||||||
|
var information = null;
|
||||||
|
var notes = null;
|
||||||
|
var get_grid=null;
|
||||||
|
var post_grid=null;
|
||||||
|
var cookie_grid=null;
|
||||||
|
var headers_grid=null;
|
||||||
|
tabsdiv = $($(parentElement).children()[0]);
|
||||||
|
if (tabsdiv != null) {
|
||||||
|
information = tabsdiv.find('.information');
|
||||||
|
get_grid = tabsdiv.find('.get_grid');
|
||||||
|
post_grid = tabsdiv.find('.post_grid');
|
||||||
|
cookie_grid = tabsdiv.find('.cookie_grid');
|
||||||
|
headers_grid = tabsdiv.find('.headers_grid');
|
||||||
|
//datarecord.client=datarecord.headers_data["User-Agent"]?get_client_info(datarecord.headers_data["User-Agent"]):"未知";
|
||||||
|
|
||||||
|
var get_data=new Array();
|
||||||
|
for(key in datarecord.get_data){
|
||||||
|
var get_data_item=new Array();
|
||||||
|
get_data_item.push(key);
|
||||||
|
get_data_item.push(datarecord.get_data[key]);
|
||||||
|
var decoded_value="";
|
||||||
|
if(datarecord.decoded_get_data)
|
||||||
|
decoded_value=datarecord.decoded_get_data[key];
|
||||||
|
get_data_item.push(decoded_value);
|
||||||
|
get_data.push(get_data_item);
|
||||||
|
}
|
||||||
|
|
||||||
|
var get_source =
|
||||||
|
{
|
||||||
|
|
||||||
|
localdata: get_data,
|
||||||
|
datafields: [
|
||||||
|
{ name: 'key', type: 'string', map: '0'},
|
||||||
|
{ name: 'value', type: 'string', map: '1' },
|
||||||
|
{ name: 'decoded_value', type: 'string', map: '2' },
|
||||||
|
],
|
||||||
|
datatype: "array"
|
||||||
|
};
|
||||||
|
var get_source_dataAdapter= new $.jqx.dataAdapter(get_source);
|
||||||
|
get_grid.jqxGrid(
|
||||||
|
{
|
||||||
|
autorowheight: true,
|
||||||
|
autorowheight: true,
|
||||||
|
columnsautoresize: true,
|
||||||
|
pageable: true,
|
||||||
|
pagermode: "simple",
|
||||||
|
scrollmode: 'deferred',
|
||||||
|
localization: getLocalization('zh'),
|
||||||
|
enablebrowserselection:true,
|
||||||
|
columnsresize: true,
|
||||||
|
height: 176,
|
||||||
|
width: '100%',
|
||||||
|
source: get_source_dataAdapter,
|
||||||
|
ready: function () {
|
||||||
|
if(get_source.localdata.length&&get_source.localdata.length>0)
|
||||||
|
get_grid.jqxGrid('autoresizecolumn', 'key');
|
||||||
|
},
|
||||||
|
columns: datarecord.decoded_get_data?[
|
||||||
|
{ text: '键', datafield: 'key' },
|
||||||
|
{ text: '值', datafield: 'value' },
|
||||||
|
{ text: '解码', datafield: 'decoded_value'},
|
||||||
|
|
||||||
|
]:[
|
||||||
|
{ text: '键', datafield: 'key' },
|
||||||
|
{ text: '值', datafield: 'value'},
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
var post_data=new Array();
|
||||||
|
for(key in datarecord.post_data){
|
||||||
|
var post_data_item=new Array();
|
||||||
|
post_data_item.push(key);
|
||||||
|
post_data_item.push(datarecord.post_data[key]);
|
||||||
|
|
||||||
|
var decoded_value="";
|
||||||
|
if(datarecord.decoded_post_data)
|
||||||
|
decoded_value=datarecord.decoded_post_data[key];
|
||||||
|
post_data_item.push(decoded_value);
|
||||||
|
|
||||||
|
post_data.push(post_data_item);
|
||||||
|
}
|
||||||
|
var post_source =
|
||||||
|
{
|
||||||
|
|
||||||
|
localdata: post_data,
|
||||||
|
datafields: [
|
||||||
|
{ name: 'key', type: 'string', map: '0'},
|
||||||
|
{ name: 'value', type: 'string', map: '1' },
|
||||||
|
{ name: 'decoded_value', type: 'string', map: '2' },
|
||||||
|
|
||||||
|
],
|
||||||
|
datatype: "array"
|
||||||
|
};
|
||||||
|
|
||||||
|
var post_source_dataAdapter= new $.jqx.dataAdapter(post_source);
|
||||||
|
post_grid.jqxGrid(
|
||||||
|
{
|
||||||
|
ready: function () {
|
||||||
|
if(post_source.localdata.length&&post_source.localdata.length>0)
|
||||||
|
post_grid.jqxGrid('autoresizecolumn', 'key');
|
||||||
|
},
|
||||||
|
autorowheight: true,
|
||||||
|
pageable: true,
|
||||||
|
columnsautoresize: true,
|
||||||
|
pagermode: "simple",
|
||||||
|
scrollmode: 'deferred',
|
||||||
|
localization: getLocalization('zh'),
|
||||||
|
enablebrowserselection:true,
|
||||||
|
columnsautoresize: true,
|
||||||
|
columnsresize: true,
|
||||||
|
height: 176,
|
||||||
|
width: '100%',
|
||||||
|
source: post_source_dataAdapter,
|
||||||
|
columns: datarecord.decoded_post_data?[
|
||||||
|
{ text: '键', datafield: 'key' },
|
||||||
|
{ text: '值', datafield: 'value' },
|
||||||
|
{ text: '解码', datafield: 'decoded_value'},
|
||||||
|
|
||||||
|
]:[
|
||||||
|
{ text: '键', datafield: 'key' },
|
||||||
|
{ text: '值', datafield: 'value' },
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
var cookie_data=new Array();
|
||||||
|
for(key in datarecord.cookie_data){
|
||||||
|
var cookie_data_item=new Array();
|
||||||
|
cookie_data_item.push(key);
|
||||||
|
cookie_data_item.push(datarecord.cookie_data[key]);
|
||||||
|
|
||||||
|
var decoded_value="";
|
||||||
|
if(datarecord.decoded_cookie_data)
|
||||||
|
decoded_value=datarecord.decoded_cookie_data[key];
|
||||||
|
|
||||||
|
cookie_data_item.push(decoded_value);
|
||||||
|
cookie_data.push(cookie_data_item);
|
||||||
|
}
|
||||||
|
var cookie_source =
|
||||||
|
{
|
||||||
|
localdata: cookie_data,
|
||||||
|
datafields: [
|
||||||
|
{ name: 'key', type:'string', map:'0'},
|
||||||
|
{ name: 'value', type:'string', map:'1'},
|
||||||
|
{ name: 'decoded_value', type:'string', map:'2'},
|
||||||
|
],
|
||||||
|
datatype: "array"
|
||||||
|
};
|
||||||
|
var cookie_source_dataAdapter= new $.jqx.dataAdapter(cookie_source);
|
||||||
|
cookie_grid.jqxGrid(
|
||||||
|
{
|
||||||
|
ready: function () {
|
||||||
|
if(cookie_source.localdata.length&&cookie_source.localdata.length>0)
|
||||||
|
cookie_grid.jqxGrid('autoresizecolumn', 'key');
|
||||||
|
},
|
||||||
|
columnsautoresize: true,
|
||||||
|
autorowheight: true,
|
||||||
|
pageable: true,
|
||||||
|
pagermode: "simple",
|
||||||
|
scrollmode: 'deferred',
|
||||||
|
localization: getLocalization('zh'),
|
||||||
|
enablebrowserselection:true,
|
||||||
|
columnsautoresize: true,
|
||||||
|
columnsresize: true,
|
||||||
|
height: 176,
|
||||||
|
width: '100%',
|
||||||
|
source: cookie_source_dataAdapter,
|
||||||
|
columns: datarecord.decoded_cookie_data?[
|
||||||
|
{ text: '键', datafield: 'key' },
|
||||||
|
{ text: '值', datafield: 'value' },
|
||||||
|
{ text: '解码', datafield: 'decoded_value'},
|
||||||
|
]:[
|
||||||
|
{ text: '键', datafield: 'key' },
|
||||||
|
{ text: '值', datafield: 'value' },
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
var headers_data=new Array();
|
||||||
|
for(key in datarecord.headers_data){
|
||||||
|
var headers_data_item=new Array();
|
||||||
|
headers_data_item.push(key);
|
||||||
|
headers_data_item.push(datarecord.headers_data[key]);
|
||||||
|
headers_data.push(headers_data_item);
|
||||||
|
}
|
||||||
|
var headers_source =
|
||||||
|
{
|
||||||
|
localdata: headers_data,
|
||||||
|
datafields: [
|
||||||
|
{ name: 'key', type: 'string', map: '0'},
|
||||||
|
{ name: 'value', type: 'string', map: '1' },
|
||||||
|
|
||||||
|
],
|
||||||
|
datatype: "array"
|
||||||
|
};
|
||||||
|
var headers_source_dataAdapter= new $.jqx.dataAdapter(headers_source);
|
||||||
|
headers_grid.jqxGrid(
|
||||||
|
{
|
||||||
|
ready: function () {
|
||||||
|
if(headers_source.localdata.length&&headers_source.localdata.length>0)
|
||||||
|
headers_grid.jqxGrid('autoresizecolumn', 'key');
|
||||||
|
},
|
||||||
|
columnsautoresize: true,
|
||||||
|
autorowheight: true,
|
||||||
|
pageable: true,
|
||||||
|
pagermode: "simple",
|
||||||
|
scrollmode: 'deferred',
|
||||||
|
localization: getLocalization('zh'),
|
||||||
|
enablebrowserselection:true,
|
||||||
|
columnsautoresize: true,
|
||||||
|
columnsresize: true,
|
||||||
|
width: '100%',
|
||||||
|
height: 176,
|
||||||
|
source: headers_source_dataAdapter,
|
||||||
|
|
||||||
|
|
||||||
|
columns: [
|
||||||
|
{ text: '键', datafield: 'key' },
|
||||||
|
{ text: '值', datafield: 'value'},
|
||||||
|
]
|
||||||
|
});
|
||||||
|
var container = $('<div style="margin: 25px;"></div>')
|
||||||
|
container.appendTo($(information));
|
||||||
|
|
||||||
|
var leftcolumn = $('<div style="float: left; width: 45%;"></div>');
|
||||||
|
var rightcolumn = $('<div style="float: left; width: 40%;"></div>');
|
||||||
|
|
||||||
|
container.append(leftcolumn);
|
||||||
|
container.append(rightcolumn);
|
||||||
|
|
||||||
|
var data_item = "<div style='margin: 10px;'><b>日期:</b> " + datarecord.request_date_string + "</div>";
|
||||||
|
var ip_item = "<div style='margin: 10px;'><b>IP:</b> " + datarecord.user_IP + "</div>";
|
||||||
|
var method_item = "<div style='margin: 10px;'><b>协议:</b> " + datarecord.request_method + "</div>";
|
||||||
|
var location_item = "<div style='margin: 10px;'><b>位置:</b> " + datarecord.location + "</div>";
|
||||||
|
$(leftcolumn).append(data_item);
|
||||||
|
$(leftcolumn).append(ip_item);
|
||||||
|
$(leftcolumn).append(method_item);
|
||||||
|
$(leftcolumn).append(location_item);
|
||||||
|
|
||||||
|
var time_item = "<div style='margin: 10px;'><b>时间:</b> " + datarecord.request_time_string + "</div>";
|
||||||
|
var port_item = "<div style='margin: 10px;'><b>端口:</b> " + datarecord.user_port + "</div>";
|
||||||
|
var uri_item = "<div style='margin: 10px;'><b>访问地址:</b> " + datarecord.request_URI + "</div>";
|
||||||
|
var client_item = "<div style='margin: 10px;'><b>客户端:</b> " + datarecord.client + "</div>";
|
||||||
|
|
||||||
|
$(rightcolumn).append(time_item);
|
||||||
|
$(rightcolumn).append(port_item);
|
||||||
|
$(rightcolumn).append(uri_item);
|
||||||
|
$(rightcolumn).append(client_item);
|
||||||
|
|
||||||
|
$(tabsdiv).jqxTabs({
|
||||||
|
width:'95%', height: '100%'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$("#panelGrid").jqxGrid(
|
||||||
|
{
|
||||||
|
|
||||||
|
pageable: true,
|
||||||
|
ready: function () {
|
||||||
|
//$('#panelGrid').jqxGrid('autoresizecolumn', 'request_date_and_time_string');
|
||||||
|
//$('#panelGrid').jqxGrid('autoresizecolumn', 'data_type');
|
||||||
|
//$('#panelGrid').jqxGrid('autoresizecolumn', 'user_IP');
|
||||||
|
|
||||||
|
},
|
||||||
|
pagerrenderer: function() {
|
||||||
|
|
||||||
|
var container = $("<div style='overflow: hidden; position: relative; '></div>");
|
||||||
|
var deleteButton = $("<div style='float: left; margin-left: 5px;'><img style='position: relative; margin-top: 2px;' src='static/images/delete.png'/><span style='margin-left: 4px; position: relative; top: 3px;'>删除</span></div>");
|
||||||
|
var clearButton = $("<div style='float: left; margin-left: 5px;'><img style='position: relative; margin-top: 2px;' src='static/images/clear.png'/><span style='margin-left: 4px; position: relative; top: 3px;'>清空</span></div>");
|
||||||
|
var searchButton = $("<div style='float: left; margin-left: 5px;'><img style='position: relative; margin-top: 2px;' src='static/images/search.png'/><span style='margin-left: 4px; position: relative; top: 3px;'>查询</span></div>");
|
||||||
|
container.append(deleteButton);
|
||||||
|
container.append(clearButton);
|
||||||
|
container.append(searchButton);
|
||||||
|
|
||||||
|
deleteButton.jqxButton({width: 65,height: 20});
|
||||||
|
clearButton.jqxButton({width: 65,height: 20});
|
||||||
|
searchButton.jqxButton({width: 65,height: 20});
|
||||||
|
|
||||||
|
// delete selected row.
|
||||||
|
deleteButton.click(function(event) {
|
||||||
|
var selectedrowindex = $("#panelGrid").jqxGrid('getselectedrowindex');
|
||||||
|
|
||||||
|
if(selectedrowindex>=0)
|
||||||
|
{
|
||||||
|
$('#deleteConfirmWindow').jqxWindow('open');
|
||||||
|
$("#deleteConfirmWindow").addClass('animated');
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// reload grid data.
|
||||||
|
clearButton.click(function(event) {
|
||||||
|
$('#clearConfirmWindow').jqxWindow('open');
|
||||||
|
$("#clearConfirmWindow").addClass('animated');
|
||||||
|
//$("#panelGrid").jqxGrid({
|
||||||
|
// source: getAdapter()
|
||||||
|
//});
|
||||||
|
});
|
||||||
|
// search for a record.
|
||||||
|
searchButton.click(function(event) {
|
||||||
|
//var offset = $("#panelGrid").offset();
|
||||||
|
$("#searchWindow").jqxWindow('open');
|
||||||
|
$("#searchWindow").addClass('animated');
|
||||||
|
//$("#jqxwindow").jqxWindow('move', offset.left + 30, offset.top + 30);
|
||||||
|
});
|
||||||
|
|
||||||
|
var pageElementsContainer = $("<div style='overflow: hidden;float: right;position: relative;margin: 5.5px; '></div>");
|
||||||
|
var datainfo = $("#panelGrid").jqxGrid('getdatainformation');
|
||||||
|
var paginginfo = datainfo.paginginformation;
|
||||||
|
var leftButton = $("<div style='padding: 0px; float: left;'><div style='margin-left: 9px; width: 16px; height: 16px;'></div></div>");
|
||||||
|
leftButton.find('div').addClass('jqx-icon-arrow-left');
|
||||||
|
leftButton.width(36);
|
||||||
|
leftButton.jqxButton({
|
||||||
|
theme: 'energyblue'
|
||||||
|
});
|
||||||
|
var rightButton = $("<div style='padding: 0px; margin: 0px 3px; float: left;'><div style='margin-left: 9px; width: 16px; height: 16px;'></div></div>");
|
||||||
|
rightButton.find('div').addClass('jqx-icon-arrow-right');
|
||||||
|
rightButton.width(36);
|
||||||
|
rightButton.jqxButton({
|
||||||
|
theme: 'energyblue'
|
||||||
|
});
|
||||||
|
|
||||||
|
var label = $("<div style='font-size: 14px; margin: 1px 1px; font-weight: bold; float: left;'></div>");
|
||||||
|
label.text("1-" + paginginfo.pagesize + ' of ' + datainfo.rowscount);
|
||||||
|
leftButton.appendTo(pageElementsContainer);
|
||||||
|
rightButton.appendTo(pageElementsContainer);
|
||||||
|
label.appendTo(pageElementsContainer);
|
||||||
|
pageElementsContainer.appendTo(container);
|
||||||
|
self.label = label;
|
||||||
|
// update buttons states.
|
||||||
|
var handleStates = function(event, button, className, add) {
|
||||||
|
button.on(event,
|
||||||
|
function() {
|
||||||
|
if (add == true) {
|
||||||
|
button.find('div').addClass(className);
|
||||||
|
} else button.find('div').removeClass(className);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
rightButton.click(function() {
|
||||||
|
$("#panelGrid").jqxGrid('gotonextpage');
|
||||||
|
});
|
||||||
|
leftButton.click(function() {
|
||||||
|
$("#panelGrid").jqxGrid('gotoprevpage');
|
||||||
|
});
|
||||||
|
return container;
|
||||||
|
},
|
||||||
|
|
||||||
|
//selectionmode: 'multiplerowsextended',
|
||||||
|
scrollmode: 'logical',
|
||||||
|
sortable:true,
|
||||||
|
pagesize:25,
|
||||||
|
localization: getLocalization('zh'),
|
||||||
|
width: '100%',
|
||||||
|
height:$("#nav-section").height()-$("#dash-logo").outerHeight(true)-3,
|
||||||
|
source: dataAdapter,
|
||||||
|
enablebrowserselection:true,
|
||||||
|
columnsresize: true,
|
||||||
|
rowdetails: true,
|
||||||
|
rowdetailstemplate: { rowdetails: $("#xss-detail-template").html(), rowdetailsheight: 222 },
|
||||||
|
initrowdetails: initrowdetails,
|
||||||
|
|
||||||
|
columns: [
|
||||||
|
{ text: '时间', datafield: 'request_date_and_time_string',width:160 },
|
||||||
|
{ text: 'IP', datafield: 'user_IP'},
|
||||||
|
{ text: '来源', datafield: 'location' },
|
||||||
|
{ text: '客户端', datafield: 'client' },
|
||||||
|
{ text: '请求', datafield: 'request_method' ,width:60},
|
||||||
|
{ text: '携带数据', datafield: 'data_type'},
|
||||||
|
{ text: '保持连接', datafield: 'keepsession',width:60,cellsalign: 'center'}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#panelGrid").on('pagechanged', function () {
|
||||||
|
var datainfo = $("#panelGrid").jqxGrid('getdatainformation');
|
||||||
|
var paginginfo = datainfo.paginginformation;
|
||||||
|
self.label.text(1 + paginginfo.pagenum * paginginfo.pagesize + "-" + Math.min(datainfo.rowscount, (paginginfo.pagenum + 1) * paginginfo.pagesize) + ' of ' + datainfo.rowscount);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/*所有窗口初始化*/
|
||||||
|
//删除记录确认窗口
|
||||||
|
$('#deleteConfirmWindow').jqxWindow({
|
||||||
|
height: 100, width: 270,
|
||||||
|
resizable: false, isModal: true, modalOpacity: 0.3,
|
||||||
|
okButton: $('#deleteConfirm_ok'), cancelButton: $('#deleteConfirm_cancel'),
|
||||||
|
autoOpen: false,
|
||||||
|
});
|
||||||
|
$('#deleteConfirm_ok').jqxButton({ width: '65px' });
|
||||||
|
$('#deleteConfirm_cancel').jqxButton({ width: '65px' });
|
||||||
|
|
||||||
|
$('#deleteConfirmWindow').on('close', function (event) {
|
||||||
|
if (event.args.dialogResult.OK) {
|
||||||
|
var selectedrowindex = $("#panelGrid").jqxGrid('getselectedrowindex');
|
||||||
|
var id = $("#panelGrid").jqxGrid('getrowid', selectedrowindex);
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: urlbase+"?cmd=del&id="+id,
|
||||||
|
dataType: "json",
|
||||||
|
timeout : interval,
|
||||||
|
success: function(data)
|
||||||
|
{
|
||||||
|
if(data==true)
|
||||||
|
$("#panelGrid").jqxGrid('deleterow', id);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$('#failedWindow').jqxWindow('open');
|
||||||
|
$("#failedWindow").addClass('animated');
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
complete : function(XMLHttpRequest,status){
|
||||||
|
if(status=='timeout')
|
||||||
|
{
|
||||||
|
$('#failedWindow').jqxWindow('open');
|
||||||
|
$("#failedWindow").addClass('animated');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//清空记录确认窗口
|
||||||
|
$('#clearConfirmWindow').jqxWindow({
|
||||||
|
height: 100, width: 270,
|
||||||
|
resizable: false, isModal: true, modalOpacity: 0.3,
|
||||||
|
okButton: $('#clearConfirm_ok'), cancelButton: $('#clearConfirm_cancel'),
|
||||||
|
autoOpen: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#clearConfirm_ok').jqxButton({ width: '65px' });
|
||||||
|
$('#clearConfirm_cancel').jqxButton({ width: '65px' });
|
||||||
|
|
||||||
|
$('#clearConfirmWindow').on('close', function (event) {
|
||||||
|
if (event.args.dialogResult.OK) {
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: urlbase+"?cmd=clear",
|
||||||
|
dataType: "json",
|
||||||
|
timeout : interval,
|
||||||
|
success: function(data)
|
||||||
|
{
|
||||||
|
if(data==true)
|
||||||
|
$('#panelGrid').jqxGrid('clear');
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$('#failedWindow').jqxWindow('open');
|
||||||
|
$("#failedWindow").addClass('animated');
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
complete : function(XMLHttpRequest,status){
|
||||||
|
if(status=='timeout')
|
||||||
|
{
|
||||||
|
$('#failedWindow').jqxWindow('open');
|
||||||
|
$("#failedWindow").addClass('animated');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#failedWindow').jqxWindow({
|
||||||
|
height: 100, width: 270,
|
||||||
|
resizable: false, isModal: true, modalOpacity: 0.3,
|
||||||
|
okButton: $('#failed_ok'),
|
||||||
|
autoOpen: false,
|
||||||
|
});
|
||||||
|
$('#failed_ok').jqxButton({ width: '65px' });
|
||||||
|
|
||||||
|
//查询窗口
|
||||||
|
$("#searchWindow").jqxWindow({ resizable: false, autoOpen: false, width: 210, height: 180 });
|
||||||
|
// create find and clear buttons.
|
||||||
|
$("#findButton").jqxButton({ width: 70});
|
||||||
|
$("#clearButton").jqxButton({ width: 70});
|
||||||
|
// find records that match a criteria.
|
||||||
|
$("#dropdownlist").jqxDropDownList({ autoDropDownHeight: true, selectedIndex: 0, width: 200, height: 23,
|
||||||
|
source: [
|
||||||
|
'时间', 'IP', '来源', '客户端','请求', '携带数据', '保持连接'
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#findButton").click(function () {
|
||||||
|
$("#panelGrid").jqxGrid('clearfilters');
|
||||||
|
var searchColumnIndex = $("#dropdownlist").jqxDropDownList('selectedIndex');
|
||||||
|
var datafield = "";
|
||||||
|
switch (searchColumnIndex) {
|
||||||
|
case 0:
|
||||||
|
datafield = "request_date_and_time_string";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
datafield = "user_IP";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
datafield = "location";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
datafield = "client";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
datafield = "request_method";
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
datafield = "data_type";
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
datafield = "keepsession";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
var searchText = $("#inputField").val();
|
||||||
|
var filtergroup = new $.jqx.filter();
|
||||||
|
var filter_or_operator = 1;
|
||||||
|
var filtervalue = searchText;
|
||||||
|
var filtercondition = 'contains';
|
||||||
|
var filter = filtergroup.createfilter('stringfilter', filtervalue, filtercondition);
|
||||||
|
filtergroup.addfilter(filter_or_operator, filter);
|
||||||
|
$("#panelGrid").jqxGrid('addfilter', datafield, filtergroup);
|
||||||
|
// apply the filters.
|
||||||
|
$("#panelGrid").jqxGrid('applyfilters');
|
||||||
|
});
|
||||||
|
|
||||||
|
// clear filters.
|
||||||
|
$("#clearButton").click(function () {
|
||||||
|
$("#panelGrid").jqxGrid('clearfilters');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//主面板大小自适应
|
||||||
|
$(window).resize(function() {
|
||||||
|
$('#panelGrid').jqxGrid({ height: $("#nav-section").height()-$("#dash-logo").outerHeight(true)-3 });
|
||||||
|
//$('#panelGrid').jqxGrid('autoresizecolumn', 'request_date_and_time_string');
|
||||||
|
//$('#panelGrid').jqxGrid('autoresizecolumn', 'data_type');
|
||||||
|
//$('#panelGrid').jqxGrid('autoresizecolumn', 'user_IP');
|
||||||
|
});
|
||||||
|
|
||||||
|
//定时判断是否有新的记录
|
||||||
|
checkNewMessages();
|
||||||
|
setIntervalID=setInterval(checkNewMessages, interval);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
//获取新列表
|
||||||
|
function checkNewMessages(){
|
||||||
|
$.ajax({
|
||||||
|
url: urlbase+"?cmd=simplelist",
|
||||||
|
dataType: "json",
|
||||||
|
timeout : interval,
|
||||||
|
success: function(data)
|
||||||
|
{
|
||||||
|
if(messageList)
|
||||||
|
{
|
||||||
|
var sum=0;
|
||||||
|
var lastedID=null;
|
||||||
|
|
||||||
|
for(var id in data) {
|
||||||
|
if(messageList.indexOf(data[id])<0)
|
||||||
|
{
|
||||||
|
sum++;
|
||||||
|
lastedID=data[id];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(sum>0)
|
||||||
|
showNotification(sum,lastedID,interval);
|
||||||
|
|
||||||
|
}
|
||||||
|
messageList=data;
|
||||||
|
},
|
||||||
|
complete : function(XMLHttpRequest,status){
|
||||||
|
if(status=='timeout'){
|
||||||
|
interval*=2;
|
||||||
|
if(setIntervalID)
|
||||||
|
{
|
||||||
|
clearInterval(setIntervalID);
|
||||||
|
if(interval<10000)
|
||||||
|
setIntervalID=setInterval(checkNewMessages, interval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//根据useragent判断操作系统,浏览器版本
|
||||||
|
function get_client_info(agent){
|
||||||
|
var browser = "未知浏览器";
|
||||||
|
var browser_version = "";
|
||||||
|
if (agent.indexOf("Firefox/") > 0) {
|
||||||
|
var bv=agent.match(/Firefox\/([^;)]+)+/i);
|
||||||
|
browser = "Firefox";
|
||||||
|
browser_version = bv[1]; //获取火狐浏览器的版本号
|
||||||
|
} else if (agent.indexOf("Maxthon") > 0) {
|
||||||
|
var bv=agent.match(/Maxthon\/([\d\.]+)/);
|
||||||
|
browser = "傲游";
|
||||||
|
browser_version = bv[1];
|
||||||
|
} else if (agent.indexOf("MSIE") > 0) {
|
||||||
|
var bv=agent.match(/MSIE\s+([^;)]+)+/i);
|
||||||
|
browser = "IE";
|
||||||
|
browser_version = bv[1]; //获取IE的版本号
|
||||||
|
} else if (agent.indexOf("OPR") > 0) {
|
||||||
|
var bv=agent.match(/OPR\/([\d\.]+)/);
|
||||||
|
browser = "Opera";
|
||||||
|
browser_version = bv[1];
|
||||||
|
} else if(agent.indexOf("Edge") > 0) {
|
||||||
|
//win10 Edge浏览器 添加了chrome内核标记 在判断Chrome之前匹配
|
||||||
|
var bv=agent.match(/Edge\/([\d\.]+)/);
|
||||||
|
browser = "Edge";
|
||||||
|
browser_version = bv[1];
|
||||||
|
} else if (agent.indexOf("Chrome") > 0) {
|
||||||
|
var bv=agent.match(/Chrome\/([\d\.]+)/);
|
||||||
|
|
||||||
|
browser = "Chrome";
|
||||||
|
browser_version = bv[1]; //获取google chrome的版本号
|
||||||
|
} else if(agent.indexOf('rv:')>0 && agent.indexOf('Gecko')>0){
|
||||||
|
var bv=agent.match(/rv:([\d\.]+)/);
|
||||||
|
browser = "IE";
|
||||||
|
browser_version = bv[1];
|
||||||
|
}
|
||||||
|
browser_version=browser_version.match(/^[0-9\.]+$/)?browser_version:"未知";
|
||||||
|
|
||||||
|
$os = '未知操作系统';
|
||||||
|
if (agent.match(/win/i) && (agent.indexOf("95") > 0))
|
||||||
|
$os = 'Windows 95';
|
||||||
|
else if (agent.match(/win 9x/i) && (agent.indexOf("4.90") > 0))
|
||||||
|
$os = 'Windows ME';
|
||||||
|
else if (agent.match(/win/i) && agent.match(/98/i))
|
||||||
|
$os = 'Windows 98';
|
||||||
|
else if (agent.match(/win/i) && agent.match(/nt 6.0/i))
|
||||||
|
$os = 'Windows Vista';
|
||||||
|
else if (agent.match(/win/i) && agent.match(/nt 6.1/i))
|
||||||
|
$os = 'Windows 7';
|
||||||
|
else if (agent.match(/win/i) && agent.match(/nt 6.2/i))
|
||||||
|
$os = 'Windows 8';
|
||||||
|
else if(agent.match(/win/i) && agent.match(/nt 10.0/i))
|
||||||
|
$os = 'Windows 10';
|
||||||
|
else if (agent.match(/win/i) && agent.match(/nt 5.1/i))
|
||||||
|
$os = 'Windows XP';
|
||||||
|
else if (agent.match(/win/i) && agent.match(/nt 5/i))
|
||||||
|
$os = 'Windows 2000';
|
||||||
|
else if (agent.match(/win/i) && agent.match(/nt/i))
|
||||||
|
$os = 'Windows NT';
|
||||||
|
else if (agent.match(/win/i) && agent.match(/32/i))
|
||||||
|
$os = 'Windows 32';
|
||||||
|
else if (agent.match(/linux/i))
|
||||||
|
$os = 'Linux';
|
||||||
|
else if (agent.match(/unix/i))
|
||||||
|
$os = 'Unix';
|
||||||
|
else if (agent.match(/sun/i) && agent.match(/os/i))
|
||||||
|
$os = 'SunOS';
|
||||||
|
else if (agent.match(/ibm/i) && agent.match(/os/i))
|
||||||
|
$os = 'IBM OS/2';
|
||||||
|
else if (agent.match(/Mac/i) && agent.match(/PC/i))
|
||||||
|
$os = 'Macintosh';
|
||||||
|
else if (agent.match(/PowerPC/i))
|
||||||
|
$os = 'PowerPC';
|
||||||
|
else if (agent.match(/AIX/i))
|
||||||
|
$os = 'AIX';
|
||||||
|
else if (agent.match(/HPUX/i))
|
||||||
|
$os = 'HPUX';
|
||||||
|
else if (agent.match(/NetBSD/i))
|
||||||
|
$os = 'NetBSD';
|
||||||
|
else if (agent.match(/BSD/i))
|
||||||
|
$os = 'BSD';
|
||||||
|
else if (agent.match(/OSF1/i))
|
||||||
|
$os = 'OSF1';
|
||||||
|
else if (agent.match(/IRIX/i))
|
||||||
|
$os = 'IRIX';
|
||||||
|
else if (agent.match(/FreeBSD/i))
|
||||||
|
$os = 'FreeBSD';
|
||||||
|
else if (agent.match(/teleport/i))
|
||||||
|
$os = 'teleport';
|
||||||
|
else if (agent.match(/flashget/i))
|
||||||
|
$os = 'flashget';
|
||||||
|
else if (agent.match(/webzip/i))
|
||||||
|
$os = 'webzip';
|
||||||
|
else if (agent.match(/offline/i))
|
||||||
|
$os = 'offline';
|
||||||
|
|
||||||
|
return $os+' '+browser+'('+browser_version+')';
|
||||||
|
}
|
||||||
118
static/js/localization.js
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
var getLocalization = function (culture) {
|
||||||
|
var localization = null;
|
||||||
|
switch (culture) {
|
||||||
|
case "zh":
|
||||||
|
default:
|
||||||
|
localization =
|
||||||
|
{
|
||||||
|
// separator of parts of a date (e.g. '/' in 11/05/1955)
|
||||||
|
'/': "/",
|
||||||
|
// separator of parts of a time (e.g. ':' in 05:44 PM)
|
||||||
|
':': ":",
|
||||||
|
// the first day of the week (0 = Sunday, 1 = Monday, etc)
|
||||||
|
firstDay: 0,
|
||||||
|
days: {
|
||||||
|
// full day names
|
||||||
|
names: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
|
||||||
|
// abbreviated day names
|
||||||
|
namesAbbr: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
|
||||||
|
// shortest day names
|
||||||
|
namesShort: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]
|
||||||
|
},
|
||||||
|
months: {
|
||||||
|
// full month names (13 months for lunar calendards -- 13th month should be "" if not lunar)
|
||||||
|
names: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", ""],
|
||||||
|
// abbreviated month names
|
||||||
|
namesAbbr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", ""]
|
||||||
|
},
|
||||||
|
// AM and PM designators in one of these forms:
|
||||||
|
// The usual view, and the upper and lower case versions
|
||||||
|
// [standard,lowercase,uppercase]
|
||||||
|
// The culture does not use AM or PM (likely all standard date formats use 24 hour time)
|
||||||
|
// null
|
||||||
|
AM: ["AM", "am", "AM"],
|
||||||
|
PM: ["PM", "pm", "PM"],
|
||||||
|
eras: [
|
||||||
|
// eras in reverse chronological order.
|
||||||
|
// name: the name of the era in this culture (e.g. A.D., C.E.)
|
||||||
|
// start: when the era starts in ticks (gregorian, gmt), null if it is the earliest supported era.
|
||||||
|
// offset: offset in years from gregorian calendar
|
||||||
|
{ "name": "A.D.", "start": null, "offset": 0 }
|
||||||
|
],
|
||||||
|
twoDigitYearMax: 2029,
|
||||||
|
patterns: {
|
||||||
|
// short date pattern
|
||||||
|
d: "M/d/yyyy",
|
||||||
|
// long date pattern
|
||||||
|
D: "dddd, MMMM dd, yyyy",
|
||||||
|
// short time pattern
|
||||||
|
t: "h:mm tt",
|
||||||
|
// long time pattern
|
||||||
|
T: "h:mm:ss tt",
|
||||||
|
// long date, short time pattern
|
||||||
|
f: "dddd, MMMM dd, yyyy h:mm tt",
|
||||||
|
// long date, long time pattern
|
||||||
|
F: "dddd, MMMM dd, yyyy h:mm:ss tt",
|
||||||
|
// month/day pattern
|
||||||
|
M: "MMMM dd",
|
||||||
|
// month/year pattern
|
||||||
|
Y: "yyyy MMMM",
|
||||||
|
// S is a sortable format that does not vary by culture
|
||||||
|
S: "yyyy\u0027-\u0027MM\u0027-\u0027dd\u0027T\u0027HH\u0027:\u0027mm\u0027:\u0027ss",
|
||||||
|
// formatting of dates in MySQL DataBases
|
||||||
|
ISO: "yyyy-MM-dd hh:mm:ss",
|
||||||
|
ISO2: "yyyy-MM-dd HH:mm:ss",
|
||||||
|
d1: "dd.MM.yyyy",
|
||||||
|
d2: "dd-MM-yyyy",
|
||||||
|
d3: "dd-MMMM-yyyy",
|
||||||
|
d4: "dd-MM-yy",
|
||||||
|
d5: "H:mm",
|
||||||
|
d6: "HH:mm",
|
||||||
|
d7: "HH:mm tt",
|
||||||
|
d8: "dd/MMMM/yyyy",
|
||||||
|
d9: "MMMM-dd",
|
||||||
|
d10: "MM-dd",
|
||||||
|
d11: "MM-dd-yyyy"
|
||||||
|
},
|
||||||
|
percentsymbol: "%",
|
||||||
|
currencysymbol: "$",
|
||||||
|
currencysymbolposition: "before",
|
||||||
|
decimalseparator: '.',
|
||||||
|
thousandsseparator: ',',
|
||||||
|
pagergotopagestring: "跳至:",
|
||||||
|
pagershowrowsstring: "页 行数:",
|
||||||
|
pagerrangestring: " of ",
|
||||||
|
pagerpreviousbuttonstring: "前一页",
|
||||||
|
pagernextbuttonstring: "后一页",
|
||||||
|
pagerfirstbuttonstring: "第一页",
|
||||||
|
pagerlastbuttonstring: "最后一页",
|
||||||
|
groupsheaderstring: "Drag a column and drop it here to group by that column",
|
||||||
|
sortascendingstring: "升序",
|
||||||
|
sortdescendingstring: "降序",
|
||||||
|
sortremovestring: "取消",
|
||||||
|
groupbystring: "Group By this column",
|
||||||
|
groupremovestring: "Remove from groups",
|
||||||
|
filterclearstring: "Clear",
|
||||||
|
filterstring: "Filter",
|
||||||
|
filtershowrowstring: "Show rows where:",
|
||||||
|
filterorconditionstring: "Or",
|
||||||
|
filterandconditionstring: "And",
|
||||||
|
filterselectallstring: "(Select All)",
|
||||||
|
filterchoosestring: "Please Choose:",
|
||||||
|
filterstringcomparisonoperators: ['empty', 'not empty', 'enthalten', 'enthalten(match case)',
|
||||||
|
'does not contain', 'does not contain(match case)', 'starts with', 'starts with(match case)',
|
||||||
|
'ends with', 'ends with(match case)', 'equal', 'equal(match case)', 'null', 'not null'],
|
||||||
|
filternumericcomparisonoperators: ['equal', 'not equal', 'less than', 'less than or equal', 'greater than', 'greater than or equal', 'null', 'not null'],
|
||||||
|
filterdatecomparisonoperators: ['equal', 'not equal', 'less than', 'less than or equal', 'greater than', 'greater than or equal', 'null', 'not null'],
|
||||||
|
filterbooleancomparisonoperators: ['equal', 'not equal'],
|
||||||
|
validationstring: "Entered value is not valid",
|
||||||
|
emptydatastring: "无数据",
|
||||||
|
filterselectstring: "Select Filter",
|
||||||
|
loadtext: "载入中",
|
||||||
|
clearstring: "清除",
|
||||||
|
todaystring: "今天"
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return localization;
|
||||||
|
}
|
||||||
56
static/js/notification.js
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
var unreadNum=0;
|
||||||
|
var oldTitle=document.title;
|
||||||
|
document.documentElement.style.overflow="hidden";
|
||||||
|
|
||||||
|
function readNotification(){
|
||||||
|
unreadNum=0;
|
||||||
|
if(document.title)
|
||||||
|
document.title=oldTitle;
|
||||||
|
$(this).parent().fadeOut(200);
|
||||||
|
//reload data
|
||||||
|
$('#panelGrid').jqxGrid('updatebounddata');
|
||||||
|
//$("#panelGrid").jqxGrid({ source: getAdapter() });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function showNotification(newUnreadNum,lastedID,interval){
|
||||||
|
unreadNum+=newUnreadNum;
|
||||||
|
$.ajax({
|
||||||
|
url: urlbase+"?cmd=get&id="+lastedID,
|
||||||
|
dataType: "json",
|
||||||
|
timeout : interval,
|
||||||
|
success: function(data)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(document.title)
|
||||||
|
document.title='【收到'+unreadNum+"份消息】"+document.title;
|
||||||
|
|
||||||
|
var notificationHTML='<div id="webpushtipcontainer" class="webpushtipoutter" ><div class="webpushtipinner"><div id="webpushtip1" style="visibility: visible; bottom: 0px;" class="newmailNotifyItem notify_mail"><div class="newmailNotify" id="newNotification"><a nocheck="true" id="webpushtip1close" class="notify_close"title="关闭"></a><div class="notify_type"><span></span><label><em id="unreadNum">1</em></label></div><div class="notify_content"><p class="notify_location">未知</p><p class="notify_title">0.0.0.0</p><p class="notify_digest">GET:0个 POST:0个 Cookie:0个</p></div></div></div></div></div>';
|
||||||
|
$("#webpushtipcontainer").remove();
|
||||||
|
$("#notifications-bottom-right").append(notificationHTML);
|
||||||
|
$("#webpushtipcontainer").addClass('animated bounceInUp');
|
||||||
|
$('#webpushtip1close').click(function(event){$(this).parent().parent().fadeOut(200);event.stopPropagation();});
|
||||||
|
$("#newNotification").click(readNotification);
|
||||||
|
|
||||||
|
$('#unreadNum').text(unreadNum);
|
||||||
|
$('.notify_location').text(data.location);
|
||||||
|
$('.notify_title').text(data.user_IP);
|
||||||
|
$('.notify_digest').text("GET:"+Object.keys(data.get_data).length+"个 POST:"+Object.keys(data.post_data).length+"个 Cookie:"+Object.keys(data.cookie_data).length+"个");
|
||||||
|
$("#notifications-bottom-right").addClass('animated bounceInUp');
|
||||||
|
|
||||||
|
},
|
||||||
|
complete : function(XMLHttpRequest,status){
|
||||||
|
if(status=='timeout'){
|
||||||
|
var notificationHTML='<div id="webpushtipcontainer" class="webpushtipoutter" ><div class="webpushtipinner"><div id="webpushtip1" style="visibility: visible; bottom: 0px;" class="newmailNotifyItem notify_mail"><div class="newmailNotify" id="newNotification"><a nocheck="true" id="webpushtip1close" class="notify_close"title="关闭"></a><div class="notify_type"><span></span><label><em id="unreadNum">1</em></label></div><div class="notify_content"><p class="notify_location">未知来源</p><p class="notify_title">网络错误</p><p class="notify_digest">请检查网络连接</p></div></div></div></div></div>';
|
||||||
|
$("#webpushtipcontainer").remove();
|
||||||
|
$("#notifications-bottom-right").append(notificationHTML);
|
||||||
|
$("#webpushtipcontainer").addClass('animated bounceInUp');
|
||||||
|
$('#webpushtip1close').click(function(event){$(this).parent().parent().fadeOut(200);event.stopPropagation();});
|
||||||
|
$("#newNotification").click(readNotification);
|
||||||
|
|
||||||
|
$('#unreadNum').text(unreadNum);
|
||||||
|
$("#notifications-bottom-right").addClass('animated bounceInUp');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
33
util.php
@@ -1,6 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
require_once("aes.php");
|
require_once("aes.php");
|
||||||
|
|
||||||
function getIP()
|
function getIP()
|
||||||
{
|
{
|
||||||
if(isset($_SERVER['HTTP_CLIENT_IP'])) {
|
if(isset($_SERVER['HTTP_CLIENT_IP'])) {
|
||||||
@@ -35,20 +34,6 @@ if (!function_exists('getallheaders')) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function stripStr($str){
|
|
||||||
if(get_magic_quotes_gpc())
|
|
||||||
$str=stripslashes($str);
|
|
||||||
return addslashes(htmlspecialchars($str,ENT_QUOTES));
|
|
||||||
}
|
|
||||||
|
|
||||||
function stripArr($arr){
|
|
||||||
$new_arr=array();
|
|
||||||
foreach($arr as $k => $v) {
|
|
||||||
$new_arr[stripStr($k)] = stripStr($v);
|
|
||||||
}
|
|
||||||
return $new_arr;
|
|
||||||
}
|
|
||||||
|
|
||||||
function tryBase64Decode($arr)
|
function tryBase64Decode($arr)
|
||||||
{
|
{
|
||||||
if(isset($arr)&&count($arr)>0)
|
if(isset($arr)&&count($arr)>0)
|
||||||
@@ -56,8 +41,10 @@ function tryBase64Decode($arr)
|
|||||||
$isChanged=0;
|
$isChanged=0;
|
||||||
|
|
||||||
$new_arr = array();
|
$new_arr = array();
|
||||||
foreach($arr as $k => $v) {
|
foreach($arr as $k => $v)
|
||||||
if(isBase64Formatted($v)) {
|
{
|
||||||
|
if(isBase64Formatted($v))
|
||||||
|
{
|
||||||
$v=base64_decode($v);
|
$v=base64_decode($v);
|
||||||
$isChanged=1;
|
$isChanged=1;
|
||||||
}
|
}
|
||||||
@@ -76,9 +63,16 @@ function tryBase64Decode($arr)
|
|||||||
function isBase64Formatted($str)
|
function isBase64Formatted($str)
|
||||||
{
|
{
|
||||||
if(preg_match('/^[A-Za-z0-9+\/=]+$/',$str))
|
if(preg_match('/^[A-Za-z0-9+\/=]+$/',$str))
|
||||||
if ($str == base64_encode(base64_decode($str)))
|
{
|
||||||
if(preg_match('/^[A-Za-z0-9\x00-\x80~!@#$%&_+-=:";\'<>,\/"\[\]\\\^\.\|\?\*\+\(\)\{\}\s]+$/',base64_decode($str)))
|
$decoded_str=base64_decode($str);
|
||||||
|
if ($str == base64_encode($decoded_str))
|
||||||
|
{
|
||||||
|
if(preg_match('/^[A-Za-z0-9\x00-\x80~!@#$%&_+-=:";\'<>,\/"\[\]\\\^\.\|\?\*\+\(\)\{\}\s]+$/',$decoded_str))
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,5 +86,4 @@ function decrypt($info,$encryptPass)
|
|||||||
return AESDecryptCtr($info,$encryptPass);
|
return AESDecryptCtr($info,$encryptPass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||