Merge branch 'master' of 10.7.100.160:/job/safesite
This commit is contained in:
commit
84db934805
|
|
@ -1,62 +1,116 @@
|
|||
{% load static %}
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<!-- 上述meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
|
||||
<!-- Bootstrap CSS -->
|
||||
<link href="{% static 'groups/bower_components/bootstrap/dist/css/bootstrap.min.css' %}" rel="stylesheet"/>
|
||||
<link href="{% static 'groups/login/login.css' %}" rel="stylesheet"/>
|
||||
<title>登录</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="col">
|
||||
<form class="form-login" action="/groups/login/" method="post">
|
||||
{% if groups_form.captcha.errors %}
|
||||
<div class="alert alert-warning">{{ groups_form.captcha.error_messages }}</div>
|
||||
{% elif message %}
|
||||
<div class="alert alert-warning">{{ message }}</div>
|
||||
{% endif %}
|
||||
{% csrf_token %}
|
||||
<h3 class="text-center">欢迎登录</h3>
|
||||
<div class="form-group">
|
||||
{{ groups_form.username.label_tag }}
|
||||
{{ groups_form.username}}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
{{ groups_form.password.label_tag }}
|
||||
{{ groups_form.password }}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
{{ groups_form.captcha.label_tag }}
|
||||
{{ groups_form.captcha }}
|
||||
</div>
|
||||
<div>
|
||||
<button type="submit" class="btn btn-primary float-right">登录</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div> <!-- /container -->
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<!-- Optional JavaScript -->
|
||||
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.js' %}"></script>
|
||||
<script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/popper.js"></script>
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
<head>
|
||||
{% load static %}
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>集团后台|登陆</title>
|
||||
<!-- Tell the browser to be responsive to screen width -->
|
||||
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<link rel="stylesheet" href="{% static 'groups/bower_components/bootstrap/dist/css/bootstrap.min.css' %}">
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="{% static 'groups/bower_components/font-awesome/css/font-awesome.min.css' %}">
|
||||
<!-- Ionicons -->
|
||||
<link rel="stylesheet" href="{% static 'groups/bower_components/Ionicons/css/ionicons.min.css' %}">
|
||||
<!-- Theme style -->
|
||||
<link rel="stylesheet" href="{% static 'groups/dist/css/AdminLTE.min.css' %}">
|
||||
<!-- iCheck -->
|
||||
<link rel="stylesheet" href="{% static 'groups/plugins/iCheck/square/blue.css' %}">
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
$(function(){
|
||||
$('#id_captcha_1').addClass('form-control');
|
||||
});
|
||||
$('.captcha').click(function () {
|
||||
$.getJSON("/groups/refresh_captcha/", function (result) {
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
|
||||
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<!-- Google Font -->
|
||||
<link rel="stylesheet"
|
||||
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
|
||||
</head>
|
||||
|
||||
<body class="hold-transition login-page">
|
||||
<div class="login-box">
|
||||
<div class="login-logo">
|
||||
<a href="../../index2.html"><b>集团后台</b>登陆</a>
|
||||
</div>
|
||||
<!-- /.login-logo -->
|
||||
<div class="login-box-body">
|
||||
<p class="login-box-msg">企业安全生产管理系统</p>
|
||||
|
||||
<form action="{% url 'groups_login' %}" method="post">
|
||||
{% if groups_form.captcha.errors %}
|
||||
<p style="color:red">{{ groups_form.captcha.error_messages }}</p>
|
||||
{% elif message %}
|
||||
<p style="color:red">{{ message }}</p>
|
||||
{% endif %}
|
||||
<div class="form-group has-feedback">
|
||||
{{groups_form.username}}
|
||||
<span class="glyphicon glyphicon-user form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
{{groups_form.password}}
|
||||
<span class="glyphicon glyphicon-lock form-control-feedback"></span>
|
||||
</div>
|
||||
<div class="form-group has-feedback">
|
||||
{{ groups_form.captcha }}
|
||||
</div>
|
||||
<div class="row">
|
||||
<!-- <div class="col-xs-8">
|
||||
<div class="checkbox icheck">
|
||||
<label>
|
||||
<input type="checkbox"> Remember Me
|
||||
</label>
|
||||
</div>
|
||||
</div> -->
|
||||
<!-- /.col -->
|
||||
<div class="col-xs-12">
|
||||
<button type="submit" class="btn btn-primary btn-block btn-flat ">登陆</button>
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<!-- <div class="social-auth-links text-center">
|
||||
<p>- OR -</p>
|
||||
<a href="#" class="btn btn-block btn-social btn-facebook btn-flat"><i class="fa fa-facebook"></i> Sign in using
|
||||
Facebook</a>
|
||||
<a href="#" class="btn btn-block btn-social btn-google btn-flat"><i class="fa fa-google-plus"></i> Sign in using
|
||||
Google+</a>
|
||||
</div> -->
|
||||
<!-- /.social-auth-links -->
|
||||
|
||||
<!-- <a href="#">I forgot my password</a><br>
|
||||
<a href="register.html" class="text-center">Register a new membership</a> -->
|
||||
|
||||
</div>
|
||||
<!-- /.login-box-body -->
|
||||
</div>
|
||||
<!-- /.login-box -->
|
||||
|
||||
<!-- jQuery 3 -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
<!-- iCheck -->
|
||||
<script src="{% static 'groups/plugins/iCheck/icheck.min.js' %}"></script>
|
||||
<script>
|
||||
$(function () {
|
||||
$('input').iCheck({
|
||||
checkboxClass: 'icheckbox_square-blue',
|
||||
radioClass: 'iradio_square-blue',
|
||||
increaseArea: '20%' /* optional */
|
||||
});
|
||||
});
|
||||
$('.captcha').click(function () {
|
||||
$.getJSON("/groups/refresh_captcha/", function (result) {
|
||||
$('.captcha').attr('src', result['image_url']);
|
||||
$('#id_captcha_0').val(result['key'])
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
{% load static %}
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!-- Required meta tags -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<!-- 上述meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后! -->
|
||||
<!-- Bootstrap CSS -->
|
||||
<link href="{% static 'groups/bower_components/bootstrap/dist/css/bootstrap.min.css' %}" rel="stylesheet"/>
|
||||
<link href="{% static 'groups/login/login.css' %}" rel="stylesheet"/>
|
||||
<title>登录</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="col">
|
||||
<form class="form-login" action="/groups/login/" method="post">
|
||||
{% if groups_form.captcha.errors %}
|
||||
<div class="alert alert-warning">{{ groups_form.captcha.error_messages.invalid }}</div>
|
||||
{% elif message %}
|
||||
<div class="alert alert-warning">{{ message }}</div>
|
||||
{% endif %}
|
||||
{% csrf_token %}
|
||||
<h3 class="text-center">欢迎登录</h3>
|
||||
<div class="form-group">
|
||||
{{ groups_form.username.label_tag }}
|
||||
{{ groups_form.username}}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
{{ groups_form.password.label_tag }}
|
||||
{{ groups_form.password }}
|
||||
</div>
|
||||
<div class="form-group">
|
||||
{{ groups_form.captcha.label_tag }}
|
||||
{{ groups_form.captcha }}
|
||||
</div>
|
||||
<div>
|
||||
<button type="submit" class="btn btn-primary float-right">登录</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div> <!-- /container -->
|
||||
|
||||
<!-- Optional JavaScript -->
|
||||
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.js' %}"></script>
|
||||
<script src="https://cdn.bootcss.com/popper.js/1.15.0/umd/popper.js"></script>
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
$(function(){
|
||||
$('#id_captcha_1').addClass('form-control');
|
||||
});
|
||||
$('.captcha').click(function () {
|
||||
$.getJSON("/groups/refresh_captcha/", function (result) {
|
||||
$('.captcha').attr('src', result['image_url']);
|
||||
$('#id_captcha_0').val(result['key'])
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
|
@ -34,7 +34,6 @@ def login(request):
|
|||
request.session['user_name'] = user.username
|
||||
return redirect('/groups/index/')
|
||||
else:
|
||||
message = '密码不正确!'
|
||||
return render(request, 'groups/login.html', locals())
|
||||
else:
|
||||
return render(request, 'groups/login.html', locals())
|
||||
|
|
|
|||
|
|
@ -0,0 +1,24 @@
|
|||
# Generated by Django 2.1.5 on 2019-10-18 17:23
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('safesite', '0277_remove_companyinfo_liaison_fax'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='riskact',
|
||||
name='area',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='riskactarea', to='safesite.Area'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='safecert',
|
||||
name='url',
|
||||
field=models.CharField(blank=True, max_length=1000, null=True),
|
||||
),
|
||||
]
|
||||
|
|
@ -374,7 +374,7 @@ class Safecert(models.Model):#安全资格证书
|
|||
yxqkssj = models.DateField(null=True,blank=True)
|
||||
yxqjssj = models.DateField(null=True,blank=True)
|
||||
zszt = models.IntegerField(choices = type_choices,null=True,blank=True)
|
||||
url = models.CharField(max_length=200,null=True,blank=True)
|
||||
url = models.CharField(max_length=1000,null=True,blank=True)
|
||||
|
||||
class Suggest(models.Model):#合理化建议
|
||||
ZT_CHOICES = (
|
||||
|
|
@ -693,7 +693,7 @@ class Inspect(models.Model):#设备巡检记录
|
|||
|
||||
class RiskAct(models.Model):#风险点表
|
||||
id = models.AutoField(primary_key=True)
|
||||
area = models.ForeignKey(Area,on_delete=models.CASCADE,null=True,blank=True)
|
||||
area = models.ForeignKey(Area,on_delete=models.CASCADE,null=True,blank=True,related_name='riskactarea')
|
||||
place = models.CharField(max_length=50,null=True,blank=True)
|
||||
type = models.ForeignKey(Dickey,on_delete=models.CASCADE,null=True,blank=True)
|
||||
name = models.CharField(max_length=200,null=True,blank=True)
|
||||
|
|
|
|||
|
|
@ -166,7 +166,9 @@
|
|||
.icon-taskdo{
|
||||
background:url('icons/taskdo.png') no-repeat center center;
|
||||
}
|
||||
|
||||
.icon-bhr {
|
||||
background: url('icons/behv.png') no-repeat center center;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
|
|
@ -0,0 +1,321 @@
|
|||
|
||||
<script>
|
||||
var now = new Date();
|
||||
$(function () {
|
||||
year = now.getFullYear();
|
||||
month = now.getMonth() + 1;
|
||||
for (var i = 0; i < 5; i++) {
|
||||
$('#year').append('<option value="' + (year - i) + '">' + (year - i) + '</option>');
|
||||
$('#years').append('<option value="' + (year - i) + '">' + (year - i) + '</option>');
|
||||
}
|
||||
$.get('api/tool?a=servertime', function (res) {
|
||||
$('#year').combobox().combobox('setValue', res.year);
|
||||
$('#years').combobox().combobox('setValue', res.year);
|
||||
$('#month').combobox().combobox('setValue', res.month);
|
||||
behaviorDate();
|
||||
gczxt();
|
||||
})
|
||||
|
||||
});
|
||||
$("#sfxbm2").combotree({
|
||||
url: 'parthandle?a=tree',
|
||||
editable: false,
|
||||
loadFilter: function (rows) {
|
||||
return convert(rows);
|
||||
},
|
||||
formatter: function (node) {
|
||||
var s = node.text;
|
||||
if (node.children) {
|
||||
s += ' <span style=\'color:blue\'>(' + node.children.length + ')</span>';
|
||||
}
|
||||
return s;
|
||||
},
|
||||
onSelect: function (node) {
|
||||
$('#sfxr').combobox({
|
||||
url: 'getuser?partid=' + node.id + '&a=combobox',
|
||||
editable: false,
|
||||
});
|
||||
}
|
||||
});
|
||||
function gcpmsearch() {
|
||||
var querydata = $('#fxrpms').serializeJSON();
|
||||
$('#fxrpmtable').datagrid('load', querydata);
|
||||
}
|
||||
function gcpmexport() {
|
||||
var data = $('#fxrpmtable').datagrid('getData');
|
||||
var datalist = data.rows;
|
||||
|
||||
for (var j = 0, len = datalist.length; j < len; j++) {
|
||||
var dic = datalist[j]
|
||||
for (var key in dic) {
|
||||
dic["观察人"] = dic["looker__name"]
|
||||
dic["观察部门"] = dic["lookpart__partname"]
|
||||
dic["行为观察数"] = dic["number"]
|
||||
delete dic["looker__userid"];
|
||||
delete dic["looker__name"]
|
||||
delete dic["lookpart__partname"]
|
||||
delete dic["number"]
|
||||
}
|
||||
}
|
||||
JSONToCSVConvertor(JSON.stringify(datalist), "观察行为排名", true);
|
||||
}
|
||||
function behaviorDate()
|
||||
{
|
||||
var y = $("#year").val();
|
||||
var m = $("#month").val();
|
||||
var gcChart = echarts.init(document.getElementById("piecontainer"));
|
||||
|
||||
gcChart.setOption(option = {
|
||||
title: {
|
||||
text: '观察类型分布',
|
||||
x: 'left'
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
formatter: "{a} <br/>{b} : {c} ({d}%)"
|
||||
},
|
||||
legend: {
|
||||
orient: 'vertical',
|
||||
x: 'left',
|
||||
y: 'bottom',
|
||||
data: []
|
||||
},
|
||||
toolbox: {
|
||||
show: true,
|
||||
feature: {
|
||||
mark: { show: true },
|
||||
dataView: { show: true, readOnly: false },
|
||||
restore: { show: true },
|
||||
saveAsImage: { show: true }
|
||||
}
|
||||
},
|
||||
calculable: true,
|
||||
series: [
|
||||
{
|
||||
name: '级别分布',
|
||||
type: 'pie',
|
||||
radius: '55%',
|
||||
roseType: 'angle',
|
||||
center: ['50%', '60%'],
|
||||
itemStyle: {
|
||||
normal: {
|
||||
label: {
|
||||
show: false
|
||||
},
|
||||
labelLine: {
|
||||
show: false
|
||||
}
|
||||
},
|
||||
emphasis: {
|
||||
label: {
|
||||
show: true,
|
||||
position: 'center',
|
||||
textStyle: {
|
||||
fontSize: '22',
|
||||
fontWeight: 'bold'
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
data: []
|
||||
}
|
||||
]
|
||||
});
|
||||
gcChart.showLoading();
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "api/obscount?a=gclxt&year=" + y + "&month=" + m, //请求发送
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
|
||||
if (data) {
|
||||
gcChart.hideLoading(); //隐藏加载动画
|
||||
gcChart.setOption({
|
||||
legend: { data: data.key },
|
||||
series: {
|
||||
name: '级别分布',
|
||||
data: data.value,
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
gcChart.hideLoading();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
function funTypeChange() {
|
||||
behaviorDate();//饼图
|
||||
}
|
||||
function funTypeChange2() {
|
||||
gczxt();
|
||||
}
|
||||
function gczxt() {//行为观察折线图
|
||||
var y = $("#years").val();
|
||||
//行为观察折线图
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "api/obscount?a=gclzx&year=" + y, //请求发送
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
|
||||
var gcChart2 = echarts.init(document.getElementById("piecontainer2"));
|
||||
|
||||
gcChart2.setOption(option = {
|
||||
title: {
|
||||
text: '行为观察折线图'
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis'
|
||||
},
|
||||
legend: {
|
||||
data: ['人员的反映', '员工的位置', '个人防护装备', '工具和设备', '程序和标准', '人体工程学', '环境整洁']
|
||||
},
|
||||
grid: {
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
bottom: '3%',
|
||||
containLabel: true
|
||||
},
|
||||
toolbox: {
|
||||
feature: {
|
||||
saveAsImage: {}
|
||||
}
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
boundaryGap: false,
|
||||
data: data.months
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value'
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '人员的反映',
|
||||
type: 'line',
|
||||
stack: '总量',
|
||||
data: data.userfy
|
||||
},
|
||||
{
|
||||
name: '员工的位置',
|
||||
type: 'line',
|
||||
stack: '总量',
|
||||
data: data.userwz
|
||||
},
|
||||
{
|
||||
name: '个人防护装备',
|
||||
type: 'line',
|
||||
stack: '总量',
|
||||
data: data.grfh
|
||||
},
|
||||
{
|
||||
name: '工具和设备',
|
||||
type: 'line',
|
||||
stack: '总量',
|
||||
data: data.gjhsb
|
||||
},
|
||||
{
|
||||
name: '程序和标准',
|
||||
type: 'line',
|
||||
stack: '总量',
|
||||
data: data.cxhbz
|
||||
}
|
||||
,
|
||||
{
|
||||
name: '人体工程学',
|
||||
type: 'line',
|
||||
stack: '总量',
|
||||
data: data.rtgcx
|
||||
},
|
||||
{
|
||||
name: '环境整洁',
|
||||
type: 'line',
|
||||
stack: '总量',
|
||||
data: data.hjzj
|
||||
}
|
||||
]
|
||||
});
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
gcChart2.hideLoading();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<div class="border" id="desktop" style="margin: 10px 10px 0 10px; background: #fff; overflow: auto;">
|
||||
<!--行为观察统计-->
|
||||
<select class="txtInput select3" id="years" name="years" style="width:100px;"></select><label>年</label>
|
||||
<button class="btn btn-info" onclick="funTypeChange2()"> 查询</button>
|
||||
<div id="piecontainer2" style="width:100%;height:400px;">
|
||||
|
||||
</div>
|
||||
<div style="width:100%">
|
||||
<div style="width:40%;height:400px;float:left">
|
||||
<select class="txtInput select3" id="year" name="year" style="width:100px;"></select><label>年</label>
|
||||
<select class="txtInput select3" id="month" name="month" style="width:100px;">
|
||||
<option value="1">1月</option>
|
||||
<option value="2">2月</option>
|
||||
<option value="3">3月</option>
|
||||
<option value="4">4月</option>
|
||||
<option value="5">5月</option>
|
||||
<option value="6">6月</option>
|
||||
<option value="7">7月</option>
|
||||
<option value="8">8月</option>
|
||||
<option value="9">9月</option>
|
||||
<option value="10">10月</option>
|
||||
<option value="11">11月</option>
|
||||
<option value="12">12月</option>
|
||||
</select>
|
||||
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
||||
|
||||
<div id="piecontainer" style="height:400px;width:100%">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div style="width: 60%; margin: 0px auto;float:right;margin-bottom:100px; ">
|
||||
<table name="" id="fxrpmtable" class='easyui-datagrid' title="行为观察记录排名" data-options="rownumbers:true,singleSelect:true,striped: true,method:'get',url: 'api/obscount?a=gclxbg',toolbar:'#fxrpmbar'" style="height:400px">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
<th data-options="field:'looker__userid',hidden:true">用户ID</th>
|
||||
<th data-options="field:'looker__name',align:'right'" width="30%">观察记录人姓名</th>
|
||||
<th data-options="field:'lookpart__partname',align:'right'" width="35%">观察部门</th>
|
||||
<th data-options="field:'number',align:'right'" width="35%">行为观察数</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
<div id='fxrpmbar'>
|
||||
<form id="fxrpms">
|
||||
<a onclick="gcpmsearch()" class='easyui-linkbutton' iconCls='fa-search' plain=true>查询</a>
|
||||
<a onclick="gcpmexport()" class='easyui-linkbutton' iconCls='fa-upload' plain=true>导出</a>
|
||||
<div>
|
||||
<label>发现部门</label><input id="sfxbm2" name="fxbm" style="width:180px;height:22px" />
|
||||
<label>起始时间</label><input id="sqssj" name="qssj" class="easyui-datebox" style="width:180px;height:22px" />
|
||||
<label>结束时间</label><input id="sjssj" name="jssj" class="easyui-datebox" style="width:180px;height:22px" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
|
@ -326,7 +326,7 @@ float: left;">
|
|||
|
||||
</div>
|
||||
|
||||
<div style="width:98%;margin-left:1%;margin-right:1%;height:800px">
|
||||
<div id = 'panelxdiv' style="width:98%;margin-left:1%;margin-right:1%;height:800px;" hidden=true>
|
||||
<div id="panelx" class="easyui-panel" data-options="iconCls:'fa-bar-chart'" >
|
||||
|
||||
</div>
|
||||
|
|
@ -380,6 +380,7 @@ float: left;">
|
|||
var data=JSON.parse(localStorage.getItem("data"));
|
||||
bindmap9('gzbqst')
|
||||
if(data.rights.indexOf('30')!=-1){ //有无地图功能
|
||||
$('#panelxdiv').show()
|
||||
$('#panelx').panel({
|
||||
href:'html/mapshow',
|
||||
title:'地图展示'
|
||||
|
|
|
|||
|
|
@ -1,94 +1,27 @@
|
|||
<div style="width:100%;height:5%;">
|
||||
<div style="margin-left:10px;margin-top:5px">
|
||||
<form id="yhbztf">
|
||||
<label>起始时间</label><input id="sqssj" name="qssj" class="easyui-datebox" style="width:110px;height:22px" />
|
||||
<label>结束时间</label><input id="sjssj" name="jssj" class="easyui-datebox" style="width:110px;height:22px" />
|
||||
<label>发现部门</label><input id="sfxbm" name="fxbm" style="width:200px;height:22px" />
|
||||
<a onclick="yhbztsearch()" class='easyui-linkbutton' iconCls='fa-search' plain=true>查询</a></form>
|
||||
<form id="fxfxf">
|
||||
<label>责任部门</label><input id="szrbm" name="zrbm" style="width:200px;height:22px" />
|
||||
<a onclick="fxsearch()" class='easyui-linkbutton' iconCls='fa-search' plain=true>查询</a></form>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:100%;height:500px;padding: 20px">
|
||||
<div style="width:33%;height:80%;float: left;margin-top:20px;" align=center>
|
||||
<div id="yhlbt" style="width:80%;height:100%;">
|
||||
<div align=center>
|
||||
<div id="fxdlxt" style="width:80%;height:600px;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:33%;height:80%;float: left;margin-top:20px" align=center>
|
||||
<div id="yhpgt" style="width:80%;height:100%;">
|
||||
|
||||
</div>
|
||||
<div id="fxdjbt" style="width:80%;height:600px;">
|
||||
|
||||
</div>
|
||||
<div style="width:33%;height:80%;float: left;margin-top:20px" align=center>
|
||||
<div id="yhztt" style="width:80%;height:100%;">
|
||||
</div>
|
||||
|
||||
<div id="fxjbt" style="width:80%;height:600px;">
|
||||
</div>
|
||||
</div>
|
||||
<div id="yhqst" style="width:100%;height:400px;padding: 20px">
|
||||
<div id="fxdqyt" style="width:100%;height:600px;padding: 20px">
|
||||
</div>
|
||||
<div style="width: 60%; margin: 0px auto; ">
|
||||
<table name="" id="fxrpmtable" class='easyui-datagrid' title="隐患发现人排名" data-options="
|
||||
rownumbers:true,
|
||||
singleSelect:true,
|
||||
striped: true,
|
||||
method:'get',
|
||||
url: 'fxhandle?a=yhfxpm',
|
||||
toolbar:'#fxrpmbar'" style="height:400px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-options="field:'fxr__userid',hidden:true">用户ID</th>
|
||||
<th data-options="field:'fxr__name',align:'right'" width="30%">姓名</th>
|
||||
<th data-options="field:'fxbm__partname',align:'right'" width="40%">所属部门</th>
|
||||
<th data-options="field:'number',align:'right'" width="20%">填报隐患数</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
<div id='fxrpmbar'>
|
||||
<form id="fxrpms">
|
||||
<a onclick="fxrpmsearch()" class='easyui-linkbutton' iconCls='fa-search' plain=true>查询</a>
|
||||
<a onclick="fxrpmexport()" class='easyui-linkbutton' iconCls='fa-upload' plain=true>导出</a>
|
||||
<div>
|
||||
<label>发现部门</label><input id="sfxbm2" name="fxbm" style="width:180px;height:22px" />
|
||||
<label>起始时间</label><input id="sqssj" name="qssj" class="easyui-datebox" style="width:80px;height:22px" />
|
||||
<label>结束时间</label><input id="sjssj" name="jssj" class="easyui-datebox" style="width:80px;height:22px" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<div style="height:20px"></div>
|
||||
<table name="" id="zgrpmtable" class='easyui-datagrid' title="隐患整改人排名" data-options="
|
||||
rownumbers:true,
|
||||
singleSelect:true,
|
||||
striped: true,
|
||||
method:'get',
|
||||
url: 'fxhandle?a=yhzgpm',
|
||||
toolbar:'#zgrpmbar'" style="height:400px">
|
||||
<thead>
|
||||
<tr>
|
||||
<th data-options="field:'zgr__userid',hidden:true">用户ID</th>
|
||||
<th data-options="field:'zgr__name',align:'right'" width="30%">姓名</th>
|
||||
<th data-options="field:'zgbm__partname',align:'right'" width="40%">所属部门</th>
|
||||
<th data-options="field:'number',align:'right'" width="20%">整改隐患数</th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
|
||||
<div id='zgrpmbar'>
|
||||
<form id="zgrpms">
|
||||
<a onclick="zgrpmsearch()" class='easyui-linkbutton' iconCls='fa-search' plain=true>查询</a>
|
||||
<a onclick="zgrpmexport()" class='easyui-linkbutton' iconCls='fa-upload' plain=true>导出</a>
|
||||
<div>
|
||||
<label>整改人</label><input class="easyui-textbox" name="zgr" style="width:80px;height:22px" />
|
||||
<label>起始时间</label><input id="sqssj" name="qssj" class="easyui-datebox" style="width:80px;height:22px" />
|
||||
<label>结束时间</label><input id="sjssj" name="jssj" class="easyui-datebox" style="width:80px;height:22px" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<script>
|
||||
$("#sfxbm,#sfxbm2").combotree({
|
||||
$("#szrbm").combotree({
|
||||
url: 'parthandle?a=tree',
|
||||
editable: false,
|
||||
loadFilter: function (rows) {
|
||||
|
|
@ -102,85 +35,513 @@
|
|||
return s;
|
||||
},
|
||||
onSelect: function (node) {
|
||||
$('#sfxr').combobox({
|
||||
url: 'getuser?partid=' + node.id + '&a=combobox',
|
||||
editable: false,
|
||||
});
|
||||
// $('#sfxr').combobox({
|
||||
// url: 'getuser?partid=' + node.id + '&a=combobox',
|
||||
// editable: false,
|
||||
// });
|
||||
}
|
||||
});
|
||||
function fxrpmsearch() {
|
||||
var querydata = $('#fxrpms').serializeJSON();
|
||||
$('#fxrpmtable').datagrid('load', querydata);
|
||||
}
|
||||
function zgrpmsearch() {
|
||||
var querydata = $('#zgrpms').serializeJSON();
|
||||
$('#zgrpmtable').datagrid('load', querydata);
|
||||
}
|
||||
function yhbztsearch() {
|
||||
var querydata = $('#yhbztf').serializeJSON();
|
||||
bindmap3_o('yhlbt', querydata)
|
||||
bindmap4_o('yhpgt', querydata)
|
||||
bindmap8('yhztt', querydata)
|
||||
bindmap7('yhqst',querydata);
|
||||
// function fxrpmsearch() {
|
||||
// var querydata = $('#fxrpms').serializeJSON();
|
||||
// $('#fxrpmtable').datagrid('load', querydata);
|
||||
// }
|
||||
// function zgrpmsearch() {
|
||||
// var querydata = $('#zgrpms').serializeJSON();
|
||||
// $('#zgrpmtable').datagrid('load', querydata);
|
||||
// }
|
||||
function fxsearch() {
|
||||
var querydata = $('#fxfxf').serializeJSON();
|
||||
bindmap_fxdlxt('fxdlxt',querydata);
|
||||
bindmap_fxdjbt('fxdjbt',querydata);
|
||||
bindmap_fxjbt('fxjbt',querydata);
|
||||
bindmap_fxdqyt('fxdqyt',querydata);
|
||||
}
|
||||
var now = new Date();
|
||||
var year = now.getFullYear();
|
||||
var month = now.getMonth() + 1;
|
||||
bindmap3_o('yhlbt', { 'year': year, 'month': month });
|
||||
bindmap4_o('yhpgt', { 'year': year, 'month': month });
|
||||
bindmap7('yhqst');
|
||||
bindmap8('yhztt');
|
||||
function fxrpmexport() {
|
||||
var data = $('#fxrpmtable').datagrid('getData');
|
||||
var datalist = data.rows;
|
||||
//datalist.unshift({'fxr__userid':'用户ID','fxr__name':'姓名','fxbm__partname':'部门','number':'发现隐患数'})
|
||||
bindmap_fxdlxt('fxdlxt');
|
||||
bindmap_fxdjbt('fxdjbt');
|
||||
bindmap_fxjbt('fxjbt');
|
||||
bindmap_fxdqyt('fxdqyt');
|
||||
function bindmap_fxdjbt(x, querydata) {
|
||||
|
||||
var querydata = querydata || {}
|
||||
let myChart
|
||||
myChart = echarts.init(document.getElementById(x));
|
||||
myChart.setOption(option = {
|
||||
title: {
|
||||
text: '风险点级别分布图',
|
||||
},
|
||||
legend: {
|
||||
x: 'center',
|
||||
y: 'bottom',
|
||||
data: []
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
formatter: "{a} <br/>{b} : {c} ({d}%)"
|
||||
},
|
||||
toolbox: {
|
||||
show: true,
|
||||
feature: {
|
||||
mark: { show: true },
|
||||
restore: { show: true },
|
||||
saveAsImage: { show: true },
|
||||
dataView: { show: true, readOnly: false },
|
||||
//magicType: { show: true, type: ['line', 'bar'] },
|
||||
}
|
||||
},
|
||||
color:['blue', 'yellow','orange','red'],
|
||||
series: [
|
||||
{
|
||||
name: '风险点级别',
|
||||
type: 'pie',
|
||||
radius: '70%',
|
||||
center: ['50%', '50%'],
|
||||
data: [
|
||||
],
|
||||
label: {
|
||||
normal: {
|
||||
formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} ',
|
||||
backgroundColor: '#eee',
|
||||
borderColor: '#aaa',
|
||||
borderWidth: 1,
|
||||
borderRadius: 4,
|
||||
// shadowBlur:3,
|
||||
// shadowOffsetX: 2,
|
||||
// shadowOffsetY: 2,
|
||||
// shadowColor: '#999',
|
||||
// padding: [0, 7],
|
||||
rich: {
|
||||
a: {
|
||||
color: '#999',
|
||||
lineHeight: 22,
|
||||
align: 'center'
|
||||
},
|
||||
hr: {
|
||||
borderColor: '#aaa',
|
||||
width: '100%',
|
||||
borderWidth: 0.5,
|
||||
height: 0
|
||||
},
|
||||
b: {
|
||||
fontSize: 16,
|
||||
lineHeight: 33
|
||||
},
|
||||
per: {
|
||||
color: '#eee',
|
||||
backgroundColor: '#334455',
|
||||
padding: [2, 4],
|
||||
borderRadius: 2
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
]
|
||||
});
|
||||
myChart.showLoading();
|
||||
|
||||
for (var j = 0, len = datalist.length; j < len; j++) {
|
||||
var dic = datalist[j]
|
||||
for (var key in dic) {
|
||||
dic["姓名"] = dic["fxr__name"]
|
||||
dic["部门"] = dic["fxbm__partname"]
|
||||
dic["发现隐患数"] = dic["number"]
|
||||
delete dic["fxr__userid"];
|
||||
delete dic["fxr__name"]
|
||||
delete dic["fxbm__partname"]
|
||||
delete dic["number"]
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "api/riskas?a=fxdjbt", //请求发送
|
||||
data: querydata,
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
if (data) {
|
||||
myChart.hideLoading(); //隐藏加载动画
|
||||
myChart.setOption(
|
||||
{
|
||||
legend: [{
|
||||
data: data.legendData,
|
||||
}],
|
||||
series: [
|
||||
{
|
||||
data: data.seriesData,
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
//map4v=myChart.getDataURL();
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
//请求失败时执行该函数
|
||||
//alert("汗,没有数据吧!");
|
||||
myChart.hideLoading();
|
||||
}
|
||||
}
|
||||
JSONToCSVConvertor(JSON.stringify(datalist), "发现排名", true);
|
||||
// var postdata = {
|
||||
// data:JSON.stringify(datalist)
|
||||
// }
|
||||
// $.ajax({
|
||||
// type: "POST",
|
||||
// url: "fxhandle?a=exportexcel",
|
||||
// data: postdata,
|
||||
// success: function (data) {
|
||||
// if (data.code==1) {
|
||||
// downloadurl = 'http://' + window.location.host + '/' + data.downloadurl
|
||||
// window.open(downloadurl);
|
||||
// } else{
|
||||
// $.messager.alert('提示', '导出失败!');
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
});
|
||||
}
|
||||
function zgrpmexport() {
|
||||
var data = $('#zgrpmtable').datagrid('getData');
|
||||
var datalist = data.rows;
|
||||
for (var j = 0, len = datalist.length; j < len; j++) {
|
||||
var dic = datalist[j]
|
||||
for (var key in dic) {
|
||||
dic["姓名"] = dic["zgr__name"]
|
||||
dic["部门"] = dic["zgbm__partname"]
|
||||
dic["整改隐患数"] = dic["number"]
|
||||
delete dic["zgr__userid"];
|
||||
delete dic["zgr__name"]
|
||||
delete dic["zgbm__partname"]
|
||||
delete dic["number"]
|
||||
function bindmap_fxdlxt(x, querydata) {
|
||||
|
||||
var querydata = querydata || {}
|
||||
let myChart
|
||||
myChart = echarts.init(document.getElementById(x));
|
||||
myChart.setOption(option = {
|
||||
title: {
|
||||
text: '风险点类型分布图',
|
||||
},
|
||||
legend: {
|
||||
x: 'center',
|
||||
y: 'bottom',
|
||||
data: []
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
formatter: "{a} <br/>{b} : {c} ({d}%)"
|
||||
},
|
||||
toolbox: {
|
||||
show: true,
|
||||
feature: {
|
||||
mark: { show: true },
|
||||
restore: { show: true },
|
||||
saveAsImage: { show: true },
|
||||
dataView: { show: true, readOnly: false },
|
||||
//magicType: { show: true, type: ['line', 'bar'] },
|
||||
}
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '风险点类型',
|
||||
type: 'pie',
|
||||
radius: '70%',
|
||||
center: ['50%', '50%'],
|
||||
data: [
|
||||
],
|
||||
label: {
|
||||
normal: {
|
||||
formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} ',
|
||||
backgroundColor: '#eee',
|
||||
borderColor: '#aaa',
|
||||
borderWidth: 1,
|
||||
borderRadius: 4,
|
||||
// shadowBlur:3,
|
||||
// shadowOffsetX: 2,
|
||||
// shadowOffsetY: 2,
|
||||
// shadowColor: '#999',
|
||||
// padding: [0, 7],
|
||||
rich: {
|
||||
a: {
|
||||
color: '#999',
|
||||
lineHeight: 22,
|
||||
align: 'center'
|
||||
},
|
||||
hr: {
|
||||
borderColor: '#aaa',
|
||||
width: '100%',
|
||||
borderWidth: 0.5,
|
||||
height: 0
|
||||
},
|
||||
b: {
|
||||
fontSize: 16,
|
||||
lineHeight: 33
|
||||
},
|
||||
per: {
|
||||
color: '#eee',
|
||||
backgroundColor: '#334455',
|
||||
padding: [2, 4],
|
||||
borderRadius: 2
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
]
|
||||
});
|
||||
myChart.showLoading();
|
||||
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "api/riskas?a=fxdlxt", //请求发送
|
||||
data: querydata,
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
if (data) {
|
||||
myChart.hideLoading(); //隐藏加载动画
|
||||
myChart.setOption(
|
||||
{
|
||||
legend: [{
|
||||
data: data.legendData,
|
||||
}],
|
||||
series: [
|
||||
{
|
||||
data: data.seriesData,
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
//map4v=myChart.getDataURL();
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
//请求失败时执行该函数
|
||||
//alert("汗,没有数据吧!");
|
||||
myChart.hideLoading();
|
||||
}
|
||||
}
|
||||
JSONToCSVConvertor(JSON.stringify(datalist), "整改排名", true);
|
||||
});
|
||||
}
|
||||
function bindmap_fxjbt(x, querydata) {
|
||||
|
||||
var querydata = querydata || {}
|
||||
let myChart
|
||||
myChart = echarts.init(document.getElementById(x));
|
||||
myChart.setOption(option = {
|
||||
title: {
|
||||
text: '风险级别分布图',
|
||||
},
|
||||
legend: {
|
||||
x: 'center',
|
||||
y: 'bottom',
|
||||
data: []
|
||||
},
|
||||
|
||||
color: ['blue', 'yellow', 'orange', 'red'],
|
||||
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
formatter: "{a} <br/>{b} : {c} ({d}%)"
|
||||
},
|
||||
toolbox: {
|
||||
show: true,
|
||||
feature: {
|
||||
mark: { show: true },
|
||||
restore: { show: true },
|
||||
saveAsImage: { show: true },
|
||||
dataView: { show: true, readOnly: false },
|
||||
//magicType: { show: true, type: ['line', 'bar'] },
|
||||
}
|
||||
},
|
||||
series: [
|
||||
{
|
||||
name: '风险级别',
|
||||
type: 'pie',
|
||||
radius: '70%',
|
||||
center: ['50%', '50%'],
|
||||
data: [
|
||||
],
|
||||
label: {
|
||||
normal: {
|
||||
formatter: '{a|{a}}{abg|}\n{hr|}\n {b|{b}:}{c} {per|{d}%} ',
|
||||
backgroundColor: '#eee',
|
||||
borderColor: '#aaa',
|
||||
borderWidth: 1,
|
||||
borderRadius: 4,
|
||||
// shadowBlur:3,
|
||||
// shadowOffsetX: 2,
|
||||
// shadowOffsetY: 2,
|
||||
// shadowColor: '#999',
|
||||
// padding: [0, 7],
|
||||
rich: {
|
||||
a: {
|
||||
color: '#999',
|
||||
lineHeight: 22,
|
||||
align: 'center'
|
||||
},
|
||||
hr: {
|
||||
borderColor: '#aaa',
|
||||
width: '100%',
|
||||
borderWidth: 0.5,
|
||||
height: 0
|
||||
},
|
||||
b: {
|
||||
fontSize: 16,
|
||||
lineHeight: 33
|
||||
},
|
||||
per: {
|
||||
color: '#eee',
|
||||
backgroundColor: '#334455',
|
||||
padding: [2, 4],
|
||||
borderRadius: 2
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
]
|
||||
});
|
||||
myChart.showLoading();
|
||||
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "api/riskas?a=fxjbt", //请求发送
|
||||
data: querydata,
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
if (data) {
|
||||
myChart.hideLoading(); //隐藏加载动画
|
||||
myChart.setOption(
|
||||
{
|
||||
legend: [{
|
||||
data: data.legendData,
|
||||
}],
|
||||
series: [
|
||||
{
|
||||
data: data.seriesData,
|
||||
}
|
||||
]
|
||||
}
|
||||
);
|
||||
//map4v=myChart.getDataURL();
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
//请求失败时执行该函数
|
||||
//alert("汗,没有数据吧!");
|
||||
myChart.hideLoading();
|
||||
}
|
||||
});
|
||||
}
|
||||
function bindmap_fxdqyt(x, querydata) {
|
||||
var querydata = querydata || {}
|
||||
let myChart
|
||||
myChart = echarts.init(document.getElementById(x));
|
||||
myChart.setOption(option = {
|
||||
title: {
|
||||
text: '区域风险分布图',
|
||||
},
|
||||
legend: {
|
||||
data: ['风险点','低风险点','一般风险点','较大风险点','重大风险点','风险','低风险','一般风险','较大风险','重大风险']
|
||||
},
|
||||
toolbox: {
|
||||
show: true,
|
||||
feature: {
|
||||
mark: { show: true },
|
||||
restore: { show: true },
|
||||
saveAsImage: { show: true },
|
||||
dataView: { show: true, readOnly: false },
|
||||
//magicType: { show: true, type: ['line', 'bar'] },
|
||||
}
|
||||
},
|
||||
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: { // 坐标轴指示器,坐标轴触发有效
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
}
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: [],
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
},
|
||||
series: [],
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'slider',
|
||||
show: true,
|
||||
start: 0,
|
||||
end: 10,
|
||||
handleSize: 8
|
||||
},
|
||||
{
|
||||
type: 'inside',
|
||||
start: 94,
|
||||
end: 100
|
||||
},
|
||||
{
|
||||
type: 'slider',
|
||||
show: true,
|
||||
yAxisIndex: 0,
|
||||
filterMode: 'empty',
|
||||
width: 12,
|
||||
height: '70%',
|
||||
handleSize: 8,
|
||||
showDataShadow: false,
|
||||
left: '93%'
|
||||
}
|
||||
]
|
||||
});
|
||||
myChart.showLoading();
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "api/riskas?a=fxdqyt", //请求发送
|
||||
data: querydata,
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
if (data) {
|
||||
myChart.hideLoading(); //隐藏加载动画
|
||||
myChart.setOption({
|
||||
xAxis: {
|
||||
data: data.xAxisData
|
||||
},
|
||||
series: [{
|
||||
name: '风险点',
|
||||
type:'bar',
|
||||
|
||||
data: data.seriesData.datariskact
|
||||
},{
|
||||
name: '低风险点',
|
||||
type:'bar',
|
||||
stack: '风险点',
|
||||
color: 'blue',
|
||||
data: data.seriesData.datariskact1
|
||||
},
|
||||
{
|
||||
name: '一般风险点',
|
||||
type:'bar',
|
||||
stack: '风险点',
|
||||
color: 'yellow',
|
||||
data: data.seriesData.datariskact2
|
||||
},{
|
||||
name: '较大风险点',
|
||||
type:'bar',
|
||||
stack: '风险点',
|
||||
color: 'orange',
|
||||
data: data.seriesData.datariskact3
|
||||
},{
|
||||
name: '重大风险点',
|
||||
type:'bar',
|
||||
stack: '风险点',
|
||||
color: 'red',
|
||||
data: data.seriesData.datariskact4
|
||||
},{
|
||||
name: '风险',
|
||||
type:'bar',
|
||||
data: data.seriesData.datarisk
|
||||
},{
|
||||
name: '低风险',
|
||||
type:'bar',
|
||||
stack: '风险',
|
||||
color: 'blue',
|
||||
data: data.seriesData.datarisk1
|
||||
},{
|
||||
name: '一般风险',
|
||||
type:'bar',
|
||||
stack: '风险',
|
||||
color: 'yellow',
|
||||
data: data.seriesData.datarisk2
|
||||
},{
|
||||
name: '较大风险',
|
||||
type:'bar',
|
||||
stack: '风险',
|
||||
color: 'orange',
|
||||
data: data.seriesData.datarisk3
|
||||
},{
|
||||
name: '重大风险',
|
||||
type:'bar',
|
||||
stack: '风险',
|
||||
color: 'red',
|
||||
data: data.seriesData.datarisk4
|
||||
},]
|
||||
});
|
||||
//map4v=myChart.getDataURL();
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
//请求失败时执行该函数
|
||||
//alert("汗,没有数据吧!");
|
||||
myChart.hideLoading();
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
|
@ -85,7 +85,9 @@ urlpatterns = [
|
|||
path('html/riskcheck',views.riskcheck),#风险点排查记录
|
||||
path('html/risk/edit/<int:id>/',views.riskedit),
|
||||
path('html/report/edit',views.reportedit),
|
||||
path('html/bhr',views.bhrhtml),
|
||||
path('riskas',views.riskas),
|
||||
path('html/examhistory/<int:id>/',views.examhistory),
|
||||
#html页面
|
||||
|
||||
|
||||
|
|
@ -149,7 +151,8 @@ urlpatterns = [
|
|||
#path('api/riskactcheck',views.apiriskactcheck),
|
||||
path('api/riskcheck2',views.apiriskcheck2),
|
||||
path('api/report',views.apireport),
|
||||
path('html/examhistory/<int:id>/',views.examhistory),
|
||||
path('api/obscount',views.observepic),
|
||||
path('api/riskas',views.apiriskas),
|
||||
|
||||
|
||||
#path('api/rights/group/<int:groupid>',views.rightsgroup),
|
||||
|
|
|
|||
|
|
@ -236,7 +236,8 @@ def troubleashtml(req):
|
|||
return render(req,'troubleashtml.html')
|
||||
def userhtml(req):
|
||||
return render(req,'userhtml.html')
|
||||
|
||||
def bhrhtml(req):
|
||||
return render(req,'behavior.html')
|
||||
def check_login(func):
|
||||
def warpper(request,*args,**kwargs):
|
||||
is_login = request.session.get('userid', None)
|
||||
|
|
@ -1646,7 +1647,7 @@ def charthandle(req):
|
|||
nowyjz = a.yjz
|
||||
nowycz = a.ycz
|
||||
return JsonResponse({'code':1,'yjz':nowyjz,'ycz':nowycz})
|
||||
elif req.GET.get('a')=='yhlbt':#隐患列表图
|
||||
elif req.GET.get('a')=='yhlbt':#隐患类别图
|
||||
if req.GET.get('year'):
|
||||
year = int(req.GET.get('year'))
|
||||
month = int(req.GET.get('month'))
|
||||
|
|
@ -1952,6 +1953,79 @@ def charthandle(req):
|
|||
value.append({'value':y,'name':x})
|
||||
return JsonResponse({'code':1,'key':key,'value':value})
|
||||
|
||||
def apiriskas(req):
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
if req.GET.get('a') == 'fxdlxt':#风险点类型图
|
||||
objs = RiskAct.objects.filter(usecomp__partid=companyid)
|
||||
if req.GET.get('zrbm',None):
|
||||
partid = req.GET.get('zrbm')
|
||||
objs = objs.filter(zrbm__partid=partid)
|
||||
legendData = []
|
||||
seriesData = []
|
||||
for i in Dickey.objects.filter(dicparent__dicid=53):
|
||||
legendData.append(i.dickeyname)
|
||||
seriesData.append({'value':objs.filter(type=i).count(),'name':i.dickeyname})
|
||||
return JsonResponse({'code':1,'legendData':legendData,'seriesData':seriesData})
|
||||
elif req.GET.get('a') == 'fxdjbt':#风险点级别图
|
||||
objs = RiskAct.objects.filter(usecomp__partid=companyid)
|
||||
if req.GET.get('zrbm',None):
|
||||
partid = req.GET.get('zrbm')
|
||||
objs = objs.filter(zrbm__partid=partid)
|
||||
legendData = ['低风险','一般风险','较大风险','重大风险']
|
||||
seriesData = []
|
||||
for i in legendData:
|
||||
seriesData.append({'value':objs.filter(level=i).count(),'name':i})
|
||||
return JsonResponse({'code':1,'legendData':legendData,'seriesData':seriesData})
|
||||
elif req.GET.get('a') == 'fxjbt':#风险级别图
|
||||
objs = Risk.objects.filter(usecomp__partid=companyid)
|
||||
if req.GET.get('zrbm',None):
|
||||
partid = req.GET.get('zrbm')
|
||||
objs = objs.filter(riskact__zrbm__partid=partid)
|
||||
legendData = ['低风险','一般风险','较大风险','重大风险']
|
||||
seriesData = []
|
||||
for i in legendData:
|
||||
seriesData.append({'value':objs.filter(level=i).count(),'name':i})
|
||||
return JsonResponse({'code':1,'legendData':legendData,'seriesData':seriesData})
|
||||
elif req.GET.get('a') == 'fxdqyt':#风险点区域图
|
||||
objs = RiskAct.objects.filter(usecomp__partid=companyid)
|
||||
objs2 = Risk.objects.filter(usecomp__partid=companyid)
|
||||
if req.GET.get('zrbm',None):
|
||||
partid = req.GET.get('zrbm')
|
||||
objs = objs.filter(zrbm__partid=partid)
|
||||
objs2 = objs2.filter(riskact__zrbm__partid=partid)
|
||||
xAxisData = []
|
||||
series = []
|
||||
#areas = Area.objects.filter(usecomp__partid=companyid,deletemark=1)
|
||||
#riskactareas = Area.objects.filter(usecomp__partid=companyid,deletemark=1).annotate(num=Count('riskactarea')).filter(num__gt=0).order_by('-num')
|
||||
riskactareas = objs.values('area').annotate(num=Count('area')).order_by('-num')
|
||||
for i in riskactareas:
|
||||
xAxisData.append(Area.objects.get(id=i['area']).name)
|
||||
data = {}
|
||||
data['datariskact']=[] # 风险点总数
|
||||
data['datariskact1']=[] # 低风险点数
|
||||
data['datariskact2']=[] # 一般风险点数
|
||||
data['datariskact3']=[] # 较大风险点数
|
||||
data['datariskact4']=[] # 重大风险点数
|
||||
data['datarisk']=[] # 风险总数
|
||||
data['datarisk1']=[] # 低风险数
|
||||
data['datarisk2']=[] # 一般风险数
|
||||
data['datarisk3']=[] # 较大风险数
|
||||
data['datarisk4']=[] # 重大风险数
|
||||
for i in riskactareas:
|
||||
objsxx = objs.filter(area__id=i['area'])
|
||||
data['datariskact'].append(objsxx.count())
|
||||
data['datariskact1'].append(objsxx.filter(level="低风险").count())
|
||||
data['datariskact2'].append(objsxx.filter(level="一般风险").count())
|
||||
data['datariskact3'].append(objsxx.filter(level="较大风险").count())
|
||||
data['datariskact4'].append(objsxx.filter(level="重大风险").count())
|
||||
objsxx2 = objs2.filter(riskact__area__id=i['area'])
|
||||
data['datarisk'].append(objsxx2.count())
|
||||
data['datarisk1'].append(objsxx2.filter(level="低风险").count())
|
||||
data['datarisk2'].append(objsxx2.filter(level="一般风险").count())
|
||||
data['datarisk3'].append(objsxx2.filter(level="较大风险").count())
|
||||
data['datarisk4'].append(objsxx2.filter(level="重大风险").count())
|
||||
return JsonResponse({'code':1,'xAxisData':xAxisData,'seriesData':data})
|
||||
def fxhandle(req):
|
||||
a = req.GET.get('a')
|
||||
if a == 'exportyjdoc':
|
||||
|
|
@ -2719,10 +2793,85 @@ def gchandle(req):
|
|||
url = exportdoc2('gc',data)
|
||||
return JsonResponse({"code":1,"downloadurl":url})
|
||||
|
||||
def observepic(req):
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
|
||||
if req.GET.get('a')=='gclxt':#观察类型饼图
|
||||
year = int(req.GET.get('year'))
|
||||
month = int(req.GET.get('month'))
|
||||
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
|
||||
if req.GET.get('part'):
|
||||
partid = req.GET.get('part')
|
||||
else:
|
||||
partid = companyid
|
||||
parts = Partment.objects.filter(Q(partid=partid) | Q(partlink__contains=',' + str(partid) + ','))
|
||||
a = Observe.objects.filter(lookpart__in=parts,deletemark=1,looktime__range=(first_day, first_day_of_next_month))
|
||||
value=[]
|
||||
key=[]
|
||||
for i in Dicclass.objects.filter(parentid__dicid=23):
|
||||
x = i.dicname
|
||||
y = Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count()
|
||||
key.append(x)
|
||||
value.append({'value':y,'name':x})
|
||||
return JsonResponse({'code':1,'key':key,'value':value})
|
||||
elif req.GET.get('a')=='gclzx':#观察类型折线图
|
||||
year = int(req.GET.get('year'))
|
||||
months = [1,2,3,4,5,6,7,8,9,10,11,12]
|
||||
userfy=[]#人员反映
|
||||
userwz=[]#员工的位置
|
||||
grfh=[]#个人防护装备
|
||||
gjhsb=[]#工具和设备
|
||||
cxhbz=[]#程序和标准
|
||||
rtgcx=[]#人体工程学
|
||||
hjzj=[]#环境整洁
|
||||
|
||||
for month in months:
|
||||
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
|
||||
if req.GET.get('part'):
|
||||
partid = req.GET.get('part')
|
||||
else:
|
||||
partid = companyid
|
||||
parts = Partment.objects.filter(Q(partid=partid) | Q(partlink__contains=',' + str(partid) + ','))
|
||||
a = Observe.objects.filter(lookpart__in=parts,deletemark=1,looktime__range=(first_day, first_day_of_next_month))
|
||||
for i in Dicclass.objects.filter(parentid__dicid=23):
|
||||
if i.dicid==24:
|
||||
userfy.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
|
||||
elif i.dicid==25:
|
||||
userwz.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
|
||||
elif i.dicid==26:
|
||||
grfh.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
|
||||
elif i.dicid==27:
|
||||
gjhsb.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
|
||||
elif i.dicid==28:
|
||||
cxhbz.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
|
||||
elif i.dicid==29:
|
||||
rtgcx.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
|
||||
elif i.dicid==30:
|
||||
hjzj.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
|
||||
|
||||
|
||||
|
||||
return JsonResponse({'code':1,'months':months,'userfy':userfy,'userwz':userwz,'grfh':grfh,'gjhsb':gjhsb,'cxhbz':cxhbz,'rtgcx':rtgcx,'hjzj':hjzj,})
|
||||
elif req.GET.get('a')=='gclxbg':
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
a = Observe.objects.filter(usecomp=Partment.objects.get(partid=companyid),deletemark=1)
|
||||
|
||||
if req.GET.get('qssj'):#开始时间
|
||||
a = a.filter(looktime__gte=req.GET.get('qssj'))
|
||||
if req.GET.get('jssj'):#结束时间
|
||||
a = a.filter(looktime__lte=req.GET.get('jssj'))
|
||||
if req.GET.get('fxbm'):
|
||||
gcbm = req.GET.get('fxbm')
|
||||
parts = Partment.objects.filter(partlink__contains=',' + gcbm + ',')|Partment.objects.filter(partid=gcbm)
|
||||
a = a.filter(lookpart__in=parts)
|
||||
|
||||
total = a.count()
|
||||
objs = a.values('looker__userid','looker__name','lookpart__partname').annotate(number = Count('looker')).order_by('-number')
|
||||
return HttpResponse(transjson(total,objs),content_type="application/json")
|
||||
|
||||
|
||||
|
||||
def dicchandle(req):
|
||||
a = req.GET.get('a')
|
||||
if a == 'tree':
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
Bootstrap uses [GitHub's Releases feature](https://blog.github.com/2013-07-02-release-your-software/) for its changelogs.
|
||||
|
||||
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap.
|
||||
|
||||
Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com/) contain summaries of the most noteworthy changes made in each release.
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
source 'https://rubygems.org'
|
||||
|
||||
group :development, :test do
|
||||
gem 'jekyll', '~> 3.8.5'
|
||||
gem 'jekyll-redirect-from', '~> 0.14.0'
|
||||
gem 'jekyll-sitemap', '~> 1.2.0'
|
||||
gem 'wdm', '~> 0.1.1', :install_if => Gem.win_platform?
|
||||
end
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
addressable (2.6.0)
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
colorator (1.1.0)
|
||||
concurrent-ruby (1.1.4)
|
||||
em-websocket (0.5.1)
|
||||
eventmachine (>= 0.12.9)
|
||||
http_parser.rb (~> 0.6.0)
|
||||
eventmachine (1.2.7)
|
||||
eventmachine (1.2.7-x64-mingw32)
|
||||
ffi (1.10.0)
|
||||
ffi (1.10.0-x64-mingw32)
|
||||
forwardable-extended (2.6.0)
|
||||
http_parser.rb (0.6.0)
|
||||
i18n (0.9.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
jekyll (3.8.5)
|
||||
addressable (~> 2.4)
|
||||
colorator (~> 1.0)
|
||||
em-websocket (~> 0.5)
|
||||
i18n (~> 0.7)
|
||||
jekyll-sass-converter (~> 1.0)
|
||||
jekyll-watch (~> 2.0)
|
||||
kramdown (~> 1.14)
|
||||
liquid (~> 4.0)
|
||||
mercenary (~> 0.3.3)
|
||||
pathutil (~> 0.9)
|
||||
rouge (>= 1.7, < 4)
|
||||
safe_yaml (~> 1.0)
|
||||
jekyll-redirect-from (0.14.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-sass-converter (1.5.2)
|
||||
sass (~> 3.4)
|
||||
jekyll-sitemap (1.2.0)
|
||||
jekyll (~> 3.3)
|
||||
jekyll-watch (2.1.2)
|
||||
listen (~> 3.0)
|
||||
kramdown (1.17.0)
|
||||
liquid (4.0.1)
|
||||
listen (3.1.5)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
ruby_dep (~> 1.2)
|
||||
mercenary (0.3.6)
|
||||
pathutil (0.16.2)
|
||||
forwardable-extended (~> 2.6)
|
||||
public_suffix (3.0.3)
|
||||
rb-fsevent (0.10.3)
|
||||
rb-inotify (0.10.0)
|
||||
ffi (~> 1.0)
|
||||
rouge (3.3.0)
|
||||
ruby_dep (1.5.0)
|
||||
safe_yaml (1.0.4)
|
||||
sass (3.7.3)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
wdm (0.1.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
x64-mingw32
|
||||
|
||||
DEPENDENCIES
|
||||
jekyll (~> 3.8.5)
|
||||
jekyll-redirect-from (~> 0.14.0)
|
||||
jekyll-sitemap (~> 1.2.0)
|
||||
wdm (~> 0.1.1)
|
||||
|
||||
BUNDLED WITH
|
||||
1.17.3
|
||||
|
|
@ -0,0 +1,430 @@
|
|||
/*!
|
||||
* Bootstrap's Gruntfile
|
||||
* https://getbootstrap.com/
|
||||
* Copyright 2013-2019 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
module.exports = function (grunt) {
|
||||
'use strict';
|
||||
|
||||
// Force use of Unix newlines
|
||||
grunt.util.linefeed = '\n';
|
||||
|
||||
RegExp.quote = function (string) {
|
||||
return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&');
|
||||
};
|
||||
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js');
|
||||
var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js');
|
||||
var getLessVarsData = function () {
|
||||
var filePath = path.join(__dirname, 'less/variables.less');
|
||||
var fileContent = fs.readFileSync(filePath, { encoding: 'utf8' });
|
||||
var parser = new BsLessdocParser(fileContent);
|
||||
return { sections: parser.parseFile() };
|
||||
};
|
||||
var generateRawFiles = require('./grunt/bs-raw-files-generator.js');
|
||||
var generateCommonJSModule = require('./grunt/bs-commonjs-generator.js');
|
||||
var configBridge = grunt.file.readJSON('./grunt/configBridge.json', { encoding: 'utf8' });
|
||||
|
||||
Object.keys(configBridge.paths).forEach(function (key) {
|
||||
configBridge.paths[key].forEach(function (val, i, arr) {
|
||||
arr[i] = path.join('./docs/assets', val);
|
||||
});
|
||||
});
|
||||
|
||||
// Project configuration.
|
||||
grunt.initConfig({
|
||||
|
||||
// Metadata.
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
banner: '/*!\n' +
|
||||
' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
|
||||
' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
|
||||
' * Licensed under the <%= pkg.license %> license\n' +
|
||||
' */\n',
|
||||
jqueryCheck: configBridge.config.jqueryCheck.join('\n'),
|
||||
jqueryVersionCheck: configBridge.config.jqueryVersionCheck.join('\n'),
|
||||
|
||||
// Task configuration.
|
||||
clean: {
|
||||
dist: 'dist',
|
||||
docs: 'docs/dist'
|
||||
},
|
||||
|
||||
jshint: {
|
||||
options: {
|
||||
jshintrc: 'js/.jshintrc'
|
||||
},
|
||||
grunt: {
|
||||
options: {
|
||||
jshintrc: 'grunt/.jshintrc'
|
||||
},
|
||||
src: ['Gruntfile.js', 'package.js', 'grunt/*.js']
|
||||
},
|
||||
core: {
|
||||
src: 'js/*.js'
|
||||
},
|
||||
test: {
|
||||
options: {
|
||||
jshintrc: 'js/tests/unit/.jshintrc'
|
||||
},
|
||||
src: 'js/tests/unit/*.js'
|
||||
},
|
||||
assets: {
|
||||
src: ['docs/assets/js/src/*.js', 'docs/assets/js/*.js', '!docs/assets/js/*.min.js']
|
||||
}
|
||||
},
|
||||
|
||||
jscs: {
|
||||
options: {
|
||||
config: 'js/.jscsrc'
|
||||
},
|
||||
grunt: {
|
||||
src: '<%= jshint.grunt.src %>'
|
||||
},
|
||||
core: {
|
||||
src: '<%= jshint.core.src %>'
|
||||
},
|
||||
test: {
|
||||
src: '<%= jshint.test.src %>'
|
||||
},
|
||||
assets: {
|
||||
options: {
|
||||
requireCamelCaseOrUpperCaseIdentifiers: null
|
||||
},
|
||||
src: '<%= jshint.assets.src %>'
|
||||
}
|
||||
},
|
||||
|
||||
concat: {
|
||||
options: {
|
||||
banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>',
|
||||
stripBanners: false
|
||||
},
|
||||
core: {
|
||||
src: [
|
||||
'js/transition.js',
|
||||
'js/alert.js',
|
||||
'js/button.js',
|
||||
'js/carousel.js',
|
||||
'js/collapse.js',
|
||||
'js/dropdown.js',
|
||||
'js/modal.js',
|
||||
'js/tooltip.js',
|
||||
'js/popover.js',
|
||||
'js/scrollspy.js',
|
||||
'js/tab.js',
|
||||
'js/affix.js'
|
||||
],
|
||||
dest: 'dist/js/<%= pkg.name %>.js'
|
||||
}
|
||||
},
|
||||
|
||||
uglify: {
|
||||
options: {
|
||||
compress: true,
|
||||
mangle: true,
|
||||
ie8: true,
|
||||
output: {
|
||||
comments: /^!|@preserve|@license|@cc_on/i
|
||||
}
|
||||
},
|
||||
core: {
|
||||
src: '<%= concat.core.dest %>',
|
||||
dest: 'dist/js/<%= pkg.name %>.min.js'
|
||||
},
|
||||
customize: {
|
||||
src: configBridge.paths.customizerJs,
|
||||
dest: 'docs/assets/js/customize.min.js'
|
||||
},
|
||||
docs: {
|
||||
src: configBridge.paths.docsJs,
|
||||
dest: 'docs/assets/js/docs.min.js'
|
||||
}
|
||||
},
|
||||
|
||||
less: {
|
||||
options: {
|
||||
ieCompat: true,
|
||||
strictMath: true,
|
||||
sourceMap: true,
|
||||
outputSourceFiles: true
|
||||
},
|
||||
core: {
|
||||
options: {
|
||||
sourceMapURL: '<%= pkg.name %>.css.map',
|
||||
sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map'
|
||||
},
|
||||
src: 'less/bootstrap.less',
|
||||
dest: 'dist/css/<%= pkg.name %>.css'
|
||||
},
|
||||
theme: {
|
||||
options: {
|
||||
sourceMapURL: '<%= pkg.name %>-theme.css.map',
|
||||
sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map'
|
||||
},
|
||||
src: 'less/theme.less',
|
||||
dest: 'dist/css/<%= pkg.name %>-theme.css'
|
||||
},
|
||||
docs: {
|
||||
options: {
|
||||
sourceMapURL: 'docs.css.map',
|
||||
sourceMapFilename: 'docs/assets/css/docs.css.map'
|
||||
},
|
||||
src: 'docs/assets/less/docs.less',
|
||||
dest: 'docs/assets/css/docs.css'
|
||||
},
|
||||
docsIe: {
|
||||
options: {
|
||||
sourceMap: false
|
||||
},
|
||||
src: 'docs/assets/less/ie10-viewport-bug-workaround.less',
|
||||
dest: 'docs/assets/css/ie10-viewport-bug-workaround.css'
|
||||
}
|
||||
},
|
||||
|
||||
postcss: {
|
||||
options: {
|
||||
map: {
|
||||
inline: false,
|
||||
sourcesContent: true
|
||||
},
|
||||
processors: [
|
||||
require('autoprefixer')(configBridge.config.autoprefixer)
|
||||
]
|
||||
},
|
||||
core: {
|
||||
src: 'dist/css/<%= pkg.name %>.css'
|
||||
},
|
||||
theme: {
|
||||
src: 'dist/css/<%= pkg.name %>-theme.css'
|
||||
},
|
||||
docs: {
|
||||
src: 'docs/assets/css/docs.css'
|
||||
},
|
||||
examples: {
|
||||
options: {
|
||||
map: false
|
||||
},
|
||||
expand: true,
|
||||
cwd: 'docs/examples/',
|
||||
src: ['**/*.css'],
|
||||
dest: 'docs/examples/'
|
||||
}
|
||||
},
|
||||
|
||||
stylelint: {
|
||||
options: {
|
||||
configFile: 'grunt/.stylelintrc',
|
||||
reportNeedlessDisables: false
|
||||
},
|
||||
dist: [
|
||||
'less/**/*.less'
|
||||
],
|
||||
docs: [
|
||||
'docs/assets/less/**/*.less'
|
||||
],
|
||||
examples: [
|
||||
'docs/examples/**/*.css'
|
||||
]
|
||||
},
|
||||
|
||||
cssmin: {
|
||||
options: {
|
||||
compatibility: 'ie8',
|
||||
sourceMap: true,
|
||||
sourceMapInlineSources: true,
|
||||
level: {
|
||||
1: {
|
||||
specialComments: 'all'
|
||||
}
|
||||
}
|
||||
},
|
||||
core: {
|
||||
src: 'dist/css/<%= pkg.name %>.css',
|
||||
dest: 'dist/css/<%= pkg.name %>.min.css'
|
||||
},
|
||||
theme: {
|
||||
src: 'dist/css/<%= pkg.name %>-theme.css',
|
||||
dest: 'dist/css/<%= pkg.name %>-theme.min.css'
|
||||
},
|
||||
docs: {
|
||||
src: 'docs/assets/css/docs.css',
|
||||
dest: 'docs/assets/css/docs.min.css'
|
||||
}
|
||||
},
|
||||
|
||||
copy: {
|
||||
fonts: {
|
||||
expand: true,
|
||||
src: 'fonts/**',
|
||||
dest: 'dist/'
|
||||
},
|
||||
docs: {
|
||||
expand: true,
|
||||
cwd: 'dist/',
|
||||
src: [
|
||||
'**/*'
|
||||
],
|
||||
dest: 'docs/dist/'
|
||||
}
|
||||
},
|
||||
|
||||
connect: {
|
||||
server: {
|
||||
options: {
|
||||
port: 3000,
|
||||
base: '.'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
jekyll: {
|
||||
options: {
|
||||
bundleExec: true,
|
||||
config: '_config.yml',
|
||||
incremental: false
|
||||
},
|
||||
docs: {},
|
||||
github: {
|
||||
options: {
|
||||
raw: 'github: true'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
pug: {
|
||||
options: {
|
||||
pretty: true,
|
||||
data: getLessVarsData
|
||||
},
|
||||
customizerVars: {
|
||||
src: 'docs/_pug/customizer-variables.pug',
|
||||
dest: 'docs/_includes/customizer-variables.html'
|
||||
},
|
||||
customizerNav: {
|
||||
src: 'docs/_pug/customizer-nav.pug',
|
||||
dest: 'docs/_includes/nav/customize.html'
|
||||
}
|
||||
},
|
||||
|
||||
htmllint: {
|
||||
options: {
|
||||
ignore: [
|
||||
'Element "img" is missing required attribute "src".'
|
||||
],
|
||||
noLangDetect: true
|
||||
},
|
||||
src: ['_gh_pages/**/*.html', 'js/tests/**/*.html']
|
||||
},
|
||||
|
||||
watch: {
|
||||
src: {
|
||||
files: '<%= jshint.core.src %>',
|
||||
tasks: ['jshint:core', 'exec:karma', 'concat']
|
||||
},
|
||||
test: {
|
||||
files: '<%= jshint.test.src %>',
|
||||
tasks: ['jshint:test', 'exec:karma']
|
||||
},
|
||||
less: {
|
||||
files: 'less/**/*.less',
|
||||
tasks: ['less', 'copy']
|
||||
},
|
||||
docs: {
|
||||
files: 'docs/assets/less/**/*.less',
|
||||
tasks: ['less']
|
||||
}
|
||||
},
|
||||
|
||||
exec: {
|
||||
browserstack: {
|
||||
command: 'cross-env BROWSER=true karma start grunt/karma.conf.js'
|
||||
},
|
||||
karma: {
|
||||
command: 'karma start grunt/karma.conf.js'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
// These plugins provide necessary tasks.
|
||||
require('load-grunt-tasks')(grunt, { scope: 'devDependencies' });
|
||||
require('time-grunt')(grunt);
|
||||
|
||||
// Docs HTML validation task
|
||||
grunt.registerTask('validate-html', ['jekyll:docs', 'htmllint']);
|
||||
|
||||
var runSubset = function (subset) {
|
||||
return !process.env.TWBS_TEST || process.env.TWBS_TEST === subset;
|
||||
};
|
||||
var isUndefOrNonZero = function (val) {
|
||||
return typeof val === 'undefined' || val !== '0';
|
||||
};
|
||||
|
||||
// Test task.
|
||||
var testSubtasks = [];
|
||||
// Skip core tests if running a different subset of the test suite
|
||||
if (runSubset('core')) {
|
||||
testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'stylelint:dist', 'test-js', 'docs']);
|
||||
}
|
||||
// Skip HTML validation if running a different subset of the test suite
|
||||
if (runSubset('validate-html') &&
|
||||
// Skip HTML5 validator on Travis when [skip validator] is in the commit message
|
||||
isUndefOrNonZero(process.env.TWBS_DO_VALIDATOR)) {
|
||||
testSubtasks.push('validate-html');
|
||||
}
|
||||
// Only run BrowserStack tests if there's a BrowserStack access key
|
||||
if (typeof process.env.BROWSER_STACK_USERNAME !== 'undefined' &&
|
||||
// Skip BrowserStack if running a different subset of the test suite
|
||||
runSubset('browserstack') &&
|
||||
// Skip BrowserStack on Travis when [skip browserstack] is in the commit message
|
||||
isUndefOrNonZero(process.env.TWBS_DO_BROWSERSTACK)) {
|
||||
testSubtasks.push('exec:browserstack');
|
||||
}
|
||||
|
||||
grunt.registerTask('test', testSubtasks);
|
||||
grunt.registerTask('test-js', ['jshint:core', 'jshint:test', 'jshint:grunt', 'jscs:core', 'jscs:test', 'jscs:grunt', 'exec:karma']);
|
||||
|
||||
// JS distribution task.
|
||||
grunt.registerTask('dist-js', ['concat', 'uglify:core', 'commonjs']);
|
||||
|
||||
// CSS distribution task.
|
||||
grunt.registerTask('dist-css', ['less:core', 'less:theme', 'postcss:core', 'postcss:theme', 'cssmin:core', 'cssmin:theme']);
|
||||
|
||||
// Full distribution task.
|
||||
grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']);
|
||||
|
||||
// Default task.
|
||||
grunt.registerTask('default', ['clean:dist', 'copy:fonts', 'test']);
|
||||
|
||||
grunt.registerTask('build-glyphicons-data', function () {
|
||||
generateGlyphiconsData.call(this, grunt);
|
||||
});
|
||||
|
||||
// task for building customizer
|
||||
grunt.registerTask('build-customizer', ['build-customizer-html', 'build-raw-files']);
|
||||
grunt.registerTask('build-customizer-html', 'pug');
|
||||
grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () {
|
||||
var banner = grunt.template.process('<%= banner %>');
|
||||
generateRawFiles(grunt, banner);
|
||||
});
|
||||
|
||||
grunt.registerTask('commonjs', 'Generate CommonJS entrypoint module in dist dir.', function () {
|
||||
var srcFiles = grunt.config.get('concat.core.src');
|
||||
var destFilepath = 'dist/js/npm.js';
|
||||
generateCommonJSModule(grunt, srcFiles, destFilepath);
|
||||
});
|
||||
|
||||
// Docs task.
|
||||
grunt.registerTask('docs-css', ['less:docs', 'less:docsIe', 'postcss:docs', 'postcss:examples', 'cssmin:docs']);
|
||||
grunt.registerTask('lint-docs-css', ['stylelint:docs', 'stylelint:examples']);
|
||||
grunt.registerTask('docs-js', ['uglify:docs', 'uglify:customize']);
|
||||
grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']);
|
||||
grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']);
|
||||
|
||||
grunt.registerTask('prep-release', ['dist', 'docs', 'jekyll:github']);
|
||||
};
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
Before opening an issue:
|
||||
|
||||
- [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue)
|
||||
- [Validate](https://validator.w3.org/nu/) and [lint](https://github.com/twbs/bootlint#in-the-browser) any HTML to avoid common problems
|
||||
- Prepare a [reduced test case](https://css-tricks.com/reduced-test-cases/) for any bugs
|
||||
- Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md)
|
||||
|
||||
When asking general "how to" questions:
|
||||
|
||||
- Please do not open an issue here
|
||||
- Instead, ask for help on [StackOverflow, IRC, or Slack](https://github.com/twbs/bootstrap/blob/master/README.md#community)
|
||||
|
||||
When reporting a bug, include:
|
||||
|
||||
- Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile)
|
||||
- Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser)
|
||||
- Reduced test cases and potential fixes using [JS Bin](https://jsbin.com/)
|
||||
|
||||
When suggesting a feature, include:
|
||||
|
||||
- As much detail as possible for what we should add and why it's important to Bootstrap
|
||||
- Relevant links to prior art, screenshots, or live demos whenever possible
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2011-2019 Twitter, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
# [Bootstrap](https://getbootstrap.com/)
|
||||
|
||||
[](https://bootstrap-slack.herokuapp.com/)
|
||||

|
||||
[](https://www.npmjs.com/package/bootstrap)
|
||||
[](https://travis-ci.org/twbs/bootstrap)
|
||||
[](https://david-dm.org/twbs/bootstrap#info=devDependencies)
|
||||
[](https://www.nuget.org/packages/Bootstrap)
|
||||
|
||||
Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created by [Mark Otto](https://twitter.com/mdo) and [Jacob Thornton](https://twitter.com/fat), and maintained by the [core team](https://github.com/orgs/twbs/people) with the massive support and involvement of the community.
|
||||
|
||||
To get started, check out <https://getbootstrap.com/>!
|
||||
|
||||
|
||||
## Table of contents
|
||||
|
||||
* [Quick start](#quick-start)
|
||||
* [Bugs and feature requests](#bugs-and-feature-requests)
|
||||
* [Documentation](#documentation)
|
||||
* [Contributing](#contributing)
|
||||
* [Community](#community)
|
||||
* [Versioning](#versioning)
|
||||
* [Creators](#creators)
|
||||
* [Thanks](#thanks)
|
||||
* [Copyright and license](#copyright-and-license)
|
||||
|
||||
|
||||
## Quick start
|
||||
|
||||
Several quick start options are available:
|
||||
|
||||
* [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.4.1.zip).
|
||||
* Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.
|
||||
* Install with [Bower](https://bower.io/): `bower install bootstrap`.
|
||||
* Install with [npm](https://www.npmjs.com/): `npm install bootstrap@3`.
|
||||
* Install with [Meteor](https://www.meteor.com/): `meteor add twbs:bootstrap`.
|
||||
* Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap`.
|
||||
|
||||
Read the [Getting started page](https://getbootstrap.com/docs/3.4/getting-started/) for information on the framework contents, templates and examples, and more.
|
||||
|
||||
### What's included
|
||||
|
||||
Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this:
|
||||
|
||||
```
|
||||
bootstrap/
|
||||
├── css/
|
||||
│ ├── bootstrap.css
|
||||
│ ├── bootstrap.css.map
|
||||
│ ├── bootstrap.min.css
|
||||
│ ├── bootstrap.min.css.map
|
||||
│ ├── bootstrap-theme.css
|
||||
│ ├── bootstrap-theme.css.map
|
||||
│ ├── bootstrap-theme.min.css
|
||||
│ └── bootstrap-theme.min.css.map
|
||||
├── js/
|
||||
│ ├── bootstrap.js
|
||||
│ └── bootstrap.min.js
|
||||
└── fonts/
|
||||
├── glyphicons-halflings-regular.eot
|
||||
├── glyphicons-halflings-regular.svg
|
||||
├── glyphicons-halflings-regular.ttf
|
||||
├── glyphicons-halflings-regular.woff
|
||||
└── glyphicons-halflings-regular.woff2
|
||||
```
|
||||
|
||||
We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). CSS [source maps](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Fonts from Glyphicons are included, as is the optional Bootstrap theme.
|
||||
|
||||
|
||||
## Bugs and feature requests
|
||||
|
||||
Have a bug or a feature request? Please first read the [issue guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/twbs/bootstrap/issues/new).
|
||||
|
||||
Note that **feature requests must target [Bootstrap v4](https://github.com/twbs/bootstrap/tree/v4-dev),** because Bootstrap v3 is now in maintenance mode and is closed off to new features. This is so that we can focus our efforts on Bootstrap v4.
|
||||
|
||||
|
||||
## Documentation
|
||||
|
||||
Bootstrap's documentation, included in this repo in the root directory, is built with [Jekyll](https://jekyllrb.com/) and publicly hosted on GitHub Pages at <https://getbootstrap.com/>. The docs may also be run locally.
|
||||
|
||||
### Running documentation locally
|
||||
|
||||
1. If necessary, [install Jekyll](https://jekyllrb.com/docs/installation/) and other Ruby dependencies with `bundle install`.
|
||||
**Note for Windows users:** Read [this guide](https://jekyllrb.com/docs/installation/windows/) to get Jekyll up and running without problems.
|
||||
2. From the root `/bootstrap` directory, run `bundle exec jekyll serve` in the command line.
|
||||
4. Open `http://localhost:9001` in your browser, and voilà.
|
||||
|
||||
Learn more about using Jekyll by reading its [documentation](https://jekyllrb.com/docs/).
|
||||
|
||||
### Documentation for previous releases
|
||||
|
||||
Documentation for v2.3.2 has been made available for the time being at <https://getbootstrap.com/2.3.2/> while folks transition to Bootstrap 3.
|
||||
|
||||
[Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download.
|
||||
|
||||
|
||||
## Contributing
|
||||
|
||||
Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.
|
||||
|
||||
Moreover, if your pull request contains JavaScript patches or features, you must include [relevant unit tests](https://github.com/twbs/bootstrap/tree/master/js/tests). All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo).
|
||||
|
||||
**Bootstrap v3 is now closed off to new features.** It has gone into maintenance mode so that we can focus our efforts on [Bootstrap v4](https://github.com/twbs/bootstrap/tree/v4-dev), the future of the framework. Pull requests which add new features (rather than fix bugs) should target [Bootstrap v4 (the `v4-dev` git branch)](https://github.com/twbs/bootstrap/tree/v4-dev) instead.
|
||||
|
||||
Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <https://editorconfig.org/>.
|
||||
|
||||
|
||||
## Community
|
||||
|
||||
Get updates on Bootstrap's development and chat with the project maintainers and community members.
|
||||
|
||||
* Follow [@getbootstrap on Twitter](https://twitter.com/getbootstrap).
|
||||
* Read and subscribe to [The Official Bootstrap Blog](https://blog.getbootstrap.com/).
|
||||
* Join [the official Slack room](https://bootstrap-slack.herokuapp.com/).
|
||||
* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
|
||||
* Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](https://stackoverflow.com/questions/tagged/twitter-bootstrap-3)).
|
||||
* Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/search?q=keywords:bootstrap) or similar delivery mechanisms for maximum discoverability.
|
||||
|
||||
|
||||
## Versioning
|
||||
|
||||
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](https://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible.
|
||||
|
||||
See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com/) contain summaries of the most noteworthy changes made in each release.
|
||||
|
||||
|
||||
## Thanks
|
||||
|
||||
<img src="https://live.browserstack.com/images/opensource/browserstack-logo.svg" alt="BrowserStack Logo" width="490" height="106">
|
||||
|
||||
Thanks to [BrowserStack](https://www.browserstack.com/) for providing the infrastructure that allows us to test in real browsers!
|
||||
|
||||
|
||||
## Creators
|
||||
|
||||
**Mark Otto**
|
||||
|
||||
* <https://twitter.com/mdo>
|
||||
* <https://github.com/mdo>
|
||||
|
||||
**Jacob Thornton**
|
||||
|
||||
* <https://twitter.com/fat>
|
||||
* <https://github.com/fat>
|
||||
|
||||
|
||||
## Copyright and license
|
||||
|
||||
Code and documentation copyright 2011-2019 Twitter, Inc. Code released under [the MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE).
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"name": "bootstrap",
|
||||
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
|
||||
"keywords": [
|
||||
"css",
|
||||
"js",
|
||||
"less",
|
||||
"mobile-first",
|
||||
"responsive",
|
||||
"front-end",
|
||||
"framework",
|
||||
"web"
|
||||
],
|
||||
"homepage": "https://getbootstrap.com/",
|
||||
"license": "MIT",
|
||||
"moduleType": "globals",
|
||||
"main": [
|
||||
"less/bootstrap.less",
|
||||
"dist/js/bootstrap.js"
|
||||
],
|
||||
"ignore": [
|
||||
"/.*",
|
||||
"_config.yml",
|
||||
"CNAME",
|
||||
"composer.json",
|
||||
"CONTRIBUTING.md",
|
||||
"docs",
|
||||
"js/tests",
|
||||
"test-infra"
|
||||
],
|
||||
"dependencies": {
|
||||
"jquery": "1.9.1 - 3"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,587 @@
|
|||
/*!
|
||||
* Bootstrap v3.4.1 (https://getbootstrap.com/)
|
||||
* Copyright 2011-2019 Twitter, Inc.
|
||||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||
*/
|
||||
.btn-default,
|
||||
.btn-primary,
|
||||
.btn-success,
|
||||
.btn-info,
|
||||
.btn-warning,
|
||||
.btn-danger {
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
|
||||
}
|
||||
.btn-default:active,
|
||||
.btn-primary:active,
|
||||
.btn-success:active,
|
||||
.btn-info:active,
|
||||
.btn-warning:active,
|
||||
.btn-danger:active,
|
||||
.btn-default.active,
|
||||
.btn-primary.active,
|
||||
.btn-success.active,
|
||||
.btn-info.active,
|
||||
.btn-warning.active,
|
||||
.btn-danger.active {
|
||||
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||
}
|
||||
.btn-default.disabled,
|
||||
.btn-primary.disabled,
|
||||
.btn-success.disabled,
|
||||
.btn-info.disabled,
|
||||
.btn-warning.disabled,
|
||||
.btn-danger.disabled,
|
||||
.btn-default[disabled],
|
||||
.btn-primary[disabled],
|
||||
.btn-success[disabled],
|
||||
.btn-info[disabled],
|
||||
.btn-warning[disabled],
|
||||
.btn-danger[disabled],
|
||||
fieldset[disabled] .btn-default,
|
||||
fieldset[disabled] .btn-primary,
|
||||
fieldset[disabled] .btn-success,
|
||||
fieldset[disabled] .btn-info,
|
||||
fieldset[disabled] .btn-warning,
|
||||
fieldset[disabled] .btn-danger {
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.btn-default .badge,
|
||||
.btn-primary .badge,
|
||||
.btn-success .badge,
|
||||
.btn-info .badge,
|
||||
.btn-warning .badge,
|
||||
.btn-danger .badge {
|
||||
text-shadow: none;
|
||||
}
|
||||
.btn:active,
|
||||
.btn.active {
|
||||
background-image: none;
|
||||
}
|
||||
.btn-default {
|
||||
background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
||||
background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
|
||||
background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #dbdbdb;
|
||||
text-shadow: 0 1px 0 #fff;
|
||||
border-color: #ccc;
|
||||
}
|
||||
.btn-default:hover,
|
||||
.btn-default:focus {
|
||||
background-color: #e0e0e0;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-default:active,
|
||||
.btn-default.active {
|
||||
background-color: #e0e0e0;
|
||||
border-color: #dbdbdb;
|
||||
}
|
||||
.btn-default.disabled,
|
||||
.btn-default[disabled],
|
||||
fieldset[disabled] .btn-default,
|
||||
.btn-default.disabled:hover,
|
||||
.btn-default[disabled]:hover,
|
||||
fieldset[disabled] .btn-default:hover,
|
||||
.btn-default.disabled:focus,
|
||||
.btn-default[disabled]:focus,
|
||||
fieldset[disabled] .btn-default:focus,
|
||||
.btn-default.disabled.focus,
|
||||
.btn-default[disabled].focus,
|
||||
fieldset[disabled] .btn-default.focus,
|
||||
.btn-default.disabled:active,
|
||||
.btn-default[disabled]:active,
|
||||
fieldset[disabled] .btn-default:active,
|
||||
.btn-default.disabled.active,
|
||||
.btn-default[disabled].active,
|
||||
fieldset[disabled] .btn-default.active {
|
||||
background-color: #e0e0e0;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-primary {
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #245580;
|
||||
}
|
||||
.btn-primary:hover,
|
||||
.btn-primary:focus {
|
||||
background-color: #265a88;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-primary:active,
|
||||
.btn-primary.active {
|
||||
background-color: #265a88;
|
||||
border-color: #245580;
|
||||
}
|
||||
.btn-primary.disabled,
|
||||
.btn-primary[disabled],
|
||||
fieldset[disabled] .btn-primary,
|
||||
.btn-primary.disabled:hover,
|
||||
.btn-primary[disabled]:hover,
|
||||
fieldset[disabled] .btn-primary:hover,
|
||||
.btn-primary.disabled:focus,
|
||||
.btn-primary[disabled]:focus,
|
||||
fieldset[disabled] .btn-primary:focus,
|
||||
.btn-primary.disabled.focus,
|
||||
.btn-primary[disabled].focus,
|
||||
fieldset[disabled] .btn-primary.focus,
|
||||
.btn-primary.disabled:active,
|
||||
.btn-primary[disabled]:active,
|
||||
fieldset[disabled] .btn-primary:active,
|
||||
.btn-primary.disabled.active,
|
||||
.btn-primary[disabled].active,
|
||||
fieldset[disabled] .btn-primary.active {
|
||||
background-color: #265a88;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-success {
|
||||
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
|
||||
background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
|
||||
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #3e8f3e;
|
||||
}
|
||||
.btn-success:hover,
|
||||
.btn-success:focus {
|
||||
background-color: #419641;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-success:active,
|
||||
.btn-success.active {
|
||||
background-color: #419641;
|
||||
border-color: #3e8f3e;
|
||||
}
|
||||
.btn-success.disabled,
|
||||
.btn-success[disabled],
|
||||
fieldset[disabled] .btn-success,
|
||||
.btn-success.disabled:hover,
|
||||
.btn-success[disabled]:hover,
|
||||
fieldset[disabled] .btn-success:hover,
|
||||
.btn-success.disabled:focus,
|
||||
.btn-success[disabled]:focus,
|
||||
fieldset[disabled] .btn-success:focus,
|
||||
.btn-success.disabled.focus,
|
||||
.btn-success[disabled].focus,
|
||||
fieldset[disabled] .btn-success.focus,
|
||||
.btn-success.disabled:active,
|
||||
.btn-success[disabled]:active,
|
||||
fieldset[disabled] .btn-success:active,
|
||||
.btn-success.disabled.active,
|
||||
.btn-success[disabled].active,
|
||||
fieldset[disabled] .btn-success.active {
|
||||
background-color: #419641;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-info {
|
||||
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
|
||||
background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
|
||||
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #28a4c9;
|
||||
}
|
||||
.btn-info:hover,
|
||||
.btn-info:focus {
|
||||
background-color: #2aabd2;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-info:active,
|
||||
.btn-info.active {
|
||||
background-color: #2aabd2;
|
||||
border-color: #28a4c9;
|
||||
}
|
||||
.btn-info.disabled,
|
||||
.btn-info[disabled],
|
||||
fieldset[disabled] .btn-info,
|
||||
.btn-info.disabled:hover,
|
||||
.btn-info[disabled]:hover,
|
||||
fieldset[disabled] .btn-info:hover,
|
||||
.btn-info.disabled:focus,
|
||||
.btn-info[disabled]:focus,
|
||||
fieldset[disabled] .btn-info:focus,
|
||||
.btn-info.disabled.focus,
|
||||
.btn-info[disabled].focus,
|
||||
fieldset[disabled] .btn-info.focus,
|
||||
.btn-info.disabled:active,
|
||||
.btn-info[disabled]:active,
|
||||
fieldset[disabled] .btn-info:active,
|
||||
.btn-info.disabled.active,
|
||||
.btn-info[disabled].active,
|
||||
fieldset[disabled] .btn-info.active {
|
||||
background-color: #2aabd2;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-warning {
|
||||
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
|
||||
background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
|
||||
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #e38d13;
|
||||
}
|
||||
.btn-warning:hover,
|
||||
.btn-warning:focus {
|
||||
background-color: #eb9316;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-warning:active,
|
||||
.btn-warning.active {
|
||||
background-color: #eb9316;
|
||||
border-color: #e38d13;
|
||||
}
|
||||
.btn-warning.disabled,
|
||||
.btn-warning[disabled],
|
||||
fieldset[disabled] .btn-warning,
|
||||
.btn-warning.disabled:hover,
|
||||
.btn-warning[disabled]:hover,
|
||||
fieldset[disabled] .btn-warning:hover,
|
||||
.btn-warning.disabled:focus,
|
||||
.btn-warning[disabled]:focus,
|
||||
fieldset[disabled] .btn-warning:focus,
|
||||
.btn-warning.disabled.focus,
|
||||
.btn-warning[disabled].focus,
|
||||
fieldset[disabled] .btn-warning.focus,
|
||||
.btn-warning.disabled:active,
|
||||
.btn-warning[disabled]:active,
|
||||
fieldset[disabled] .btn-warning:active,
|
||||
.btn-warning.disabled.active,
|
||||
.btn-warning[disabled].active,
|
||||
fieldset[disabled] .btn-warning.active {
|
||||
background-color: #eb9316;
|
||||
background-image: none;
|
||||
}
|
||||
.btn-danger {
|
||||
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
|
||||
background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
|
||||
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #b92c28;
|
||||
}
|
||||
.btn-danger:hover,
|
||||
.btn-danger:focus {
|
||||
background-color: #c12e2a;
|
||||
background-position: 0 -15px;
|
||||
}
|
||||
.btn-danger:active,
|
||||
.btn-danger.active {
|
||||
background-color: #c12e2a;
|
||||
border-color: #b92c28;
|
||||
}
|
||||
.btn-danger.disabled,
|
||||
.btn-danger[disabled],
|
||||
fieldset[disabled] .btn-danger,
|
||||
.btn-danger.disabled:hover,
|
||||
.btn-danger[disabled]:hover,
|
||||
fieldset[disabled] .btn-danger:hover,
|
||||
.btn-danger.disabled:focus,
|
||||
.btn-danger[disabled]:focus,
|
||||
fieldset[disabled] .btn-danger:focus,
|
||||
.btn-danger.disabled.focus,
|
||||
.btn-danger[disabled].focus,
|
||||
fieldset[disabled] .btn-danger.focus,
|
||||
.btn-danger.disabled:active,
|
||||
.btn-danger[disabled]:active,
|
||||
fieldset[disabled] .btn-danger:active,
|
||||
.btn-danger.disabled.active,
|
||||
.btn-danger[disabled].active,
|
||||
fieldset[disabled] .btn-danger.active {
|
||||
background-color: #c12e2a;
|
||||
background-image: none;
|
||||
}
|
||||
.thumbnail,
|
||||
.img-thumbnail {
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||
}
|
||||
.dropdown-menu > li > a:hover,
|
||||
.dropdown-menu > li > a:focus {
|
||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
||||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
background-color: #e8e8e8;
|
||||
}
|
||||
.dropdown-menu > .active > a,
|
||||
.dropdown-menu > .active > a:hover,
|
||||
.dropdown-menu > .active > a:focus {
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
background-color: #2e6da4;
|
||||
}
|
||||
.navbar-default {
|
||||
background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
|
||||
background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#ffffff), to(#f8f8f8));
|
||||
background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
|
||||
}
|
||||
.navbar-default .navbar-nav > .open > a,
|
||||
.navbar-default .navbar-nav > .active > a {
|
||||
background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
|
||||
background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
|
||||
background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
|
||||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
|
||||
}
|
||||
.navbar-brand,
|
||||
.navbar-nav > li > a {
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
|
||||
}
|
||||
.navbar-inverse {
|
||||
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
||||
background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
|
||||
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
|
||||
border-radius: 4px;
|
||||
}
|
||||
.navbar-inverse .navbar-nav > .open > a,
|
||||
.navbar-inverse .navbar-nav > .active > a {
|
||||
background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
|
||||
background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
|
||||
background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
|
||||
box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.navbar-inverse .navbar-brand,
|
||||
.navbar-inverse .navbar-nav > li > a {
|
||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.navbar-static-top,
|
||||
.navbar-fixed-top,
|
||||
.navbar-fixed-bottom {
|
||||
border-radius: 0;
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
.navbar .navbar-nav .open .dropdown-menu > .active > a,
|
||||
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
|
||||
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
|
||||
color: #fff;
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
}
|
||||
.alert {
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
|
||||
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.alert-success {
|
||||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
||||
background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
|
||||
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #b2dba1;
|
||||
}
|
||||
.alert-info {
|
||||
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
|
||||
background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
|
||||
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #9acfea;
|
||||
}
|
||||
.alert-warning {
|
||||
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
|
||||
background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
|
||||
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #f5e79e;
|
||||
}
|
||||
.alert-danger {
|
||||
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
|
||||
background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
|
||||
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #dca7a7;
|
||||
}
|
||||
.progress {
|
||||
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
|
||||
background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
|
||||
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar {
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-success {
|
||||
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
|
||||
background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
|
||||
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-info {
|
||||
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
|
||||
background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
|
||||
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-warning {
|
||||
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
|
||||
background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
|
||||
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-danger {
|
||||
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
|
||||
background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
|
||||
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.progress-bar-striped {
|
||||
background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
||||
background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
||||
background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
|
||||
}
|
||||
.list-group {
|
||||
border-radius: 4px;
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
|
||||
}
|
||||
.list-group-item.active,
|
||||
.list-group-item.active:hover,
|
||||
.list-group-item.active:focus {
|
||||
text-shadow: 0 -1px 0 #286090;
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #2b669a;
|
||||
}
|
||||
.list-group-item.active .badge,
|
||||
.list-group-item.active:hover .badge,
|
||||
.list-group-item.active:focus .badge {
|
||||
text-shadow: none;
|
||||
}
|
||||
.panel {
|
||||
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.panel-default > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
|
||||
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-primary > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
|
||||
background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-success > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
|
||||
background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
|
||||
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-info > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
|
||||
background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
|
||||
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-warning > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
|
||||
background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
|
||||
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.panel-danger > .panel-heading {
|
||||
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
|
||||
background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
|
||||
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
}
|
||||
.well {
|
||||
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
|
||||
background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
|
||||
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
|
||||
background-repeat: repeat-x;
|
||||
border-color: #dcdcdc;
|
||||
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
|
||||
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
/*# sourceMappingURL=bootstrap-theme.css.map */
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
static/groups/bower_components/bootstrap/dist/css/bootstrap-theme.min.css.map
vendored
Normal file
1
static/groups/bower_components/bootstrap/dist/css/bootstrap-theme.min.css.map
vendored
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,32 @@
|
|||
// package metadata file for Meteor.js
|
||||
|
||||
/* jshint strict:false */
|
||||
/* global Package:true */
|
||||
|
||||
Package.describe({
|
||||
name: 'twbs:bootstrap', // https://atmospherejs.com/twbs/bootstrap
|
||||
summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.',
|
||||
version: '3.4.1',
|
||||
git: 'https://github.com/twbs/bootstrap.git'
|
||||
});
|
||||
|
||||
Package.onUse(function (api) {
|
||||
api.versionsFrom('METEOR@1.0');
|
||||
api.use('jquery', 'client');
|
||||
var assets = [
|
||||
'dist/fonts/glyphicons-halflings-regular.eot',
|
||||
'dist/fonts/glyphicons-halflings-regular.svg',
|
||||
'dist/fonts/glyphicons-halflings-regular.ttf',
|
||||
'dist/fonts/glyphicons-halflings-regular.woff',
|
||||
'dist/fonts/glyphicons-halflings-regular.woff2'
|
||||
];
|
||||
if (api.addAssets) {
|
||||
api.addAssets(assets, 'client');
|
||||
} else {
|
||||
api.addFiles(assets, 'client', { isAsset: true });
|
||||
}
|
||||
api.addFiles([
|
||||
'dist/css/bootstrap.css',
|
||||
'dist/js/bootstrap.js'
|
||||
], 'client');
|
||||
});
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
{
|
||||
"name": "bootstrap",
|
||||
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
|
||||
"version": "3.4.1",
|
||||
"keywords": [
|
||||
"css",
|
||||
"less",
|
||||
"mobile-first",
|
||||
"responsive",
|
||||
"front-end",
|
||||
"framework",
|
||||
"web"
|
||||
],
|
||||
"homepage": "https://getbootstrap.com/",
|
||||
"author": "Twitter, Inc.",
|
||||
"scripts": {
|
||||
"sri": "node grunt/generate-sri.js",
|
||||
"release": "grunt prep-release && npm run sri && npm run release-zip",
|
||||
"release-zip": "cross-env-shell \"shx rm -rf bootstrap-$npm_package_version-dist && shx cp -r dist/ bootstrap-$npm_package_version-dist && zip -r9 bootstrap-$npm_package_version-dist.zip bootstrap-$npm_package_version-dist && shx rm -rf bootstrap-$npm_package_version-dist\"",
|
||||
"change-version": "node grunt/change-version.js",
|
||||
"test": "grunt test"
|
||||
},
|
||||
"style": "dist/css/bootstrap.css",
|
||||
"less": "less/bootstrap.less",
|
||||
"main": "./dist/js/npm",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twbs/bootstrap.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/twbs/bootstrap/issues"
|
||||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"autoprefixer": "^9.4.7",
|
||||
"btoa": "^1.2.1",
|
||||
"cross-env": "^5.2.0",
|
||||
"glob": "^7.1.3",
|
||||
"grunt": "^1.0.3",
|
||||
"grunt-contrib-clean": "^2.0.0",
|
||||
"grunt-contrib-concat": "^1.0.1",
|
||||
"grunt-contrib-connect": "^2.0.0",
|
||||
"grunt-contrib-copy": "^1.0.0",
|
||||
"grunt-contrib-cssmin": "^3.0.0",
|
||||
"grunt-contrib-jshint": "^2.0.0",
|
||||
"grunt-contrib-less": "^2.0.0",
|
||||
"grunt-contrib-pug": "^2.0.0",
|
||||
"grunt-contrib-uglify": "^4.0.0",
|
||||
"grunt-contrib-watch": "^1.1.0",
|
||||
"grunt-exec": "^3.0.0",
|
||||
"grunt-html": "^10.1.0",
|
||||
"grunt-jekyll": "^1.0.0",
|
||||
"grunt-jscs": "^3.0.1",
|
||||
"grunt-postcss": "^0.9.0",
|
||||
"grunt-stylelint": "^0.10.1",
|
||||
"ip": "^1.1.5",
|
||||
"karma": "^3.1.3",
|
||||
"karma-browserstack-launcher": "^1.4.0",
|
||||
"karma-chrome-launcher": "^2.2.0",
|
||||
"karma-detect-browsers": "^2.3.3",
|
||||
"karma-firefox-launcher": "^1.1.0",
|
||||
"karma-qunit": "^1.2.1",
|
||||
"load-grunt-tasks": "^4.0.0",
|
||||
"markdown-it": "^8.4.2",
|
||||
"qunitjs": "^1.23.1",
|
||||
"replace-in-file": "^3.4.3",
|
||||
"shelljs": "^0.8.3",
|
||||
"shx": "^0.3.2",
|
||||
"stylelint": "~9.6.0",
|
||||
"stylelint-config-standard": "^18.2.0",
|
||||
"stylelint-order": "^1.0.0",
|
||||
"time-grunt": "^2.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
"fonts",
|
||||
"grunt",
|
||||
"js/*.js",
|
||||
"less/**/*.less",
|
||||
"Gruntfile.js",
|
||||
"LICENSE"
|
||||
],
|
||||
"jspm": {
|
||||
"main": "js/bootstrap",
|
||||
"shim": {
|
||||
"js/bootstrap": {
|
||||
"deps": "jquery",
|
||||
"exports": "$"
|
||||
}
|
||||
},
|
||||
"files": [
|
||||
"css",
|
||||
"fonts",
|
||||
"js"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,649 @@
|
|||
Version 1.7.0
|
||||
-------------
|
||||
* Bug
|
||||
* sidemenu: The tooltip has a wrong position when the 'floatMenuPosition' is set to 'left'. fixed.
|
||||
* datagrid: The horizontal scrollbar has a wrong state when the 'showHeader' is set to true. fixed.
|
||||
* combo: The initialized value will trigger the form's 'onChange' event when the 'multiple' is set to true. fixed.
|
||||
* panel: The horizontal panel doesn't work normally when 'noheader' property is set to true. fixed.
|
||||
* pagination: The extended buttons may lose in IE when rebuild the component. fixed.
|
||||
* Improvement
|
||||
* tree: Add 'findBy' method to find a node by any fields.
|
||||
* tree: The 'find' method is enhanced to find a node easily.
|
||||
* combo: Add 'panelValign' property.
|
||||
* datagrid: The sorting parameters will be ignored when the 'remoteSort' is set to false.
|
||||
* timespinner: Add 'hour12' property to display in 12 hour format.
|
||||
|
||||
Version 1.6.0
|
||||
-------------
|
||||
* Bug
|
||||
* maskedbox: The component does not accept numeric keypad. fixed.
|
||||
* combogrid: When selecting multiple records, the datagrid will scroll to the last checked record. fixed.
|
||||
* Improvement
|
||||
* Compatible with jQuery 3.x.
|
||||
* tabs: The 'toolPosition' property can accept 'top' and 'bottom' values.
|
||||
* textbox: The textbox label has the animating feature when focus or blur on it.
|
||||
* tooltip: Add 'valign' property.
|
||||
* tree: The node class can be initialized by setting the 'nodeCls' in the data.
|
||||
* New Plugins
|
||||
* sidemenu: The sidemenu is created from accordion and tree plugins. It builds a collapsible menu with some categories.
|
||||
* radiobutton: This plugin provides a round interface to select one option from a number of options.
|
||||
* checkbox: This plugin allows a user to select a value from a small set of options.
|
||||
|
||||
Version 1.5.5
|
||||
-------------
|
||||
* Bug
|
||||
* tabs: The selecting history has wrong order when the title contains complex elements. fixed.
|
||||
* combo: The drop-down panel may not be hidden if a bigger 'delay' value is set. fixed.
|
||||
* layout: The expanding panel does not collapse when move mouse quickly away from it. fixed.
|
||||
* tagbox: The tagbox and the label don't stay in the same line. fixed.
|
||||
* Improvement
|
||||
* combo: The 'blur' event handler is attached to the 'inputEvents' property.
|
||||
* numberbox: The 'cloneFrom' method is available.
|
||||
* slider: The 'step' property can be set with a floating number.
|
||||
* menu: The 'findItem' method allows the user to find menu item by any parameters.
|
||||
* menubutton: Add 'showEvent' and 'hideEvent' properties.
|
||||
* New Plugins
|
||||
* maskedbox: The maskedbox enforces its structure as the user types.
|
||||
|
||||
Version 1.5.4
|
||||
-------------
|
||||
* Bug
|
||||
* combotreegrid: The 'onChange' event does not fire when entering values on the inputing box. fixed.
|
||||
* combobox: Clicking on the drop-down panel will jump to the bottom of body on win10 IE11. fixed.
|
||||
* datebox: Clicking on the 'Today' button doesn't trigger the 'onSelect' event. fixed.
|
||||
* propertygrid: The 'getChanges' method doesn't work after editing the only one row. fixed.
|
||||
* Improvement
|
||||
* combo: Add the 'panelEvents' property.
|
||||
* combo: Attach the default 'mousedown' event handler.
|
||||
* combobox: The 'setValues' method can be called to initialize the displaying text.
|
||||
* combotreegrid: Press ENTER key to select the highlighted rows.
|
||||
* panel: Improve the resizing performance.
|
||||
* filebox: The 'files' method allows the user to get the selected file list.
|
||||
* searchbox: Improvent the 'selectName' method.
|
||||
|
||||
Version 1.5.3
|
||||
-------------
|
||||
* Bug
|
||||
* combobox: The 'iconCls' property can not be parsed from the <option> markup. fixed.
|
||||
* combobox: Clicking scrollbar will cause the drop-down panel to be hidden in IE. fixed.
|
||||
* pagination: The pagination height will shrink when the 'displayMsg' property is set to false. fixed.
|
||||
* tabs: The tab panel takes a wrong 'data' parameter in the 'onLoad' event. fixed.
|
||||
* Improvement
|
||||
* draggable: Add 'onEndDrag' event.
|
||||
* resizable: Retrieve more than one resizing directions with different edges.
|
||||
* datagrid: Add 'resizeEdge' property.
|
||||
* datagrid: Avoid the memory leaks.
|
||||
* combo: The 'originalValue' property value is corrected in multiple mode.
|
||||
* form: Add the tagbox to the form fields.
|
||||
* tagbox: Add the 'reset' method.
|
||||
* progress: Increase the response time to open and close the progress message window.
|
||||
|
||||
Version 1.5.2
|
||||
-------------
|
||||
* Bug
|
||||
* form: The initialized value of the inputing box will disappear after calling the 'reset' method. fixed.
|
||||
* textbox: Calling the 'destroy' method does not clean the field label. fixed.
|
||||
* datagrid: Calling the 'selectRow' method on an unexisting row causes undesired record set. fixed.
|
||||
* Improvement
|
||||
* datagrid: The ctrl selection is supported on Mac keyboards.
|
||||
* datagrid: The 'scrollOnSelect' property is available for the user to determine whether to scroll to the specified row when selecting it.
|
||||
* combotree: Add the 'textField' property.
|
||||
* combotreegrid: Add the 'textField' property.
|
||||
* pagination: Add 'showPageInfo' property.
|
||||
* panel: Add 'halign' and 'titleDirection' properties to allow the user to align the panel header to left or right side.
|
||||
* accordion: Add 'halign' property to build the horizontal accordion.
|
||||
* tagbox: The 'required' propery can be applied to validate whether the value is empty.
|
||||
|
||||
Version 1.5.1
|
||||
-------------
|
||||
* Bug
|
||||
* datagrid: The selecting and checking flags will lose after calling 'updateRow' method. fixed.
|
||||
* tabs: The trip tools have a wrong position when calling 'update' method. fixed.
|
||||
* window: When the height is set to 'auto', it will disappear after moving the window. fixed.
|
||||
* messager: When display the progress message window and then close it immediately, an exception occurs. fixed.
|
||||
* form: The 'clear' method does not clear the selected drop-down items of the combobox. fixed.
|
||||
* Improvement
|
||||
* textbox: The 'cls' property is available to add a custom style to textbox.
|
||||
* numberbox: Allow the user to format currency in Italian.
|
||||
* combo: Add 'multivalue' property that allows the user to determine how to submit the multiple values.
|
||||
* combobox: Add 'reversed' property.
|
||||
* combobox: Add 'onClick' event.
|
||||
* combogrid: Add 'reversed' property.
|
||||
* treegrid: Enable multiple selection with the shift key.
|
||||
* New Plugins
|
||||
* tagbox: Allows the user to add tags to a form field.
|
||||
|
||||
Version 1.5
|
||||
-------------
|
||||
* Bug
|
||||
* combobox: The 'onSelect' event does not fire when load data that contains the selected item. fixed.
|
||||
* datagrid: The 'updateRow' method sometimes does not work properly when the field is set to a blank value. fixed.
|
||||
* Improvement
|
||||
* A label can be associated to any form fields.
|
||||
* combobox: Enhance the 'select' and 'unselect' rules on the drop-down items.
|
||||
* combobox: Add 'limitToList' property to limit the inputed values to the listed items.
|
||||
* combogrid: Allow the user to clone the component quickly.
|
||||
* form: Add the 'dirty' property that allows the user to submit the only changed fields.
|
||||
* form: Add 'resetDirty' method.
|
||||
* datagrid: Allow the user to display a message when there are no records to be shown.
|
||||
* textbox: Add 'label','labelWidth','labelPosition' and 'labelAlign' properties.
|
||||
* spinner: Add 'spinAlign' property.
|
||||
* calendar: Allow the user to display week number of the year.
|
||||
* window: Add 'constrain' property.
|
||||
* New Plugins
|
||||
* passwordbox: The plugin that allows the user to input passwords with nice feedback.
|
||||
* combotreegrid: Combines combobox with drop-down treegrid component.
|
||||
|
||||
Version 1.4.5
|
||||
-------------
|
||||
* Bug
|
||||
* datagrid: The 'getChanges' method does not return the updated rows after calling 'updateRow' method. fixed.
|
||||
* treegrid: The 'onLoadSuccess' event fires when append or insert a row. fixed.
|
||||
* tree: The 'onLoadSuccess' event fires when append or insert a node. fixed.
|
||||
* Improvement
|
||||
* window: The displaying style can be customized.
|
||||
* window: The 'border' property allows the user to set different border style.
|
||||
* navpanel: The 'href' property is enabled to load content from remote server.
|
||||
* combotree: The 'setValue' and 'setValues' methods accept the paremter values in 'id' and 'text' pairs
|
||||
* combobox: Add 'showItemIcon' property.
|
||||
* combobox: Set 'groupPosition' property to 'sticky' to stick the item group to the top of drop-down panel.
|
||||
* messager: Pressing ENTER key on input box will trigger click event of the first button.
|
||||
* validatebox: Add 'editable',disabled' and 'readonly' properties.
|
||||
* validatebox: Add 'enable','disable','readonly' methods.
|
||||
* validatebox: Allow the user to determine how to display the error message.
|
||||
* filebox: Add 'accept' and 'multiple' properties.
|
||||
* form: Add 'iframe' property and 'onProgress' event.
|
||||
* treegrid: Add cascade checkbox selection.
|
||||
* treegrid: Add 'getCheckedNodes','checkNode' and 'uncheckNode' methods.
|
||||
|
||||
Version 1.4.4
|
||||
-------------
|
||||
* Bug
|
||||
* filebox: The 'clear' and 'reset' methods do not work properly in IE9. fixed.
|
||||
* messager: After calling $.messager.progress() with no arguments, the $.messager.progress('close') does not work properly. fixed.
|
||||
* timespinner: The value does not display properly in IE8 while clicking the spin buttons. fixed.
|
||||
* window: The window does not display when calling 'options' method in 'onMove' event. fixed.
|
||||
* treegrid: The 'getLevel' method does not accept the parameter value of 0. fixed.
|
||||
* Improvement
|
||||
* layout: The 'collapsedContent','expandMode' and 'hideExpandTool' properties are supported in region panel.
|
||||
* layout: The 'hideCollapsedContent' property can be set to display the vertical title bar on collapsed panel.
|
||||
* layout: Add 'onCollapse','onExpand','onAdd','onRemove' events.
|
||||
* datagrid: Display the 'up-down' icon on the sortable columns.
|
||||
* datagrid: Add 'gotoPage' method.
|
||||
* propertygrid: Add 'groups' method that allows to get all the data groups.
|
||||
* messager: Auto scroll feature is supported when displaying long messages.
|
||||
* tabs: The 'disabled' property is supported when defining a disabled tab panel.
|
||||
* tabs: The percentange size is supported now.
|
||||
|
||||
Version 1.4.3
|
||||
-------------
|
||||
* Bug
|
||||
* textbox: The 'setText' method does not accept value 0. fixed.
|
||||
* timespinner: When running in IE11, the error occurs when clicking on the empty textbox. fixed.
|
||||
* tabs: The 'update' method can not update only the panel body. fixed.
|
||||
* Improvement
|
||||
* combobox: Improve the performance of displaying the drop-down panel.
|
||||
* combogrid: Remember the displaying text when the drop-down datagrid go to other pages.
|
||||
* combogrid: The 'setValue' and 'setValues' methods accept a key-value object.
|
||||
* window: The inline window's mask can auto-stretch its size to fill parent container.
|
||||
* tabs: The 'showTool' and 'hideTool' methods are available for users to show or hide the tools.
|
||||
* layout: Allow the user to override the 'cls','headerCls' and 'bodyCls' property values.
|
||||
* New Plugins
|
||||
* switchbutton: The switch button with two states:'on' and 'off'.
|
||||
|
||||
Version 1.4.2
|
||||
-------------
|
||||
* Bug
|
||||
* treegrid: The column will restore its size to original size after recreating the treegrid. fixed.
|
||||
* Improvement
|
||||
* draggable: Add 'delay' property that allows the user to delay the drag operation.
|
||||
* tree: Add 'filter' property and 'doFilter' method.
|
||||
* tabs: The 'add' method allows the user to insert a tab panel at a specified index.
|
||||
* tabs: The user can determine what tab panel can be selected.
|
||||
* tabs: Add 'justified' and 'narrow' properties.
|
||||
* layout: Add 'unsplit' and 'split' methods.
|
||||
* messager: Keyboard navigation features are supported now.
|
||||
* form: Add 'onChange' event.
|
||||
* combobox: Add 'queryParams' property.
|
||||
* slider: Add 'range' property.
|
||||
* menu: Add 'itemHeight','inline','noline' properties.
|
||||
* panel: The 'header' property allows the user to customize the panel header.
|
||||
* menubutton: Add 'hasDownArrow' property.
|
||||
* New Plugins
|
||||
* datalist: The plugin to render items in a list.
|
||||
* navpanel: The root component for the mobile page.
|
||||
* mobile: The plugin to provide the mobile page stack management and navigation.
|
||||
|
||||
Version 1.4.1
|
||||
-------------
|
||||
* Bug
|
||||
* combogrid: The combogrid has different height than other combo components. fixed.
|
||||
* datagrid: The row element loses some class style value after calling 'updateRow' method. fixed.
|
||||
* menubutton: Calling 'enable' method on a disabled button can not work well. fixed.
|
||||
* form: The filebox components in the form do not work correctly after calling 'clear' method. fixed.
|
||||
* Improvement
|
||||
* tabs: The 'update' method accepts 'type' option that allows the user to update the header,body,or both.
|
||||
* panel: Add 'openAnimation','openDuration','closeAnimation' and 'closeDuration' properties to set the animation for opening or closing a panel.
|
||||
* panel: Add 'footer' property that allows the user to add a footer bar to the bottom of panel.
|
||||
* datagrid: Calling 'endEdit' method will accept the editing value correctly.
|
||||
* datagrid: Add 'onBeforeSelect','onBeforeCheck','onBeforeUnselect','onBeforeUncheck' events.
|
||||
* propertygrid: The user can edit a row by calling 'beginEdit' method.
|
||||
* datebox: Add 'cloneFrom' method to create the datebox component quickly.
|
||||
* datetimebox: Add 'cloneFrom' method to create the datetimebox component quickly.
|
||||
|
||||
Version 1.4
|
||||
-------------
|
||||
* Bug
|
||||
* menu: The menu should not has a correct height when removed a menu item. fixed.
|
||||
* datagrid: The 'fitColumns' method does not work normally when the datarid width is too small. fixed.
|
||||
* Improvement
|
||||
* The fluid/percentange size is supported now for all easyui components.
|
||||
* menu: Add 'showItem', 'hideItem' and 'resize' methods.
|
||||
* menu: Auto resize the height upon the window size.
|
||||
* menu: Add 'duration' property that allows the user to define duration time in milliseconds to hide menu.
|
||||
* validatebox: Add 'onBeforeValidate' and 'onValidate' events.
|
||||
* combo: Extended from textbox now.
|
||||
* combo: Add 'panelMinWidth','panelMaxWidth','panelMinHeight' and 'panelMaxHeight' properties.
|
||||
* searchbox: Extended from textbox now.
|
||||
* tree: The 'getRoot' method will return the top parent node of a specified node if pass a 'nodeEl' parameter.
|
||||
* tree: Add 'queryParams' property.
|
||||
* datetimebox: Add 'spinnerWidth' property.
|
||||
* panel: Add 'doLayout' method to cause the panel to lay out its components.
|
||||
* panel: Add 'clear' method to clear the panel's content.
|
||||
* datagrid: The user is allowed to assign percent width to columns.
|
||||
* form: Add 'ajax','novalidate' and 'queryParams' properties.
|
||||
* linkbutton: Add 'resize' method.
|
||||
* New Plugins
|
||||
* textbox: A enhanced input field that allows users build their form easily.
|
||||
* datetimespinner: A date and time spinner that allows to pick a specific day.
|
||||
* filebox: The filebox component represents a file field of the forms.
|
||||
|
||||
Version 1.3.6
|
||||
-------------
|
||||
* Bug
|
||||
* treegrid: The 'getChecked' method can not return correct checked rows. fixed.
|
||||
* tree: The checkbox does not display properly on async tree when 'onlyLeafCheck' property is true. fixed.
|
||||
* Improvement
|
||||
* treegrid: All the selecting and checking methods are extended from datagrid component.
|
||||
* linkbutton: The icon alignment is fully supported, possible values are: 'top','bottom','left','right'.
|
||||
* linkbutton: Add 'size' property, possible values are: 'small','large'.
|
||||
* linkbutton: Add 'onClick' event.
|
||||
* menubutton: Add 'menuAlign' property that allows the user set top level menu alignment.
|
||||
* combo: Add 'panelAlign' property, possible values are: 'left','right'.
|
||||
* calendar: The 'formatter','styler' and 'validator' options are available to custom the calendar dates.
|
||||
* calendar: Add 'onChange' event.
|
||||
* panel: Add 'method','queryParams' and 'loader' options.
|
||||
* panel: Add 'onLoadError' event.
|
||||
* datagrid: Add 'onBeginEdit' event that fires when a row goes into edit mode.
|
||||
* datagrid: Add 'onEndEdit' event that fires when finishing editing but before destroying editors.
|
||||
* datagrid: Add 'sort' method and 'onBeforeSortColumn' event.
|
||||
* datagrid: The 'combogrid' editor has been integrated into datagrid.
|
||||
* datagrid: Add 'ctrlSelect' property that only allows multi-selection when ctrl+click is used.
|
||||
* slider: Add 'converter' option that allows users determine how to convert a value to the slider position or the slider position to the value.
|
||||
* searchbox: Add 'disabled' property.
|
||||
* searchbox: Add 'disable','enable','clear','reset' methods.
|
||||
* spinner: Add 'readonly' property, 'readonly' method and 'onChange' event.
|
||||
|
||||
Version 1.3.5
|
||||
-------------
|
||||
* Bug
|
||||
* searchbox: The 'searcher' function can not offer 'name' parameter value correctly. fixed.
|
||||
* combo: The 'isValid' method can not return boolean value. fixed.
|
||||
* combo: Clicking combo will trigger the 'onHidePanel' event of other combo components that have hidden drop-down panels. fixed.
|
||||
* combogrid: Some methods can not inherit from combo. fixed.
|
||||
* Improvement
|
||||
* datagrid: Improve performance on checking rows.
|
||||
* menu: Allows to append a menu separator.
|
||||
* menu: Add 'hideOnUnhover' property to indicate if the menu should be hidden when mouse exits it.
|
||||
* slider: Add 'clear' and 'reset' methods.
|
||||
* tabs: Add 'unselect' method that will trigger 'onUnselect' event.
|
||||
* tabs: Add 'selected' property to specify what tab panel will be opened.
|
||||
* tabs: The 'collapsible' property of tab panel is supported to determine if the tab panel can be collapsed.
|
||||
* tabs: Add 'showHeader' property, 'showHeader' and 'hideHeader' methods.
|
||||
* combobox: The 'disabled' property can be used to disable some items.
|
||||
* tree: Improve loading performance.
|
||||
* pagination: The 'layout' property can be used to customize the pagination layout.
|
||||
* accordion: Add 'unselect' method that will trigger 'onUnselect' event.
|
||||
* accordion: Add 'selected' and 'multiple' properties.
|
||||
* accordion: Add 'getSelections' method.
|
||||
* datebox: Add 'sharedCalendar' property that allows multiple datebox components share one calendar component.
|
||||
|
||||
Version 1.3.4
|
||||
-------------
|
||||
* Bug
|
||||
* combobox: The onLoadSuccess event fires when parsing empty local data. fixed.
|
||||
* form: Calling 'reset' method can not reset datebox field. fixed.
|
||||
* Improvement
|
||||
* mobile: The context menu and double click features are supported on mobile devices.
|
||||
* combobox: The 'groupField' and 'groupFormatter' options are available to display items in groups.
|
||||
* tree: When append or insert nodes, the 'data' parameter accepts one or more nodes data.
|
||||
* tree: The 'getChecked' method accepts a single 'state' or an array of 'state'.
|
||||
* tree: Add 'scrollTo' method.
|
||||
* datagrid: The 'multiSort' property is added to support multiple column sorting.
|
||||
* datagrid: The 'rowStyler' and column 'styler' can return CSS class name or inline styles.
|
||||
* treegrid: Add 'load' method to load data and navigate to the first page.
|
||||
* tabs: Add 'tabWidth' and 'tabHeight' properties.
|
||||
* validatebox: The 'novalidate' property is available to indicate whether to perform the validation.
|
||||
* validatebox: Add 'enableValidation' and 'disableValidation' methods.
|
||||
* form: Add 'enableValidation' and 'disableValidation' methods.
|
||||
* slider: Add 'onComplete' event.
|
||||
* pagination: The 'buttons' property accepts the existing element.
|
||||
|
||||
Version 1.3.3
|
||||
-------------
|
||||
* Bug
|
||||
* datagrid: Some style features are not supported by column styler function. fixed.
|
||||
* datagrid: IE 31 stylesheet limit. fixed.
|
||||
* treegrid: Some style features are not supported by column styler function. fixed.
|
||||
* menu: The auto width of menu item displays incorrect in ie6. fixed.
|
||||
* combo: The 'onHidePanel' event can not fire when clicked outside the combo area. fixed.
|
||||
* Improvement
|
||||
* datagrid: Add 'scrollTo' and 'highlightRow' methods.
|
||||
* treegrid: Enable treegrid to parse data from <tbody> element.
|
||||
* combo: Add 'selectOnNavigation' and 'readonly' options.
|
||||
* combobox: Add 'loadFilter' option to allow users to change data format before loading into combobox.
|
||||
* tree: Add 'onBeforeDrop' callback event.
|
||||
* validatebox: Dependent on tooltip plugin now, add 'deltaX' property.
|
||||
* numberbox: The 'filter' options can be used to determine if the key pressed was accepted.
|
||||
* linkbutton: The group button is available.
|
||||
* layout: The 'minWidth','maxWidth','minHeight','maxHeight' and 'collapsible' properties are available for region panel.
|
||||
* New Plugins
|
||||
* tooltip: Display a popup message when moving mouse over an element.
|
||||
|
||||
Version 1.3.2
|
||||
-------------
|
||||
* Bug
|
||||
* datagrid: The loading message window can not be centered when changing the width of datagrid. fixed.
|
||||
* treegrid: The 'mergeCells' method can not work normally. fixed.
|
||||
* propertygrid: Calling 'endEdit' method to stop editing a row will cause errors. fixed.
|
||||
* tree: Can not load empty data when 'lines' property set to true. fixed.
|
||||
* Improvement
|
||||
* RTL feature is supported now.
|
||||
* tabs: Add 'scrollBy' method to scroll the tab header by the specified amount of pixels
|
||||
* tabs: Add 'toolPosition' property to set tab tools to left or right.
|
||||
* tabs: Add 'tabPosition' property to define the tab position, possible values are: 'top','bottom','left','right'.
|
||||
* datagrid: Add a column level property 'order' that allows users to define different default sort order per column.
|
||||
* datagrid: Add a column level property 'halign' that allows users to define how to align the column header.
|
||||
* datagrid: Add 'resizeHandle' property to define the resizing column position, by grabbing the left or right edge of the column.
|
||||
* datagrid: Add 'freezeRow' method to freeze some rows that will always be displayed at the top when the datagrid is scrolled down.
|
||||
* datagrid: Add 'clearChecked' method to clear all checked records.
|
||||
* datagrid: Add 'data' property to initialize the datagrid data.
|
||||
* linkbutton: Add 'iconAlgin' property to define the icon position, supported values are: 'left','right'.
|
||||
* menu: Add 'minWidth' property.
|
||||
* menu: The menu width can be automatically calculated.
|
||||
* tree: New events are available including 'onBeforeDrag','onStartDrag','onDragEnter','onDragOver','onDragLeave',etc.
|
||||
* combo: Add 'height' property to allow users to define the height of combo.
|
||||
* combo: Add 'reset' method.
|
||||
* numberbox: Add 'reset' method.
|
||||
* spinner: Add 'reset' method.
|
||||
* spinner: Add 'height' property to allow users to define the height of spinner.
|
||||
* searchbox: Add 'height' property to allow users to define the height of searchbox.
|
||||
* form: Add 'reset' method.
|
||||
* validatebox: Add 'delay' property to delay validating from the last inputting value.
|
||||
* validatebox: Add 'tipPosition' property to define the tip position, supported values are: 'left','right'.
|
||||
* validatebox: Multiple validate rules on a field is supported now.
|
||||
* slider: Add 'reversed' property to determine if the min value and max value will switch their positions.
|
||||
* progressbar: Add 'height' property to allow users to define the height of progressbar.
|
||||
|
||||
Version 1.3.1
|
||||
-------------
|
||||
* Bug
|
||||
* datagrid: Setting the 'pageNumber' property is not valid. fixed.
|
||||
* datagrid: The id attribute of rows isn't adjusted properly while calling 'insertRow' or 'deleteRow' method.
|
||||
* dialog: When load content from 'href', the script will run twice. fixed.
|
||||
* propertygrid: The editors that extended from combo can not accept its changed value. fixed.
|
||||
* Improvement
|
||||
* droppable: Add 'disabled' property.
|
||||
* droppable: Add 'options','enable' and 'disable' methods.
|
||||
* tabs: The tab panel tools can be changed by calling 'update' method.
|
||||
* messager: When show a message window, the user can define the window position by applying 'style' property.
|
||||
* window: Prevent script on window body from running twice.
|
||||
* window: Add 'hcenter','vcenter' and 'center' methods.
|
||||
* tree: Add 'onBeforeCheck' callback event.
|
||||
* tree: Extend the 'getChecked' method to allow users to get 'checked','unchecked' or 'indeterminate' nodes.
|
||||
* treegrid: Add 'update' method to update a specified node.
|
||||
* treegrid: Add 'insert' method to insert a new node.
|
||||
* treegrid: Add 'pop' method to remove a node and get the removed node data.
|
||||
|
||||
Version 1.3
|
||||
-----------
|
||||
* Bug
|
||||
* combogrid: When set to 'remote' query mode, the 'queryParams' parameters can't be sent to server. fixed.
|
||||
* combotree: The tree nodes on drop-down panel can not be unchecked while calling 'clear' method. fixed.
|
||||
* datetimebox: Setting 'showSeconds' property to false cannot hide seconds info. fixed.
|
||||
* datagrid: Calling 'mergeCells' method can't auto resize the merged cell while header is hidden. fixed.
|
||||
* dialog: Set cache to false and load data via ajax, the content cannot be refreshed. fixed.
|
||||
* Improvement
|
||||
* The HTML5 'data-options' attribute is available for components to declare all custom options, including properties and events.
|
||||
* More detailed documentation is available.
|
||||
* panel: Prevent script on panel body from running twice.
|
||||
* accordion: Add 'getPanelIndex' method.
|
||||
* accordion: The tools can be added on panel header.
|
||||
* datetimebox: Add 'timeSeparator' option that allows users to define the time separator.
|
||||
* pagination: Add 'refresh' and 'select' methods.
|
||||
* datagrid: Auto resize the column width to fit the contents when the column width is not defined.
|
||||
* datagrid: Double click on the right border of columns to auto resize the columns to the contents in the columns.
|
||||
* datagrid: Add 'autoSizeColumn' method that allows users to adjust the column width to fit the contents.
|
||||
* datagrid: Add 'getChecked' method to get all rows where the checkbox has been checked.
|
||||
* datagrid: Add 'selectOnCheck' and 'checkOnSelect' properties and some checking methods to enhance the row selections.
|
||||
* datagrid: Add 'pagePosition' property to allow users to display pager bar at either top,bottom or both places of the grid.
|
||||
* datagrid: The buffer view and virtual scroll view are supported to display large amounts of records without pagination.
|
||||
* tabs: Add 'disableTab' and 'enableTab' methods to allow users to disable or enable a tab panel.
|
||||
|
||||
Version 1.2.6
|
||||
-------------
|
||||
* Bug
|
||||
* tabs: Call 'add' method with 'selected:false' option, the added tab panel is always selected. fixed.
|
||||
* treegrid: The 'onSelect' and 'onUnselect' events can't be triggered. fixed.
|
||||
* treegrid: Cannot display zero value field. fixed.
|
||||
* Improvement
|
||||
* propertygrid: Add 'expandGroup' and 'collapseGroup' methods.
|
||||
* layout: Allow users to create collapsed layout panels by assigning 'collapsed' property to true.
|
||||
* layout: Add 'add' and 'remove' methods that allow users to dynamically add or remove region panel.
|
||||
* layout: Additional tool icons can be added on region panel header.
|
||||
* calendar: Add 'firstDay' option that allow users to set first day of week. Sunday is 0, Monday is 1, ...
|
||||
* tree: Add 'lines' option, true to display tree lines.
|
||||
* tree: Add 'loadFilter' option that allow users to change data format before loading into the tree.
|
||||
* tree: Add 'loader' option that allow users to define how to load data from remote server.
|
||||
* treegrid: Add 'onClickCell' and 'onDblClickCell' callback function options.
|
||||
* datagrid: Add 'autoRowHeight' property that allow users to determine if set the row height based on the contents of that row.
|
||||
* datagrid: Improve performance to load large data set.
|
||||
* datagrid: Add 'loader' option that allow users to define how to load data from remote server.
|
||||
* treegrid: Add 'loader' option that allow users to define how to load data from remote server.
|
||||
* combobox: Add 'onBeforeLoad' callback event function.
|
||||
* combobox: Add 'loader' option that allow users to define how to load data from remote server.
|
||||
* Add support for other loading mode such as dwr,xml,etc.
|
||||
* New Plugins
|
||||
* slider: Allows the user to choose a numeric value from a finite range.
|
||||
|
||||
Version 1.2.5
|
||||
-------------
|
||||
* Bug
|
||||
* tabs: When add a new tab panel with href property, the content page is loaded twice. fixed.
|
||||
* form: Failed to call 'load' method to load form input with complex name. fixed.
|
||||
* draggable: End drag in ie9, the cursor cannot be restored. fixed.
|
||||
* Improvement
|
||||
* panel: The tools can be defined via html markup.
|
||||
* tabs: Call 'close' method to close specified tab panel, users can pass tab title or index of tab panel. Other methods such 'select','getTab' and 'exists' are similar to 'close' method.
|
||||
* tabs: Add 'getTabIndex' method.
|
||||
* tabs: Users can define mini tools on tabs.
|
||||
* tree: The mouse must move a specified distance to begin drag and drop operation.
|
||||
* resizable: Add 'options','enable' and 'disable' methods.
|
||||
* numberbox: Allow users to change number format.
|
||||
* datagrid: The subgrid is supported now.
|
||||
* searchbox: Add 'selectName' method to select searching type name.
|
||||
|
||||
Version 1.2.4
|
||||
-------------
|
||||
* Bug
|
||||
* menu: The menu position is wrong when scroll bar appears. fixed.
|
||||
* accordion: Cannot display the default selected panel in jQuery 1.6.2. fixed.
|
||||
* tabs: Cannot display the default selected tab panel in jQuery 1.6.2. fixed.
|
||||
* Improvement
|
||||
* menu: Allow users to disable or enable menu item.
|
||||
* combo: Add 'delay' property to set the delay time to do searching from the last key input event.
|
||||
* treegrid: The 'getEditors' and 'getEditor' methods are supported now.
|
||||
* treegrid: The 'loadFilter' option is supported now.
|
||||
* messager: Add 'progress' method to display a message box with a progress bar.
|
||||
* panel: Add 'extractor' option to allow users to extract panel content from ajax response.
|
||||
* New Plugins
|
||||
* searchbox: Allow users to type words into box and do searching operation.
|
||||
* progressbar: To display the progress of a task.
|
||||
|
||||
Version 1.2.3
|
||||
-------------
|
||||
* Bug
|
||||
* window: Cannot resize the window with iframe content. fixed.
|
||||
* tree: The node will be removed when dragging to its child. fixed.
|
||||
* combogrid: The onChange event fires multiple times. fixed.
|
||||
* accordion: Cannot add batch new panels when animate property is set to true. fixed.
|
||||
* Improvement
|
||||
* treegrid: The footer row and row styler features are supported now.
|
||||
* treegrid: Add 'getLevel','reloadFooter','getFooterRows' methods.
|
||||
* treegrid: Support root nodes pagination and editable features.
|
||||
* datagrid: Add 'getFooterRows','reloadFooter','insertRow' methods and improve editing performance.
|
||||
* datagrid: Add 'loadFilter' option that allow users to change original source data to standard data format.
|
||||
* draggable: Add 'onBeforeDrag' callback event function.
|
||||
* validatebox: Add 'remote' validation type.
|
||||
* combobox: Add 'method' option.
|
||||
* New Plugins
|
||||
* propertygrid: Allow users to edit property value in datagrid.
|
||||
|
||||
Version 1.2.2
|
||||
-------------
|
||||
* Bug
|
||||
* datagrid: Apply fitColumns cannot work fine while set checkbox column. fixed.
|
||||
* datagrid: The validateRow method cannot return boolean type value. fixed.
|
||||
* numberbox: Cannot fix value in chrome when min or max property isn't defined. fixed.
|
||||
* Improvement
|
||||
* menu: Add some crud methods.
|
||||
* combo: Add hasDownArrow property to determine whether to display the down arrow button.
|
||||
* tree: Supports inline editing.
|
||||
* calendar: Add some useful methods such as 'resize', 'moveTo' etc.
|
||||
* timespinner: Add some useful methods.
|
||||
* datebox: Refactoring based on combo and calendar plugin now.
|
||||
* datagrid: Allow users to change row style in some conditions.
|
||||
* datagrid: Users can use the footer row to display summary information.
|
||||
* New Plugins
|
||||
* datetimebox: Combines datebox with timespinner component.
|
||||
|
||||
Version 1.2.1
|
||||
-------------
|
||||
* Bug
|
||||
* easyloader: Some dependencies cannot be loaded by their order. fixed.
|
||||
* tree: The checkbox is setted incorrectly when removing a node. fixed.
|
||||
* dialog: The dialog layout incorrectly when 'closed' property is setted to true. fixed.
|
||||
* Improvement
|
||||
* parser: Add onComplete callback function that can indicate whether the parse action is complete.
|
||||
* menu: Add onClick callback function and some other methods.
|
||||
* tree: Add some useful methods.
|
||||
* tree: Drag and Drop feature is supported now.
|
||||
* tree: Add onContextMenu callback function.
|
||||
* tabs: Add onContextMenu callback function.
|
||||
* tabs: Add 'tools' property that can create buttons on right bar.
|
||||
* datagrid: Add onHeaderContextMenu and onRowContextMenu callback functions.
|
||||
* datagrid: Custom view is supported.
|
||||
* treegrid: Add onContextMenu callback function and append,remove methods.
|
||||
|
||||
Version 1.2
|
||||
-------------
|
||||
* Improvement
|
||||
* tree: Add cascadeCheck,onlyLeafCheck properties and select event.
|
||||
* combobox: Enable multiple selection.
|
||||
* combotree: Enable multiple selection.
|
||||
* tabs: Remember the trace of selection, when current tab panel is closed, the previous selected tab will be selected.
|
||||
* datagrid: Extend from panel, so many properties defined in panel can be used for datagrid.
|
||||
* New Plugins
|
||||
* treegrid: Represent tabular data in hierarchical view, combines tree view and datagrid.
|
||||
* combo: The basic component that allow user to extend their combo component such as combobox,combotree,etc.
|
||||
* combogrid: Combines combobox with drop-down datagrid component.
|
||||
* spinner: The basic plugin to create numberspinner,timespinner,etc.
|
||||
* numberspinner: The numberbox that allow user to change value by clicking up and down spin buttons.
|
||||
* timespinner: The time selector that allow user to quickly inc/dec a time.
|
||||
|
||||
Version 1.1.2
|
||||
-------------
|
||||
* Bug
|
||||
* messager: When call show method in layout, the message window will be blocked. fixed.
|
||||
* Improvement
|
||||
* datagrid: Add validateRow method, remember the current editing row status when do editing action.
|
||||
* datagrid: Add the ability to create merged cells.
|
||||
* form: Add callback functions when loading data.
|
||||
* panel,window,dialog: Add maximize,minimize,restore,collapse,expand methods.
|
||||
* panel,tabs,accordion: The lazy loading feature is supported.
|
||||
* tabs: Add getSelected,update,getTab methods.
|
||||
* accordion: Add crud methods.
|
||||
* linkbutton: Accept an id option to set the id attribute.
|
||||
* tree: Enhance tree node operation.
|
||||
|
||||
Version 1.1.1
|
||||
-------------
|
||||
* Bug
|
||||
* form: Cannot clear the value of combobox and combotree component. fixed.
|
||||
* Improvement
|
||||
* tree: Add some useful methods such as 'getRoot','getChildren','update',etc.
|
||||
* datagrid: Add editable feature, improve performance while loading data.
|
||||
* datebox: Add destroy method.
|
||||
* combobox: Add destroy and clear method.
|
||||
* combotree: Add destroy and clear method.
|
||||
|
||||
Version 1.1
|
||||
-------------
|
||||
* Bug
|
||||
* messager: When call show method with timeout property setted, an error occurs while clicking the close button. fixed.
|
||||
* combobox: The editable property of combobox plugin is invalid. fixed.
|
||||
* window: The proxy box will not be removed when dragging or resizing exceed browser border in ie. fixed.
|
||||
* Improvement
|
||||
* menu: The menu item can use <a> markup to display a different page.
|
||||
* tree: The tree node can use <a> markup to act as a tree menu.
|
||||
* pagination: Add some event on refresh button and page list.
|
||||
* datagrid: Add a 'param' parameter for reload method, with which users can pass query parameter when reload data.
|
||||
* numberbox: Add required validation support, the usage is same as validatebox plugin.
|
||||
* combobox: Add required validation support.
|
||||
* combotree: Add required validation support.
|
||||
* layout: Add some method that can get a region panel and attach event handlers.
|
||||
* New Plugins
|
||||
* droppable: A droppable plugin that supports drag drop operation.
|
||||
* calendar: A calendar plugin that can either be embedded within a page or popup.
|
||||
* datebox: Combines a textbox with a calendar that let users to select date.
|
||||
* easyloader: A JavaScript loader that allows you to load plugin and their dependencies into your page.
|
||||
|
||||
Version 1.0.5
|
||||
* Bug
|
||||
* panel: The fit property of panel performs incorrectly. fixed.
|
||||
* Improvement
|
||||
* menu: Add a href attribute for menu item, with which user can display a different page in the current browser window.
|
||||
* form: Add a validate method to do validation for validatebox component.
|
||||
* dialog: The dialog can read collapsible,minimizable,maximizable and resizable attribute from markup.
|
||||
* New Plugins
|
||||
* validatebox: A validation plugin that checks to make sure the user's input value is valid.
|
||||
|
||||
Version 1.0.4
|
||||
-------------
|
||||
* Bug
|
||||
* panel: When panel is invisible, it is abnormal when resized. fixed.
|
||||
* panel: Memory leak in method 'destroy'. fixed.
|
||||
* messager: Memory leak when messager box is closed. fixed.
|
||||
* dialog: No onLoad event occurs when loading remote data. fixed.
|
||||
* Improvement
|
||||
* panel: Add method 'setTitle'.
|
||||
* window: Add method 'setTitle'.
|
||||
* dialog: Add method 'setTitle'.
|
||||
* combotree: Add method 'getValue'.
|
||||
* combobox: Add method 'getValue'.
|
||||
* form: The 'load' method can load data and fill combobox and combotree field correctly.
|
||||
|
||||
Version 1.0.3
|
||||
-------------
|
||||
* Bug
|
||||
* menu: When menu is show in a DIV container, it will be cropped. fixed.
|
||||
* layout: If you collpase a region panel and then expand it immediately, the region panel will not show normally. fixed.
|
||||
* accordion: If no panel selected then the first one will become selected and the first panel's body height will not set correctly. fixed.
|
||||
* Improvement
|
||||
* tree: Add some methods to support CRUD operation.
|
||||
* datagrid: Toolbar can accept a new property named 'disabled' to disable the specified tool button.
|
||||
* New Plugins
|
||||
* combobox: Combines a textbox with a list of options that users are able to choose from.
|
||||
* combotree: Combines combobox with drop-down tree component.
|
||||
* numberbox: Make input element can only enter number char.
|
||||
* dialog: rewrite the dialog plugin, dialog can contains toolbar and buttons.
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>12 Hour Format - jQuery EasyUI Demo</title>
|
||||
<link rel="stylesheet" type="text/css" href="../../themes/default/easyui.css">
|
||||
<link rel="stylesheet" type="text/css" href="../../themes/icon.css">
|
||||
<link rel="stylesheet" type="text/css" href="../demo.css">
|
||||
<script type="text/javascript" src="../../jquery.min.js"></script>
|
||||
<script type="text/javascript" src="../../jquery.easyui.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h2>12 Hour Format</h2>
|
||||
<p>Displays in a 12 hour format.</p>
|
||||
<div style="margin:20px 0;"></div>
|
||||
<div class="easyui-panel" style="width:100%;max-width:400px;padding:30px 60px;">
|
||||
<div style="margin-bottom:20px">
|
||||
<input class="easyui-timespinner" label="Start Time:" labelPosition="top" value="01:20" hour12="true" style="width:100%;">
|
||||
</div>
|
||||
<div style="margin-bottom:20px">
|
||||
<input class="easyui-timespinner" label="End Time:" labelPosition="top" value="14:45" hour12="true" style="width:100%;">
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
This license agreement refers to EasyUI for jQuery software - Freeware License.
|
||||
|
||||
EasyUI Team grants to you a limited, non-transferable and non-exclusive right to use, royalty-free, copy and redistribute the software.
|
||||
|
||||
The licensee has the right to use the software for a non-profit projects/sites. There are no limitations on the number of non-profit projects/sites you can use the software in, you can use it on any number of non-profit projects/sites you need. There is no time limit, you can use the software for any period of time you need. There is no restriction while you are developing your solution. There are no royalties of any kind involved.
|
||||
|
||||
The governmental entities are not allowed to use this freeware license.
|
||||
|
||||
The licensee is allowed to copy and redistribute the software but you may not:
|
||||
a) Distribute the modified software or part(s) of it as a standalone application.
|
||||
b) Sublicense, rent, lease or lend any portion of the software as a standalone application.
|
||||
c) Modify or remove any copyright notices from any of the software files.
|
||||
|
||||
EasyUI Team retains all ownership rights to the software.
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
Current Version: 1.7.0
|
||||
======================
|
||||
This software is allowed to use under freeware license or you need to buy commercial license for better support or other purpose.
|
||||
Please contact us at info@jeasyui.com
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
.panel {
|
||||
overflow: hidden;
|
||||
/*overflow: hidden;*/
|
||||
text-align: left;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
|
|
@ -37,11 +37,7 @@
|
|||
border-bottom-width: 0;
|
||||
}
|
||||
.panel-with-icon {
|
||||
<<<<<<< HEAD
|
||||
padding-left: 20px;
|
||||
=======
|
||||
padding-left: 10px;
|
||||
>>>>>>> 0ed848ff177ad9c427f58c714cb22f8012e2c913
|
||||
padding-left: 20px;
|
||||
}
|
||||
.panel-icon,
|
||||
.panel-tool {
|
||||
|
|
@ -3411,7 +3407,7 @@
|
|||
height: 40px;
|
||||
line-height: 30px;
|
||||
color: #313030;
|
||||
margin-left: 25px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
.sidemenu .accordion-header:hover {
|
||||
background: #0066cc;
|
||||
|
|
|
|||
|
|
@ -148,6 +148,9 @@
|
|||
.icon-edu{
|
||||
background:url('icons/edu.png') no-repeat center center;
|
||||
}
|
||||
.icon-gmt {
|
||||
background: url('icons/gmt.png') no-repeat center center;
|
||||
}
|
||||
.icon-regulationstype {
|
||||
background: url('icons/regulationstype.png') no-repeat center center;
|
||||
}
|
||||
|
|
@ -163,7 +166,9 @@
|
|||
.icon-taskdo{
|
||||
background:url('icons/taskdo.png') no-repeat center center;
|
||||
}
|
||||
|
||||
.icon-bhr {
|
||||
background: url('icons/behv.png') no-repeat center center;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 1.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 859 B |
|
|
@ -0,0 +1,659 @@
|
|||
*{
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.f-block{
|
||||
display: block;
|
||||
position: relative;
|
||||
}
|
||||
.f-row{
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -moz-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
position: relative;
|
||||
}
|
||||
.f-column{
|
||||
display: -webkit-box;
|
||||
display: -webkit-flex;
|
||||
display: -moz-flex;
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
-webkit-box-direction: normal;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-flex-direction: column;
|
||||
-moz-flex-direction: column;
|
||||
-ms-flex-direction: column;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
}
|
||||
.f-inline-row{
|
||||
white-space: nowrap;
|
||||
display: -webkit-inline-box;
|
||||
display: -ms-inline-box;
|
||||
display: inline-flex;
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
align-items: stretch;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
}
|
||||
.f-content-center{
|
||||
-webkit-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
-webkit-justify-content: center;
|
||||
-moz-justify-content: center;
|
||||
justify-content: center;
|
||||
-webkit-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
-webkit-align-items: center;
|
||||
-moz-align-items: center;
|
||||
align-items: center;
|
||||
}
|
||||
.f-full{
|
||||
-webkit-box-flex: 1 1 auto;
|
||||
-ms-flex: 1 1 auto;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
.f-hide{
|
||||
display: none;
|
||||
}
|
||||
.f-order0{
|
||||
order: 0;
|
||||
}
|
||||
.f-order1{
|
||||
order: 1;
|
||||
}
|
||||
.f-order2{
|
||||
order: 2;
|
||||
}
|
||||
.f-order3{
|
||||
order: 3;
|
||||
}
|
||||
.f-order4{
|
||||
order: 4;
|
||||
}
|
||||
.f-order5{
|
||||
order: 5;
|
||||
}
|
||||
.f-order6{
|
||||
order: 6;
|
||||
}
|
||||
.f-order7{
|
||||
order: 7;
|
||||
}
|
||||
.f-order8{
|
||||
order: 8;
|
||||
}
|
||||
.f-noshrink{
|
||||
-webkit-flex-shrink: 0;
|
||||
-moz-flex-shrink: 0;
|
||||
-ms-flex-negative: 0;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.f-animate{
|
||||
transition: all .3s;
|
||||
}
|
||||
.f-field{
|
||||
width: 12em;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
.scroll-body{
|
||||
overflow: auto;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.textbox .textbox-text{
|
||||
width: 100%;
|
||||
height: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
.textbox-addon{
|
||||
align-items: center;
|
||||
}
|
||||
.textbox textarea.textbox-text{
|
||||
height: auto;
|
||||
overflow: auto;
|
||||
}
|
||||
.textbox-disabled>.textbox-addon .textbox-icon,
|
||||
.textbox-readonly>.textbox-addon .textbox-icon{
|
||||
cursor: default;
|
||||
}
|
||||
.textbox-disabled>.textbox-addon .textbox-icon:hover,
|
||||
.textbox-readonly>.textbox-addon .textbox-icon:hover{
|
||||
opacity: 0.6;
|
||||
cursor: default;
|
||||
}
|
||||
.textbox-addon .textbox-icon{
|
||||
width: 26px;
|
||||
height: 18px;
|
||||
}
|
||||
|
||||
.spinner .textbox-text{
|
||||
height: auto;
|
||||
}
|
||||
.spinner-button-left,.spinner-button-right{
|
||||
width: 26px;
|
||||
}
|
||||
.spinner-button-updown{
|
||||
width: 26px;
|
||||
}
|
||||
.spinner-button-top,.spinner-button-bottom{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 26px;
|
||||
}
|
||||
.spinner-button-top{
|
||||
top: 0;
|
||||
}
|
||||
.spinner-button-bottom{
|
||||
top: auto;
|
||||
bottom: 0;
|
||||
}
|
||||
.spinner-button{
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
left: 50%;
|
||||
margin-left: -8px;
|
||||
top: 50%;
|
||||
margin-top: -8px;
|
||||
}
|
||||
.spinner-arrow{
|
||||
cursor: pointer;
|
||||
opacity: 0.6;
|
||||
}
|
||||
|
||||
.textbox-disabled .spinner-arrow:hover,
|
||||
.textbox-readonly .spinner-arrow:hover
|
||||
{
|
||||
opacity: 0.6;
|
||||
cursor: default;
|
||||
}
|
||||
.textbox-readonly .spinner-arrow .spinner-arrow-up:hover,
|
||||
.textbox-disabled .spinner-arrow .spinner-arrow-up:hover,
|
||||
.textbox-readonly .spinner-arrow .spinner-arrow-down:hover,
|
||||
.textbox-disabled .spinner-arrow .spinner-arrow-down:hover
|
||||
{
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.l-btn{
|
||||
width1: 100%;
|
||||
}
|
||||
.l-btn-empty{
|
||||
height: 28px;
|
||||
}
|
||||
.l-btn-large .l-btn-empty{
|
||||
height: 44px;
|
||||
}
|
||||
.l-btn-left{
|
||||
overflow: visible;
|
||||
}
|
||||
.m-btn .l-btn-left .m-btn-line{
|
||||
top: -100px;
|
||||
width: 36px;
|
||||
right: -20px;
|
||||
}
|
||||
.button-group .l-btn.f-inline-row{
|
||||
margin-left: -1px;
|
||||
}
|
||||
.button-group .l-btn:hover{
|
||||
z-index: 99;
|
||||
}
|
||||
.button-group .l-btn:not(:first-child):not(:last-child){
|
||||
border-radius: 0;
|
||||
}
|
||||
.button-group .l-btn:first-child{
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
}
|
||||
.button-group .l-btn:last-child{
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
}
|
||||
|
||||
.switchbutton{
|
||||
width: 70px;
|
||||
height: 30px;
|
||||
}
|
||||
.switchbutton-on,.switchbutton-off{
|
||||
position: absolute;
|
||||
left: 0;
|
||||
width: calc(100% - 15px);
|
||||
height: 100%;
|
||||
}
|
||||
.switchbutton-on span,.switchbutton-off span,.switchbutton-handle span{
|
||||
height: 100%;
|
||||
}
|
||||
.switchbutton-on span{
|
||||
text-indent: -15px;
|
||||
}
|
||||
.switchbutton-off span{
|
||||
text-indent: 15px;
|
||||
}
|
||||
.switchbutton-off{
|
||||
left: calc(100% - 15px);
|
||||
}
|
||||
.switchbutton-handle{
|
||||
width: 30px;
|
||||
left: auto;
|
||||
right: 0;
|
||||
z-index: 9;
|
||||
}
|
||||
.switchbutton-inner{
|
||||
transition: all 200ms ease-out;
|
||||
overflow: visible;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
top: -1px;
|
||||
bottom: -1px;
|
||||
left: calc(-100% + 30px);
|
||||
right: auto;
|
||||
}
|
||||
.switchbutton-checked .switchbutton-inner{
|
||||
left: 0;
|
||||
}
|
||||
.draggable-reverting{
|
||||
transition: all 200ms ease-out;
|
||||
}
|
||||
.slider-h .slider-tip{
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
.slider-h .slider-rulelabel span{
|
||||
transform: translateX(-50%);
|
||||
}
|
||||
.slider-v .slider-tip{
|
||||
margin-top: 0;
|
||||
transform: translate(-100%,-50%);
|
||||
}
|
||||
.slider-v .slider-rulelabel span{
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
.slider-v .slider-inner{
|
||||
height: auto;
|
||||
}
|
||||
|
||||
|
||||
.panel{
|
||||
position:relative;
|
||||
}
|
||||
.panel-title{
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
.panel-footer-fixed{
|
||||
position:absolute;
|
||||
width:100%;
|
||||
bottom:0;
|
||||
}
|
||||
.window{
|
||||
position: absolute;
|
||||
}
|
||||
.window-mask{
|
||||
position: fixed;
|
||||
}
|
||||
.window .window-footer{
|
||||
top: 0;
|
||||
}
|
||||
.dialog-toolbar{
|
||||
border-width: 0 0 1px 0;
|
||||
}
|
||||
.dialog-button{
|
||||
border-width: 1px 0 0 0;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.tabs{
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
.tabs-scrollable{
|
||||
transition: left 400ms, right 400ms;
|
||||
position: absolute;
|
||||
width: auto;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.tabs li{
|
||||
display: inherit;
|
||||
}
|
||||
.tabs li .tabs-inner{
|
||||
height: auto;
|
||||
line-height: normal;
|
||||
display: inherit;
|
||||
overflow: hidden;
|
||||
}
|
||||
.tabs-title{
|
||||
display: inherit;
|
||||
align-items: center;
|
||||
line-height: normal;
|
||||
}
|
||||
.tabs-close{
|
||||
outline: none;
|
||||
}
|
||||
.tabs-scroller-left,.tabs-scroller-right{
|
||||
position: relative;
|
||||
display: block;
|
||||
width: 21px;
|
||||
height: 100%;
|
||||
}
|
||||
.tabs-header-left .tabs li{
|
||||
right: -1px;
|
||||
}
|
||||
.tabs-header-left .tabs li,.tabs-header-right .tabs li,
|
||||
.tabs-header-left .tabs li .tabs-inner,
|
||||
.tabs-header-right .tabs li .tabs-inner{
|
||||
display: inherit;
|
||||
}
|
||||
|
||||
.combo-panel{
|
||||
position: absolute;
|
||||
height: 200px;
|
||||
z-index: 9999;
|
||||
}
|
||||
.combo-panel .tree,
|
||||
.combo-panel eui-datagrid,
|
||||
.combo-panel eui-treegrid{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.combobox-item{
|
||||
padding: 6px 4px;
|
||||
line-height: 20px;
|
||||
}
|
||||
.tagbox.f-field{
|
||||
height: auto;
|
||||
}
|
||||
.tagbox-labels{
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
.tagbox-label{
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
.tagbox .textbox-text{
|
||||
width: 50px;
|
||||
max-width: 100%;
|
||||
margin-top: 4px;
|
||||
padding-top: 0;
|
||||
padding-bottom: 0;
|
||||
height: 20px;
|
||||
line-height: 20px;
|
||||
}
|
||||
.tree-editing.tree-title{
|
||||
position: relative;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
height: 26px;
|
||||
line-height: 26px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.tree-editing.tree-title > *{
|
||||
flex: 1 1 auto;
|
||||
height: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
.tree-editing.tree-title .textbox-text{
|
||||
height: 24px;
|
||||
line-height: 24px;
|
||||
}
|
||||
.datagrid,
|
||||
.datagrid-view,.datagrid-view1,.datagrid-view2{
|
||||
position: relative;
|
||||
}
|
||||
.datagrid-vbody{
|
||||
overflow: hidden;
|
||||
}
|
||||
.datagrid-view3{
|
||||
margin-left: -1px;
|
||||
}
|
||||
.datagrid-view3 .datagrid-body{
|
||||
overflow: hidden;
|
||||
}
|
||||
.datagrid-view3 .datagrid-body-inner{
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
.datagrid-view3 .datagrid-header td,
|
||||
.datagrid-view3 .datagrid-body td,
|
||||
.datagrid-view3 .datagrid-footer td {
|
||||
border-width: 0 0 1px 1px;
|
||||
}
|
||||
.datagrid-htable,.datagrid-btable,.datagrid-ftable{
|
||||
table-layout: fixed;
|
||||
width: 100%;
|
||||
}
|
||||
.datagrid-htable{
|
||||
height: 100%;
|
||||
}
|
||||
.datagrid-header .datagrid-header,
|
||||
.datagrid-footer .datagrid-header{
|
||||
border-width: 0 0 0 1px;
|
||||
}
|
||||
.datagrid-header-inner,.datagrid-footer-inner{
|
||||
overflow: hidden;
|
||||
}
|
||||
.datagrid-header-row, .datagrid-row{
|
||||
height: 32px;
|
||||
}
|
||||
.datagrid-header td.datagrid-field-td{
|
||||
border-bottom: 0;
|
||||
}
|
||||
.datagrid-cell{
|
||||
text-align: left;
|
||||
height: auto;
|
||||
font-size: inherit;
|
||||
}
|
||||
.datagrid-cell-group{
|
||||
text-align: center;
|
||||
}
|
||||
.datagrid .datagrid-pager{
|
||||
padding: 2px 4px;
|
||||
display: inherit;
|
||||
}
|
||||
.datagrid-loading{
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
.datagrid-mask{
|
||||
display: block;
|
||||
}
|
||||
.datagrid-mask-msg{
|
||||
display: block;
|
||||
position: static;
|
||||
line-height: 36px;
|
||||
height: 40px;
|
||||
margin: 0;
|
||||
padding: 0 5px 0 30px;
|
||||
z-index: 9;
|
||||
}
|
||||
.datagrid-body .datagrid-td-group{
|
||||
border-left-color: transparent;
|
||||
border-right-color: transparent;
|
||||
}
|
||||
.datagrid-group-expander{
|
||||
cursor: pointer;
|
||||
}
|
||||
.datagrid-row-expander{
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 18px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.datagrid-group-title{
|
||||
align-self: center;
|
||||
padding: 0 4px;
|
||||
white-space: nowrap;
|
||||
word-break: normal;
|
||||
position: relative;
|
||||
}
|
||||
.datagrid-editable> .f-field,
|
||||
.datagrid-editable> *{
|
||||
width: 100%;
|
||||
height: 31px;
|
||||
}
|
||||
.datagrid-editable .textbox, .datagrid-editable .textbox-text{
|
||||
border-radius: 0;
|
||||
}
|
||||
.datagrid-filter-row .textbox{
|
||||
border-radius: 0;
|
||||
}
|
||||
.datagrid-filter-c{
|
||||
padding: 4px;
|
||||
height: 38px;
|
||||
}
|
||||
.datagrid-filter-c> .f-field,
|
||||
.datagrid-filter-c> *{
|
||||
height: 30px;
|
||||
}
|
||||
.datagrid-filter-c .datagrid-editable-input{
|
||||
width: 100%;
|
||||
}
|
||||
.datagrid-filter-btn{
|
||||
width: 30px;
|
||||
}
|
||||
.datagrid-filter-btn .textbox-icon{
|
||||
width: 28px;
|
||||
}
|
||||
.datagrid-filter-btn .textbox{
|
||||
background-color: transparent;
|
||||
}
|
||||
.datagrid-filter-btn-left{
|
||||
margin-right: 4px;
|
||||
}
|
||||
.datagrid-filter-btn-right{
|
||||
margin-left: 4px;
|
||||
}
|
||||
|
||||
.menu-inline{
|
||||
position: relative;
|
||||
display: inline;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.menu-inline> .menu-container{
|
||||
position: relative;
|
||||
}
|
||||
.menu-container{
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
min-width: 200px;
|
||||
}
|
||||
.menu{
|
||||
overflow: visible;
|
||||
}
|
||||
.menu-shadow{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.menu-item{
|
||||
overflow: visible;
|
||||
}
|
||||
.menu-text{
|
||||
height: 32px;
|
||||
line-height: 32px;
|
||||
float: none;
|
||||
}
|
||||
.menu-line{
|
||||
z-index: 9999999;
|
||||
height: 100%;
|
||||
}
|
||||
.menu-active{
|
||||
z-index: 99999999;
|
||||
}
|
||||
|
||||
.progressbar-value{
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.searchbox .textbox-button,
|
||||
.searchbox .textbox-button:hover{
|
||||
position: inherit;
|
||||
}
|
||||
|
||||
.calendar-content{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.calendar-menu{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.calendar-menu-month-inner{
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.radiobutton{
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
.checkbox{
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
.progressbar{
|
||||
height: 24px;
|
||||
}
|
||||
.pagination1{
|
||||
height: 34px;
|
||||
padding: 2px;
|
||||
}
|
||||
.layout{
|
||||
height: 100%;
|
||||
}
|
||||
.layout-mask{
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.layout-animate{
|
||||
transition: transform 400ms;
|
||||
}
|
||||
.layout-panel-north,.layout-panel-south{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.layout-panel-south{
|
||||
top: auto;
|
||||
bottom: 0;
|
||||
}
|
||||
.layout-panel-west,.layout-panel-east{
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
.layout-panel-east{
|
||||
left: auto;
|
||||
right: 0;
|
||||
}
|
||||
.layout-panel-west.layout-collapsed{
|
||||
transform: translate3d(-100%, 0, 0);
|
||||
}
|
||||
.layout-panel-east.layout-collapsed{
|
||||
transform: translate3d(100%, 0, 0)
|
||||
}
|
||||
.layout-panel-north.layout-collapsed{
|
||||
transform: translate3d(0, -100%, 0)
|
||||
}
|
||||
.layout-panel-south.layout-collapsed{
|
||||
transform: translate3d(0, 100%, 0)
|
||||
}
|
||||
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
|
|
@ -32,6 +32,17 @@ function canvasDataURL(path, obj, callback) {
|
|||
scale = w / h;
|
||||
w = obj.width || w;
|
||||
h = obj.height || (w / scale);
|
||||
if(w <= h ){
|
||||
if(w>640){
|
||||
w = 640
|
||||
h = w/scale
|
||||
}
|
||||
}else{
|
||||
if(h>640){
|
||||
h=640
|
||||
w = h*scale
|
||||
}
|
||||
}
|
||||
var quality = 0.7; // 默认图片质量为0.7
|
||||
//生成canvas
|
||||
var canvas = document.createElement('canvas');
|
||||
|
|
@ -45,9 +56,9 @@ function canvasDataURL(path, obj, callback) {
|
|||
canvas.setAttributeNode(anh);
|
||||
ctx.drawImage(that, 0, 0, w, h);
|
||||
// 图像质量
|
||||
if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
|
||||
quality = obj.quality;
|
||||
}
|
||||
// if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
|
||||
// quality = obj.quality;
|
||||
// }
|
||||
// quality值越小,所绘制出的图像越模糊
|
||||
var base64 = canvas.toDataURL('image/jpeg', quality);
|
||||
// 回调函数返回base64的值
|
||||
|
|
@ -62,7 +73,6 @@ function convertBase64UrlToBlob(urlData) {
|
|||
}
|
||||
return new Blob([u8arr], { type: mime });
|
||||
}
|
||||
|
||||
//取消上传
|
||||
function cancleUploadFile() {
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue