commit
dec50b5682
@ -1,3 +1,4 @@
|
||||
web.py ident export-subst
|
||||
helper.py ident export-subst
|
||||
/test export-ignore
|
||||
cps/static/css/libs/* linguist-vendored
|
||||
cps/static/js/libs/* linguist-vendored
|
||||
|
@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
class ReverseProxied(object):
|
||||
"""Wrap the application in this middleware and configure the
|
||||
front-end server to add these headers, to let you quietly bind
|
||||
this to a URL other than / and to an HTTP scheme that is
|
||||
different than what is used locally.
|
||||
|
||||
Code courtesy of: http://flask.pocoo.org/snippets/35/
|
||||
|
||||
In nginx:
|
||||
location /myprefix {
|
||||
proxy_pass http://127.0.0.1:8083;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Scheme $scheme;
|
||||
proxy_set_header X-Script-Name /myprefix;
|
||||
}
|
||||
"""
|
||||
|
||||
def __init__(self, application):
|
||||
self.app = application
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
script_name = environ.get('HTTP_X_SCRIPT_NAME', '')
|
||||
if script_name:
|
||||
environ['SCRIPT_NAME'] = script_name
|
||||
path_info = environ.get('PATH_INFO', '')
|
||||
if path_info and path_info.startswith(script_name):
|
||||
environ['PATH_INFO'] = path_info[len(script_name):]
|
||||
|
||||
scheme = environ.get('HTTP_X_SCHEME', '')
|
||||
if scheme:
|
||||
environ['wsgi.url_scheme'] = scheme
|
||||
servr = environ.get('HTTP_X_FORWARDED_SERVER', '')
|
||||
if servr:
|
||||
environ['HTTP_HOST'] = servr
|
||||
return self.app(environ, start_response)
|
@ -0,0 +1,26 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="http-error" lang="{{ g.user.locale }}">
|
||||
<head>
|
||||
<title>{{ instance }} | HTTP Error ({{ error_code }})</title>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
|
||||
<!-- Bootstrap -->
|
||||
<link rel="apple-touch-icon" sizes="140x140" href="{{ url_for('static', filename='favicon.ico') }}">
|
||||
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
|
||||
<link href="{{ url_for('static', filename='css/libs/bootstrap.min.css') }}" rel="stylesheet" media="screen">
|
||||
<link href="{{ url_for('static', filename='css/style.css') }}" rel="stylesheet" media="screen">
|
||||
{% if g.user.get_theme == 1 %}
|
||||
<link href="{{ url_for('static', filename='css/caliBlur-style.css') }}" rel="stylesheet" media="screen">
|
||||
{% endif %}
|
||||
</head>
|
||||
<body>
|
||||
<div class="container text-center">
|
||||
<h1>{{ error_code }}</h1>
|
||||
<h3>{{ error_name }}</h3>
|
||||
<a href="{{url_for('index')}}" title="{{ _('Back to home') }}">{{_('Back to home')}}</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,21 @@
|
||||
.hiddenRow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.bg-grey {
|
||||
background-color: rgba(0, 0, 0, 0.03);
|
||||
}
|
||||
|
||||
.table-curved {
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.buttons, .report-description {
|
||||
margin: 5px;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.piechart{
|
||||
text-align: center;
|
||||
}
|
||||
|
@ -0,0 +1,189 @@
|
||||
output_list = Array();
|
||||
|
||||
/* Level - 0: Summary; 1: Failed; 2: All; 3: Skipped */
|
||||
function showCase(level) {
|
||||
table_rows = document.getElementsByTagName("tr");
|
||||
for (var i = 0; i < table_rows.length; i++) {
|
||||
row = table_rows[i];
|
||||
id = row.id;
|
||||
if (id.substr(0,2) == 'ft') {
|
||||
if (level < 1 || level == 3) {
|
||||
row.classList.add('hiddenRow');
|
||||
}
|
||||
else {
|
||||
row.classList.remove('hiddenRow');
|
||||
}
|
||||
}
|
||||
if (id.substr(0,2) == 'pt') {
|
||||
if (level > 1 && level != 3) {
|
||||
row.classList.remove('hiddenRow');
|
||||
}
|
||||
else {
|
||||
row.classList.add('hiddenRow');
|
||||
}
|
||||
}
|
||||
if (id.substr(0,2) == 'st') {
|
||||
if (level >=2) {
|
||||
row.classList.remove('hiddenRow');
|
||||
}
|
||||
else {
|
||||
row.classList.add('hiddenRow');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function showClassDetail(class_id, count) {
|
||||
var testcases_list = Array(count);
|
||||
var all_hidden = true;
|
||||
for (var i = 0; i < count; i++) {
|
||||
testcase_postfix_id = 't' + class_id.substr(1) + '.' + (i+1);
|
||||
testcase_id = 'f' + testcase_postfix_id;
|
||||
testcase = document.getElementById(testcase_id);
|
||||
if (!testcase) {
|
||||
testcase_id = 'p' + testcase_postfix_id;
|
||||
testcase = document.getElementById(testcase_id);
|
||||
}
|
||||
if (!testcase) {
|
||||
testcase_id = 's' + testcase_postfix_id;
|
||||
testcase = document.getElementById(testcase_id);
|
||||
}
|
||||
testcases_list[i] = testcase;
|
||||
if (testcase.classList.contains('hiddenRow')) {
|
||||
all_hidden = false;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < count; i++) {
|
||||
testcase = testcases_list[i];
|
||||
if (!all_hidden) {
|
||||
testcase.classList.remove('hiddenRow');
|
||||
}
|
||||
else {
|
||||
testcase.classList.add('hiddenRow');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function showTestDetail(div_id){
|
||||
var details_div = document.getElementById(div_id)
|
||||
var displayState = details_div.style.display
|
||||
// alert(displayState)
|
||||
if (displayState != 'block' ) {
|
||||
displayState = 'block'
|
||||
details_div.style.display = 'block'
|
||||
}
|
||||
else {
|
||||
details_div.style.display = 'none'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function html_escape(s) {
|
||||
s = s.replace(/&/g,'&');
|
||||
s = s.replace(/</g,'<');
|
||||
s = s.replace(/>/g,'>');
|
||||
return s;
|
||||
}
|
||||
|
||||
/* obsoleted by detail in <div>
|
||||
function showOutput(id, name) {
|
||||
var w = window.open("", //url
|
||||
name,
|
||||
"resizable,scrollbars,status,width=800,height=450");
|
||||
d = w.document;
|
||||
d.write("<pre>");
|
||||
d.write(html_escape(output_list[id]));
|
||||
d.write("\n");
|
||||
d.write("<a href='javascript:window.close()'>close</a>\n");
|
||||
d.write("</pre>\n");
|
||||
d.close();
|
||||
}
|
||||
*/
|
||||
function drawCircle(pass, fail, error, skip){
|
||||
var color = ["#5cb85c","#d9534f","#c00","#f0ad4e"];
|
||||
var data = [pass,fail,error,skip];
|
||||
var text_arr = ["pass", "fail", "error","skip"];
|
||||
|
||||
var canvas = document.getElementById("circle");
|
||||
var ctx = canvas.getContext("2d");
|
||||
var startPoint=0;
|
||||
var width = 20, height = 10;
|
||||
var posX = 112 * 2 + 20, posY = 30;
|
||||
var textX = posX + width + 5, textY = posY + 10;
|
||||
for(var i=0;i<data.length;i++){
|
||||
ctx.fillStyle = color[i];
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(112,84);
|
||||
ctx.arc(112,84,84,startPoint,startPoint+Math.PI*2*(data[i]/(data[0]+data[1]+data[2]+data[3])),false);
|
||||
ctx.fill();
|
||||
startPoint += Math.PI*2*(data[i]/(data[0]+data[1]+data[2]+data[3]));
|
||||
ctx.fillStyle = color[i];
|
||||
ctx.fillRect(posX, posY + 20 * i, width, height);
|
||||
ctx.moveTo(posX, posY + 20 * i);
|
||||
ctx.font = 'bold 14px';
|
||||
ctx.fillStyle = color[i];
|
||||
var percent = text_arr[i] + ":"+data[i];
|
||||
ctx.fillText(percent, textX, textY + 20 * i);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function show_img(obj) {
|
||||
var obj1 = obj.nextElementSibling
|
||||
obj1.style.display='block'
|
||||
var index = 0;//每张图片的下标,
|
||||
var len = obj1.getElementsByTagName('img').length;
|
||||
var imgyuan = obj1.getElementsByClassName('imgyuan')[0]
|
||||
//var start=setInterval(autoPlay,500);
|
||||
obj1.onmouseover=function(){//当鼠标光标停在图片上,则停止轮播
|
||||
clearInterval(start);
|
||||
}
|
||||
obj1.onmouseout=function(){//当鼠标光标停在图片上,则开始轮播
|
||||
start=setInterval(autoPlay,1000);
|
||||
}
|
||||
for (var i = 0; i < len; i++) {
|
||||
var font = document.createElement('font')
|
||||
imgyuan.appendChild(font)
|
||||
}
|
||||
var lis = obj1.getElementsByTagName('font');//得到所有圆圈
|
||||
changeImg(0)
|
||||
var funny = function (i) {
|
||||
lis[i].onmouseover = function () {
|
||||
index=i
|
||||
changeImg(i)
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < lis.length; i++) {
|
||||
funny(i);
|
||||
}
|
||||
|
||||
function autoPlay(){
|
||||
if(index>len-1){
|
||||
index=0;
|
||||
clearInterval(start); //运行一轮后停止
|
||||
}
|
||||
changeImg(index++);
|
||||
}
|
||||
imgyuan.style.width= 25*len +"px";
|
||||
//对应圆圈和图片同步
|
||||
function changeImg(index) {
|
||||
var list = obj1.getElementsByTagName('img');
|
||||
var list1 = obj1.getElementsByTagName('font');
|
||||
for (i = 0; i < list.length; i++) {
|
||||
list[i].style.display = 'none';
|
||||
list1[i].style.backgroundColor = 'white';
|
||||
}
|
||||
list[index].style.display = 'block';
|
||||
list1[index].style.backgroundColor = 'blue';
|
||||
}
|
||||
|
||||
}
|
||||
function hide_img(obj){
|
||||
obj.parentElement.style.display = "none";
|
||||
obj.parentElement.getElementsByClassName('imgyuan')[0].innerHTML = "";
|
||||
}
|
Loading…
Reference in New Issue