initial commit
							
								
								
									
										1018
									
								
								src/CenterPortal.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										244
									
								
								src/LHS.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,244 @@
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 | 
			
		||||
    <meta http-equiv="Cache-Control" content="no-cache"/>
 | 
			
		||||
    <title>数瑞标识解析系统</title>
 | 
			
		||||
    <script src="./jqueryui1.12/jquery-2.1.4.js"></script>
 | 
			
		||||
    <link href="./jqueryui1.12/jquery-ui.css" rel="stylesheet">
 | 
			
		||||
    <script src="./jqueryui1.12/jquery-ui.js"></script>
 | 
			
		||||
    <script src="./jqueryui1.12/jquery.ui.position.js"></script>
 | 
			
		||||
    <script src="./js/createWS.js"></script>
 | 
			
		||||
    <script src="./js/cryptico.js"></script>
 | 
			
		||||
    <script src="./js/commonutil.js"></script>
 | 
			
		||||
    <script src="./js/popper.min.js"></script>
 | 
			
		||||
    <script src="./js/bootstrap.min.js"></script>
 | 
			
		||||
    <script src="./js/bootstrap-select.min.js"></script>
 | 
			
		||||
 | 
			
		||||
    <script src="./js/sm2.js"></script>
 | 
			
		||||
    <link rel="stylesheet" type="text/css"
 | 
			
		||||
          href="./js/DataTables/datatables.min.css"/>
 | 
			
		||||
    <link rel="stylesheet" type="text/css"
 | 
			
		||||
          href="./js/DataTables/datatables.extra.css"/>
 | 
			
		||||
    <script type="text/javascript"
 | 
			
		||||
            src="./js/DataTables/jquery.dataTables.min.js"></script>
 | 
			
		||||
    <script type="text/javascript"
 | 
			
		||||
            src="./js/DataTables/dataTables.bootstrap4.min.js"></script>
 | 
			
		||||
 | 
			
		||||
    <script src="js/locallhs/initLocalLHS.js"></script>
 | 
			
		||||
    <script src="js/locallhs/behaviour.js"></script>
 | 
			
		||||
    <script src="js/locallhs/doAndRepoCount.js"></script>
 | 
			
		||||
 | 
			
		||||
	<script src="./js/ncconfig.js"></script>
 | 
			
		||||
    <script src="./js/echarts.min.js"></script>
 | 
			
		||||
    <script src="./js/echartsTheme.js"></script>
 | 
			
		||||
    <script src="./js/echarts-gl.min.js"></script>
 | 
			
		||||
    <script src="./js/vue.js"></script>
 | 
			
		||||
 | 
			
		||||
    <link rel="stylesheet" href="./css/bootstrap.min.css">
 | 
			
		||||
    <link rel="stylesheet" href="./css/loading.css">
 | 
			
		||||
    <link rel="stylesheet" href="./css/common.css">
 | 
			
		||||
    <link rel="stylesheet" href="./css/bootstrap-select.css"/>
 | 
			
		||||
</head>
 | 
			
		||||
<!-- background: #883939 ; -->
 | 
			
		||||
<body>
 | 
			
		||||
<header
 | 
			
		||||
        class="headerFooter navbar navbar-default navbar-fixed-top  navColor ">
 | 
			
		||||
    <div class="col-4">
 | 
			
		||||
        <a class="navbar-brand" href="#"> <img alt="Brand"
 | 
			
		||||
                                               src="./images/logo-1.png" style="height: 30px">
 | 
			
		||||
        </a> <span>数瑞标识解析系统</span>
 | 
			
		||||
    </div>
 | 
			
		||||
 | 
			
		||||
</header>
 | 
			
		||||
<div class="container-fluid " id="main">
 | 
			
		||||
    <div class="row h-100">
 | 
			
		||||
        <div class="col-sm-12 h-100" style="padding: 0; overflow-y: scroll;">
 | 
			
		||||
            <div class="tab-content" id="v-pills-tabContent">
 | 
			
		||||
                <div class="tab-pane fade show active" id="v-pills-dashboard"
 | 
			
		||||
                     role="tabpanel" aria-labelledby="v-pills-home-tab">
 | 
			
		||||
                    <div class="container">
 | 
			
		||||
                        <div class="row" style="padding-top: 30px">
 | 
			
		||||
                            <div class="col-sm-12">
 | 
			
		||||
                                <div class="card">
 | 
			
		||||
                                    <div class="card-body">
 | 
			
		||||
                                        <h5 class="card-title">解析</h5>
 | 
			
		||||
                                        <div class="card-body" id="analysisbody">
 | 
			
		||||
                                            <div class="d-flex justify-content-center">
 | 
			
		||||
                                                <div class='input-group mb-2'>
 | 
			
		||||
                                                    <input type='text' class='form-control' placeholder="请输入标识"
 | 
			
		||||
                                                           id='analysisInput'>
 | 
			
		||||
                                                    <div class='input-group-append'>
 | 
			
		||||
                                                        <button class='btn btn-outline-secondary' type='button'
 | 
			
		||||
                                                                id='analysisButton' onclick='analysisInit()'>解析
 | 
			
		||||
                                                        </button>
 | 
			
		||||
                                                    </div>
 | 
			
		||||
                                                </div>
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="row" style="margin-top: 30px">
 | 
			
		||||
                            <div class="col-sm-12">
 | 
			
		||||
                                <div class="card">
 | 
			
		||||
                                    <div class="card-body">
 | 
			
		||||
                                        <div class="card-title" style="margin-bottom: 34px">
 | 
			
		||||
                                            <h5 class="card-title" style="float:left">
 | 
			
		||||
                                                行为统计</h5>
 | 
			
		||||
                                            <div class="input-group mb-2" style="float:right;width:20%">
 | 
			
		||||
                                                <div class="input-group-prepend">
 | 
			
		||||
														<span class="input-group-text"
 | 
			
		||||
                                                              id="behaviourTime">时间</span>
 | 
			
		||||
                                                </div>
 | 
			
		||||
                                                <select class="custom-select" id="behaviourTimeSelect"
 | 
			
		||||
                                                        onchange="changeBehaviourTime(this.value)"
 | 
			
		||||
                                                        style="appearance:none;">
 | 
			
		||||
                                                    <option selected>365天</option>
 | 
			
		||||
                                                    <option selected>30天</option>
 | 
			
		||||
                                                    <option selected>7天</option>
 | 
			
		||||
                                                </select>
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                        <div class="container col-12" id="behaviourGraphDiv"
 | 
			
		||||
                                             style="min-height: 150px; padding: 0px">
 | 
			
		||||
                                            <div class="d-flex justify-content-center">
 | 
			
		||||
                                                <div class="spinner-border text-primary"
 | 
			
		||||
                                                     style="width: 4rem; height: 4rem;" role="status">
 | 
			
		||||
                                                    <span class="sr-only">Loading...</span>
 | 
			
		||||
                                                </div>
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="row" style="padding-top: 30px">
 | 
			
		||||
                            <div class="col-sm-6">
 | 
			
		||||
                                <div class="card">
 | 
			
		||||
                                    <div class="card-body">
 | 
			
		||||
                                        <div class="card-title" style="margin-bottom: 30px">
 | 
			
		||||
                                            <h5 class="card-title" style="float:left">DO标识列表</h5>
 | 
			
		||||
                                            <div class="input-group mb-2" style="float:right;width:30%">
 | 
			
		||||
                                                <div class="input-group-prepend">
 | 
			
		||||
															<span class="input-group-text">总数</span>
 | 
			
		||||
                                                </div>
 | 
			
		||||
                                                <input type="text" class="form-control" id="DOCount">
 | 
			
		||||
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                        <div class="card-body" id="DODiv">
 | 
			
		||||
                                            <div class="d-flex justify-content-center">
 | 
			
		||||
                                                <div class="spinner-border text-primary"
 | 
			
		||||
                                                     style="width: 4rem; height: 4rem;" role="status">
 | 
			
		||||
                                                    <span class="sr-only">Loading...</span>
 | 
			
		||||
                                                </div>
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
                            </div>
 | 
			
		||||
                            <div class="col-sm-6">
 | 
			
		||||
                                <div class="card">
 | 
			
		||||
                                    <div class="card-body">
 | 
			
		||||
                                        <div class="card-title" style="margin-bottom: 30px">
 | 
			
		||||
                                            <h5 class="card-title" style="float:left">Repo标识列表</h5>
 | 
			
		||||
                                            <div class="input-group mb-2" style="float:right;width:30%">
 | 
			
		||||
                                                <div class="input-group-prepend">
 | 
			
		||||
                                                    <span class="input-group-text">总数</span>
 | 
			
		||||
                                                </div>
 | 
			
		||||
                                                <input type="text" class="form-control" id="RepoCount">
 | 
			
		||||
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                        <div class="card-body" id="RepoDiv">
 | 
			
		||||
                                            <div class="d-flex justify-content-center">
 | 
			
		||||
                                                <div class="spinner-border text-primary"
 | 
			
		||||
                                                     style="width: 4rem; height: 4rem;" role="status">
 | 
			
		||||
                                                    <span class="sr-only">Loading...</span>
 | 
			
		||||
                                                </div>
 | 
			
		||||
                                            </div>
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
                            </div>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
 | 
			
		||||
                </div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Flexbox container for aligning the toasts -->
 | 
			
		||||
<div aria-live="polite" aria-atomic="true"
 | 
			
		||||
     class="d-flex justify-content-center align-items-center"
 | 
			
		||||
     style="min-height: 200px; position: absolute; top: 0; left: 40%;">
 | 
			
		||||
    <!-- Then put toasts within -->
 | 
			
		||||
    <div id="alertDiv" class="toast fade hide" role="alert" aria-live="assertive"
 | 
			
		||||
         aria-atomic="true" style="min-width: 200px">
 | 
			
		||||
        <div class="toast-header">
 | 
			
		||||
            <strong class="mr-auto">{{toastTitle}}</strong>
 | 
			
		||||
            <button type="button" class="ml-2 mb-1 close" data-dismiss="toast"
 | 
			
		||||
                    aria-label="Close">
 | 
			
		||||
                <span aria-hidden="true">×</span>
 | 
			
		||||
            </button>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="toast-body">{{toastMessage}}</div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<div class="modal fade" id="dialog" tabindex="-1" role="dialog"
 | 
			
		||||
     aria-labelledby="exampleModalLabel" aria-hidden="true">
 | 
			
		||||
    <div class="modal-dialog" role="document">
 | 
			
		||||
        <div class="modal-content">
 | 
			
		||||
            <div class="modal-header">
 | 
			
		||||
                <h5 class="modal-title" id="dialogTitleH5">Modal title</h5>
 | 
			
		||||
                <button type="button" class="close" data-dismiss="modal"
 | 
			
		||||
                        aria-label="Close">
 | 
			
		||||
                    <span aria-hidden="true">×</span>
 | 
			
		||||
                </button>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="modal-body" id="dialogBodyDiv">...</div>
 | 
			
		||||
            <div class="modal-footer">
 | 
			
		||||
                <button type="button" class="btn btn-outline-secondary"
 | 
			
		||||
                        data-dismiss="modal">关闭
 | 
			
		||||
                </button>
 | 
			
		||||
                <button type="button" id="dialogConfimBtn"
 | 
			
		||||
                        class="btn btn-outline-primary" data-dismiss="modal">确定
 | 
			
		||||
                </button>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<footer class="headerFooter" footermt-autopy-3>
 | 
			
		||||
    <div class="row">
 | 
			
		||||
        <div style="padding-left: -10px;" class="col-8">©2018-2020</div>
 | 
			
		||||
        <div style="" class="col-4">
 | 
			
		||||
            Icons made by <a href="https://www.flaticon.com/authors/monkik"
 | 
			
		||||
                             title="monkik" style="color: white;">monkik</a> from <a
 | 
			
		||||
                href="https://www.flaticon.com/" title="Flaticon"
 | 
			
		||||
                style="color: white;">www.flaticon.com</a>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</footer>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
		var h = document.body.clientHeight
 | 
			
		||||
				- $("header").css("height").replace("px", "")
 | 
			
		||||
				- $("footer").css("height").replace("px", "");
 | 
			
		||||
		$("#main").css("height", h + "px");
 | 
			
		||||
		/* $('select').selectpicker(); */
 | 
			
		||||
 | 
			
		||||
		initLoad();
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										1
									
								
								src/client/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1 @@
 | 
			
		||||
/.idea
 | 
			
		||||
							
								
								
									
										172
									
								
								src/client/BaaSClient.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,172 @@
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 | 
			
		||||
<meta http-equiv="Cache-Control" content="no-cache" />
 | 
			
		||||
<title>数瑞浏览器</title>
 | 
			
		||||
<script src="./js/createWS.js"></script>
 | 
			
		||||
<script src="./js/cryptico.js"></script>
 | 
			
		||||
<script src="./js/jquery-2.1.4.js"></script>
 | 
			
		||||
<script src="./js/bootstrap.min.js"></script>
 | 
			
		||||
<script src="./js/commonutil.js"></script>
 | 
			
		||||
<link href="./css/common.css" rel="stylesheet">
 | 
			
		||||
<link href="./css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
<script src="./js/vue.js"></script>
 | 
			
		||||
<script src="./js/bdwareclient.js"></script>
 | 
			
		||||
<script src="./js/sm2.js"></script>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
	<header
 | 
			
		||||
		class="headerFooter navbar navbar-default navbar-fixed-top  navColor ">
 | 
			
		||||
		<div class="col-10">
 | 
			
		||||
			<div class="input-group">
 | 
			
		||||
				<a class="navbar-brand" href="#"> <img alt="Brand"
 | 
			
		||||
					src="./img/logo-1.png" style="height: 30px">
 | 
			
		||||
				</a><a class="navbar-brand">数瑞浏览器   </a> <input id="urlInput"
 | 
			
		||||
					type="text" class="form-control" placeho=lder="输入地址"  style="display: none;">
 | 
			
		||||
 | 
			
		||||
				<button class="btn btn-outline-secondary" type="button"
 | 
			
		||||
					onclick="connectNode()"  style="display: none;">GO</button>
 | 
			
		||||
				<button class="btn btn-outline-secondary" id="switchRenderBtn" type="button"
 | 
			
		||||
					onclick="changeRender()"  style="height: 80%; margin-top: 0.4%;">不加载界面</button>
 | 
			
		||||
				<span>   </span>
 | 
			
		||||
				<div class="input-group-append"  style="display: none;">
 | 
			
		||||
					<select id="selectContract" class="custom-select"
 | 
			
		||||
						style="-webkit-appearance: none" onchange="changeApp()">
 | 
			
		||||
						<option selected>选择合约</option>
 | 
			
		||||
					</select>
 | 
			
		||||
				</div>
 | 
			
		||||
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
		<div class=" nav navbar-right userName" data-toggle="modal"
 | 
			
		||||
			data-target="#pubkeyDialog">欢迎, {{shortName}}</div>
 | 
			
		||||
	</header>
 | 
			
		||||
 | 
			
		||||
	<div id="main">
 | 
			
		||||
		<div class="row h-100" id="mainDiv"></div>
 | 
			
		||||
	</div>
 | 
			
		||||
	<!-- 用于配置sm2密钥的对话框 -->
 | 
			
		||||
	<div class="modal fade" id="pubkeyDialog" tabindex="-1" role="dialog"
 | 
			
		||||
		aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
 | 
			
		||||
		<div class="modal-dialog modal-dialog-centered" role="document">
 | 
			
		||||
			<div class="modal-content">
 | 
			
		||||
				<div class="modal-header">
 | 
			
		||||
					<h5 class="modal-title" id="exampleModalLongTitle">用户信息</h5>
 | 
			
		||||
					<button type="button" class="close" data-dismiss="modal"
 | 
			
		||||
						aria-label="Close">
 | 
			
		||||
						<span aria-hidden="true">×</span>
 | 
			
		||||
					</button>
 | 
			
		||||
				</div>
 | 
			
		||||
				<div class="modal-body">
 | 
			
		||||
					<div class="row" style="padding-left: 16px; padding-right: 16px">
 | 
			
		||||
 | 
			
		||||
						<div class="input-group mb-3">
 | 
			
		||||
							<div class="input-group-prepend">
 | 
			
		||||
								<label class="input-group-text" for="localKeyList">本地公钥</label>
 | 
			
		||||
							</div>
 | 
			
		||||
 | 
			
		||||
							<select class="custom-select"
 | 
			
		||||
								aria-label="Example select with button addon"
 | 
			
		||||
								style="appearance: none" v-model="selectedSM2Key"
 | 
			
		||||
								@change="changeSM2Key($event)">
 | 
			
		||||
								<option v-for="(item,index) in sm2KeyList" :key="index"
 | 
			
		||||
									:value='item.id'>{{item.title}}</option>
 | 
			
		||||
							</select>
 | 
			
		||||
							<div class="input-group-append">
 | 
			
		||||
								<button class="btn btn-outline-primary" for="localKeyList"
 | 
			
		||||
									v-on:click="exportPubkey">导出公钥</button>
 | 
			
		||||
							</div>
 | 
			
		||||
							<div class="input-group-append">
 | 
			
		||||
								<button class="btn btn-outline-danger" for="localKeyList"
 | 
			
		||||
									v-on:click="deletePubkey">删除公钥</button>
 | 
			
		||||
							</div>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
					<div class="row" style="padding-left: 16px; padding-right: 16px">
 | 
			
		||||
 | 
			
		||||
						<div class="input-group mb-1">
 | 
			
		||||
							<div class="input-group-prepend">
 | 
			
		||||
								<label class="input-group-text" for="localKeyList">当前SM2密钥</label>
 | 
			
		||||
							</div>
 | 
			
		||||
							<input type="text" class="form-control" placeholder="(请复制并妥善保存)"
 | 
			
		||||
								disabled="disabled" aria-label=""
 | 
			
		||||
								aria-describedby="basic-addon1">
 | 
			
		||||
 | 
			
		||||
							<div class="input-group-append">
 | 
			
		||||
								<button type="button" class="btn btn-outline-primary"
 | 
			
		||||
									id="generatePubkeyBtn" v-on:click="generatePubkey">生成新公钥</button>
 | 
			
		||||
								<button type="button" class="btn btn-outline-primary"
 | 
			
		||||
									data-dismiss="modal" id="importPubkeyBtn"
 | 
			
		||||
									v-on:click="importPubkey">导入公钥</button>
 | 
			
		||||
							</div>
 | 
			
		||||
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
					<textarea class="form-control mb-3" title="复制密钥,并妥善保存"
 | 
			
		||||
						id="sm2KeyTextarea" v-model="sm2KeyStr"
 | 
			
		||||
						style="width: 100%; min-height: 150px" rows="" cols="">
 | 
			
		||||
					</textarea>
 | 
			
		||||
					<div class="row" style="padding-left: 16px; padding-right: 16px;">
 | 
			
		||||
 | 
			
		||||
					</div>
 | 
			
		||||
					<div class="row" style="padding-left: 16px; padding-right: 16px">
 | 
			
		||||
						<span>我的权限:{{myRole}}</span>
 | 
			
		||||
					</div>
 | 
			
		||||
					<div class="input-group">
 | 
			
		||||
						<select id="inputGroupSelect04" v-model="test"
 | 
			
		||||
							class="custom-select" style="appearance: none"
 | 
			
		||||
							@change="changeProduct($event)">
 | 
			
		||||
							<option v-for="(item,index) in productList" :key="index"
 | 
			
		||||
								:value='item.id'>{{item.title}}</option>
 | 
			
		||||
						</select>
 | 
			
		||||
						<div class="input-group-append">
 | 
			
		||||
							<button class="btn btn-outline-primary" type="button"
 | 
			
		||||
								v-on:click="applyRole">角色认证</button>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
				</div>
 | 
			
		||||
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
	</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	<div class="modal fade" id="dialog" tabindex="-1" role="dialog"
 | 
			
		||||
		 aria-labelledby="exampleModalLabel" aria-hidden="true">
 | 
			
		||||
		<div class="modal-dialog" role="document">
 | 
			
		||||
			<div class="modal-content">
 | 
			
		||||
				<div class="modal-header">
 | 
			
		||||
					<h5 class="modal-title" id="dialogTitleH5">Modal title</h5>
 | 
			
		||||
					<button type="button" class="close" data-dismiss="modal"
 | 
			
		||||
							aria-label="Close">
 | 
			
		||||
						<span aria-hidden="true">×</span>
 | 
			
		||||
					</button>
 | 
			
		||||
				</div>
 | 
			
		||||
				<div class="modal-body" id="dialogBodyDiv">...</div>
 | 
			
		||||
				<div class="modal-footer">
 | 
			
		||||
					<button type="button" class="btn btn-outline-secondary"
 | 
			
		||||
							data-dismiss="modal">关闭
 | 
			
		||||
					</button>
 | 
			
		||||
					<button type="button" id="dialogConfimBtn"
 | 
			
		||||
							class="btn btn-outline-primary" data-dismiss="modal">确定
 | 
			
		||||
					</button>
 | 
			
		||||
				</div>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
	</div>
 | 
			
		||||
	<script>
 | 
			
		||||
		const isBaaS = true
 | 
			
		||||
		var h = document.body.clientHeight
 | 
			
		||||
				- $("header").css("height").replace("px", "")
 | 
			
		||||
 | 
			
		||||
		$("#main").css("height", h + "px");
 | 
			
		||||
		init();
 | 
			
		||||
 | 
			
		||||
		//initWSocket();
 | 
			
		||||
	</script>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										6
									
								
								src/client/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,6 @@
 | 
			
		||||
## Web Client使用说明
 | 
			
		||||
 | 
			
		||||
1. 最小可直接使用:``./js`` 目录下的 ``createWS.js`` , ``cryptico.js`` , ``sm2.js`` 三个脚本。
 | 
			
		||||
2. 直接打开 ``bdwareclinet.html`` ,在地址中填入单节点运行的地址,如 ``127.0.0.1:18000`` ,可在界面中试调合约。
 | 
			
		||||
3. 参考 ``bdwareclient.js`` 的写法,并配合说明文档中的 ``ContractAPI.html`` 进行使用。
 | 
			
		||||
4. BaaSClient是BaaS专用的Web Client,如不了解请勿改动。
 | 
			
		||||
							
								
								
									
										180
									
								
								src/client/bdwareclient.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,180 @@
 | 
			
		||||
<html>
 | 
			
		||||
<head>
 | 
			
		||||
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 | 
			
		||||
    <meta http-equiv="Cache-Control" content="no-cache"/>
 | 
			
		||||
    <title>数瑞浏览器</title>
 | 
			
		||||
    <script src="./js/createWS.js"></script>
 | 
			
		||||
    <script src="./js/cryptico.js"></script>
 | 
			
		||||
    <script src="./js/jquery-2.1.4.js"></script>
 | 
			
		||||
    <script src="./js/bootstrap.min.js"></script>
 | 
			
		||||
    <script src="./js/commonutil.js"></script>
 | 
			
		||||
    <script src="./js/vue.js"></script>
 | 
			
		||||
    <script src="./js/bdwareclient.js"></script>
 | 
			
		||||
    <script src="./js/sm2.js"></script>
 | 
			
		||||
    <link href="./css/common.css" rel="stylesheet">
 | 
			
		||||
    <link href="./css/bootstrap.min.css" rel="stylesheet">
 | 
			
		||||
</head>
 | 
			
		||||
 | 
			
		||||
<body>
 | 
			
		||||
<header class="headerFooter navbar navbar-default navbar-fixed-top  navColor ">
 | 
			
		||||
    <div class="col-10">
 | 
			
		||||
        <div class="input-group">
 | 
			
		||||
            <a class="navbar-brand" href="#">
 | 
			
		||||
                <img alt="Brand"
 | 
			
		||||
                     src="./img/logo-1.png" style="height: 30px">
 | 
			
		||||
            </a>
 | 
			
		||||
            <a class="navbar-brand">数瑞浏览器   </a>
 | 
			
		||||
            <div class="input-group-prepend">
 | 
			
		||||
                <input id="urlInput" style="border-top-left-radius: 5px; border-bottom-left-radius: 5px"
 | 
			
		||||
                       type="text" placeholder="输入地址">
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="input-group-append">
 | 
			
		||||
                <button class="btn btn-outline-secondary" type="button"
 | 
			
		||||
                        onclick="connectNode()">GO
 | 
			
		||||
                </button>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="input-group-append">
 | 
			
		||||
                <button class="btn btn-outline-secondary"
 | 
			
		||||
                        style="border-top-right-radius: 5px; border-bottom-right-radius: 5px" id="switchRenderBtn"
 | 
			
		||||
                        type="button"
 | 
			
		||||
                        onclick="changeRender()">不加载界面
 | 
			
		||||
                </button>
 | 
			
		||||
            </div>
 | 
			
		||||
            <span>   </span>
 | 
			
		||||
            <div class="input-group-append">
 | 
			
		||||
                <select id="selectContract" class="custom-select"
 | 
			
		||||
                        style="-webkit-appearance: none" onchange="changeApp()">
 | 
			
		||||
                    <option selected>选择合约</option>
 | 
			
		||||
                </select>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class=" nav navbar-right userName" data-toggle="modal"
 | 
			
		||||
         data-target="#pubkeyDialog">欢迎, {{shortName}}
 | 
			
		||||
    </div>
 | 
			
		||||
</header>
 | 
			
		||||
 | 
			
		||||
<div id="main">
 | 
			
		||||
    <div class="row h-100" id="mainDiv"></div>
 | 
			
		||||
</div>
 | 
			
		||||
<!-- 用于配置sm2密钥的对话框 -->
 | 
			
		||||
<div class="modal fade" id="pubkeyDialog" tabindex="-1" role="dialog"
 | 
			
		||||
     aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
 | 
			
		||||
    <div class="modal-dialog modal-dialog-centered" role="document">
 | 
			
		||||
        <div class="modal-content">
 | 
			
		||||
            <div class="modal-header">
 | 
			
		||||
                <h5 class="modal-title" id="exampleModalLongTitle">用户信息</h5>
 | 
			
		||||
                <button type="button" class="close" data-dismiss="modal"
 | 
			
		||||
                        aria-label="Close">
 | 
			
		||||
                    <span aria-hidden="true">×</span>
 | 
			
		||||
                </button>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="modal-body">
 | 
			
		||||
                <div class="row" style="padding-left: 16px; padding-right: 16px">
 | 
			
		||||
                    <div class="input-group mb-3">
 | 
			
		||||
                        <div class="input-group-prepend">
 | 
			
		||||
                            <label class="input-group-text" for="localKeyList">本地公钥</label>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <select class="custom-select"
 | 
			
		||||
                                aria-label="Example select with button addon"
 | 
			
		||||
                                style="appearance: none" v-model="selectedSM2Key"
 | 
			
		||||
                                @change="changeSM2Key($event)">
 | 
			
		||||
                            <option v-for="(item,index) in sm2KeyList" :key="index"
 | 
			
		||||
                                    :value='item.id'>{{item.title}}
 | 
			
		||||
                            </option>
 | 
			
		||||
                        </select>
 | 
			
		||||
                        <div class="input-group-append">
 | 
			
		||||
                            <button class="btn btn-outline-primary" for="localKeyList"
 | 
			
		||||
                                    v-on:click="exportPubkey">导出公钥
 | 
			
		||||
                            </button>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <div class="input-group-append">
 | 
			
		||||
                            <button class="btn btn-outline-danger" for="localKeyList"
 | 
			
		||||
                                    v-on:click="deletePubkey">删除公钥
 | 
			
		||||
                            </button>
 | 
			
		||||
                        </div>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="row" style="padding-left: 16px; padding-right: 16px">
 | 
			
		||||
                    <div class="input-group mb-1">
 | 
			
		||||
                        <div class="input-group-prepend">
 | 
			
		||||
                            <label class="input-group-text" for="localKeyList">当前SM2密钥</label>
 | 
			
		||||
                        </div>
 | 
			
		||||
                        <input type="text" class="form-control" placeholder="(请复制并妥善保存)"
 | 
			
		||||
                               disabled="disabled" aria-label=""
 | 
			
		||||
                               aria-describedby="basic-addon1">
 | 
			
		||||
 | 
			
		||||
                        <div class="input-group-append">
 | 
			
		||||
                            <button type="button" class="btn btn-outline-primary"
 | 
			
		||||
                                    id="generatePubkeyBtn" v-on:click="generatePubkey">生成新公钥
 | 
			
		||||
                            </button>
 | 
			
		||||
                            <button type="button" class="btn btn-outline-primary"
 | 
			
		||||
                                    data-dismiss="modal" id="importPubkeyBtn"
 | 
			
		||||
                                    v-on:click="importPubkey">导入公钥
 | 
			
		||||
                            </button>
 | 
			
		||||
                        </div>
 | 
			
		||||
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
                <textarea class="form-control mb-3" title="复制密钥,并妥善保存"
 | 
			
		||||
                          id="sm2KeyTextarea" v-model="sm2KeyStr"
 | 
			
		||||
                          style="width: 100%; min-height: 150px" rows="" cols="">
 | 
			
		||||
					</textarea>
 | 
			
		||||
                <div class="row" style="padding-left: 16px; padding-right: 16px;">
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="row" style="padding-left: 16px; padding-right: 16px">
 | 
			
		||||
                    <span>我的权限:{{myRole}}</span>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div class="input-group">
 | 
			
		||||
                    <select id="inputGroupSelect04" v-model="test"
 | 
			
		||||
                            class="custom-select" style="appearance: none"
 | 
			
		||||
                            @change="changeProduct($event)">
 | 
			
		||||
                        <option v-for="(item,index) in productList" :key="index"
 | 
			
		||||
                                :value='item.id'>{{item.title}}
 | 
			
		||||
                        </option>
 | 
			
		||||
                    </select>
 | 
			
		||||
                    <div class="input-group-append">
 | 
			
		||||
                        <button class="btn btn-outline-primary" type="button"
 | 
			
		||||
                                v-on:click="applyRole">角色认证
 | 
			
		||||
                        </button>
 | 
			
		||||
                    </div>
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
<div class="modal fade" id="dialog" tabindex="-1" role="dialog"
 | 
			
		||||
     aria-labelledby="exampleModalLabel" aria-hidden="true">
 | 
			
		||||
    <div class="modal-dialog" role="document">
 | 
			
		||||
        <div class="modal-content">
 | 
			
		||||
            <div class="modal-header">
 | 
			
		||||
                <h5 class="modal-title" id="dialogTitleH5">Modal title</h5>
 | 
			
		||||
                <button type="button" class="close" data-dismiss="modal"
 | 
			
		||||
                        aria-label="Close">
 | 
			
		||||
                    <span aria-hidden="true">×</span>
 | 
			
		||||
                </button>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="modal-body" id="dialogBodyDiv">...</div>
 | 
			
		||||
            <div class="modal-footer">
 | 
			
		||||
                <button type="button" class="btn btn-outline-secondary"
 | 
			
		||||
                        data-dismiss="modal">关闭
 | 
			
		||||
                </button>
 | 
			
		||||
                <button type="button" id="dialogConfimBtn"
 | 
			
		||||
                        class="btn btn-outline-primary" data-dismiss="modal">确定
 | 
			
		||||
                </button>
 | 
			
		||||
            </div>
 | 
			
		||||
        </div>
 | 
			
		||||
    </div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
    const isBaaS = false
 | 
			
		||||
    const h = document.body.clientHeight
 | 
			
		||||
        - $("header").css("height").replace("px", "")
 | 
			
		||||
    $("#main").css("height", h + "px");
 | 
			
		||||
    init();
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										1
									
								
								src/client/css/bootstrap.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										128
									
								
								src/client/css/common.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,128 @@
 | 
			
		||||
.navColor {
 | 
			
		||||
	background: #882929;
 | 
			
		||||
	color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.userName {
 | 
			
		||||
	padding-left: 10px;
 | 
			
		||||
	padding-right: 10px;
 | 
			
		||||
	border: 1px solid rgba(0, 0, 0, .125);
 | 
			
		||||
	border-radius: 5px;
 | 
			
		||||
	background: white;
 | 
			
		||||
	color: #2E324C;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.userName:hover {
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	background: rgb(68, 110, 155);
 | 
			
		||||
	color: white;
 | 
			
		||||
	border-radius: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#horiNav {
 | 
			
		||||
	padding-top: 10px;
 | 
			
		||||
	border: 1px solid rgba(0, 0, 0, .05);
 | 
			
		||||
	background: #f8f9fa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#outputNav {
 | 
			
		||||
	padding-top: 10px;
 | 
			
		||||
	border: 1px solid rgba(0, 0, 0, .05);
 | 
			
		||||
	background: #f8f9fa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div .card {
 | 
			
		||||
	background: #f8f9fa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#main {
 | 
			
		||||
	background: white;
 | 
			
		||||
	color: black;
 | 
			
		||||
}
 | 
			
		||||
 .active>.iconimg {
 | 
			
		||||
	height: 25px;
 | 
			
		||||
	width: 25px;
 | 
			
		||||
	margin-right: 10px;
 | 
			
		||||
	filter: invert(100%);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
.iconimg {
 | 
			
		||||
	height: 25px;
 | 
			
		||||
	width: 25px;
 | 
			
		||||
	margin-right: 10px;
 | 
			
		||||
	filter: invert(15%) sepia(11%) saturate(2467%) hue-rotate(194deg)
 | 
			
		||||
		brightness(94%) contrast(84%);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.buttonimg {
 | 
			
		||||
	height: 24px;
 | 
			
		||||
	width: 24px;
 | 
			
		||||
	filter: invert(15%) sepia(11%) saturate(2467%) hue-rotate(194deg)
 | 
			
		||||
		brightness(94%) contrast(84%);
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
.closeimg {
 | 
			
		||||
	height: 12px;
 | 
			
		||||
	width: 12px;
 | 
			
		||||
	filter: invert(15%) sepia(11%) saturate(2467%) hue-rotate(194deg)
 | 
			
		||||
		brightness(94%) contrast(84%);
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.closeimg:hover {
 | 
			
		||||
	cursor:pointer;
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.active>.closeimg {
 | 
			
		||||
	filter: invert(100%);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.trigimg {
 | 
			
		||||
	height: 20px;
 | 
			
		||||
	width: 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.projectLine.collapsed {
 | 
			
		||||
	background: #D5D6DB;
 | 
			
		||||
	color: #2E324C;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.projectLine {
 | 
			
		||||
	background: #2E324C;
 | 
			
		||||
	color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.projectLine.collapsed:hover {
 | 
			
		||||
	background: #2E324C;
 | 
			
		||||
	color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 button:hover>.trigimg {
 | 
			
		||||
	filter: invert(100%);
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
 button[aria-expanded="true"]>.trigimg {
 | 
			
		||||
	filter: invert(100%);
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
 button:hover>.buttonimg {
 | 
			
		||||
	height: 24px;
 | 
			
		||||
	width: 24x;
 | 
			
		||||
	filter: invert(100%);
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
.headerFooter {
 | 
			
		||||
	background: #2E324C;
 | 
			
		||||
	color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.outline-btn {
 | 
			
		||||
	border: 1px solid #999;
 | 
			
		||||
	border-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.filter-option {
 | 
			
		||||
	border: 1px solid #999;
 | 
			
		||||
	border-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								src/client/img/logo-1.png
									
									
									
									
									
										Executable file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 13 KiB  | 
							
								
								
									
										841
									
								
								src/client/js/bdwareclient.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,841 @@
 | 
			
		||||
var dtLang = {
 | 
			
		||||
    "sProcessing": "处理中...",
 | 
			
		||||
    "lengthMenu": '显示 <select>' + '<option value="5">5</option>'
 | 
			
		||||
        + '<option value="20">20</option>'
 | 
			
		||||
        + '<option value="100">100</option>'
 | 
			
		||||
        + '<option value="-1">全部</option>' + '</select> 项结果',
 | 
			
		||||
    "sZeroRecords": "没有匹配结果",
 | 
			
		||||
    "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
 | 
			
		||||
    "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
 | 
			
		||||
    "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
 | 
			
		||||
    "sInfoPostFix": "",
 | 
			
		||||
    "sSearch": "搜索:",
 | 
			
		||||
    "sUrl": "",
 | 
			
		||||
    "sEmptyTable": "表中数据为空",
 | 
			
		||||
    "sLoadingRecords": "载入中...",
 | 
			
		||||
    "sInfoThousands": ",",
 | 
			
		||||
    "oPaginate": {
 | 
			
		||||
        "sFirst": "首页",
 | 
			
		||||
        "sPrevious": "上页",
 | 
			
		||||
        "sNext": "下页",
 | 
			
		||||
        "sLast": "末页"
 | 
			
		||||
    },
 | 
			
		||||
    "oAria": {
 | 
			
		||||
        "sSortAscending": ": 以升序排列此列",
 | 
			
		||||
        "sSortDescending": ": 以降序排列此列"
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function applyRole(role) {
 | 
			
		||||
    global.wssocket.send("{\"action\":\"applyNodeRole\",\"role\":\"" + role
 | 
			
		||||
        + "\",\"pubKey\":\"" + global.sm2Key.publicKey + "\"}");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function WSHandler(event) {
 | 
			
		||||
    console.log(event);
 | 
			
		||||
    data = event.data;
 | 
			
		||||
    // console.log(" -->" + data);
 | 
			
		||||
    try {
 | 
			
		||||
        var obj = JSON.parse(data);
 | 
			
		||||
 | 
			
		||||
        switch (obj.action) {
 | 
			
		||||
            case 'onTransferTo':
 | 
			
		||||
                onTransferTo(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onHashResult':
 | 
			
		||||
                onHashResult(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onListMemoryFiles':
 | 
			
		||||
                onListMemoryFiles(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onDumpContract':
 | 
			
		||||
                onDumpContract(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onChangeDumpPeriod':
 | 
			
		||||
                onChangeDumpPeriod(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onGetDumpPeriod':
 | 
			
		||||
                onGetDumpPeriod(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onStaticVerifyResult':
 | 
			
		||||
                onStaticVerifyResult(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListContractProcess":
 | 
			
		||||
                onListContractProcess(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onDeleteFile":
 | 
			
		||||
                onDeleteFile(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onCancelAuth":
 | 
			
		||||
                onCancelAuth(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onDownloadContract":
 | 
			
		||||
                onDownloadFile(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onChangePublic":
 | 
			
		||||
                onChangePublic(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListProjects":
 | 
			
		||||
                onListProjects(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListProject":
 | 
			
		||||
                onListProject(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListLocalNodeLog":
 | 
			
		||||
                onListLocalNodeLog(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListLocalNodeLogPie":
 | 
			
		||||
                onListLocalNodeLogPie(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListLocalNodeLogLine":
 | 
			
		||||
                onListLocalNodeLogLine(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListTheContractProcess":
 | 
			
		||||
                onListTheContractProcess(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListLocalContractLog":
 | 
			
		||||
                onListLocalContractLog(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListLocalContractLogPie":
 | 
			
		||||
                onListLocalContractLogPie(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListLocalContractLogLine":
 | 
			
		||||
                onListLocalContractLogLine(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onGetNodeSessionID":
 | 
			
		||||
            case "onSessionID":
 | 
			
		||||
                onGetNodeSessionID(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onLogin":
 | 
			
		||||
                onNodeLogin(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onGetNodeRole":
 | 
			
		||||
            case "onGetRole":
 | 
			
		||||
                onGetNodeRole(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onApplyRole":
 | 
			
		||||
                onApplyRole(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListAllAuthRole":
 | 
			
		||||
                onListAllAuthRole(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListUnAuthRole":
 | 
			
		||||
                onListUnAuthRole(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onDeleteRole":
 | 
			
		||||
                onDeleteRole(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onCountRole":
 | 
			
		||||
                onCountRole(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onAuthNodeRole":
 | 
			
		||||
                onAuthNodeRole(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onApplyNet":
 | 
			
		||||
                onApplyNet(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onLoadNodeConfig":
 | 
			
		||||
                onLoadNodeConfig(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onChangeNodeName":
 | 
			
		||||
                onChangeNodeName(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onChangeYJSPath":
 | 
			
		||||
                onChangeYJSPath(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onChangeIpPort":
 | 
			
		||||
                onChangeIpPort(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onGetLicenceExpiredDate":
 | 
			
		||||
                $("#expiredDate").html(convertDate(data.data));
 | 
			
		||||
                break;
 | 
			
		||||
            case "onGetPeerID":
 | 
			
		||||
                global.peerID = obj.data;
 | 
			
		||||
                // getNodeTrustUnits();//still connecting to centerportalws
 | 
			
		||||
                break;
 | 
			
		||||
            case "onViewContractInstance":
 | 
			
		||||
                onViewContractInstance(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onExecuteResult':
 | 
			
		||||
                onExecuteResult(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onExecuteContractTrustfully':
 | 
			
		||||
                onExecuteContractTrustfully(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onUploadFile':
 | 
			
		||||
                onUploadFile(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onStartContract':
 | 
			
		||||
                onStartContract(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onStartContractConfig':
 | 
			
		||||
                onStartContractConfig(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onKillContractProcess':
 | 
			
		||||
                onStopContract(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onKillAllContract':
 | 
			
		||||
                onKillAllContract(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onSetPermission':
 | 
			
		||||
                onSetPermission(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onOutputStream':
 | 
			
		||||
                displayOutput(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onChangeNodeCenter':
 | 
			
		||||
                console.log("onChangeNodeCenter");
 | 
			
		||||
                onChangeNodeCenter(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onException':
 | 
			
		||||
                onException(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            // logException(obj);
 | 
			
		||||
            // break;
 | 
			
		||||
            default:
 | 
			
		||||
                displayOutput(obj);
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
        console.log(err);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onException(obj) {
 | 
			
		||||
    if (obj.data.startsWith("unauthorised action")) {
 | 
			
		||||
        const action = obj.data.replace("unauthorised action ", "");
 | 
			
		||||
        switch (action) {
 | 
			
		||||
            case "listContractProcess":
 | 
			
		||||
                mainVue.contracts = [];
 | 
			
		||||
                if (global.urlparam["contract"]) {
 | 
			
		||||
                    appendTargetContract(global.urlparam["contract"]);
 | 
			
		||||
                } else
 | 
			
		||||
                    alertNoPermission("listContractProcess无授权,请申请ContractUser权限", "提示");
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                alertNoPermission(action + "无权限", "提示");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function alertNoPermission(message, title) {
 | 
			
		||||
    const npSpan = $("#nopermissionSpan");
 | 
			
		||||
    if (npSpan.length > 0) {
 | 
			
		||||
        console.log(message + " status:" + $("#dialog")[0].getAttribute("class"));
 | 
			
		||||
        npSpan.append("<br/>" + message);
 | 
			
		||||
    } else {
 | 
			
		||||
        let body = "<div class='row'><div class='col-sm-12'><span id='nopermissionSpan'>";
 | 
			
		||||
        body += message;
 | 
			
		||||
        body += "</span></div></div>";
 | 
			
		||||
        $("#dialogBodyDiv").html(body);
 | 
			
		||||
        showDialog("提示", function () {
 | 
			
		||||
            $("#dialogBodyDiv").html("");
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onExecuteResult(obj) {
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
    global.executeResult = obj;
 | 
			
		||||
    if (global.executeResult.size) {
 | 
			
		||||
        onExecuteContractTrustfully(obj);
 | 
			
		||||
    }
 | 
			
		||||
    onExecuteResultInternal(obj);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onExecuteContractTrustfully(obj) {
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
    $("#consistencyResult").html(global.executeResult.size + "个结果一致");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function showContractResult(requestID) {
 | 
			
		||||
    var data = global.responseCollector[requestID][0];
 | 
			
		||||
    result = data;
 | 
			
		||||
    $("#statusSpan")[0].innerHTML = result.status;
 | 
			
		||||
    $("#timeSpan")[0].innerHTML = "调用耗时:" + data.executeTime + "(ms)";
 | 
			
		||||
    if (result.result instanceof Object) {
 | 
			
		||||
        $("#responseArea")[0].value = JSON.stringify(result.result);
 | 
			
		||||
        $("#timeSpan")[0].innerHTML += "<br> JSON格式";
 | 
			
		||||
    } else {
 | 
			
		||||
        $("#timeSpan")[0].innerHTML += "<br> 字符串格式";
 | 
			
		||||
        $("#responseArea")[0].value = result.result;
 | 
			
		||||
    }
 | 
			
		||||
    if (global.responseCollector[requestID].hashCode != undefined)
 | 
			
		||||
        $("#hashDisplayDiv").html("溯源指纹:" + global.responseCollector[requestID].hashCode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function switchContractResult() {
 | 
			
		||||
    const requestID = reqIDSpan.value;
 | 
			
		||||
    showContractResult(requestID);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function showInconsistentResult(list) {
 | 
			
		||||
    global.resultList = list;
 | 
			
		||||
    let html = "<table class='table table-striped'><thead><tr><td>status</td><td>executeTime</td><td>result</td></tr></thead><tbody>";
 | 
			
		||||
    for (const r of list) {
 | 
			
		||||
        html += "<tr><td>";
 | 
			
		||||
        const data = JSON.parse(r.data);
 | 
			
		||||
        html += data.status;
 | 
			
		||||
        html += "</td><td>";
 | 
			
		||||
        html += r.executeTime;
 | 
			
		||||
        html += "</td><td><textarea class='form-control'>";
 | 
			
		||||
        html += data.result;
 | 
			
		||||
        html += "</textarea></td></tr>";
 | 
			
		||||
    }
 | 
			
		||||
    html += "</tbody></table>";
 | 
			
		||||
    const consistencyResult = $("#consistencyResult");
 | 
			
		||||
    if (consistencyResult.length > 0) {
 | 
			
		||||
        consistencyResult.html(html);
 | 
			
		||||
    } else {
 | 
			
		||||
        $("#dialogBodyDiv").html(html);
 | 
			
		||||
        showDialog("调用结果不一致", function () {
 | 
			
		||||
        }, () => {
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function showDialog(title, cb, cancelcb) {
 | 
			
		||||
    $("#dialogTitleH5").html(title);
 | 
			
		||||
    $("#dialogConfimBtn").off("click").on("click", cb);
 | 
			
		||||
    $("#dialogCloseBtn").off("click").on("click", cancelcb);
 | 
			
		||||
    $("#dialog").modal("show");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onHashResult(obj) {
 | 
			
		||||
    $("#hashDisplayDiv").html("溯源指纹:" + obj.data);
 | 
			
		||||
    global.responseCollector[obj.responseID].hashCode = obj.data;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function displayOutput(obj) {
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function initWSocket() {
 | 
			
		||||
    let host = $("#urlInput")[0].value;
 | 
			
		||||
    document.title = `数瑞浏览器(${host})`
 | 
			
		||||
    if (!host.startsWith("ws")) {
 | 
			
		||||
        if (location.href.startsWith("https")) {
 | 
			
		||||
            host = "wss://" + host;
 | 
			
		||||
        } else {
 | 
			
		||||
            host = "ws://" + host;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (host.endsWith("/SCIDE")) {
 | 
			
		||||
        host += "/SCExecutor";
 | 
			
		||||
    } else if (host.endsWith("/SCIDE/")) {
 | 
			
		||||
        host += "SCExecutor";
 | 
			
		||||
    } else if (host.endsWith("NodeCenterWS")) {
 | 
			
		||||
        //..
 | 
			
		||||
    } else if (!host.endsWith("/SCIDE/SCExecutor")) {
 | 
			
		||||
        host += "/SCIDE/SCExecutor";
 | 
			
		||||
    }
 | 
			
		||||
    console.log("connect ws:" + host);
 | 
			
		||||
    global.wssocket = createWssocket(host, () => {
 | 
			
		||||
        getSession();
 | 
			
		||||
    }, WSHandler);
 | 
			
		||||
    global.responseCollector = {};
 | 
			
		||||
    global.commited = {};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getSession() {
 | 
			
		||||
    global.wssocket.send("{\"action\":\"getSessionID\"}");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function exportSMKeyPair() {
 | 
			
		||||
    const dialog = $("#dialog");
 | 
			
		||||
    dialog.html("Save Your key:<br/>" + JSON.stringify(global.sm2Key));
 | 
			
		||||
    dialog.dialog("open");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ====== wsHandler
 | 
			
		||||
function onGetNodeSessionID(data) {
 | 
			
		||||
    console.log("onGetNodeSessionID");
 | 
			
		||||
    global.session = data.session;
 | 
			
		||||
    const loginParam = {
 | 
			
		||||
        pubKey: global.sm2Key.publicKey,
 | 
			
		||||
        signature: sm2.doSignature(global.session, global.sm2Key.privateKey, {hash: true, der: true}),
 | 
			
		||||
        action: "login"
 | 
			
		||||
    };
 | 
			
		||||
    global.wssocket.send(JSON.stringify(loginParam));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onNodeLogin(data) {
 | 
			
		||||
    pubkeyDialogVue.myRole = data.data;
 | 
			
		||||
    global.myRole = data.data;
 | 
			
		||||
    listContracts();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function listContracts() {
 | 
			
		||||
    global.wssocket.send(JSON.stringify({action: "listContractProcess"}));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function changeApp() {
 | 
			
		||||
    global.currentContract = global.contracts[$("#selectContract")[0].value];
 | 
			
		||||
    if (!global.currentContract) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    console.log(global.currentContract);
 | 
			
		||||
    document.title = `数瑞浏览器(${global.currentContract.name} - ${$("#urlInput")[0].value})`
 | 
			
		||||
    changeAppInternal(needRender(global.currentContract));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function changeAppInternal(requireRendering) {
 | 
			
		||||
    if ((global.urlparam["noRender"] !== "true") && requireRendering) {
 | 
			
		||||
        $("#mainDiv")[0].innerHTML = "";
 | 
			
		||||
        executeCurrentContract("getMainFrame", "", parseMainFrame);
 | 
			
		||||
    } else {
 | 
			
		||||
        let title = "只包含计算逻辑";
 | 
			
		||||
        if (requireRendering) {
 | 
			
		||||
            title = "包含界面";
 | 
			
		||||
        }
 | 
			
		||||
        title += getContractDesp();
 | 
			
		||||
        const html = "   <div class='container'>  <div class=\"card mt-3 \">\n"
 | 
			
		||||
            + "        <div class=\"card-body\">\n"
 | 
			
		||||
            + "          <h5 class=\"card-title\">"
 | 
			
		||||
            + title
 | 
			
		||||
            + "</h5>\n"
 | 
			
		||||
            + "          <div class=\"card-body\" >\n"
 | 
			
		||||
            + "            <div class=\"row\">\n"
 | 
			
		||||
            + "              <div class=\"col-sm-12 d-flex justify-content-center\">\n"
 | 
			
		||||
            + "                <div class=\"input-group mb-2\">\n"
 | 
			
		||||
            + "                  <div class=\"input-group-prepend\">\n"
 | 
			
		||||
            + "	            <select id=\"selectAction\" onchange=\"showDescription()\" class=\"custom-select\" style=\"-webkit-appearance: none;\"><option value=\"-1\">选择方法</option></select>		\n"
 | 
			
		||||
            + "                  </div>\n"
 | 
			
		||||
            + "                  <input type=\"text\" class=\"form-control\" id=\"argInput\" placeholder=\"填写参数\" >\n"
 | 
			
		||||
            + "                  <input type=\"text\" class=\"form-control col-2\" id=\"gasInput\" placeholder=\"填写gas\" >\n"
 | 
			
		||||
            + "                  <div class=\"input-group-append input-group-text\">\n"
 | 
			
		||||
 | 
			
		||||
            + "<input type=\"checkbox\" id=\"executeContractAsDebug\"   aria-label=\"Checkbox for isDebug\"  data-toggle=\"tooltip\"  title=\"模拟调用\"></input>"
 | 
			
		||||
            + "                  </div>\n"
 | 
			
		||||
 | 
			
		||||
            + "                  <div class=\"input-group-append\">\n"
 | 
			
		||||
            + "                    <button class=\"btn btn-outline-secondary\" type=\"button\" \n"
 | 
			
		||||
            + "                            onclick=\"triggerExecuteCurrentContract()\">\n"
 | 
			
		||||
            + "                      调用\n"
 | 
			
		||||
            + "                    </button>\n"
 | 
			
		||||
            + "                  </div>\n"
 | 
			
		||||
            + "                </div>\n"
 | 
			
		||||
            + "              </div>\n"
 | 
			
		||||
            + "            </div>"
 | 
			
		||||
            + "<div class='row mb-2'><div class='col-sm-12 d-flex '>"
 | 
			
		||||
            + "<div class=\"input-group\" ><div class=\"input-group-prepend\" > <span class=\"input-group-text\" >方法描述</span></div><input class=\"input-group-text form-control\" id=\"descriptionSpan\" placeholder=\"暂无\"></input></div>"
 | 
			
		||||
            + "</div></div>"
 | 
			
		||||
            + "<div class='row mb-4'><div class='col-sm-12 d-flex'>"
 | 
			
		||||
            + "<div class=\"input-group \" ><div class=\"input-group-prepend\" > <span class=\"input-group-text\" >http接口</span></div><input class=\"input-group-text form-control\" id=\"sigOutput\"></input></div></div></div>\n"
 | 
			
		||||
            + "            <h5 class=\"card-title\">调用结果</h5>\n"
 | 
			
		||||
            + "	    <div class=\"input-group mb-3\">\n"
 | 
			
		||||
            + "              <div class=\"input-group-prepend\">\n"
 | 
			
		||||
            + "                <select class=\"custom-select form-control\" onchange='switchContractResult()' style=\"-webkit-appearance:none; appearance:none; height:100%\" id=\"reqIDSpan\"><option>请求ID</option></select>\n"
 | 
			
		||||
            + "              </div>\n"
 | 
			
		||||
            + "		<div class=\"input-group-append\"><span class=\"input-group-text\" id=\"statusSpan\">调用状态</span></div>\n"
 | 
			
		||||
            + "		<div class=\"input-group-append\"><span class=\"input-group-text\" id=\"timeSpan\">调用耗时</span></div>\n"
 | 
			
		||||
            + "		<textarea id=\"responseArea\" class=\"form-control\"></textarea>\n"
 | 
			
		||||
            + "            </div><div class='row mb-3'><div class='col-sm-12 d-flex' id='consistencyResult'> </div></div>"
 | 
			
		||||
            + "            <div class='row'><div class='col-sm-12 d-flex' id='hashDisplayDiv'> </div></div>"
 | 
			
		||||
            + "          </div>\n"
 | 
			
		||||
            + "        </div>\n"
 | 
			
		||||
            + "      </div></div>\n" + "";
 | 
			
		||||
        $("#mainDiv")[0].innerHTML = html;
 | 
			
		||||
        for (const f of global.currentContract.exportedFunctions) {
 | 
			
		||||
            $('#selectAction')
 | 
			
		||||
                .append(`<option value="${f.functionName}">${f.functionName}</option>`);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getContractDesp() {
 | 
			
		||||
    try {
 | 
			
		||||
        const annos = global.currentContract.annotations;
 | 
			
		||||
        for (const anno of annos) {
 | 
			
		||||
            if (anno.type === "Description") {
 | 
			
		||||
                return ", " + JSON.parse(anno.args[0]);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
        console.log(e);
 | 
			
		||||
    }
 | 
			
		||||
    return "";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function triggerExecuteCurrentContract() {
 | 
			
		||||
    const funPos = $("#selectAction")[0].value;
 | 
			
		||||
    console.log(funPos);
 | 
			
		||||
    if (funPos < 0) {
 | 
			
		||||
        $("#dialogBodyDiv").html("请选择方法。");
 | 
			
		||||
        showDialog("提示");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    var funNode;
 | 
			
		||||
    for (var i = 0; i < global.currentContract.exportedFunctions.length; i++) {
 | 
			
		||||
        if (global.currentContract.exportedFunctions[i].functionName == funPos) {
 | 
			
		||||
            funNode = global.currentContract.exportedFunctions[i];
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    console.log(funNode);
 | 
			
		||||
    const argInput = $("#argInput");
 | 
			
		||||
    var contract = global.currentContract;
 | 
			
		||||
    var gas = $("#gasInput")[0].value / 1;
 | 
			
		||||
    executeContractWithGas(contract.id, funNode.functionName, argInput[0].value, gas,
 | 
			
		||||
        fillResultInternal, executeContractAsDebug.checked);
 | 
			
		||||
    var iHtml = "/SCIDE/SCManager?action=executeContract&contractID="
 | 
			
		||||
        + global.currentContract.name + "&operation="
 | 
			
		||||
        + funNode.functionName + "&arg=" + argInput[0].value;
 | 
			
		||||
 | 
			
		||||
    var toSign = global.currentContract.name + "|" + funNode.functionName + "|"
 | 
			
		||||
        + argInput[0].value;
 | 
			
		||||
    if (gas > 0) {
 | 
			
		||||
        toSign += "|" + gas;
 | 
			
		||||
        iHtml += "&gasLimit=" + gas;
 | 
			
		||||
    }
 | 
			
		||||
    iHtml += "&pubkey=" + global.sm2Key.publicKey + "&signature=";
 | 
			
		||||
    toSign += "|" + global.sm2Key.publicKey;
 | 
			
		||||
    const signature = sm2.doSignature(toSign, global.sm2Key.privateKey, {hash: true, der: true});
 | 
			
		||||
    let urlPre = $("#urlInput")[0].value;
 | 
			
		||||
    if (urlPre.startsWith("ws")) {
 | 
			
		||||
        urlPre = urlPre.replace("ws", "http");
 | 
			
		||||
    }
 | 
			
		||||
    $("#sigOutput")[0].value = (urlPre + iHtml + signature);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function showDescription() {
 | 
			
		||||
    const funPos = $("#selectAction")[0].value;
 | 
			
		||||
    console.log($("#selectAction")[0]);
 | 
			
		||||
    console.log(funPos);
 | 
			
		||||
    console.log(global.currentContract.exportedFunctions);
 | 
			
		||||
    var funNode;
 | 
			
		||||
    for (var i = 0; i < global.currentContract.exportedFunctions.length; i++) {
 | 
			
		||||
        if (global.currentContract.exportedFunctions[i].functionName == funPos) {
 | 
			
		||||
            funNode = global.currentContract.exportedFunctions[i];
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    console.log(funNode);
 | 
			
		||||
    for (const anno of funNode.annotations) {
 | 
			
		||||
        if (anno.type === "Description") {
 | 
			
		||||
            descriptionSpan.value = JSON.parse(anno.args[0]);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function fillResultInternal(result, data) {
 | 
			
		||||
    if (global.responseCollector[data.responseID] == undefined) {
 | 
			
		||||
        global.responseCollector[data.responseID] = [];
 | 
			
		||||
        const reqIDSpan = $("#reqIDSpan");
 | 
			
		||||
        reqIDSpan.append("<option value='" + data.responseID + "'>" + data.responseID + "</option>");
 | 
			
		||||
        reqIDSpan[0].value = data.responseID;
 | 
			
		||||
    }
 | 
			
		||||
    global.responseCollector[data.responseID].push(data);
 | 
			
		||||
    $("#statusSpan")[0].innerHTML = result.status;
 | 
			
		||||
    $("#timeSpan")[0].innerHTML = "调用耗时:" + data.executeTime + "(ms)";
 | 
			
		||||
    if (data.executionGas != undefined && data.executionGas > 0)
 | 
			
		||||
        $("#timeSpan")[0].innerHTML += "<br> " + data.executionGas + "(gas)";
 | 
			
		||||
    $("#timeSpan")[0].innerHTML
 | 
			
		||||
    if (result.result instanceof Object) {
 | 
			
		||||
        $("#responseArea")[0].value = JSON.stringify(result.result);
 | 
			
		||||
        $("#timeSpan")[0].innerHTML += "<br> JSON格式";
 | 
			
		||||
    } else {
 | 
			
		||||
        $("#timeSpan")[0].innerHTML += "<br> 字符串格式";
 | 
			
		||||
        $("#responseArea")[0].value = result.result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function parseMainFrame(data) {
 | 
			
		||||
    console.log("parseMainFrame");
 | 
			
		||||
    console.log(data);
 | 
			
		||||
    const mainHtml = data.result;
 | 
			
		||||
    executeCurrentContract("loadResource", mainHtml, loadMain);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function loadMain(data) {
 | 
			
		||||
    const html = data.result;
 | 
			
		||||
    $("#mainDiv").append(html);
 | 
			
		||||
    setTimeout(function () {
 | 
			
		||||
        console.log("listSize:");
 | 
			
		||||
        const scriptList = $("#mainDiv script");
 | 
			
		||||
        global.scriptList = [];
 | 
			
		||||
        global.scriptOrder = 0;
 | 
			
		||||
        console.log("listSize:" + scriptList.length);
 | 
			
		||||
        for (var i = 0; i < scriptList.length; i++) {
 | 
			
		||||
            const script = scriptList[i];
 | 
			
		||||
            const re = script.getAttribute("fromContract");
 | 
			
		||||
            if (!re) {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            global.scriptList.push(re);
 | 
			
		||||
        }
 | 
			
		||||
        if (global.scriptList.length > 0) {
 | 
			
		||||
            executeCurrentContract("loadResource", global.scriptList[0], loadScript);
 | 
			
		||||
        }
 | 
			
		||||
        const linkList = $("#mainDiv link");
 | 
			
		||||
        for (var i = 0; i < linkList.length; i++) {
 | 
			
		||||
            const link = linkList[i];
 | 
			
		||||
            const re = link.getAttribute("fromContract");
 | 
			
		||||
            executeCurrentContract("loadResource", re, loadCss);
 | 
			
		||||
        }
 | 
			
		||||
    }, 100);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function loadScript(data) {
 | 
			
		||||
    console.log("loadScript");
 | 
			
		||||
    global.lastScript = data;
 | 
			
		||||
    setTimeout(eval, 1, global.lastScript.result);
 | 
			
		||||
    global.scriptOrder++;
 | 
			
		||||
    if (global.scriptOrder < global.scriptList.length) {
 | 
			
		||||
        executeCurrentContract("loadResource", global.scriptList[global.scriptOrder], loadScript);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function loadCss(data) {
 | 
			
		||||
    console.log("loadScript");
 | 
			
		||||
    global.lastCss = data;
 | 
			
		||||
    const ele = document.createElement("style");
 | 
			
		||||
    ele.setAttribute("type", "text/css");
 | 
			
		||||
    ele.innerHTML = data.result;
 | 
			
		||||
    document.body.append(ele);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function needRender(con) {
 | 
			
		||||
    for (const fun of con.exportedFunctions) {
 | 
			
		||||
        console.log(fun);
 | 
			
		||||
        if (fun.functionName === "needRender") {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onListContractProcess(data) {
 | 
			
		||||
    console.log(data);
 | 
			
		||||
    console.log(data.data);
 | 
			
		||||
    global.contracts = JSON.parse(data.data);
 | 
			
		||||
    if (global.urlparam["contract"]) {
 | 
			
		||||
        appendTargetContract(global.urlparam["contract"]);
 | 
			
		||||
    } else {
 | 
			
		||||
        renewList();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function renewList() {
 | 
			
		||||
    const selectedContract = $("#selectContract");
 | 
			
		||||
    selectedContract.html("");
 | 
			
		||||
    selectedContract.append("<option value='-1'>选择合约</option>");
 | 
			
		||||
    let selectValue = -1;
 | 
			
		||||
    console.log(global.contracts);
 | 
			
		||||
    console.log(global.contracts.length);
 | 
			
		||||
    for (let i = 0; i < global.contracts.length; ++i) {
 | 
			
		||||
        const c = global.contracts[i];
 | 
			
		||||
        console.log(c);
 | 
			
		||||
        if (c.contractStatus == "KILLED") continue;
 | 
			
		||||
        if (!c.id) {
 | 
			
		||||
            c.id = c.contractID;
 | 
			
		||||
        }
 | 
			
		||||
        if (!c.name) {
 | 
			
		||||
            c.name = c.contractName;
 | 
			
		||||
        }
 | 
			
		||||
        selectedContract.append(`<option value='${i}'>${c.name}</option>`);
 | 
			
		||||
        if (global.urlparam["contract"]) {
 | 
			
		||||
            if (global.urlparam["contract"] === c.name
 | 
			
		||||
                || global.urlparam["contract"] === c.id) {
 | 
			
		||||
                selectValue = i;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    console.log(selectValue);
 | 
			
		||||
    selectedContract[0].value = selectValue;
 | 
			
		||||
    if (global.urlparam["contract"]) {
 | 
			
		||||
        changeApp();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function appendTargetContract(target) {
 | 
			
		||||
    global.wssocket.send(JSON.stringify({
 | 
			
		||||
        action: "listTheContractProcess",
 | 
			
		||||
        contractID: target
 | 
			
		||||
    }));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onListTheContractProcess(target) {
 | 
			
		||||
    console.log(target);
 | 
			
		||||
    const c = JSON.parse(target.data);
 | 
			
		||||
    let hasTheSame = false;
 | 
			
		||||
    if (!global.contracts) {
 | 
			
		||||
        global.contracts = [];
 | 
			
		||||
    }
 | 
			
		||||
    for (const con of global.contracts) {
 | 
			
		||||
        if (con.id === c.id) {
 | 
			
		||||
            hasTheSame = true;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    if (!hasTheSame) {
 | 
			
		||||
        global.contracts.push(c);
 | 
			
		||||
    }
 | 
			
		||||
    renewList();
 | 
			
		||||
    //"884422533"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onListLocalNodeLog(data) {
 | 
			
		||||
    const userManTab = $("#v-pills-userManager-tab")[0];
 | 
			
		||||
    if (userManTab.getAttribute("aria-selected") === "true") {
 | 
			
		||||
        drawUserActivityGraph(data);
 | 
			
		||||
    } else {
 | 
			
		||||
        drawLocalLogGraphs(data);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onListAllAuthRole(data) {
 | 
			
		||||
    console.log("onListAllAuthRole");
 | 
			
		||||
    fillAuthRoleData(data.data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onListUnAuthRole(data) {
 | 
			
		||||
    console.log("onListUnAuthRole");
 | 
			
		||||
    fillUnAuthRoleData(data.data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onApplyNet(data) {
 | 
			
		||||
    console.log("onApplyNet");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onCountRole(data) {
 | 
			
		||||
    console.log("onCountRole");
 | 
			
		||||
    setUserTypeDistribution(data.data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onAuthNodeRole(data) {
 | 
			
		||||
    myToast("授权/忽略操作", data.data);
 | 
			
		||||
    if (data.data === "success") {
 | 
			
		||||
        global.wssocket.send(JSON.stringify({action: "listAllAuthRole"}));
 | 
			
		||||
        global.wssocket.send(JSON.stringify({action: "listUnAuthRole"}));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onApplyRole(data) {
 | 
			
		||||
    console.log(data.data);
 | 
			
		||||
    myToast("申请操作", data.data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function onDeleteRole(data) {
 | 
			
		||||
    myToast("删除操作", data.data);
 | 
			
		||||
    global.wssocket.send(JSON.stringify({action: "listAllAuthRole"}));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ====== wsHandler done!
 | 
			
		||||
 | 
			
		||||
function myToast(title, msg) {
 | 
			
		||||
    toastVue.toastTitle = title;
 | 
			
		||||
    toastVue.toastMessage = msg;
 | 
			
		||||
    $("#alertDiv").toast("show");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function countChar(str, c) {
 | 
			
		||||
    let ret = 0;
 | 
			
		||||
    for (const ch of str) {
 | 
			
		||||
        if (ch === c) {
 | 
			
		||||
            ret++;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function generate() {
 | 
			
		||||
    const key = sm2.generateKeyPairHex();
 | 
			
		||||
    global.sm2Key = key;
 | 
			
		||||
    localStorage.setItem("PrivKey", JSON.stringify(key));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function killAllContract() {
 | 
			
		||||
    global.wssocket.send(JSON.stringify({action: "killAllContract"}));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function init() {
 | 
			
		||||
    const urlParams = getRequestParameters();
 | 
			
		||||
    initVue();
 | 
			
		||||
    initGlobal(urlParams);
 | 
			
		||||
 | 
			
		||||
    if (global.urlparam["noRender"] === "true") {
 | 
			
		||||
        switchRenderBtn.innerHTML = "加载界面";
 | 
			
		||||
    }
 | 
			
		||||
    global.cbs = {};
 | 
			
		||||
 | 
			
		||||
    const urlInput = $("#urlInput");
 | 
			
		||||
    if (global.urlparam["self"] === "true") {
 | 
			
		||||
        if (document.location.href.startsWith("http")) {
 | 
			
		||||
            let path = document.location.origin + document.location.pathname;
 | 
			
		||||
            path = path.replace("/client/bdwareclient.html", "");
 | 
			
		||||
            urlInput[0].value = path.replace("http",
 | 
			
		||||
                "ws");
 | 
			
		||||
            if (global.urlparam["withNodeCenterWS"] === "true") {
 | 
			
		||||
                urlInput[0].value += "/NodeCenterWS";
 | 
			
		||||
            }
 | 
			
		||||
            connectNode();
 | 
			
		||||
        }
 | 
			
		||||
    } else if (global.urlparam["nodeAddr"]) {
 | 
			
		||||
        urlInput[0].value = global.urlparam["nodeAddr"];
 | 
			
		||||
        connectNode();
 | 
			
		||||
    } else {
 | 
			
		||||
        const lastNode = localStorage.getItem("lastNode");
 | 
			
		||||
        if (lastNode) {
 | 
			
		||||
            urlInput[0].value = lastNode;
 | 
			
		||||
            connectNode();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function connectNode() {
 | 
			
		||||
    localStorage.setItem("lastNode", $("#urlInput")[0].value);
 | 
			
		||||
    initWSocket();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function getRequestParameters() {
 | 
			
		||||
    if (isBaaS) {
 | 
			
		||||
        let params = location.href.replace(/[^#]*(#(\/)?|\?)/, '')
 | 
			
		||||
        let url = location.href.replace(params, '')
 | 
			
		||||
        while (!params) {
 | 
			
		||||
            url = url.replace(/(#(\/)?|\?)$/, '')
 | 
			
		||||
            params = url.replace(/[^#]*(#(\/)?|\?)/, '')
 | 
			
		||||
            url = url.replace(params, '')
 | 
			
		||||
        }
 | 
			
		||||
        if (url.endsWith('#') || url.endsWith('#\/')) {
 | 
			
		||||
            let sKey = Math.random().toString()
 | 
			
		||||
            localStorage.setItem(sKey, params)
 | 
			
		||||
            location.href = url.replace(/#(\/)?/, '?' + sKey)
 | 
			
		||||
        } else {
 | 
			
		||||
            let json = atob(localStorage.getItem(params))
 | 
			
		||||
            try {
 | 
			
		||||
                return JSON.parse(json);
 | 
			
		||||
            } catch (e) {
 | 
			
		||||
                localStorage.removeItem(params)
 | 
			
		||||
                alert('链接失效!')
 | 
			
		||||
                location.href = location.origin
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        const arr = (location.search || "").replace(/^\?/, '').split("&");
 | 
			
		||||
        const params = {};
 | 
			
		||||
        for (const a of arr) {
 | 
			
		||||
            const data = a.split("=");
 | 
			
		||||
            if (data.length === 2) {
 | 
			
		||||
                params[data[0]] = data[1];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return params;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function changeRender() {
 | 
			
		||||
    if (global.urlparam["noRender"] === "true") {
 | 
			
		||||
        global.urlparam["noRender"] = undefined;
 | 
			
		||||
        switchRenderBtn.innerHTML = "不加载界面";
 | 
			
		||||
    } else {
 | 
			
		||||
        global.urlparam["noRender"] = "true";
 | 
			
		||||
        switchRenderBtn.innerHTML = "加载界面";
 | 
			
		||||
    }
 | 
			
		||||
    changeApp();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								src/client/js/bootstrap.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										243
									
								
								src/client/js/commonutil.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,243 @@
 | 
			
		||||
var getDateDaysBefore = function (daysAgo) {
 | 
			
		||||
    var dateStr = new Date().toISOString().substring(0, 10);
 | 
			
		||||
    return new Date(dateStr).getTime() - daysAgo * 24 * 3600 * 1000;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
let primaryColor = "#2E324C";
 | 
			
		||||
 | 
			
		||||
// ======Vue start
 | 
			
		||||
var headerVue = "";
 | 
			
		||||
var pubkeyDialogVue = "";
 | 
			
		||||
var mainVue = "";
 | 
			
		||||
 | 
			
		||||
var select = "";
 | 
			
		||||
var initVue = function () {
 | 
			
		||||
    console.log("[nodePortal.js] initVue : ");
 | 
			
		||||
    headerVue = new Vue({
 | 
			
		||||
        el: 'header',
 | 
			
		||||
        data: {
 | 
			
		||||
            shortName: "00000"
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    pubkeyDialogVue = new Vue({
 | 
			
		||||
        el: '#pubkeyDialog',
 | 
			
		||||
        data: {
 | 
			
		||||
            sm2KeyStr: "00000",
 | 
			
		||||
            myRole: "匿名用户",
 | 
			
		||||
            test: "0",
 | 
			
		||||
            selectedSM2Key: "0",
 | 
			
		||||
            productList: [{id: 0, title: "ContractProvider"}, {id: 1, title: "ContractUser"}, {
 | 
			
		||||
                id: 2,
 | 
			
		||||
                title: "ContractInstanceManager"
 | 
			
		||||
            }],
 | 
			
		||||
            sm2KeyList: []
 | 
			
		||||
        },
 | 
			
		||||
        methods: {
 | 
			
		||||
            importPubkey: function () {
 | 
			
		||||
                console.log("importkey trigged");
 | 
			
		||||
                try {
 | 
			
		||||
                    var sm2Key = JSON.parse(this.sm2KeyStr);
 | 
			
		||||
                    if (!sm2Key.publicKey || !sm2Key.privateKey) {
 | 
			
		||||
                        this.sm2KeyStr = (JSON.stringify(global.sm2Key));
 | 
			
		||||
                    } else {
 | 
			
		||||
                        global.sm2Key = sm2Key;
 | 
			
		||||
                        localStorage.setItem("PrivKey", JSON
 | 
			
		||||
                            .stringify(sm2Key));
 | 
			
		||||
                        headerVue.shortName = global.sm2Key.publicKey
 | 
			
		||||
                            .substr(0, 5);
 | 
			
		||||
                        var newKey = {};
 | 
			
		||||
                        newKey.id = this.sm2KeyList.length;
 | 
			
		||||
                        newKey.title = headerVue.shortName;
 | 
			
		||||
                        newKey.sm2Key = this.sm2KeyStr;
 | 
			
		||||
                        this.sm2KeyList.push(newKey);
 | 
			
		||||
                        localStorage.setItem("PrivKeyList", JSON.stringify(this.sm2KeyList));
 | 
			
		||||
 | 
			
		||||
                        getSession();
 | 
			
		||||
                        listProjects("priv");
 | 
			
		||||
                    }
 | 
			
		||||
                } catch (e) {
 | 
			
		||||
                    console.log(e);
 | 
			
		||||
                    this.sm2KeyStr = (JSON.stringify(global.sm2Key));
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            generatePubkey: function () {
 | 
			
		||||
                console.log("generate pubkey trigged");
 | 
			
		||||
                var sm2Key = sm2.generateKeyPairHex();
 | 
			
		||||
                this.sm2KeyStr = JSON.stringify(sm2Key);
 | 
			
		||||
                global.sm2Key = sm2Key;
 | 
			
		||||
                localStorage.setItem("PrivKey", JSON
 | 
			
		||||
                    .stringify(sm2Key));
 | 
			
		||||
                headerVue.shortName = global.sm2Key.publicKey
 | 
			
		||||
                    .substr(0, 5);
 | 
			
		||||
                var newKey = {};
 | 
			
		||||
                newKey.id = this.sm2KeyList.length;
 | 
			
		||||
                newKey.title = headerVue.shortName;
 | 
			
		||||
                newKey.sm2Key = this.sm2KeyStr;
 | 
			
		||||
                this.sm2KeyList.push(newKey);
 | 
			
		||||
                this.selectedSM2Key = newKey.id;
 | 
			
		||||
                localStorage.setItem("PrivKeyList", JSON.stringify(this.sm2KeyList));
 | 
			
		||||
                getSession();
 | 
			
		||||
            },
 | 
			
		||||
            changeProduct(event) {
 | 
			
		||||
                this.test = event.target.value; // 获取option对应的value值
 | 
			
		||||
                this.role = this.productList[this.test].title;
 | 
			
		||||
                console.log("选了", this.role);
 | 
			
		||||
                global.role = this.role;
 | 
			
		||||
            },
 | 
			
		||||
            apply: function () {
 | 
			
		||||
                console.log("apply");
 | 
			
		||||
                global.wssocket
 | 
			
		||||
                    .send("{\"action\":\"applyNet\",\"role\":\"NodeManager\"}");
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            applyRole: function () {
 | 
			
		||||
                var role = this.productList[this.test];
 | 
			
		||||
                console.log("applyRole, " + role);
 | 
			
		||||
                applyRole(role.title);
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            changeSM2Key: function (event) {
 | 
			
		||||
                var order = event.target.value; // 获取option对应的value值
 | 
			
		||||
                if (!order)
 | 
			
		||||
                    return;
 | 
			
		||||
                console.log("changeSM2Key, -->" + order);
 | 
			
		||||
                headerVue.shortName = this.sm2KeyList[order].title;
 | 
			
		||||
                this.selectedSM2Key = order;
 | 
			
		||||
                this.sm2KeyStr = this.sm2KeyList[order].sm2Key;
 | 
			
		||||
                global.sm2Key = JSON.parse(this.sm2KeyStr);
 | 
			
		||||
                localStorage.setItem("PrivKey", this.sm2KeyStr);
 | 
			
		||||
                getSession();
 | 
			
		||||
            },
 | 
			
		||||
            deletePubkey: function (event) {
 | 
			
		||||
                var order = this.selectedSM2Key;
 | 
			
		||||
                var obj = this.sm2KeyList[order];
 | 
			
		||||
                if (this.sm2KeyList.length === 1) {
 | 
			
		||||
                    alert("最后一对密钥不可以删除");
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                var newList = [];
 | 
			
		||||
                for (var i = 0; i < order; i++) {
 | 
			
		||||
                    newList.push(this.sm2KeyList[i]);
 | 
			
		||||
                }
 | 
			
		||||
                for (var i = order / 1 + 1; i < this.sm2KeyList.length; i++) {
 | 
			
		||||
                    newList.push(this.sm2KeyList[i]);
 | 
			
		||||
                }
 | 
			
		||||
                this.sm2KeyList = newList;
 | 
			
		||||
                for (var i = 0; i < newList.length; i++) {
 | 
			
		||||
                    newList[i].id = i;
 | 
			
		||||
                }
 | 
			
		||||
                if (order >= newList.length) {
 | 
			
		||||
                    order--;
 | 
			
		||||
                }
 | 
			
		||||
                console.log("after delete, size:" + newList.length + " order:" + order);
 | 
			
		||||
                localStorage.setItem("PrivKeyList", JSON.stringify(newList));
 | 
			
		||||
                headerVue.shortName = this.sm2KeyList[order].title;
 | 
			
		||||
                this.selectedSM2Key = order + "";
 | 
			
		||||
                this.sm2KeyStr = this.sm2KeyList[order].sm2Key;
 | 
			
		||||
                global.sm2Key = JSON.parse(this.sm2KeyStr);
 | 
			
		||||
                localStorage.setItem("PrivKey", this.sm2KeyStr);
 | 
			
		||||
                getSession();
 | 
			
		||||
            },
 | 
			
		||||
            exportPubkey: function (event) {
 | 
			
		||||
                var uri = "data:text/html,";
 | 
			
		||||
                uri += localStorage.getItem("PrivKeyList");
 | 
			
		||||
                var link = document.createElement("a");
 | 
			
		||||
                link.download = "sm2keyList.json";
 | 
			
		||||
                link.href = uri;
 | 
			
		||||
                document.body.appendChild(link);
 | 
			
		||||
                link.click();
 | 
			
		||||
                document.body.removeChild(link);
 | 
			
		||||
                delete link;
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    mainVue = new Vue({
 | 
			
		||||
        el: "#main",
 | 
			
		||||
        data: {
 | 
			
		||||
            licenceDueDate: "已过期",
 | 
			
		||||
            licenceNodes: 0,
 | 
			
		||||
            offlineLicence: undefined,
 | 
			
		||||
            licenceRemark: undefined,
 | 
			
		||||
            userCount: ".",
 | 
			
		||||
            contractCount: ".",
 | 
			
		||||
            nodeCount: ".",
 | 
			
		||||
            eventCount: ".",
 | 
			
		||||
            unitCount: ".",
 | 
			
		||||
            pubDialogVue: {},
 | 
			
		||||
            projects: [],
 | 
			
		||||
            contracts: [],
 | 
			
		||||
            contractFunctions: [],
 | 
			
		||||
            openedFiles: [{
 | 
			
		||||
                isDir: false,
 | 
			
		||||
                val: "Please Checkout code from left side!",
 | 
			
		||||
                path: "Hello",
 | 
			
		||||
                name: "Hello"
 | 
			
		||||
            }]
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ======Vue done
 | 
			
		||||
 | 
			
		||||
function initGlobal(urlParams) {
 | 
			
		||||
    if (!window.global) {
 | 
			
		||||
        window.global = {};
 | 
			
		||||
    }
 | 
			
		||||
    global.result = "";
 | 
			
		||||
    if (isBaaS) {
 | 
			
		||||
        primaryColor = '#08263a'
 | 
			
		||||
    }
 | 
			
		||||
    if (urlParams) {
 | 
			
		||||
        global.urlparam = urlParams;
 | 
			
		||||
    }
 | 
			
		||||
    if (urlParams && urlParams.keys) {
 | 
			
		||||
        global.sm2Key = urlParams.keys;
 | 
			
		||||
    } else {
 | 
			
		||||
        global.sm2Key = localStorage.getItem("PrivKey");
 | 
			
		||||
        if (!global.sm2Key || global.sm2Key.length < 100) {
 | 
			
		||||
            generate();
 | 
			
		||||
        } else {
 | 
			
		||||
            global.sm2Key = JSON.parse(global.sm2Key);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    headerVue.shortName = global.sm2Key.publicKey.substr(0, 5);
 | 
			
		||||
    pubkeyDialogVue.sm2KeyStr = JSON.stringify(global.sm2Key);
 | 
			
		||||
    mainVue.pubDialogVue = pubkeyDialogVue;
 | 
			
		||||
    const keyListStr = localStorage.getItem("PrivKeyList");
 | 
			
		||||
    const keyObj = {};
 | 
			
		||||
    if (!keyListStr) {
 | 
			
		||||
        keyObj.id = 0;
 | 
			
		||||
        keyObj.title = headerVue.shortName;
 | 
			
		||||
        keyObj.sm2Key = pubkeyDialogVue.sm2KeyStr;
 | 
			
		||||
        pubkeyDialogVue.sm2KeyList = [];
 | 
			
		||||
        pubkeyDialogVue.sm2KeyList.push(keyObj);
 | 
			
		||||
        pubkeyDialogVue.selectedSM2Key = 0;
 | 
			
		||||
        // mainVue.sm2KeyList = pubkeyDialogVue.sm2KeyList;
 | 
			
		||||
        // mainVue.selectedSM2Key = 0;
 | 
			
		||||
    } else {
 | 
			
		||||
        pubkeyDialogVue.sm2KeyList = JSON.parse(keyListStr);
 | 
			
		||||
        pubkeyDialogVue.selectedSM2Key = -1;
 | 
			
		||||
        for (let i = 0; i < pubkeyDialogVue.sm2KeyList.length; i++) {
 | 
			
		||||
            const obj = pubkeyDialogVue.sm2KeyList[i];
 | 
			
		||||
            if (obj.sm2Key === pubkeyDialogVue.sm2KeyStr) {
 | 
			
		||||
                pubkeyDialogVue.selectedSM2Key = i;
 | 
			
		||||
                // mainVue.sm2KeyList = pubkeyDialogVue.sm2KeyList;
 | 
			
		||||
                // mainVue.selectedSM2Key = pubkeyDialogVue.selectedSM2Key;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        keyObj.id = pubkeyDialogVue.sm2KeyList.length;
 | 
			
		||||
        keyObj.title = headerVue.shortName;
 | 
			
		||||
        keyObj.sm2Key = pubkeyDialogVue.sm2KeyStr;
 | 
			
		||||
        pubkeyDialogVue.sm2KeyList.push(keyObj);
 | 
			
		||||
        pubkeyDialogVue.selectedSM2Key = keyObj.id;
 | 
			
		||||
        // mainVue.sm2KeyList = pubkeyDialogVue.sm2KeyList;
 | 
			
		||||
        // mainVue.selectedSM2Key = pubkeyDialogVue.selectedSM2Key;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										283
									
								
								src/client/js/createWS.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,283 @@
 | 
			
		||||
var createWssocket = function (wsurl, onopen, handler) {
 | 
			
		||||
    console.log("[createWS.js] createWssocket : " + wsurl);
 | 
			
		||||
    var retsocket = {};
 | 
			
		||||
    retsocket.handlerList = [];
 | 
			
		||||
    if (handler)
 | 
			
		||||
        retsocket.handlerList.push(handler);
 | 
			
		||||
    var wssocket = new WebSocket(wsurl);
 | 
			
		||||
    wssocket.onerror = function (error) {
 | 
			
		||||
        console.log(error);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    wssocket.onopen = onopen;
 | 
			
		||||
    var onmessage = function (event) {
 | 
			
		||||
        var obj = JSON.parse(event.data);
 | 
			
		||||
        switch (obj.action) {
 | 
			
		||||
            case 'sendNextSegment':
 | 
			
		||||
                retsocket.sendNextSegment();
 | 
			
		||||
                break;
 | 
			
		||||
            case 'sendSeg':
 | 
			
		||||
                retsocket.receiveSeg(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                for (var i = 0; i < retsocket.handlerList.length; i++) {
 | 
			
		||||
                    var h = retsocket.handlerList[i];
 | 
			
		||||
                    h(event, wssocket);
 | 
			
		||||
                }
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    var reconnect = function (error) {
 | 
			
		||||
        setTimeout(function () {
 | 
			
		||||
            console.log("[createWS.js] try to reconnect");
 | 
			
		||||
            wssocket = new WebSocket(wsurl);
 | 
			
		||||
            wssocket.onclose = reconnect;
 | 
			
		||||
            wssocket.onmessage = onmessage;
 | 
			
		||||
            wssocket.onopen = onopen;
 | 
			
		||||
        }, 1000);
 | 
			
		||||
    };
 | 
			
		||||
    wssocket.onclose = reconnect;
 | 
			
		||||
 | 
			
		||||
    retsocket.receiveSeg = function (obj) {
 | 
			
		||||
        if (obj.cid === 'start') {
 | 
			
		||||
            retsocket.toReceive = "";
 | 
			
		||||
        }
 | 
			
		||||
        retsocket.toReceive += obj.data;
 | 
			
		||||
        if (obj.cid === 'done') {
 | 
			
		||||
            console.log("[receiveSeg] Received AllData:" + retsocket.toReceive);
 | 
			
		||||
            var event = {};
 | 
			
		||||
            event.data = retsocket.toReceive;
 | 
			
		||||
            retsocket.toReceive = "";
 | 
			
		||||
            handler(event);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    wssocket.onmessage = onmessage;
 | 
			
		||||
 | 
			
		||||
    retsocket.isSending = false;
 | 
			
		||||
    retsocket.sendList = [];
 | 
			
		||||
    retsocket.monitor = function () {
 | 
			
		||||
        if (!retsocket.isSending) {
 | 
			
		||||
            if (retsocket.sendList.length > 0) {
 | 
			
		||||
                retsocket.send(retsocket.sendList.pop());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        setTimeout(retsocket.monitor, 1000);
 | 
			
		||||
    };
 | 
			
		||||
    // TODO: we don't need monitor at all?
 | 
			
		||||
    retsocket.monitor();
 | 
			
		||||
    retsocket.send = function (str) {
 | 
			
		||||
        if (retsocket.isSending) {
 | 
			
		||||
            retsocket.sendList.push(str);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (str.length > 1024) {
 | 
			
		||||
            retsocket.isSending = true;
 | 
			
		||||
            retsocket.toSend = str.substr(1024);
 | 
			
		||||
            var obj = {};
 | 
			
		||||
            obj.isSegment = true;
 | 
			
		||||
            obj.data = str.substr(0, 1024);
 | 
			
		||||
            wssocket.send(JSON.stringify(obj));
 | 
			
		||||
        } else
 | 
			
		||||
            wssocket.send(str);
 | 
			
		||||
    };
 | 
			
		||||
    retsocket.sendNextSegment = function () {
 | 
			
		||||
        var str = retsocket.toSend;
 | 
			
		||||
        const obj = {};
 | 
			
		||||
        if (str.length > 1024) {
 | 
			
		||||
            retsocket.toSend = str.substr(1024);
 | 
			
		||||
            obj.isSegment = true;
 | 
			
		||||
            obj.data = str.substr(0, 1024);
 | 
			
		||||
            wssocket.send(JSON.stringify(obj));
 | 
			
		||||
        } else {
 | 
			
		||||
            retsocket.toSend = "";
 | 
			
		||||
            obj.isSegment = false;
 | 
			
		||||
            obj.data = str;
 | 
			
		||||
            wssocket.send(JSON.stringify(obj));
 | 
			
		||||
            retsocket.isSending = false;
 | 
			
		||||
            if (retsocket.sendList.length > 0) {
 | 
			
		||||
                retsocket.send(retsocket.sendList.pop());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    retsocket.isOpen = function () {
 | 
			
		||||
        return wssocket.readyState;
 | 
			
		||||
    }
 | 
			
		||||
    retsocket.addHandler = function (handler) {
 | 
			
		||||
        retsocket.handlerList.push(handler);
 | 
			
		||||
    }
 | 
			
		||||
    return retsocket;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var aesDecrypt = function (data) {
 | 
			
		||||
    data = cryptico.b64to256(data);
 | 
			
		||||
    var encryptedBlocks = cryptico.string2bytes(data);
 | 
			
		||||
    var exkey = global.aesKey.slice(0);
 | 
			
		||||
    aes.ExpandKey(exkey);
 | 
			
		||||
    aes.Decrypt(encryptedBlocks, exkey);
 | 
			
		||||
    return cryptico.bytes2string(encryptedBlocks);
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
var aesEncrypt = function (data, aesKey) {
 | 
			
		||||
    var exkey = aesKey.slice(0);
 | 
			
		||||
    aes.ExpandKey(exkey);
 | 
			
		||||
    var blocks = my.string2bytes(data);
 | 
			
		||||
    blocks = my.pad16(blocks);
 | 
			
		||||
    aes.Encrypt(blocks, exkey);
 | 
			
		||||
    ciphertext = cryptico.bytes2string(blocks);
 | 
			
		||||
    ciphertext = cryptico.b256to64(ciphertext);
 | 
			
		||||
    return ciphertext;
 | 
			
		||||
};
 | 
			
		||||
var rsaEncrypt = function (data, rsaKey) {
 | 
			
		||||
    var rsa = new RSAKey();
 | 
			
		||||
    rsa.setPublic(rsaKey.n, rsaKey.e1);
 | 
			
		||||
    return rsa.encrypt(data);
 | 
			
		||||
};
 | 
			
		||||
var loadRSAKey = function (rsaKey) {
 | 
			
		||||
    var str = cryptico.b64to256(rsaKey);
 | 
			
		||||
    str = str.split(",");
 | 
			
		||||
    var ret = {};
 | 
			
		||||
    ret.n = str[0];
 | 
			
		||||
    ret.e1 = str[1];
 | 
			
		||||
    ret.e2 = str[2];
 | 
			
		||||
    return ret;
 | 
			
		||||
};
 | 
			
		||||
var testRSA = function () {
 | 
			
		||||
    pubKey = loadRSAKey(global.privKey);
 | 
			
		||||
    reqContent = {};
 | 
			
		||||
    reqContent.action = "main";
 | 
			
		||||
    reqContent.arg = "[{\"score\":20},{\"score\":20}]";
 | 
			
		||||
    reqContent.contractID = "abc";
 | 
			
		||||
    eReq = encryptReq(reqContent, pubKey);
 | 
			
		||||
    url = "http://localhost:8080/SCIDE/SCManager?action=executeContractEncrypted&contractRequest="
 | 
			
		||||
        + encodeURIComponent(JSON.stringify(eReq));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var encryptReq = function (reqContent, pubKey) {
 | 
			
		||||
    // global.pubKey = loadRSAKey(global.privKey);
 | 
			
		||||
    var aes = {};
 | 
			
		||||
    aes.key = cryptico.generateAESKey();
 | 
			
		||||
    var aesObj = JSON.stringify(aes);
 | 
			
		||||
    var rsa = new RSAKey();
 | 
			
		||||
    rsa.setPrivate(pubKey.n, pubKey.e1, pubKey.e2);
 | 
			
		||||
    var encrypedReq = {};
 | 
			
		||||
    encrypedReq.action = rsa.decrypt(aesObj);
 | 
			
		||||
    encrypedReq.contractID = reqContent.contractID;
 | 
			
		||||
    reqContent.contractID = undefined;
 | 
			
		||||
    encrypedReq.arg = JSON.stringify(reqContent);
 | 
			
		||||
    encrypedReq.arg = aesEncrypt(encrypedReq.arg, aes.key);
 | 
			
		||||
    encrypedReq.requester = pubKey.n + "," + pubKey.e1 + "," + "0";
 | 
			
		||||
    encrypedReq.requester = cryptico.b256to64(encrypedReq.requester);
 | 
			
		||||
    return encrypedReq;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onExecuteResultInternal = function (data) {
 | 
			
		||||
    console.log(data);
 | 
			
		||||
    global.executeResult = data;
 | 
			
		||||
    var reqId = data.responseID;
 | 
			
		||||
    var callback = global.cbs[data.responseID];
 | 
			
		||||
    if (callback) {
 | 
			
		||||
        callback(global.executeResult, data);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
window.executeContractWithGas = function (contractID, method, strarg, gas, cb, asDebug) {
 | 
			
		||||
    var sm2Key = global.sm2Key;
 | 
			
		||||
    var request = {};
 | 
			
		||||
    request.action = "executeContract";
 | 
			
		||||
    request.requestID = new Date().getTime() + "_"
 | 
			
		||||
        + Math.floor(Math.random() * 10000);
 | 
			
		||||
    if (asDebug)
 | 
			
		||||
       request.isDebug = true;
 | 
			
		||||
    global.cbs[request.requestID] = cb;
 | 
			
		||||
    request.contractID = contractID;
 | 
			
		||||
    request.operation = method;
 | 
			
		||||
    request.arg = strarg;
 | 
			
		||||
    if (sm2Key) {
 | 
			
		||||
        request.pubkey = sm2Key.publicKey;
 | 
			
		||||
        var toSign = request.contractID + "|"
 | 
			
		||||
                                 + method + "|" + strarg ;
 | 
			
		||||
        if (gas>0){
 | 
			
		||||
              request.gasLimit = gas;
 | 
			
		||||
              toSign+= "|" + gas;
 | 
			
		||||
        }
 | 
			
		||||
        toSign+= "|" + sm2Key.publicKey;
 | 
			
		||||
        request.signature = sm2.doSignature(toSign ,
 | 
			
		||||
            sm2Key.privateKey, {hash: true, der: true});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    global.wssocket.send(JSON.stringify(request));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
window.executeContract = function (contractID, method, strarg, cb, asDebug) {
 | 
			
		||||
    var sm2Key = global.sm2Key;
 | 
			
		||||
    var request = {};
 | 
			
		||||
    request.action = "executeContract";
 | 
			
		||||
    request.requestID = new Date().getTime() + "_"
 | 
			
		||||
        + Math.floor(Math.random() * 10000);
 | 
			
		||||
    if (asDebug)
 | 
			
		||||
       request.isDebug = true;
 | 
			
		||||
    global.cbs[request.requestID] = cb;
 | 
			
		||||
    request.contractID = contractID;
 | 
			
		||||
    request.operation = method;
 | 
			
		||||
    request.arg = strarg;
 | 
			
		||||
 | 
			
		||||
    if (sm2Key) {
 | 
			
		||||
        request.pubkey = sm2Key.publicKey;
 | 
			
		||||
        request.signature = sm2.doSignature(request.contractID + "|"
 | 
			
		||||
            + method + "|" + strarg + "|" + sm2Key.publicKey,
 | 
			
		||||
            sm2Key.privateKey, {hash: true, der: true});
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    global.wssocket.send(JSON.stringify(request));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
window.executeCurrentContract = function (method, strarg, cb) {
 | 
			
		||||
    console.log("executeCurrentContract");
 | 
			
		||||
    var contract = global.currentContract;
 | 
			
		||||
    executeContract(contract.id, method, strarg, cb);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
window.loadBDWareWebSDK = function (url, onopen, handler) {
 | 
			
		||||
    if (!window.global) {
 | 
			
		||||
        window.global = {};
 | 
			
		||||
    }
 | 
			
		||||
    if (!global.sm2Key) {
 | 
			
		||||
        if (sm2)
 | 
			
		||||
            global.sm2Key = sm2.generateKeyPairHex();
 | 
			
		||||
    }
 | 
			
		||||
    if (!global.cbs) {
 | 
			
		||||
        global.cbs = {};
 | 
			
		||||
    }
 | 
			
		||||
    if (!global.wssocket) {
 | 
			
		||||
        global.wssocket = createWssocket(url, onopen, function (event, wss) {
 | 
			
		||||
            var data = event.data;
 | 
			
		||||
            var obj = JSON.parse(data);
 | 
			
		||||
            switch (obj.action) {
 | 
			
		||||
                case 'onExecuteResult':
 | 
			
		||||
                    onExecuteResultInternal(obj);
 | 
			
		||||
                default:
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
            handler(event, global.wssocket);
 | 
			
		||||
        });
 | 
			
		||||
    } else {
 | 
			
		||||
        if (onopen)
 | 
			
		||||
            onopen();
 | 
			
		||||
        global.wssocket.addHandler(handler);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
// Usage:
 | 
			
		||||
// Approach 1:
 | 
			
		||||
// var url = "ws://" +
 | 
			
		||||
// document.location.host+(document.location.pathname.replace("scide.html",
 | 
			
		||||
// "SCExecutor"));
 | 
			
		||||
// global.wssocket = createWssocket(url, WSHandler);
 | 
			
		||||
 | 
			
		||||
// Approach 2:
 | 
			
		||||
// loadBDWareWebSDK(url,function(){},WSHandler);
 | 
			
		||||
// global.currentContract = {'id':'DataAnalysisSample'};
 | 
			
		||||
// executeContract("contractID","methodName","arg",function(data){
 | 
			
		||||
// });
 | 
			
		||||
// executeCurrentContract("methodName","arg",function(data){
 | 
			
		||||
// });
 | 
			
		||||
// the bdware client won't call this method
 | 
			
		||||
							
								
								
									
										3560
									
								
								src/client/js/cryptico.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										9210
									
								
								src/client/js/jquery-2.1.4.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										2101
									
								
								src/client/js/sm2.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										11965
									
								
								src/client/js/vue.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										392
									
								
								src/css/bootstrap-select.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,392 @@
 | 
			
		||||
/*!
 | 
			
		||||
 * Bootstrap-select v1.13.1 (https://developer.snapappointments.com/bootstrap-select)
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright 2012-2018 SnapAppointments, LLC
 | 
			
		||||
 * Licensed under MIT (https://github.com/snapappointments/bootstrap-select/blob/master/LICENSE)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
select.bs-select-hidden,
 | 
			
		||||
.bootstrap-select > select.bs-select-hidden,
 | 
			
		||||
select.selectpicker {
 | 
			
		||||
  display: none !important;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select {
 | 
			
		||||
  width: 220px \0;
 | 
			
		||||
  /*IE9 and below*/
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select > .dropdown-toggle {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  z-index: 1;
 | 
			
		||||
  text-align: right;
 | 
			
		||||
  white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder:hover,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder:focus,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder:active {
 | 
			
		||||
  color: #999;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:hover,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:hover,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:hover,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:hover,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:hover,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:hover,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:focus,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:focus,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:focus,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:focus,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:focus,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:focus,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-primary:active,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-secondary:active,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-success:active,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-danger:active,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-info:active,
 | 
			
		||||
.bootstrap-select > .dropdown-toggle.bs-placeholder.btn-dark:active {
 | 
			
		||||
  color: rgba(255, 255, 255, 0.5);
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select > select {
 | 
			
		||||
  position: absolute !important;
 | 
			
		||||
  bottom: 0;
 | 
			
		||||
  left: 50%;
 | 
			
		||||
  display: block !important;
 | 
			
		||||
  width: 0.5px !important;
 | 
			
		||||
  height: 100% !important;
 | 
			
		||||
  padding: 0 !important;
 | 
			
		||||
  opacity: 0 !important;
 | 
			
		||||
  border: none;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select > select.mobile-device {
 | 
			
		||||
  top: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  display: block !important;
 | 
			
		||||
  width: 100% !important;
 | 
			
		||||
  z-index: 2;
 | 
			
		||||
}
 | 
			
		||||
.has-error .bootstrap-select .dropdown-toggle,
 | 
			
		||||
.error .bootstrap-select .dropdown-toggle,
 | 
			
		||||
.bootstrap-select.is-invalid .dropdown-toggle,
 | 
			
		||||
.was-validated .bootstrap-select .selectpicker:invalid + .dropdown-toggle {
 | 
			
		||||
  border-color: #b94a48;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.is-valid .dropdown-toggle,
 | 
			
		||||
.was-validated .bootstrap-select .selectpicker:valid + .dropdown-toggle {
 | 
			
		||||
  border-color: #28a745;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.fit-width {
 | 
			
		||||
  width: auto !important;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select:not([class*="col-"]):not([class*="form-control"]):not(.input-group-btn) {
 | 
			
		||||
  width: 220px;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-toggle:focus {
 | 
			
		||||
  outline: thin dotted #333333 !important;
 | 
			
		||||
  outline: 5px auto -webkit-focus-ring-color !important;
 | 
			
		||||
  outline-offset: -2px;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.form-control {
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  border: none;
 | 
			
		||||
}
 | 
			
		||||
:not(.input-group) > .bootstrap-select.form-control:not([class*="col-"]) {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.form-control.input-group-btn {
 | 
			
		||||
  z-index: auto;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child) > .btn {
 | 
			
		||||
  border-radius: 0;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select:not(.input-group-btn),
 | 
			
		||||
.bootstrap-select[class*="col-"] {
 | 
			
		||||
  float: none;
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  margin-left: 0;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.dropdown-menu-right,
 | 
			
		||||
.bootstrap-select[class*="col-"].dropdown-menu-right,
 | 
			
		||||
.row .bootstrap-select[class*="col-"].dropdown-menu-right {
 | 
			
		||||
  float: right;
 | 
			
		||||
}
 | 
			
		||||
.form-inline .bootstrap-select,
 | 
			
		||||
.form-horizontal .bootstrap-select,
 | 
			
		||||
.form-group .bootstrap-select {
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.form-group-lg .bootstrap-select.form-control,
 | 
			
		||||
.form-group-sm .bootstrap-select.form-control {
 | 
			
		||||
  padding: 0;
 | 
			
		||||
}
 | 
			
		||||
.form-group-lg .bootstrap-select.form-control .dropdown-toggle,
 | 
			
		||||
.form-group-sm .bootstrap-select.form-control .dropdown-toggle {
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  font-size: inherit;
 | 
			
		||||
  line-height: inherit;
 | 
			
		||||
  border-radius: inherit;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.form-control-sm .dropdown-toggle,
 | 
			
		||||
.bootstrap-select.form-control-lg .dropdown-toggle {
 | 
			
		||||
  font-size: inherit;
 | 
			
		||||
  line-height: inherit;
 | 
			
		||||
  border-radius: inherit;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.form-control-sm .dropdown-toggle {
 | 
			
		||||
  padding: 0.25rem 0.5rem;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.form-control-lg .dropdown-toggle {
 | 
			
		||||
  padding: 0.5rem 1rem;
 | 
			
		||||
}
 | 
			
		||||
.form-inline .bootstrap-select .form-control {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.disabled,
 | 
			
		||||
.bootstrap-select > .disabled {
 | 
			
		||||
  cursor: not-allowed;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.disabled:focus,
 | 
			
		||||
.bootstrap-select > .disabled:focus {
 | 
			
		||||
  outline: none !important;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.bs-container {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  height: 0 !important;
 | 
			
		||||
  padding: 0 !important;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.bs-container .dropdown-menu {
 | 
			
		||||
  z-index: 1060;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-toggle:before {
 | 
			
		||||
  content: '';
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-toggle .filter-option {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 0;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  padding-top: inherit;
 | 
			
		||||
  padding-right: inherit;
 | 
			
		||||
  padding-bottom: inherit;
 | 
			
		||||
  padding-left: inherit;
 | 
			
		||||
  height: 100%;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  text-align: left;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-toggle .filter-option-inner {
 | 
			
		||||
  padding-right: inherit;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-toggle .filter-option-inner-inner {
 | 
			
		||||
  overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-toggle .caret {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 50%;
 | 
			
		||||
  right: 12px;
 | 
			
		||||
  margin-top: -2px;
 | 
			
		||||
  vertical-align: middle;
 | 
			
		||||
}
 | 
			
		||||
.input-group .bootstrap-select.form-control .dropdown-toggle {
 | 
			
		||||
  border-radius: inherit;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select[class*="col-"] .dropdown-toggle {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu {
 | 
			
		||||
  min-width: 100%;
 | 
			
		||||
  -webkit-box-sizing: border-box;
 | 
			
		||||
     -moz-box-sizing: border-box;
 | 
			
		||||
          box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu > .inner:focus {
 | 
			
		||||
  outline: none !important;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu.inner {
 | 
			
		||||
  position: static;
 | 
			
		||||
  float: none;
 | 
			
		||||
  border: 0;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
  margin: 0;
 | 
			
		||||
  border-radius: 0;
 | 
			
		||||
  -webkit-box-shadow: none;
 | 
			
		||||
          box-shadow: none;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu li {
 | 
			
		||||
  position: relative;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu li.active small {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu li.disabled a {
 | 
			
		||||
  cursor: not-allowed;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu li a {
 | 
			
		||||
  cursor: pointer;
 | 
			
		||||
  -webkit-user-select: none;
 | 
			
		||||
     -moz-user-select: none;
 | 
			
		||||
      -ms-user-select: none;
 | 
			
		||||
          user-select: none;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu li a.opt {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  padding-left: 2.25em;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu li a span.check-mark {
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu li a span.text {
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu li small {
 | 
			
		||||
  padding-left: 0.5em;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .dropdown-menu .notify {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  bottom: 5px;
 | 
			
		||||
  width: 96%;
 | 
			
		||||
  margin: 0 2%;
 | 
			
		||||
  min-height: 26px;
 | 
			
		||||
  padding: 3px 5px;
 | 
			
		||||
  background: #f5f5f5;
 | 
			
		||||
  border: 1px solid #e3e3e3;
 | 
			
		||||
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
 | 
			
		||||
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
 | 
			
		||||
  pointer-events: none;
 | 
			
		||||
  opacity: 0.9;
 | 
			
		||||
  -webkit-box-sizing: border-box;
 | 
			
		||||
     -moz-box-sizing: border-box;
 | 
			
		||||
          box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .no-results {
 | 
			
		||||
  padding: 3px;
 | 
			
		||||
  background: #f5f5f5;
 | 
			
		||||
  margin: 0 5px;
 | 
			
		||||
  white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.fit-width .dropdown-toggle .filter-option {
 | 
			
		||||
  position: static;
 | 
			
		||||
  display: inline;
 | 
			
		||||
  padding: 0;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner,
 | 
			
		||||
.bootstrap-select.fit-width .dropdown-toggle .filter-option-inner-inner {
 | 
			
		||||
  display: inline;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.fit-width .dropdown-toggle .caret {
 | 
			
		||||
  position: static;
 | 
			
		||||
  top: auto;
 | 
			
		||||
  margin-top: -1px;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.show-tick .dropdown-menu .selected span.check-mark {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  right: 15px;
 | 
			
		||||
  top: 5px;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.show-tick .dropdown-menu li a span.text {
 | 
			
		||||
  margin-right: 34px;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select .bs-ok-default:after {
 | 
			
		||||
  content: '';
 | 
			
		||||
  display: block;
 | 
			
		||||
  width: 0.5em;
 | 
			
		||||
  height: 1em;
 | 
			
		||||
  border-style: solid;
 | 
			
		||||
  border-width: 0 0.26em 0.26em 0;
 | 
			
		||||
  -webkit-transform: rotate(45deg);
 | 
			
		||||
      -ms-transform: rotate(45deg);
 | 
			
		||||
       -o-transform: rotate(45deg);
 | 
			
		||||
          transform: rotate(45deg);
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.show-menu-arrow.open > .dropdown-toggle,
 | 
			
		||||
.bootstrap-select.show-menu-arrow.show > .dropdown-toggle {
 | 
			
		||||
  z-index: 1061;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:before {
 | 
			
		||||
  content: '';
 | 
			
		||||
  border-left: 7px solid transparent;
 | 
			
		||||
  border-right: 7px solid transparent;
 | 
			
		||||
  border-bottom: 7px solid rgba(204, 204, 204, 0.2);
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  bottom: -4px;
 | 
			
		||||
  left: 9px;
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.show-menu-arrow .dropdown-toggle .filter-option:after {
 | 
			
		||||
  content: '';
 | 
			
		||||
  border-left: 6px solid transparent;
 | 
			
		||||
  border-right: 6px solid transparent;
 | 
			
		||||
  border-bottom: 6px solid white;
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  bottom: -4px;
 | 
			
		||||
  left: 10px;
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:before {
 | 
			
		||||
  bottom: auto;
 | 
			
		||||
  top: -4px;
 | 
			
		||||
  border-top: 7px solid rgba(204, 204, 204, 0.2);
 | 
			
		||||
  border-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle .filter-option:after {
 | 
			
		||||
  bottom: auto;
 | 
			
		||||
  top: -4px;
 | 
			
		||||
  border-top: 6px solid white;
 | 
			
		||||
  border-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:before {
 | 
			
		||||
  right: 12px;
 | 
			
		||||
  left: auto;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle .filter-option:after {
 | 
			
		||||
  right: 13px;
 | 
			
		||||
  left: auto;
 | 
			
		||||
}
 | 
			
		||||
.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:before,
 | 
			
		||||
.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:before,
 | 
			
		||||
.bootstrap-select.show-menu-arrow.open > .dropdown-toggle .filter-option:after,
 | 
			
		||||
.bootstrap-select.show-menu-arrow.show > .dropdown-toggle .filter-option:after {
 | 
			
		||||
  display: block;
 | 
			
		||||
}
 | 
			
		||||
.bs-searchbox,
 | 
			
		||||
.bs-actionsbox,
 | 
			
		||||
.bs-donebutton {
 | 
			
		||||
  padding: 4px 8px;
 | 
			
		||||
}
 | 
			
		||||
.bs-actionsbox {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  -webkit-box-sizing: border-box;
 | 
			
		||||
     -moz-box-sizing: border-box;
 | 
			
		||||
          box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
.bs-actionsbox .btn-group button {
 | 
			
		||||
  width: 50%;
 | 
			
		||||
}
 | 
			
		||||
.bs-donebutton {
 | 
			
		||||
  float: left;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  -webkit-box-sizing: border-box;
 | 
			
		||||
     -moz-box-sizing: border-box;
 | 
			
		||||
          box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
.bs-donebutton .btn-group button {
 | 
			
		||||
  width: 100%;
 | 
			
		||||
}
 | 
			
		||||
.bs-searchbox + .bs-actionsbox {
 | 
			
		||||
  padding: 0 8px 4px;
 | 
			
		||||
}
 | 
			
		||||
.bs-searchbox .form-control {
 | 
			
		||||
  margin-bottom: 0;
 | 
			
		||||
  width: 100%;
 | 
			
		||||
  float: none;
 | 
			
		||||
}
 | 
			
		||||
/*# sourceMappingURL=bootstrap-select.css.map */
 | 
			
		||||
							
								
								
									
										1
									
								
								src/css/bootstrap.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										10
									
								
								src/css/bootstrap4-toggle.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,10 @@
 | 
			
		||||
/*\
 | 
			
		||||
|*| ========================================================================
 | 
			
		||||
|*| Bootstrap Toggle: bootstrap4-toggle.css v3.6.1
 | 
			
		||||
|*| https://gitbrent.github.io/bootstrap4-toggle/
 | 
			
		||||
|*| ========================================================================
 | 
			
		||||
|*| Copyright 2018-2019 Brent Ely
 | 
			
		||||
|*| Licensed under MIT
 | 
			
		||||
|*| ========================================================================
 | 
			
		||||
\*/
 | 
			
		||||
.btn-group-xs>.btn,.btn-xs{padding:.35rem .4rem .25rem .4rem;font-size:.875rem;line-height:.5;border-radius:.2rem}.checkbox label .toggle,.checkbox-inline .toggle{margin-left:-1.25rem;margin-right:.35rem}.toggle{position:relative;overflow:hidden}.toggle.btn.btn-light,.toggle.btn.btn-outline-light{border-color:rgba(0,0,0,.15)}.toggle input[type=checkbox]{display:none}.toggle-group{position:absolute;width:200%;top:0;bottom:0;left:0;transition:left .35s;-webkit-transition:left .35s;-moz-user-select:none;-webkit-user-select:none}.toggle-group label,.toggle-group span{cursor:pointer}.toggle.off .toggle-group{left:-100%}.toggle-on{position:absolute;top:0;bottom:0;left:0;right:50%;margin:0;border:0;border-radius:0}.toggle-off{position:absolute;top:0;bottom:0;left:50%;right:0;margin:0;border:0;border-radius:0;box-shadow:none}.toggle-handle{position:relative;margin:0 auto;padding-top:0;padding-bottom:0;height:100%;width:0;border-width:0 1px;background-color:#fff}.toggle.btn-outline-primary .toggle-handle{background-color:var(--primary);border-color:var(--primary)}.toggle.btn-outline-secondary .toggle-handle{background-color:var(--secondary);border-color:var(--secondary)}.toggle.btn-outline-success .toggle-handle{background-color:var(--success);border-color:var(--success)}.toggle.btn-outline-danger .toggle-handle{background-color:var(--danger);border-color:var(--danger)}.toggle.btn-outline-warning .toggle-handle{background-color:var(--warning);border-color:var(--warning)}.toggle.btn-outline-info .toggle-handle{background-color:var(--info);border-color:var(--info)}.toggle.btn-outline-light .toggle-handle{background-color:var(--light);border-color:var(--light)}.toggle.btn-outline-dark .toggle-handle{background-color:var(--dark);border-color:var(--dark)}.toggle[class*=btn-outline]:hover .toggle-handle{background-color:var(--light);opacity:.5}.toggle.btn{min-width:3.7rem;min-height:2.15rem}.toggle-on.btn{padding-right:1.5rem}.toggle-off.btn{padding-left:1.5rem}.toggle.btn-lg{min-width:5rem;min-height:2.815rem}.toggle-on.btn-lg{padding-right:2rem}.toggle-off.btn-lg{padding-left:2rem}.toggle-handle.btn-lg{width:2.5rem}.toggle.btn-sm{min-width:3.125rem;min-height:1.938rem}.toggle-on.btn-sm{padding-right:1rem}.toggle-off.btn-sm{padding-left:1rem}.toggle.btn-xs{min-width:2.19rem;min-height:1.375rem}.toggle-on.btn-xs{padding-right:.8rem}.toggle-off.btn-xs{padding-left:.8rem}
 | 
			
		||||
							
								
								
									
										126
									
								
								src/css/common.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,126 @@
 | 
			
		||||
.navColor {
 | 
			
		||||
	background: #882929;
 | 
			
		||||
	color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.userName {
 | 
			
		||||
	padding-left: 10px;
 | 
			
		||||
	padding-right: 10px;
 | 
			
		||||
	border: 1px solid rgba(0, 0, 0, .125);
 | 
			
		||||
	border-radius: 5px;
 | 
			
		||||
	background: white;
 | 
			
		||||
	color: #2E324C;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.userName:hover {
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	background: rgb(68, 110, 155);
 | 
			
		||||
	color: white;
 | 
			
		||||
	border-radius: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#horiNav {
 | 
			
		||||
	padding-top: 10px;
 | 
			
		||||
	border: 1px solid rgba(0, 0, 0, .05);
 | 
			
		||||
	background: #f8f9fa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#outputNav {
 | 
			
		||||
	padding-top: 10px;
 | 
			
		||||
	border: 1px solid rgba(0, 0, 0, .05);
 | 
			
		||||
	background: #f8f9fa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div .card {
 | 
			
		||||
	background: #f8f9fa;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#main {
 | 
			
		||||
	background: white;
 | 
			
		||||
	color: black;
 | 
			
		||||
}
 | 
			
		||||
 .active>.iconimg {
 | 
			
		||||
	height: 25px;
 | 
			
		||||
	width: 25px;
 | 
			
		||||
	margin-right: 10px;
 | 
			
		||||
	filter: invert(100%);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
.iconimg {
 | 
			
		||||
	height: 25px;
 | 
			
		||||
	width: 25px;
 | 
			
		||||
	margin-right: 10px;
 | 
			
		||||
	filter: invert(15%) sepia(11%) saturate(2467%) hue-rotate(194deg)
 | 
			
		||||
		brightness(94%) contrast(84%);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.buttonimg {
 | 
			
		||||
	height: 23px;
 | 
			
		||||
	width: 23px;
 | 
			
		||||
	filter: invert(15%) sepia(11%) saturate(2467%) hue-rotate(194deg)
 | 
			
		||||
		brightness(94%) contrast(84%);
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
.closeimg {
 | 
			
		||||
	height: 12px;
 | 
			
		||||
	width: 12px;
 | 
			
		||||
	filter: invert(15%) sepia(11%) saturate(2467%) hue-rotate(194deg)
 | 
			
		||||
		brightness(94%) contrast(84%);
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.closeimg:hover {
 | 
			
		||||
	cursor:pointer;
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.active>.closeimg {
 | 
			
		||||
	filter: invert(100%);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.trigimg {
 | 
			
		||||
	height: 20px;
 | 
			
		||||
	width: 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.projectLine.collapsed {
 | 
			
		||||
	background: #D5D6DB;
 | 
			
		||||
	color: #2E324C;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.projectLine {
 | 
			
		||||
	background: #2E324C;
 | 
			
		||||
	color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.projectLine.collapsed:hover {
 | 
			
		||||
	background: #2E324C;
 | 
			
		||||
	color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 button:hover>.trigimg {
 | 
			
		||||
	filter: invert(100%);
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
 button[aria-expanded="true"]>.trigimg {
 | 
			
		||||
	filter: invert(100%);
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
 button:hover>.buttonimg {
 | 
			
		||||
	filter: invert(100%);
 | 
			
		||||
} 
 | 
			
		||||
 | 
			
		||||
.headerFooter {
 | 
			
		||||
	background: #2E324C;
 | 
			
		||||
	color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.outline-btn {
 | 
			
		||||
	border: 1px solid #999;
 | 
			
		||||
	border-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div.filter-option {
 | 
			
		||||
	border: 1px solid #999;
 | 
			
		||||
	border-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								src/css/loading.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,41 @@
 | 
			
		||||
.loader,
 | 
			
		||||
.loader:after {
 | 
			
		||||
  border-radius: 50%;
 | 
			
		||||
  width: 10em;
 | 
			
		||||
  height: 10em;
 | 
			
		||||
}
 | 
			
		||||
.loader {
 | 
			
		||||
  margin: 60px auto;
 | 
			
		||||
  font-size: 10px;
 | 
			
		||||
  position: relative;
 | 
			
		||||
  text-indent: -9999em;
 | 
			
		||||
  border-top: 1.1em solid rgba(202,101,64, 0.2);
 | 
			
		||||
  border-right: 1.1em solid rgba(202,101,64, 0.2);
 | 
			
		||||
  border-bottom: 1.1em solid rgba(202,101,64, 0.2);
 | 
			
		||||
  border-left: 1.1em solid #ca6540;
 | 
			
		||||
  -webkit-transform: translateZ(0);
 | 
			
		||||
  -ms-transform: translateZ(0);
 | 
			
		||||
  transform: translateZ(0);
 | 
			
		||||
  -webkit-animation: load8 1.1s infinite linear;
 | 
			
		||||
  animation: load8 1.1s infinite linear;
 | 
			
		||||
}
 | 
			
		||||
@-webkit-keyframes load8 {
 | 
			
		||||
  0% {
 | 
			
		||||
    -webkit-transform: rotate(0deg);
 | 
			
		||||
    transform: rotate(0deg);
 | 
			
		||||
  }
 | 
			
		||||
  100% {
 | 
			
		||||
    -webkit-transform: rotate(360deg);
 | 
			
		||||
    transform: rotate(360deg);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@keyframes load8 {
 | 
			
		||||
  0% {
 | 
			
		||||
    -webkit-transform: rotate(0deg);
 | 
			
		||||
    transform: rotate(0deg);
 | 
			
		||||
  }
 | 
			
		||||
  100% {
 | 
			
		||||
    -webkit-transform: rotate(360deg);
 | 
			
		||||
    transform: rotate(360deg);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								src/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.2 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/images/index/analysis.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 14 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/images/index/customer-support.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 15 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/images/index/nodeManagement.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 5.9 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/images/index/program.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 14 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/images/index/refresh.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 907 B  | 
							
								
								
									
										
											BIN
										
									
								
								src/images/index/userManagement.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 16 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/images/index/writer.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 7.0 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/images/logo-1.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 13 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/images/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 37 KiB  | 
							
								
								
									
										15
									
								
								src/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,15 @@
 | 
			
		||||
<html>
 | 
			
		||||
<header>
 | 
			
		||||
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 | 
			
		||||
    <meta http-equiv="Cache-Control" content="no-cache"/>
 | 
			
		||||
    <title>数瑞智能合约</title>
 | 
			
		||||
</header>
 | 
			
		||||
<body style="background: #2E324C; color: white;">
 | 
			
		||||
<script>
 | 
			
		||||
jumpTo = function(addr) {
 | 
			
		||||
document.location.href = addr;
 | 
			
		||||
};
 | 
			
		||||
jumpTo("./CenterPortal.html");
 | 
			
		||||
</script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										333
									
								
								src/jqueryui1.12/AUTHORS.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,333 @@
 | 
			
		||||
Authors ordered by first contribution
 | 
			
		||||
A list of current team members is available at http://jqueryui.com/about
 | 
			
		||||
 | 
			
		||||
Paul Bakaus <paul.bakaus@gmail.com>
 | 
			
		||||
Richard Worth <rdworth@gmail.com>
 | 
			
		||||
Yehuda Katz <wycats@gmail.com>
 | 
			
		||||
Sean Catchpole <sean@sunsean.com>
 | 
			
		||||
John Resig <jeresig@gmail.com>
 | 
			
		||||
Tane Piper <piper.tane@gmail.com>
 | 
			
		||||
Dmitri Gaskin <dmitrig01@gmail.com>
 | 
			
		||||
Klaus Hartl <klaus.hartl@gmail.com>
 | 
			
		||||
Stefan Petre <stefan.petre@gmail.com>
 | 
			
		||||
Gilles van den Hoven <gilles@webunity.nl>
 | 
			
		||||
Micheil Bryan Smith <micheil@brandedcode.com>
 | 
			
		||||
Jörn Zaefferer <joern.zaefferer@gmail.com>
 | 
			
		||||
Marc Grabanski <m@marcgrabanski.com>
 | 
			
		||||
Keith Wood <kbwood@iinet.com.au>
 | 
			
		||||
Brandon Aaron <brandon.aaron@gmail.com>
 | 
			
		||||
Scott González <scott.gonzalez@gmail.com>
 | 
			
		||||
Eduardo Lundgren <eduardolundgren@gmail.com>
 | 
			
		||||
Aaron Eisenberger <aaronchi@gmail.com>
 | 
			
		||||
Joan Piedra <theneojp@gmail.com>
 | 
			
		||||
Bruno Basto <b.basto@gmail.com>
 | 
			
		||||
Remy Sharp <remy@leftlogic.com>
 | 
			
		||||
Bohdan Ganicky <bohdan.ganicky@gmail.com>
 | 
			
		||||
David Bolter <david.bolter@gmail.com>
 | 
			
		||||
Chi Cheng <cloudream@gmail.com>
 | 
			
		||||
Ca-Phun Ung <pazu2k@gmail.com>
 | 
			
		||||
Ariel Flesler <aflesler@gmail.com>
 | 
			
		||||
Maggie Wachs <maggie@filamentgroup.com>
 | 
			
		||||
Scott Jehl <scottjehl@gmail.com>
 | 
			
		||||
Todd Parker <todd@filamentgroup.com>
 | 
			
		||||
Andrew Powell <andrew@shellscape.org>
 | 
			
		||||
Brant Burnett <btburnett3@gmail.com>
 | 
			
		||||
Douglas Neiner <doug@dougneiner.com>
 | 
			
		||||
Paul Irish <paul.irish@gmail.com>
 | 
			
		||||
Ralph Whitbeck <ralph.whitbeck@gmail.com>
 | 
			
		||||
Thibault Duplessis <thibault.duplessis@gmail.com>
 | 
			
		||||
Dominique Vincent <dominique.vincent@toitl.com>
 | 
			
		||||
Jack Hsu <jack.hsu@gmail.com>
 | 
			
		||||
Adam Sontag <ajpiano@ajpiano.com>
 | 
			
		||||
Carl Fürstenberg <carl@excito.com>
 | 
			
		||||
Kevin Dalman <development@allpro.net>
 | 
			
		||||
Alberto Fernández Capel <afcapel@gmail.com>
 | 
			
		||||
Jacek Jędrzejewski (http://jacek.jedrzejewski.name)
 | 
			
		||||
Ting Kuei <ting@kuei.com>
 | 
			
		||||
Samuel Cormier-Iijima <sam@chide.it>
 | 
			
		||||
Jon Palmer <jonspalmer@gmail.com>
 | 
			
		||||
Ben Hollis <bhollis@amazon.com>
 | 
			
		||||
Justin MacCarthy <Justin@Rubystars.biz>
 | 
			
		||||
Eyal Kobrigo <kobrigo@hotmail.com>
 | 
			
		||||
Tiago Freire <tiago.freire@gmail.com>
 | 
			
		||||
Diego Tres <diegotres@gmail.com>
 | 
			
		||||
Holger Rüprich <holger@rueprich.de>
 | 
			
		||||
Ziling Zhao <zilingzhao@gmail.com>
 | 
			
		||||
Mike Alsup <malsup@gmail.com>
 | 
			
		||||
Robson Braga Araujo <robsonbraga@gmail.com>
 | 
			
		||||
Pierre-Henri Ausseil <ph.ausseil@gmail.com>
 | 
			
		||||
Christopher McCulloh <cmcculloh@gmail.com>
 | 
			
		||||
Andrew Newcomb <ext.github@preceptsoftware.co.uk>
 | 
			
		||||
Lim Chee Aun <cheeaun@gmail.com>
 | 
			
		||||
Jorge Barreiro <yortx.barry@gmail.com>
 | 
			
		||||
Daniel Steigerwald <daniel@steigerwald.cz>
 | 
			
		||||
John Firebaugh <john_firebaugh@bigfix.com>
 | 
			
		||||
John Enters <github@darkdark.net>
 | 
			
		||||
Andrey Kapitcyn <ru.m157y@gmail.com>
 | 
			
		||||
Dmitry Petrov <dpetroff@gmail.com>
 | 
			
		||||
Eric Hynds <eric@hynds.net>
 | 
			
		||||
Chairat Sunthornwiphat <pipo@sixhead.com>
 | 
			
		||||
Josh Varner <josh.varner@gmail.com>
 | 
			
		||||
Stéphane Raimbault <stephane.raimbault@gmail.com>
 | 
			
		||||
Jay Merrifield <fracmak@gmail.com>
 | 
			
		||||
J. Ryan Stinnett <jryans@gmail.com>
 | 
			
		||||
Peter Heiberg <peter@heiberg.se>
 | 
			
		||||
Alex Dovenmuehle <adovenmuehle@gmail.com>
 | 
			
		||||
Jamie Gegerson <git@jamiegegerson.com>
 | 
			
		||||
Raymond Schwartz <skeetergraphics@gmail.com>
 | 
			
		||||
Phillip Barnes <philbar@gmail.com>
 | 
			
		||||
Kyle Wilkinson <kai@wikyd.org>
 | 
			
		||||
Khaled AlHourani <me@khaledalhourani.com>
 | 
			
		||||
Marian Rudzynski <mr@impaled.org>
 | 
			
		||||
Jean-Francois Remy <jeff@melix.org>
 | 
			
		||||
Doug Blood <dougblood@gmail.com>
 | 
			
		||||
Filippo Cavallarin <filippo.cavallarin@codseq.it>
 | 
			
		||||
Heiko Henning <heiko@thehennings.ch>
 | 
			
		||||
Aliaksandr Rahalevich <saksmlz@gmail.com>
 | 
			
		||||
Mario Visic <mario@mariovisic.com>
 | 
			
		||||
Xavi Ramirez <xavi.rmz@gmail.com>
 | 
			
		||||
Max Schnur <max.schnur@gmail.com>
 | 
			
		||||
Saji Nediyanchath <saji89@gmail.com>
 | 
			
		||||
Corey Frang <gnarf37@gmail.com>
 | 
			
		||||
Aaron Peterson <aaronp123@yahoo.com>
 | 
			
		||||
Ivan Peters <ivan@ivanpeters.com>
 | 
			
		||||
Mohamed Cherif Bouchelaghem <cherifbouchelaghem@yahoo.fr>
 | 
			
		||||
Marcos Sousa <falecomigo@marcossousa.com>
 | 
			
		||||
Michael DellaNoce <mdellanoce@mailtrust.com>
 | 
			
		||||
George Marshall <echosx@gmail.com>
 | 
			
		||||
Tobias Brunner <tobias@strongswan.org>
 | 
			
		||||
Martin Solli <msolli@gmail.com>
 | 
			
		||||
David Petersen <public@petersendidit.com>
 | 
			
		||||
Dan Heberden <danheberden@gmail.com>
 | 
			
		||||
William Kevin Manire <williamkmanire@gmail.com>
 | 
			
		||||
Gilmore Davidson <gilmoreorless@gmail.com>
 | 
			
		||||
Michael Wu <michaelmwu@gmail.com>
 | 
			
		||||
Adam Parod <mystic414@gmail.com>
 | 
			
		||||
Guillaume Gautreau <guillaume+github@ghusse.com>
 | 
			
		||||
Marcel Toele <EleotleCram@gmail.com>
 | 
			
		||||
Dan Streetman <ddstreet@ieee.org>
 | 
			
		||||
Matt Hoskins <matt@nipltd.com>
 | 
			
		||||
Giovanni Giacobbi <giovanni@giacobbi.net>
 | 
			
		||||
Kyle Florence <kyle.florence@gmail.com>
 | 
			
		||||
Pavol Hluchý <lopo@losys.sk>
 | 
			
		||||
Hans Hillen <hans.hillen@gmail.com>
 | 
			
		||||
Mark Johnson <virgofx@live.com>
 | 
			
		||||
Trey Hunner <treyhunner@gmail.com>
 | 
			
		||||
Shane Whittet <whittet@gmail.com>
 | 
			
		||||
Edward A Faulkner <ef@alum.mit.edu>
 | 
			
		||||
Adam Baratz <adam@adambaratz.com>
 | 
			
		||||
Kato Kazuyoshi <kato.kazuyoshi@gmail.com>
 | 
			
		||||
Eike Send <eike.send@gmail.com>
 | 
			
		||||
Kris Borchers <kris.borchers@gmail.com>
 | 
			
		||||
Eddie Monge <eddie@eddiemonge.com>
 | 
			
		||||
Israel Tsadok <itsadok@gmail.com>
 | 
			
		||||
Carson McDonald <carson@ioncannon.net>
 | 
			
		||||
Jason Davies <jason@jasondavies.com>
 | 
			
		||||
Garrison Locke <gplocke@gmail.com>
 | 
			
		||||
David Murdoch <david@davidmurdoch.com>
 | 
			
		||||
Benjamin Scott Boyle <benjamins.boyle@gmail.com>
 | 
			
		||||
Jesse Baird <jebaird@gmail.com>
 | 
			
		||||
Jonathan Vingiano <jvingiano@gmail.com>
 | 
			
		||||
Dylan Just <dev@ephox.com>
 | 
			
		||||
Hiroshi Tomita <tomykaira@gmail.com>
 | 
			
		||||
Glenn Goodrich <glenn.goodrich@gmail.com>
 | 
			
		||||
Tarafder Ashek-E-Elahi <mail.ashek@gmail.com>
 | 
			
		||||
Ryan Neufeld <ryan@neufeldmail.com>
 | 
			
		||||
Marc Neuwirth <marc.neuwirth@gmail.com>
 | 
			
		||||
Philip Graham <philip.robert.graham@gmail.com>
 | 
			
		||||
Benjamin Sterling <benjamin.sterling@kenzomedia.com>
 | 
			
		||||
Wesley Walser <waw325@gmail.com>
 | 
			
		||||
Kouhei Sutou <kou@clear-code.com>
 | 
			
		||||
Karl Kirch <karlkrch@gmail.com>
 | 
			
		||||
Chris Kelly <ckdake@ckdake.com>
 | 
			
		||||
Jason Oster <jay@kodewerx.org>
 | 
			
		||||
Felix Nagel <info@felixnagel.com>
 | 
			
		||||
Alexander Polomoshnov <alex.polomoshnov@gmail.com>
 | 
			
		||||
David Leal <dgleal@gmail.com>
 | 
			
		||||
Igor Milla <igor.fsp.milla@gmail.com>
 | 
			
		||||
Dave Methvin <dave.methvin@gmail.com>
 | 
			
		||||
Florian Gutmann <f.gutmann@chronimo.com>
 | 
			
		||||
Marwan Al Jubeh <marwan.aljubeh@gmail.com>
 | 
			
		||||
Milan Broum <midlis@googlemail.com>
 | 
			
		||||
Sebastian Sauer <info@dynpages.de>
 | 
			
		||||
Gaëtan Muller <m.gaetan89@gmail.com>
 | 
			
		||||
Michel Weimerskirch <michel@weimerskirch.net>
 | 
			
		||||
William Griffiths <william@ycymro.com>
 | 
			
		||||
Stojce Slavkovski <stojce@gmail.com>
 | 
			
		||||
David Soms <david.soms@gmail.com>
 | 
			
		||||
David De Sloovere <david.desloovere@outlook.com>
 | 
			
		||||
Michael P. Jung <michael.jung@terreon.de>
 | 
			
		||||
Shannon Pekary <spekary@gmail.com>
 | 
			
		||||
Dan Wellman <danwellman@hotmail.com>
 | 
			
		||||
Matthew Edward Hutton <meh@corefiling.co.uk>
 | 
			
		||||
James Khoury <james@jameskhoury.com>
 | 
			
		||||
Rob Loach <robloach@gmail.com>
 | 
			
		||||
Alberto Monteiro <betimbrasil@gmail.com>
 | 
			
		||||
Alex Rhea <alex.rhea@gmail.com>
 | 
			
		||||
Krzysztof Rosiński <rozwell69@gmail.com>
 | 
			
		||||
Ryan Olton <oltonr@gmail.com>
 | 
			
		||||
Genie <386@mail.com>
 | 
			
		||||
Rick Waldron <waldron.rick@gmail.com>
 | 
			
		||||
Ian Simpson <spoonlikesham@gmail.com>
 | 
			
		||||
Lev Kitsis <spam4lev@gmail.com>
 | 
			
		||||
TJ VanToll <tj.vantoll@gmail.com>
 | 
			
		||||
Justin Domnitz <jdomnitz@gmail.com>
 | 
			
		||||
Douglas Cerna <douglascerna@yahoo.com>
 | 
			
		||||
Bert ter Heide <bertjh@hotmail.com>
 | 
			
		||||
Jasvir Nagra <jasvir@gmail.com>
 | 
			
		||||
Yuriy Khabarov <13real008@gmail.com>
 | 
			
		||||
Harri Kilpiö <harri.kilpio@gmail.com>
 | 
			
		||||
Lado Lomidze <lado.lomidze@gmail.com>
 | 
			
		||||
Amir E. Aharoni <amir.aharoni@mail.huji.ac.il>
 | 
			
		||||
Simon Sattes <simon.sattes@gmail.com>
 | 
			
		||||
Jo Liss <joliss42@gmail.com>
 | 
			
		||||
Guntupalli Karunakar <karunakarg@yahoo.com>
 | 
			
		||||
Shahyar Ghobadpour <shahyar@gmail.com>
 | 
			
		||||
Lukasz Lipinski <uzza17@gmail.com>
 | 
			
		||||
Timo Tijhof <krinklemail@gmail.com>
 | 
			
		||||
Jason Moon <jmoon@socialcast.com>
 | 
			
		||||
Martin Frost <martinf55@hotmail.com>
 | 
			
		||||
Eneko Illarramendi <eneko@illarra.com>
 | 
			
		||||
EungJun Yi <semtlenori@gmail.com>
 | 
			
		||||
Courtland Allen <courtlandallen@gmail.com>
 | 
			
		||||
Viktar Varvanovich <non4eg@gmail.com>
 | 
			
		||||
Danny Trunk <dtrunk90@gmail.com>
 | 
			
		||||
Pavel Stetina <pavel.stetina@nangu.tv>
 | 
			
		||||
Michael Stay <metaweta@gmail.com>
 | 
			
		||||
Steven Roussey <sroussey@gmail.com>
 | 
			
		||||
Michael Hollis <hollis21@gmail.com>
 | 
			
		||||
Lee Rowlands <lee.rowlands@previousnext.com.au>
 | 
			
		||||
Timmy Willison <timmywillisn@gmail.com>
 | 
			
		||||
Karl Swedberg <kswedberg@gmail.com>
 | 
			
		||||
Baoju Yuan <the_guy_1987@hotmail.com>
 | 
			
		||||
Maciej Mroziński <maciej.k.mrozinski@gmail.com>
 | 
			
		||||
Luis Dalmolin <luis.nh@gmail.com>
 | 
			
		||||
Mark Aaron Shirley <maspwr@gmail.com>
 | 
			
		||||
Martin Hoch <martin@fidion.de>
 | 
			
		||||
Jiayi Yang <tr870829@gmail.com>
 | 
			
		||||
Philipp Benjamin Köppchen <xgxtpbk@gws.ms>
 | 
			
		||||
Sindre Sorhus <sindresorhus@gmail.com>
 | 
			
		||||
Bernhard Sirlinger <bernhard.sirlinger@tele2.de>
 | 
			
		||||
Jared A. Scheel <jared@jaredscheel.com>
 | 
			
		||||
Rafael Xavier de Souza <rxaviers@gmail.com>
 | 
			
		||||
John Chen <zhang.z.chen@intel.com>
 | 
			
		||||
Robert Beuligmann <robertbeuligmann@gmail.com>
 | 
			
		||||
Dale Kocian <dale.kocian@gmail.com>
 | 
			
		||||
Mike Sherov <mike.sherov@gmail.com>
 | 
			
		||||
Andrew Couch <andy@couchand.com>
 | 
			
		||||
Marc-Andre Lafortune <github@marc-andre.ca>
 | 
			
		||||
Nate Eagle <nate.eagle@teamaol.com>
 | 
			
		||||
David Souther <davidsouther@gmail.com>
 | 
			
		||||
Mathias Stenbom <mathias@stenbom.com>
 | 
			
		||||
Sergey Kartashov <ebishkek@yandex.ru>
 | 
			
		||||
Avinash R <nashpapa@gmail.com>
 | 
			
		||||
Ethan Romba <ethanromba@gmail.com>
 | 
			
		||||
Cory Gackenheimer <cory.gack@gmail.com>
 | 
			
		||||
Juan Pablo Kaniefsky <jpkaniefsky@gmail.com>
 | 
			
		||||
Roman Salnikov <bardt.dz@gmail.com>
 | 
			
		||||
Anika Henke <anika@selfthinker.org>
 | 
			
		||||
Samuel Bovée <samycookie2000@yahoo.fr>
 | 
			
		||||
Fabrício Matté <ult_combo@hotmail.com>
 | 
			
		||||
Viktor Kojouharov <vkojouharov@gmail.com>
 | 
			
		||||
Pawel Maruszczyk (http://hrabstwo.net)
 | 
			
		||||
Pavel Selitskas <p.selitskas@gmail.com>
 | 
			
		||||
Bjørn Johansen <post@bjornjohansen.no>
 | 
			
		||||
Matthieu Penant <thieum22@hotmail.com>
 | 
			
		||||
Dominic Barnes <dominic@dbarnes.info>
 | 
			
		||||
David Sullivan <david.sullivan@gmail.com>
 | 
			
		||||
Thomas Jaggi <thomas@responsive.ch>
 | 
			
		||||
Vahid Sohrabloo <vahid4134@gmail.com>
 | 
			
		||||
Travis Carden <travis.carden@gmail.com>
 | 
			
		||||
Bruno M. Custódio <bruno@brunomcustodio.com>
 | 
			
		||||
Nathanael Silverman <nathanael.silverman@gmail.com>
 | 
			
		||||
Christian Wenz <christian@wenz.org>
 | 
			
		||||
Steve Urmston <steve@urm.st>
 | 
			
		||||
Zaven Muradyan <megalivoithos@gmail.com>
 | 
			
		||||
Woody Gilk <shadowhand@deviantart.com>
 | 
			
		||||
Zbigniew Motyka <zbigniew.motyka@gmail.com>
 | 
			
		||||
Suhail Alkowaileet <xsoh.k7@gmail.com>
 | 
			
		||||
Toshi MARUYAMA <marutosijp2@yahoo.co.jp>
 | 
			
		||||
David Hansen <hansede@gmail.com>
 | 
			
		||||
Brian Grinstead <briangrinstead@gmail.com>
 | 
			
		||||
Christian Klammer <christian314159@gmail.com>
 | 
			
		||||
Steven Luscher <jquerycla@steveluscher.com>
 | 
			
		||||
Gan Eng Chin <engchin.gan@gmail.com>
 | 
			
		||||
Gabriel Schulhof <gabriel.schulhof@intel.com>
 | 
			
		||||
Alexander Schmitz <arschmitz@gmail.com>
 | 
			
		||||
Vilhjálmur Skúlason <vis@dmm.is>
 | 
			
		||||
Siebrand Mazeland <siebrand@kitano.nl>
 | 
			
		||||
Mohsen Ekhtiari <mohsenekhtiari@yahoo.com>
 | 
			
		||||
Pere Orga <gotrunks@gmail.com>
 | 
			
		||||
Jasper de Groot <mail@ugomobi.com>
 | 
			
		||||
Stephane Deschamps <stephane.deschamps@gmail.com>
 | 
			
		||||
Jyoti Deka <dekajp@gmail.com>
 | 
			
		||||
Andrei Picus <office.nightcrawler@gmail.com>
 | 
			
		||||
Ondrej Novy <novy@ondrej.org>
 | 
			
		||||
Jacob McCutcheon <jacob.mccutcheon@gmail.com>
 | 
			
		||||
Monika Piotrowicz <monika.piotrowicz@gmail.com>
 | 
			
		||||
Imants Horsts <imants.horsts@inbox.lv>
 | 
			
		||||
Eric Dahl <eric.c.dahl@gmail.com>
 | 
			
		||||
Dave Stein <dave@behance.com>
 | 
			
		||||
Dylan Barrell <dylan@barrell.com>
 | 
			
		||||
Daniel DeGroff <djdegroff@gmail.com>
 | 
			
		||||
Michael Wiencek <mwtuea@gmail.com>
 | 
			
		||||
Thomas Meyer <meyertee@gmail.com>
 | 
			
		||||
Ruslan Yakhyaev <ruslan@ruslan.io>
 | 
			
		||||
Brian J. Dowling <bjd-dev@simplicity.net>
 | 
			
		||||
Ben Higgins <ben@extrahop.com>
 | 
			
		||||
Yermo Lamers <yml@yml.com>
 | 
			
		||||
Patrick Stapleton <github@gdi2290.com>
 | 
			
		||||
Trisha Crowley <trisha.crowley@gmail.com>
 | 
			
		||||
Usman Akeju <akeju00+github@gmail.com>
 | 
			
		||||
Rodrigo Menezes <rod333@gmail.com>
 | 
			
		||||
Jacques Perrault <jacques_perrault@us.ibm.com>
 | 
			
		||||
Frederik Elvhage <frederik.elvhage@googlemail.com>
 | 
			
		||||
Will Holley <willholley@gmail.com>
 | 
			
		||||
Uri Gilad <antishok@gmail.com>
 | 
			
		||||
Richard Gibson <richard.gibson@gmail.com>
 | 
			
		||||
Simen Bekkhus <sbekkhus91@gmail.com>
 | 
			
		||||
Chen Eshchar <eshcharc@gmail.com>
 | 
			
		||||
Bruno Pérel <brunoperel@gmail.com>
 | 
			
		||||
Mohammed Alshehri <m@dralshehri.com>
 | 
			
		||||
Lisa Seacat DeLuca <ldeluca@us.ibm.com>
 | 
			
		||||
Anne-Gaelle Colom <coloma@westminster.ac.uk>
 | 
			
		||||
Adam Foster <slimfoster@gmail.com>
 | 
			
		||||
Luke Page <luke.a.page@gmail.com>
 | 
			
		||||
Daniel Owens <daniel@matchstickmixup.com>
 | 
			
		||||
Michael Orchard <morchard@scottlogic.co.uk>
 | 
			
		||||
Marcus Warren <marcus@envoke.com>
 | 
			
		||||
Nils Heuermann <nils@world-of-scripts.de>
 | 
			
		||||
Marco Ziech <marco@ziech.net>
 | 
			
		||||
Patricia Juarez <patrixd@gmail.com>
 | 
			
		||||
Ben Mosher <me@benmosher.com>
 | 
			
		||||
Ablay Keldibek <atomio.ak@gmail.com>
 | 
			
		||||
Thomas Applencourt <thomas.applencourt@irsamc.ups-tlse.fr>
 | 
			
		||||
Jiabao Wu <jiabao.foss@gmail.com>
 | 
			
		||||
Eric Lee Carraway <github@ericcarraway.com>
 | 
			
		||||
Victor Homyakov <vkhomyackov@gmail.com>
 | 
			
		||||
Myeongjin Lee <aranet100@gmail.com>
 | 
			
		||||
Liran Sharir <lsharir@gmail.com>
 | 
			
		||||
Weston Ruter <weston@xwp.co>
 | 
			
		||||
Mani Mishra <manimishra902@gmail.com>
 | 
			
		||||
Hannah Methvin <hannahmethvin@gmail.com>
 | 
			
		||||
Leonardo Balter <leonardo.balter@gmail.com>
 | 
			
		||||
Benjamin Albert <benjamin_a5@yahoo.com>
 | 
			
		||||
Michał Gołębiowski <m.goleb@gmail.com>
 | 
			
		||||
Alyosha Pushak <alyosha.pushak@gmail.com>
 | 
			
		||||
Fahad Ahmad <fahadahmad41@hotmail.com>
 | 
			
		||||
Matt Brundage <github@mattbrundage.com>
 | 
			
		||||
Francesc Baeta <francesc.baeta@gmail.com>
 | 
			
		||||
Piotr Baran <piotros@wp.pl>
 | 
			
		||||
Mukul Hase <mukulhase@gmail.com>
 | 
			
		||||
Konstantin Dinev <kdinev@mail.bw.edu>
 | 
			
		||||
Rand Scullard <rand@randscullard.com>
 | 
			
		||||
Dan Strohl <dan@wjcg.net>
 | 
			
		||||
Maksim Ryzhikov <rv.maksim@gmail.com>
 | 
			
		||||
Amine HADDAD <haddad@allegorie.tv>
 | 
			
		||||
Amanpreet Singh <apsdehal@gmail.com>
 | 
			
		||||
Alexey Balchunas <bleshik@gmail.com>
 | 
			
		||||
Peter Kehl <peter.kehl@gmail.com>
 | 
			
		||||
Peter Dave Hello <hsu@peterdavehello.org>
 | 
			
		||||
Johannes Schäfer <johnschaefer@gmx.de>
 | 
			
		||||
Ville Skyttä <ville.skytta@iki.fi>
 | 
			
		||||
Ryan Oriecuia <ryan.oriecuia@visioncritical.com>
 | 
			
		||||
							
								
								
									
										43
									
								
								src/jqueryui1.12/LICENSE.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,43 @@
 | 
			
		||||
Copyright jQuery Foundation and other contributors, https://jquery.org/
 | 
			
		||||
 | 
			
		||||
This software consists of voluntary contributions made by many
 | 
			
		||||
individuals. For exact contribution history, see the revision history
 | 
			
		||||
available at https://github.com/jquery/jquery-ui
 | 
			
		||||
 | 
			
		||||
The following license applies to all parts of this software except as
 | 
			
		||||
documented below:
 | 
			
		||||
 | 
			
		||||
====
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
====
 | 
			
		||||
 | 
			
		||||
Copyright and related rights for sample code are waived via CC0. Sample
 | 
			
		||||
code is defined as all source code contained within the demos directory.
 | 
			
		||||
 | 
			
		||||
CC0: http://creativecommons.org/publicdomain/zero/1.0/
 | 
			
		||||
 | 
			
		||||
====
 | 
			
		||||
 | 
			
		||||
All files located in the node_modules and external directories are
 | 
			
		||||
externally maintained libraries used by this software which have their
 | 
			
		||||
own licenses; we recommend you read them, as their terms may differ from
 | 
			
		||||
the terms above.
 | 
			
		||||
							
								
								
									
										572
									
								
								src/jqueryui1.12/datatables.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,572 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This combined file was created by the DataTables downloader builder:
 | 
			
		||||
 *   https://datatables.net/download
 | 
			
		||||
 *
 | 
			
		||||
 * To rebuild or modify this file with the latest versions of the included
 | 
			
		||||
 * software please visit:
 | 
			
		||||
 *   https://datatables.net/download/#ju/dt-1.10.18
 | 
			
		||||
 *
 | 
			
		||||
 * Included libraries:
 | 
			
		||||
 *   DataTables 1.10.18
 | 
			
		||||
 */
 | 
			
		||||
table.dataTable {
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	margin: 0 auto;
 | 
			
		||||
	clear: both;
 | 
			
		||||
	border-collapse: separate;
 | 
			
		||||
	border-spacing: 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th, table.dataTable tfoot th {
 | 
			
		||||
	font-weight: bold
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th, table.dataTable thead td {
 | 
			
		||||
	padding: 10px 18px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th:active, table.dataTable thead td:active {
 | 
			
		||||
	outline: none
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable tfoot th, table.dataTable tfoot td {
 | 
			
		||||
	padding: 10px 18px 6px 18px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable tbody tr {
 | 
			
		||||
	background-color: #ffffff
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable tbody tr.selected {
 | 
			
		||||
	background-color: #B0BED9
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable tbody th, table.dataTable tbody td {
 | 
			
		||||
	padding: 8px 10px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.row-border tbody th, table.dataTable.row-border tbody td,
 | 
			
		||||
	table.dataTable.display tbody th, table.dataTable.display tbody td {
 | 
			
		||||
	border-top: 1px solid #ddd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.row-border tbody tr:first-child th, table.dataTable.row-border tbody tr:first-child td,
 | 
			
		||||
	table.dataTable.display tbody tr:first-child th, table.dataTable.display tbody tr:first-child td
 | 
			
		||||
	{
 | 
			
		||||
	border-top: none
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td
 | 
			
		||||
	{
 | 
			
		||||
	border-top: 1px solid #ddd;
 | 
			
		||||
	border-right: 1px solid #ddd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.cell-border tbody tr th:first-child, table.dataTable.cell-border tbody tr td:first-child
 | 
			
		||||
	{
 | 
			
		||||
	border-left: 1px solid #ddd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.cell-border tbody tr:first-child th, table.dataTable.cell-border tbody tr:first-child td
 | 
			
		||||
	{
 | 
			
		||||
	border-top: none
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #f9f9f9
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #acbad4
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #f6f6f6
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #aab7d1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.order-column tbody tr>.sorting_1, table.dataTable.order-column tbody tr>.sorting_2,
 | 
			
		||||
	table.dataTable.order-column tbody tr>.sorting_3, table.dataTable.display tbody tr>.sorting_1,
 | 
			
		||||
	table.dataTable.display tbody tr>.sorting_2, table.dataTable.display tbody tr>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #fafafa
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.order-column tbody tr.selected>.sorting_1, table.dataTable.order-column tbody tr.selected>.sorting_2,
 | 
			
		||||
	table.dataTable.order-column tbody tr.selected>.sorting_3, table.dataTable.display tbody tr.selected>.sorting_1,
 | 
			
		||||
	table.dataTable.display tbody tr.selected>.sorting_2, table.dataTable.display tbody tr.selected>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #acbad5
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd>.sorting_1, table.dataTable.order-column.stripe tbody tr.odd>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #f1f1f1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd>.sorting_2, table.dataTable.order-column.stripe tbody tr.odd>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #f3f3f3
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd>.sorting_3, table.dataTable.order-column.stripe tbody tr.odd>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: whitesmoke
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd.selected>.sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a6b4cd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd.selected>.sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a8b5cf
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd.selected>.sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a9b7d1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even>.sorting_1, table.dataTable.order-column.stripe tbody tr.even>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #fafafa
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even>.sorting_2, table.dataTable.order-column.stripe tbody tr.even>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #fcfcfc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even>.sorting_3, table.dataTable.order-column.stripe tbody tr.even>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #fefefe
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even.selected>.sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #acbad5
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even.selected>.sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #aebcd6
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even.selected>.sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #afbdd8
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover>.sorting_1, table.dataTable.order-column.hover tbody tr:hover>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #eaeaea
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover>.sorting_2, table.dataTable.order-column.hover tbody tr:hover>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #ececec
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover>.sorting_3, table.dataTable.order-column.hover tbody tr:hover>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #efefef
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover.selected>.sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a2aec7
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover.selected>.sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a3b0c9
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover.selected>.sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a5b2cb
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.no-footer {
 | 
			
		||||
	border-bottom: 1px solid #111
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.nowrap th, table.dataTable.nowrap td {
 | 
			
		||||
	white-space: nowrap
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.compact thead th, table.dataTable.compact thead td {
 | 
			
		||||
	padding: 4px 17px 4px 4px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.compact tfoot th, table.dataTable.compact tfoot td {
 | 
			
		||||
	padding: 4px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.compact tbody th, table.dataTable.compact tbody td {
 | 
			
		||||
	padding: 4px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable th.dt-left, table.dataTable td.dt-left {
 | 
			
		||||
	text-align: left
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable th.dt-center, table.dataTable td.dt-center, table.dataTable td.dataTables_empty
 | 
			
		||||
	{
 | 
			
		||||
	text-align: center
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable th.dt-right, table.dataTable td.dt-right {
 | 
			
		||||
	text-align: right
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable th.dt-justify, table.dataTable td.dt-justify {
 | 
			
		||||
	text-align: justify
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable th.dt-nowrap, table.dataTable td.dt-nowrap {
 | 
			
		||||
	white-space: nowrap
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.dt-head-left, table.dataTable thead td.dt-head-left,
 | 
			
		||||
	table.dataTable tfoot th.dt-head-left, table.dataTable tfoot td.dt-head-left
 | 
			
		||||
	{
 | 
			
		||||
	text-align: left
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.dt-head-center, table.dataTable thead td.dt-head-center,
 | 
			
		||||
	table.dataTable tfoot th.dt-head-center, table.dataTable tfoot td.dt-head-center
 | 
			
		||||
	{
 | 
			
		||||
	text-align: center
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.dt-head-right, table.dataTable thead td.dt-head-right,
 | 
			
		||||
	table.dataTable tfoot th.dt-head-right, table.dataTable tfoot td.dt-head-right
 | 
			
		||||
	{
 | 
			
		||||
	text-align: right
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.dt-head-justify, table.dataTable thead td.dt-head-justify,
 | 
			
		||||
	table.dataTable tfoot th.dt-head-justify, table.dataTable tfoot td.dt-head-justify
 | 
			
		||||
	{
 | 
			
		||||
	text-align: justify
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.dt-head-nowrap, table.dataTable thead td.dt-head-nowrap,
 | 
			
		||||
	table.dataTable tfoot th.dt-head-nowrap, table.dataTable tfoot td.dt-head-nowrap
 | 
			
		||||
	{
 | 
			
		||||
	white-space: nowrap
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable tbody th.dt-body-left, table.dataTable tbody td.dt-body-left
 | 
			
		||||
	{
 | 
			
		||||
	text-align: left
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable tbody th.dt-body-center, table.dataTable tbody td.dt-body-center
 | 
			
		||||
	{
 | 
			
		||||
	text-align: center
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable tbody th.dt-body-right, table.dataTable tbody td.dt-body-right
 | 
			
		||||
	{
 | 
			
		||||
	text-align: right
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable tbody th.dt-body-justify, table.dataTable tbody td.dt-body-justify
 | 
			
		||||
	{
 | 
			
		||||
	text-align: justify
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable tbody th.dt-body-nowrap, table.dataTable tbody td.dt-body-nowrap
 | 
			
		||||
	{
 | 
			
		||||
	white-space: nowrap
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable, table.dataTable th, table.dataTable td {
 | 
			
		||||
	box-sizing: content-box
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	clear: both;
 | 
			
		||||
	*zoom: 1;
 | 
			
		||||
	zoom: 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_length {
 | 
			
		||||
	float: left
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_filter {
 | 
			
		||||
	float: right;
 | 
			
		||||
	text-align: right
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_filter input {
 | 
			
		||||
	margin-left: 0.5em
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_info {
 | 
			
		||||
	clear: both;
 | 
			
		||||
	float: left;
 | 
			
		||||
	padding-top: 0.755em
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate {
 | 
			
		||||
	float: right;
 | 
			
		||||
	text-align: right;
 | 
			
		||||
	padding-top: 0.25em
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate .paginate_button {
 | 
			
		||||
	box-sizing: border-box;
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	min-width: 1.5em;
 | 
			
		||||
	padding: 0.5em 1em;
 | 
			
		||||
	margin-left: 2px;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
	text-decoration: none !important;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	*cursor: hand;
 | 
			
		||||
	color: #333 !important;
 | 
			
		||||
	border: 1px solid transparent;
 | 
			
		||||
	border-radius: 2px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate .paginate_button.current,
 | 
			
		||||
	.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover
 | 
			
		||||
	{
 | 
			
		||||
	color: #333 !important;
 | 
			
		||||
	border: 1px solid #979797;
 | 
			
		||||
	background-color: white;
 | 
			
		||||
	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff),
 | 
			
		||||
		color-stop(100%, #dcdcdc));
 | 
			
		||||
	background: -webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);
 | 
			
		||||
	background: -moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);
 | 
			
		||||
	background: -ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);
 | 
			
		||||
	background: -o-linear-gradient(top, #fff 0%, #dcdcdc 100%);
 | 
			
		||||
	background: linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,
 | 
			
		||||
	.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,
 | 
			
		||||
	.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active
 | 
			
		||||
	{
 | 
			
		||||
	cursor: default;
 | 
			
		||||
	color: #666 !important;
 | 
			
		||||
	border: 1px solid transparent;
 | 
			
		||||
	background: transparent;
 | 
			
		||||
	box-shadow: none
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
 | 
			
		||||
	color: white !important;
 | 
			
		||||
	border: 1px solid #111;
 | 
			
		||||
	background-color: #585858;
 | 
			
		||||
	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858),
 | 
			
		||||
		color-stop(100%, #111));
 | 
			
		||||
	background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
 | 
			
		||||
	background: -moz-linear-gradient(top, #585858 0%, #111 100%);
 | 
			
		||||
	background: -ms-linear-gradient(top, #585858 0%, #111 100%);
 | 
			
		||||
	background: -o-linear-gradient(top, #585858 0%, #111 100%);
 | 
			
		||||
	background: linear-gradient(to bottom, #585858 0%, #111 100%)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate .paginate_button:active {
 | 
			
		||||
	outline: none;
 | 
			
		||||
	background-color: #2b2b2b;
 | 
			
		||||
	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b),
 | 
			
		||||
		color-stop(100%, #0c0c0c));
 | 
			
		||||
	background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
 | 
			
		||||
	background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
 | 
			
		||||
	background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
 | 
			
		||||
	background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
 | 
			
		||||
	background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
 | 
			
		||||
	box-shadow: inset 0 0 3px #111
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate .ellipsis {
 | 
			
		||||
	padding: 0 1em
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_processing {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 50%;
 | 
			
		||||
	left: 50%;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: 40px;
 | 
			
		||||
	margin-left: -50%;
 | 
			
		||||
	margin-top: -25px;
 | 
			
		||||
	padding-top: 20px;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
	font-size: 1.2em;
 | 
			
		||||
	background-color: white;
 | 
			
		||||
	background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,
 | 
			
		||||
		255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)),
 | 
			
		||||
		color-stop(75%, rgba(255, 255, 255, 0.9)),
 | 
			
		||||
		color-stop(100%, rgba(255, 255, 255, 0)));
 | 
			
		||||
	background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%,
 | 
			
		||||
		rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%,
 | 
			
		||||
		rgba(255, 255, 255, 0) 100%);
 | 
			
		||||
	background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%,
 | 
			
		||||
		rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%,
 | 
			
		||||
		rgba(255, 255, 255, 0) 100%);
 | 
			
		||||
	background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%,
 | 
			
		||||
		rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%,
 | 
			
		||||
		rgba(255, 255, 255, 0) 100%);
 | 
			
		||||
	background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%,
 | 
			
		||||
		rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%,
 | 
			
		||||
		rgba(255, 255, 255, 0) 100%);
 | 
			
		||||
	background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%,
 | 
			
		||||
		rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%,
 | 
			
		||||
		rgba(255, 255, 255, 0) 100%)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter,
 | 
			
		||||
	.dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing,
 | 
			
		||||
	.dataTables_wrapper .dataTables_paginate {
 | 
			
		||||
	color: #333
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_scroll {
 | 
			
		||||
	clear: both
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
 | 
			
		||||
	*margin-top: -1px;
 | 
			
		||||
	-webkit-overflow-scrolling: touch
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,
 | 
			
		||||
	.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,
 | 
			
		||||
	.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,
 | 
			
		||||
	.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td
 | 
			
		||||
	{
 | 
			
		||||
	vertical-align: middle
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,
 | 
			
		||||
	.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,
 | 
			
		||||
	.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,
 | 
			
		||||
	.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing
 | 
			
		||||
	{
 | 
			
		||||
	height: 0;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	margin: 0 !important;
 | 
			
		||||
	padding: 0 !important
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper.no-footer .dataTables_scrollBody {
 | 
			
		||||
	border-bottom: 1px solid #111
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,
 | 
			
		||||
	.dataTables_wrapper.no-footer div.dataTables_scrollBody>table {
 | 
			
		||||
	border-bottom: none
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper:after {
 | 
			
		||||
	visibility: hidden;
 | 
			
		||||
	display: block;
 | 
			
		||||
	content: "";
 | 
			
		||||
	clear: both;
 | 
			
		||||
	height: 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media screen and (max-width: 767px) {
 | 
			
		||||
	.dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_paginate
 | 
			
		||||
		{
 | 
			
		||||
		float: none;
 | 
			
		||||
		text-align: center
 | 
			
		||||
	}
 | 
			
		||||
	.dataTables_wrapper .dataTables_paginate {
 | 
			
		||||
		margin-top: 0.5em
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media screen and (max-width: 640px) {
 | 
			
		||||
	.dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter
 | 
			
		||||
		{
 | 
			
		||||
		float: none;
 | 
			
		||||
		text-align: center
 | 
			
		||||
	}
 | 
			
		||||
	.dataTables_wrapper .dataTables_filter {
 | 
			
		||||
		margin-top: 0.5em
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th div.DataTables_sort_wrapper {
 | 
			
		||||
	position: relative
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th div.DataTables_sort_wrapper span {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 50%;
 | 
			
		||||
	margin-top: -8px;
 | 
			
		||||
	right: -18px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.ui-state-default, table.dataTable tfoot th.ui-state-default
 | 
			
		||||
	{
 | 
			
		||||
	border-left-width: 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.ui-state-default:first-child, table.dataTable tfoot th.ui-state-default:first-child
 | 
			
		||||
	{
 | 
			
		||||
	border-left-width: 1px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate .fg-button {
 | 
			
		||||
	box-sizing: border-box;
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	min-width: 1.5em;
 | 
			
		||||
	padding: 0.5em;
 | 
			
		||||
	margin-left: 2px;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
	text-decoration: none !important;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	*cursor: hand;
 | 
			
		||||
	border: 1px solid transparent
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate .fg-button:active {
 | 
			
		||||
	outline: none
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate .fg-button:first-child {
 | 
			
		||||
	border-top-left-radius: 3px;
 | 
			
		||||
	border-bottom-left-radius: 3px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_paginate .fg-button:last-child {
 | 
			
		||||
	border-top-right-radius: 3px;
 | 
			
		||||
	border-bottom-right-radius: 3px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .ui-widget-header {
 | 
			
		||||
	font-weight: normal
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .ui-toolbar {
 | 
			
		||||
	padding: 8px
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper.no-footer .dataTables_scrollBody {
 | 
			
		||||
	border-bottom: none
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dataTables_length, .dataTables_wrapper .dataTables_filter,
 | 
			
		||||
	.dataTables_wrapper .dataTables_info, .dataTables_wrapper .dataTables_processing,
 | 
			
		||||
	.dataTables_wrapper .dataTables_paginate {
 | 
			
		||||
	color: inherit
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										191
									
								
								src/jqueryui1.12/datatables.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,191 @@
 | 
			
		||||
/*
 | 
			
		||||
 * This combined file was created by the DataTables downloader builder:
 | 
			
		||||
 *   https://datatables.net/download
 | 
			
		||||
 *
 | 
			
		||||
 * To rebuild or modify this file with the latest versions of the included
 | 
			
		||||
 * software please visit:
 | 
			
		||||
 *   https://datatables.net/download/#ju/dt-1.10.18
 | 
			
		||||
 *
 | 
			
		||||
 * Included libraries:
 | 
			
		||||
 *   DataTables 1.10.18
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 DataTables 1.10.18
 | 
			
		||||
 ©2008-2018 SpryMedia Ltd - datatables.net/license
 | 
			
		||||
*/
 | 
			
		||||
(function(h){"function"===typeof define&&define.amd?define(["jquery"],function(E){return h(E,window,document)}):"object"===typeof exports?module.exports=function(E,H){E||(E=window);H||(H="undefined"!==typeof window?require("jquery"):require("jquery")(E));return h(H,E,E.document)}:h(jQuery,window,document)})(function(h,E,H,k){function Z(a){var b,c,d={};h.each(a,function(e){if((b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" "))c=e.replace(b[0],b[2].toLowerCase()),
 | 
			
		||||
d[c]=e,"o"===b[1]&&Z(a[e])});a._hungarianMap=d}function J(a,b,c){a._hungarianMap||Z(a);var d;h.each(b,function(e){d=a._hungarianMap[e];if(d!==k&&(c||b[d]===k))"o"===d.charAt(0)?(b[d]||(b[d]={}),h.extend(!0,b[d],b[e]),J(a[d],b[d],c)):b[d]=b[e]})}function Ca(a){var b=n.defaults.oLanguage,c=b.sDecimal;c&&Da(c);if(a){var d=a.sZeroRecords;!a.sEmptyTable&&(d&&"No data available in table"===b.sEmptyTable)&&F(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&(d&&"Loading..."===b.sLoadingRecords)&&F(a,
 | 
			
		||||
a,"sZeroRecords","sLoadingRecords");a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&c!==a&&Da(a)}}function eb(a){A(a,"ordering","bSort");A(a,"orderMulti","bSortMulti");A(a,"orderClasses","bSortClasses");A(a,"orderCellsTop","bSortCellsTop");A(a,"order","aaSorting");A(a,"orderFixed","aaSortingFixed");A(a,"paging","bPaginate");A(a,"pagingType","sPaginationType");A(a,"pageLength","iDisplayLength");A(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":
 | 
			
		||||
"");"boolean"===typeof a.scrollX&&(a.scrollX=a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&J(n.models.oSearch,a[b])}function fb(a){A(a,"orderable","bSortable");A(a,"orderData","aDataSort");A(a,"orderSequence","asSorting");A(a,"orderDataType","sortDataType");var b=a.aDataSort;"number"===typeof b&&!h.isArray(b)&&(a.aDataSort=[b])}function gb(a){if(!n.__browser){var b={};n.__browser=b;var c=h("<div/>").css({position:"fixed",top:0,left:-1*h(E).scrollLeft(),height:1,width:1,
 | 
			
		||||
overflow:"hidden"}).append(h("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(h("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}h.extend(a.oBrowser,n.__browser);a.oScroll.iBarWidth=n.__browser.barWidth}
 | 
			
		||||
function hb(a,b,c,d,e,f){var g,j=!1;c!==k&&(g=c,j=!0);for(;d!==e;)a.hasOwnProperty(d)&&(g=j?b(g,a[d],d,a):a[d],j=!0,d+=f);return g}function Ea(a,b){var c=n.defaults.column,d=a.aoColumns.length,c=h.extend({},n.models.oColumn,c,{nTh:b?b:H.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=h.extend({},n.models.oSearch,c[d]);ka(a,d,h(b).data())}function ka(a,b,c){var b=a.aoColumns[b],
 | 
			
		||||
d=a.oClasses,e=h(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var f=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);f&&(b.sWidthOrig=f[1])}c!==k&&null!==c&&(fb(c),J(n.defaults.column,c),c.mDataProp!==k&&!c.mData&&(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),h.extend(b,c),F(b,c,"sWidth","sWidthOrig"),c.iDataSort!==k&&(b.aDataSort=[c.iDataSort]),F(b,c,"aDataSort"));var g=b.mData,j=S(g),i=b.mRender?
 | 
			
		||||
S(b.mRender):null,c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=h.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=j(a,b,k,c);return i&&b?i(d,b,a,c):d};b.fnSetData=function(a,b,c){return N(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==h.inArray("asc",b.asSorting);c=-1!==h.inArray("desc",b.asSorting);!b.bSortable||!a&&!c?(b.sSortingClass=d.sSortableNone,
 | 
			
		||||
b.sSortingClassJUI=""):a&&!c?(b.sSortingClass=d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI)}function $(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Fa(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;(""!==b.sY||""!==b.sX)&&la(a);r(a,null,"column-sizing",[a])}function aa(a,b){var c=ma(a,"bVisible");return"number"===
 | 
			
		||||
typeof c[b]?c[b]:null}function ba(a,b){var c=ma(a,"bVisible"),c=h.inArray(b,c);return-1!==c?c:null}function V(a){var b=0;h.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==h(d.nTh).css("display")&&b++});return b}function ma(a,b){var c=[];h.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ga(a){var b=a.aoColumns,c=a.aoData,d=n.ext.type.detect,e,f,g,j,i,h,l,q,t;e=0;for(f=b.length;e<f;e++)if(l=b[e],t=[],!l.sType&&l._sManualType)l.sType=l._sManualType;else if(!l.sType){g=0;for(j=d.length;g<
 | 
			
		||||
j;g++){i=0;for(h=c.length;i<h;i++){t[i]===k&&(t[i]=B(a,i,e,"type"));q=d[g](t[i],a);if(!q&&g!==d.length-1)break;if("html"===q)break}if(q){l.sType=q;break}}l.sType||(l.sType="string")}}function ib(a,b,c,d){var e,f,g,j,i,m,l=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){m=b[e];var q=m.targets!==k?m.targets:m.aTargets;h.isArray(q)||(q=[q]);f=0;for(g=q.length;f<g;f++)if("number"===typeof q[f]&&0<=q[f]){for(;l.length<=q[f];)Ea(a);d(q[f],m)}else if("number"===typeof q[f]&&0>q[f])d(l.length+q[f],m);else if("string"===
 | 
			
		||||
typeof q[f]){j=0;for(i=l.length;j<i;j++)("_all"==q[f]||h(l[j].nTh).hasClass(q[f]))&&d(j,m)}}if(c){e=0;for(a=c.length;e<a;e++)d(e,c[e])}}function O(a,b,c,d){var e=a.aoData.length,f=h.extend(!0,{},n.models.oRow,{src:c?"dom":"data",idx:e});f._aData=b;a.aoData.push(f);for(var g=a.aoColumns,j=0,i=g.length;j<i;j++)g[j].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==k&&(a.aIds[b]=f);(c||!a.oFeatures.bDeferRender)&&Ha(a,e,c,d);return e}function na(a,b){var c;b instanceof h||(b=h(b));return b.map(function(b,
 | 
			
		||||
e){c=Ia(a,e);return O(a,c.data,e,c.cells)})}function B(a,b,c,d){var e=a.iDraw,f=a.aoColumns[c],g=a.aoData[b]._aData,j=f.sDefaultContent,i=f.fnGetData(g,d,{settings:a,row:b,col:c});if(i===k)return a.iDrawError!=e&&null===j&&(K(a,0,"Requested unknown parameter "+("function"==typeof f.mData?"{function}":"'"+f.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),j;if((i===g||null===i)&&null!==j&&d!==k)i=j;else if("function"===typeof i)return i.call(g);return null===i&&"display"==d?"":i}function jb(a,
 | 
			
		||||
b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}function Ja(a){return h.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\\./g,".")})}function S(a){if(h.isPlainObject(a)){var b={};h.each(a,function(a,c){c&&(b[a]=S(c))});return function(a,c,f,g){var j=b[c]||b._;return j!==k?j(a,c,f,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,f,g){return a(b,c,f,g)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||
 | 
			
		||||
-1!==a.indexOf("("))){var c=function(a,b,f){var g,j;if(""!==f){j=Ja(f);for(var i=0,m=j.length;i<m;i++){f=j[i].match(ca);g=j[i].match(W);if(f){j[i]=j[i].replace(ca,"");""!==j[i]&&(a=a[j[i]]);g=[];j.splice(0,i+1);j=j.join(".");if(h.isArray(a)){i=0;for(m=a.length;i<m;i++)g.push(c(a[i],b,j))}a=f[0].substring(1,f[0].length-1);a=""===a?g:g.join(a);break}else if(g){j[i]=j[i].replace(W,"");a=a[j[i]]();continue}if(null===a||a[j[i]]===k)return k;a=a[j[i]]}}return a};return function(b,e){return c(b,e,a)}}return function(b){return b[a]}}
 | 
			
		||||
function N(a){if(h.isPlainObject(a))return N(a._);if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"===typeof a&&(-1!==a.indexOf(".")||-1!==a.indexOf("[")||-1!==a.indexOf("("))){var b=function(a,d,e){var e=Ja(e),f;f=e[e.length-1];for(var g,j,i=0,m=e.length-1;i<m;i++){g=e[i].match(ca);j=e[i].match(W);if(g){e[i]=e[i].replace(ca,"");a[e[i]]=[];f=e.slice();f.splice(0,i+1);g=f.join(".");if(h.isArray(d)){j=0;for(m=d.length;j<m;j++)f={},b(f,d[j],g),
 | 
			
		||||
a[e[i]].push(f)}else a[e[i]]=d;return}j&&(e[i]=e[i].replace(W,""),a=a[e[i]](d));if(null===a[e[i]]||a[e[i]]===k)a[e[i]]={};a=a[e[i]]}if(f.match(W))a[f.replace(W,"")](d);else a[f.replace(ca,"")]=d};return function(c,d){return b(c,d,a)}}return function(b,d){b[a]=d}}function Ka(a){return D(a.aoData,"_aData")}function oa(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function pa(a,b,c){for(var d=-1,e=0,f=a.length;e<f;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===k&&a.splice(d,
 | 
			
		||||
1)}function da(a,b,c,d){var e=a.aoData[b],f,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);c.innerHTML=B(a,b,d,"display")};if("dom"===c||(!c||"auto"===c)&&"dom"===e.src)e._aData=Ia(a,e,d,d===k?k:e._aData).data;else{var j=e.anCells;if(j)if(d!==k)g(j[d],d);else{c=0;for(f=j.length;c<f;c++)g(j[c],c)}}e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==k)g[d].sType=null;else{c=0;for(f=g.length;c<f;c++)g[c].sType=null;La(a,e)}}function Ia(a,b,c,d){var e=[],f=b.firstChild,g,
 | 
			
		||||
j,i=0,m,l=a.aoColumns,q=a._rowReadObject,d=d!==k?d:q?{}:[],t=function(a,b){if("string"===typeof a){var c=a.indexOf("@");-1!==c&&(c=a.substring(c+1),N(a)(d,b.getAttribute(c)))}},G=function(a){if(c===k||c===i)j=l[i],m=h.trim(a.innerHTML),j&&j._bAttrSrc?(N(j.mData._)(d,m),t(j.mData.sort,a),t(j.mData.type,a),t(j.mData.filter,a)):q?(j._setter||(j._setter=N(j.mData)),j._setter(d,m)):d[i]=m;i++};if(f)for(;f;){g=f.nodeName.toUpperCase();if("TD"==g||"TH"==g)G(f),e.push(f);f=f.nextSibling}else{e=b.anCells;
 | 
			
		||||
f=0;for(g=e.length;f<g;f++)G(e[f])}if(b=b.firstChild?b:b.nTr)(b=b.getAttribute("id"))&&N(a.rowId)(d,b);return{data:d,cells:e}}function Ha(a,b,c,d){var e=a.aoData[b],f=e._aData,g=[],j,i,m,l,q;if(null===e.nTr){j=c||H.createElement("tr");e.nTr=j;e.anCells=g;j._DT_RowIndex=b;La(a,e);l=0;for(q=a.aoColumns.length;l<q;l++){m=a.aoColumns[l];i=c?d[l]:H.createElement(m.sCellType);i._DT_CellIndex={row:b,column:l};g.push(i);if((!c||m.mRender||m.mData!==l)&&(!h.isPlainObject(m.mData)||m.mData._!==l+".display"))i.innerHTML=
 | 
			
		||||
B(a,b,l,"display");m.sClass&&(i.className+=" "+m.sClass);m.bVisible&&!c?j.appendChild(i):!m.bVisible&&c&&i.parentNode.removeChild(i);m.fnCreatedCell&&m.fnCreatedCell.call(a.oInstance,i,B(a,b,l),f,b,l)}r(a,"aoRowCreatedCallback",null,[j,f,b,g])}e.nTr.setAttribute("role","row")}function La(a,b){var c=b.nTr,d=b._aData;if(c){var e=a.rowIdFn(d);e&&(c.id=e);d.DT_RowClass&&(e=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?qa(b.__rowc.concat(e)):e,h(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));
 | 
			
		||||
d.DT_RowAttr&&h(c).attr(d.DT_RowAttr);d.DT_RowData&&h(c).data(d.DT_RowData)}}function kb(a){var b,c,d,e,f,g=a.nTHead,j=a.nTFoot,i=0===h("th, td",g).length,m=a.oClasses,l=a.aoColumns;i&&(e=h("<tr/>").appendTo(g));b=0;for(c=l.length;b<c;b++)f=l[b],d=h(f.nTh).addClass(f.sClass),i&&d.appendTo(e),a.oFeatures.bSort&&(d.addClass(f.sSortingClass),!1!==f.bSortable&&(d.attr("tabindex",a.iTabIndex).attr("aria-controls",a.sTableId),Ma(a,f.nTh,b))),f.sTitle!=d[0].innerHTML&&d.html(f.sTitle),Na(a,"header")(a,d,
 | 
			
		||||
f,m);i&&ea(a.aoHeader,g);h(g).find(">tr").attr("role","row");h(g).find(">tr>th, >tr>td").addClass(m.sHeaderTH);h(j).find(">tr>th, >tr>td").addClass(m.sFooterTH);if(null!==j){a=a.aoFooter[0];b=0;for(c=a.length;b<c;b++)f=l[b],f.nTf=a[b].cell,f.sClass&&h(f.nTf).addClass(f.sClass)}}function fa(a,b,c){var d,e,f,g=[],j=[],i=a.aoColumns.length,m;if(b){c===k&&(c=!1);d=0;for(e=b.length;d<e;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(f=i-1;0<=f;f--)!a.aoColumns[f].bVisible&&!c&&g[d].splice(f,1);j.push([])}d=
 | 
			
		||||
0;for(e=g.length;d<e;d++){if(a=g[d].nTr)for(;f=a.firstChild;)a.removeChild(f);f=0;for(b=g[d].length;f<b;f++)if(m=i=1,j[d][f]===k){a.appendChild(g[d][f].cell);for(j[d][f]=1;g[d+i]!==k&&g[d][f].cell==g[d+i][f].cell;)j[d+i][f]=1,i++;for(;g[d][f+m]!==k&&g[d][f].cell==g[d][f+m].cell;){for(c=0;c<i;c++)j[d+c][f+m]=1;m++}h(g[d][f].cell).attr("rowspan",i).attr("colspan",m)}}}}function P(a){var b=r(a,"aoPreDrawCallback","preDraw",[a]);if(-1!==h.inArray(!1,b))C(a,!1);else{var b=[],c=0,d=a.asStripeClasses,e=
 | 
			
		||||
d.length,f=a.oLanguage,g=a.iInitDisplayStart,j="ssp"==y(a),i=a.aiDisplay;a.bDrawing=!0;g!==k&&-1!==g&&(a._iDisplayStart=j?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);var g=a._iDisplayStart,m=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,C(a,!1);else if(j){if(!a.bDestroying&&!lb(a))return}else a.iDraw++;if(0!==i.length){f=j?a.aoData.length:m;for(j=j?0:g;j<f;j++){var l=i[j],q=a.aoData[l];null===q.nTr&&Ha(a,l);var t=q.nTr;if(0!==e){var G=d[c%e];q._sRowStripe!=G&&(h(t).removeClass(q._sRowStripe).addClass(G),
 | 
			
		||||
q._sRowStripe=G)}r(a,"aoRowCallback",null,[t,q._aData,c,j,l]);b.push(t);c++}}else c=f.sZeroRecords,1==a.iDraw&&"ajax"==y(a)?c=f.sLoadingRecords:f.sEmptyTable&&0===a.fnRecordsTotal()&&(c=f.sEmptyTable),b[0]=h("<tr/>",{"class":e?d[0]:""}).append(h("<td />",{valign:"top",colSpan:V(a),"class":a.oClasses.sRowEmpty}).html(c))[0];r(a,"aoHeaderCallback","header",[h(a.nTHead).children("tr")[0],Ka(a),g,m,i]);r(a,"aoFooterCallback","footer",[h(a.nTFoot).children("tr")[0],Ka(a),g,m,i]);d=h(a.nTBody);d.children().detach();
 | 
			
		||||
d.append(h(b));r(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function T(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&mb(a);d?ga(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;P(a);a._drawHold=!1}function nb(a){var b=a.oClasses,c=h(a.nTable),c=h("<div/>").insertBefore(c),d=a.oFeatures,e=h("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=
 | 
			
		||||
a.nTable.nextSibling;for(var f=a.sDom.split(""),g,j,i,m,l,q,k=0;k<f.length;k++){g=null;j=f[k];if("<"==j){i=h("<div/>")[0];m=f[k+1];if("'"==m||'"'==m){l="";for(q=2;f[k+q]!=m;)l+=f[k+q],q++;"H"==l?l=b.sJUIHeader:"F"==l&&(l=b.sJUIFooter);-1!=l.indexOf(".")?(m=l.split("."),i.id=m[0].substr(1,m[0].length-1),i.className=m[1]):"#"==l.charAt(0)?i.id=l.substr(1,l.length-1):i.className=l;k+=q}e.append(i);e=h(i)}else if(">"==j)e=e.parent();else if("l"==j&&d.bPaginate&&d.bLengthChange)g=ob(a);else if("f"==j&&
 | 
			
		||||
d.bFilter)g=pb(a);else if("r"==j&&d.bProcessing)g=qb(a);else if("t"==j)g=rb(a);else if("i"==j&&d.bInfo)g=sb(a);else if("p"==j&&d.bPaginate)g=tb(a);else if(0!==n.ext.feature.length){i=n.ext.feature;q=0;for(m=i.length;q<m;q++)if(j==i[q].cFeature){g=i[q].fnInit(a);break}}g&&(i=a.aanFeatures,i[j]||(i[j]=[]),i[j].push(g),e.append(g))}c.replaceWith(e);a.nHolding=null}function ea(a,b){var c=h(b).children("tr"),d,e,f,g,j,i,m,l,q,k;a.splice(0,a.length);f=0;for(i=c.length;f<i;f++)a.push([]);f=0;for(i=c.length;f<
 | 
			
		||||
i;f++){d=c[f];for(e=d.firstChild;e;){if("TD"==e.nodeName.toUpperCase()||"TH"==e.nodeName.toUpperCase()){l=1*e.getAttribute("colspan");q=1*e.getAttribute("rowspan");l=!l||0===l||1===l?1:l;q=!q||0===q||1===q?1:q;g=0;for(j=a[f];j[g];)g++;m=g;k=1===l?!0:!1;for(j=0;j<l;j++)for(g=0;g<q;g++)a[f+g][m+j]={cell:e,unique:k},a[f+g].nTr=d}e=e.nextSibling}}}function ra(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],ea(c,b)));for(var b=0,e=c.length;b<e;b++)for(var f=0,g=c[b].length;f<g;f++)if(c[b][f].unique&&(!d[f]||
 | 
			
		||||
!a.bSortCellsTop))d[f]=c[b][f].cell;return d}function sa(a,b,c){r(a,"aoServerParams","serverParams",[b]);if(b&&h.isArray(b)){var d={},e=/(.*?)\[\]$/;h.each(b,function(a,b){var c=b.name.match(e);c?(c=c[0],d[c]||(d[c]=[]),d[c].push(b.value)):d[b.name]=b.value});b=d}var f,g=a.ajax,j=a.oInstance,i=function(b){r(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(h.isPlainObject(g)&&g.data){f=g.data;var m="function"===typeof f?f(b,a):f,b="function"===typeof f&&m?m:h.extend(!0,b,m);delete g.data}m={data:b,success:function(b){var c=
 | 
			
		||||
b.error||b.sError;c&&K(a,0,c);a.json=b;i(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c){var d=r(a,null,"xhr",[a,null,a.jqXHR]);-1===h.inArray(!0,d)&&("parsererror"==c?K(a,0,"Invalid JSON response",1):4===b.readyState&&K(a,0,"Ajax error",7));C(a,!1)}};a.oAjaxData=b;r(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(j,a.sAjaxSource,h.map(b,function(a,b){return{name:b,value:a}}),i,a):a.sAjaxSource||"string"===typeof g?a.jqXHR=h.ajax(h.extend(m,{url:g||a.sAjaxSource})):
 | 
			
		||||
"function"===typeof g?a.jqXHR=g.call(j,b,i,a):(a.jqXHR=h.ajax(h.extend(m,g)),g.data=f)}function lb(a){return a.bAjaxDataGet?(a.iDraw++,C(a,!0),sa(a,ub(a),function(b){vb(a,b)}),!1):!0}function ub(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,f=a.aoPreSearchCols,g,j=[],i,m,l,k=X(a);g=a._iDisplayStart;i=!1!==d.bPaginate?a._iDisplayLength:-1;var t=function(a,b){j.push({name:a,value:b})};t("sEcho",a.iDraw);t("iColumns",c);t("sColumns",D(b,"sName").join(","));t("iDisplayStart",g);t("iDisplayLength",
 | 
			
		||||
i);var G={draw:a.iDraw,columns:[],order:[],start:g,length:i,search:{value:e.sSearch,regex:e.bRegex}};for(g=0;g<c;g++)m=b[g],l=f[g],i="function"==typeof m.mData?"function":m.mData,G.columns.push({data:i,name:m.sName,searchable:m.bSearchable,orderable:m.bSortable,search:{value:l.sSearch,regex:l.bRegex}}),t("mDataProp_"+g,i),d.bFilter&&(t("sSearch_"+g,l.sSearch),t("bRegex_"+g,l.bRegex),t("bSearchable_"+g,m.bSearchable)),d.bSort&&t("bSortable_"+g,m.bSortable);d.bFilter&&(t("sSearch",e.sSearch),t("bRegex",
 | 
			
		||||
e.bRegex));d.bSort&&(h.each(k,function(a,b){G.order.push({column:b.col,dir:b.dir});t("iSortCol_"+a,b.col);t("sSortDir_"+a,b.dir)}),t("iSortingCols",k.length));b=n.ext.legacy.ajax;return null===b?a.sAjaxSource?j:G:b?j:G}function vb(a,b){var c=ta(a,b),d=b.sEcho!==k?b.sEcho:b.draw,e=b.iTotalRecords!==k?b.iTotalRecords:b.recordsTotal,f=b.iTotalDisplayRecords!==k?b.iTotalDisplayRecords:b.recordsFiltered;if(d){if(1*d<a.iDraw)return;a.iDraw=1*d}oa(a);a._iRecordsTotal=parseInt(e,10);a._iRecordsDisplay=parseInt(f,
 | 
			
		||||
10);d=0;for(e=c.length;d<e;d++)O(a,c[d]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;P(a);a._bInitComplete||ua(a,b);a.bAjaxDataGet=!0;C(a,!1)}function ta(a,b){var c=h.isPlainObject(a.ajax)&&a.ajax.dataSrc!==k?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===c?b.aaData||b[c]:""!==c?S(c)(b):b}function pb(a){var b=a.oClasses,c=a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,f=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',j=d.sSearch,j=j.match(/_INPUT_/)?j.replace("_INPUT_",
 | 
			
		||||
g):j+g,b=h("<div/>",{id:!f.f?c+"_filter":null,"class":b.sFilter}).append(h("<label/>").append(j)),f=function(){var b=!this.value?"":this.value;b!=e.sSearch&&(ga(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,P(a))},g=null!==a.searchDelay?a.searchDelay:"ssp"===y(a)?400:0,i=h("input",b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",g?Oa(f,g):f).on("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",
 | 
			
		||||
c);h(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{i[0]!==H.activeElement&&i.val(e.sSearch)}catch(d){}});return b[0]}function ga(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,f=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};Ga(a);if("ssp"!=y(a)){wb(a,b.sSearch,c,b.bEscapeRegex!==k?!b.bEscapeRegex:b.bRegex,b.bSmart,b.bCaseInsensitive);f(b);for(b=0;b<e.length;b++)xb(a,e[b].sSearch,b,e[b].bEscapeRegex!==k?!e[b].bEscapeRegex:e[b].bRegex,
 | 
			
		||||
e[b].bSmart,e[b].bCaseInsensitive);yb(a)}else f(b);a.bFiltered=!0;r(a,null,"search",[a])}function yb(a){for(var b=n.ext.search,c=a.aiDisplay,d,e,f=0,g=b.length;f<g;f++){for(var j=[],i=0,m=c.length;i<m;i++)e=c[i],d=a.aoData[e],b[f](a,d._aFilterData,e,d._aData,i)&&j.push(e);c.length=0;h.merge(c,j)}}function xb(a,b,c,d,e,f){if(""!==b){for(var g=[],j=a.aiDisplay,d=Pa(b,d,e,f),e=0;e<j.length;e++)b=a.aoData[j[e]]._aFilterData[c],d.test(b)&&g.push(j[e]);a.aiDisplay=g}}function wb(a,b,c,d,e,f){var d=Pa(b,
 | 
			
		||||
d,e,f),f=a.oPreviousSearch.sSearch,g=a.aiDisplayMaster,j,e=[];0!==n.ext.search.length&&(c=!0);j=zb(a);if(0>=b.length)a.aiDisplay=g.slice();else{if(j||c||f.length>b.length||0!==b.indexOf(f)||a.bSorted)a.aiDisplay=g.slice();b=a.aiDisplay;for(c=0;c<b.length;c++)d.test(a.aoData[b[c]]._sFilterRow)&&e.push(b[c]);a.aiDisplay=e}}function Pa(a,b,c,d){a=b?a:Qa(a);c&&(a="^(?=.*?"+h.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0))var b=a.match(/^"(.*)"$/),a=b?b[1]:a;return a.replace('"',
 | 
			
		||||
"")}).join(")(?=.*?")+").*$");return RegExp(a,d?"i":"")}function zb(a){var b=a.aoColumns,c,d,e,f,g,j,i,h,l=n.ext.type.search;c=!1;d=0;for(f=a.aoData.length;d<f;d++)if(h=a.aoData[d],!h._aFilterData){j=[];e=0;for(g=b.length;e<g;e++)c=b[e],c.bSearchable?(i=B(a,d,e,"filter"),l[c.sType]&&(i=l[c.sType](i)),null===i&&(i=""),"string"!==typeof i&&i.toString&&(i=i.toString())):i="",i.indexOf&&-1!==i.indexOf("&")&&(va.innerHTML=i,i=Wb?va.textContent:va.innerText),i.replace&&(i=i.replace(/[\r\n]/g,"")),j.push(i);
 | 
			
		||||
h._aFilterData=j;h._sFilterRow=j.join("  ");c=!0}return c}function Ab(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}function Bb(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function sb(a){var b=a.sTableId,c=a.aanFeatures.i,d=h("<div/>",{"class":a.oClasses.sInfo,id:!c?b+"_info":null});c||(a.aoDrawCallback.push({fn:Cb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),h(a.nTable).attr("aria-describedby",
 | 
			
		||||
b+"_info"));return d[0]}function Cb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),f=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),j=g?c.sInfo:c.sInfoEmpty;g!==f&&(j+=" "+c.sInfoFiltered);j+=c.sInfoPostFix;j=Db(a,j);c=c.fnInfoCallback;null!==c&&(j=c.call(a.oInstance,a,d,e,f,g,j));h(b).html(j)}}function Db(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,f=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,
 | 
			
		||||
c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,f)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(f/e)))}function ha(a){var b,c,d=a.iInitDisplayStart,e=a.aoColumns,f;c=a.oFeatures;var g=a.bDeferLoading;if(a.bInitialised){nb(a);kb(a);fa(a,a.aoHeader);fa(a,a.aoFooter);C(a,!0);c.bAutoWidth&&Fa(a);b=0;for(c=e.length;b<c;b++)f=e[b],f.sWidth&&(f.nTh.style.width=v(f.sWidth));r(a,null,"preInit",[a]);T(a);e=
 | 
			
		||||
y(a);if("ssp"!=e||g)"ajax"==e?sa(a,[],function(c){var f=ta(a,c);for(b=0;b<f.length;b++)O(a,f[b]);a.iInitDisplayStart=d;T(a);C(a,!1);ua(a,c)},a):(C(a,!1),ua(a))}else setTimeout(function(){ha(a)},200)}function ua(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&$(a);r(a,null,"plugin-init",[a,b]);r(a,"aoInitComplete","init",[a,b])}function Ra(a,b){var c=parseInt(b,10);a._iDisplayLength=c;Sa(a);r(a,null,"length",[a,c])}function ob(a){for(var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=h.isArray(d[0]),f=
 | 
			
		||||
e?d[0]:d,d=e?d[1]:d,e=h("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect}),g=0,j=f.length;g<j;g++)e[0][g]=new Option("number"===typeof d[g]?a.fnFormatNumber(d[g]):d[g],f[g]);var i=h("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(i[0].id=c+"_length");i.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",e[0].outerHTML));h("select",i).val(a._iDisplayLength).on("change.DT",function(){Ra(a,h(this).val());P(a)});h(a.nTable).on("length.dt.DT",function(b,c,d){a===
 | 
			
		||||
c&&h("select",i).val(d)});return i[0]}function tb(a){var b=a.sPaginationType,c=n.ext.pager[b],d="function"===typeof c,e=function(a){P(a)},b=h("<div/>").addClass(a.oClasses.sPaging+b)[0],f=a.aanFeatures;d||c.fnInit(a,b,e);f.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,i=a._iDisplayLength,h=a.fnRecordsDisplay(),l=-1===i,b=l?0:Math.ceil(b/i),i=l?1:Math.ceil(h/i),h=c(b,i),k,l=0;for(k=f.p.length;l<k;l++)Na(a,"pageButton")(a,f.p[l],l,h,b,i)}else c.fnUpdate(a,
 | 
			
		||||
e)},sName:"pagination"}));return b}function Ta(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,f=a.fnRecordsDisplay();0===f||-1===e?d=0:"number"===typeof b?(d=b*e,d>f&&(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<f&&(d+=e):"last"==b?d=Math.floor((f-1)/e)*e:K(a,0,"Unknown paging action: "+b,5);b=a._iDisplayStart!==d;a._iDisplayStart=d;b&&(r(a,null,"page",[a]),c&&P(a));return b}function qb(a){return h("<div/>",{id:!a.aanFeatures.r?a.sTableId+"_processing":null,"class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}
 | 
			
		||||
function C(a,b){a.oFeatures.bProcessing&&h(a.aanFeatures.r).css("display",b?"block":"none");r(a,null,"processing",[a,b])}function rb(a){var b=h(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,f=a.oClasses,g=b.children("caption"),j=g.length?g[0]._captionSide:null,i=h(b[0].cloneNode(!1)),m=h(b[0].cloneNode(!1)),l=b.children("tfoot");l.length||(l=null);i=h("<div/>",{"class":f.sScrollWrapper}).append(h("<div/>",{"class":f.sScrollHead}).css({overflow:"hidden",
 | 
			
		||||
position:"relative",border:0,width:d?!d?null:v(d):"100%"}).append(h("<div/>",{"class":f.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(i.removeAttr("id").css("margin-left",0).append("top"===j?g:null).append(b.children("thead"))))).append(h("<div/>",{"class":f.sScrollBody}).css({position:"relative",overflow:"auto",width:!d?null:v(d)}).append(b));l&&i.append(h("<div/>",{"class":f.sScrollFoot}).css({overflow:"hidden",border:0,width:d?!d?null:v(d):"100%"}).append(h("<div/>",
 | 
			
		||||
{"class":f.sScrollFootInner}).append(m.removeAttr("id").css("margin-left",0).append("bottom"===j?g:null).append(b.children("tfoot")))));var b=i.children(),k=b[0],f=b[1],t=l?b[2]:null;if(d)h(f).on("scroll.DT",function(){var a=this.scrollLeft;k.scrollLeft=a;l&&(t.scrollLeft=a)});h(f).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=k;a.nScrollBody=f;a.nScrollFoot=t;a.aoDrawCallback.push({fn:la,sName:"scrolling"});return i[0]}function la(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY,b=b.iBarWidth,
 | 
			
		||||
f=h(a.nScrollHead),g=f[0].style,j=f.children("div"),i=j[0].style,m=j.children("table"),j=a.nScrollBody,l=h(j),q=j.style,t=h(a.nScrollFoot).children("div"),n=t.children("table"),o=h(a.nTHead),p=h(a.nTable),s=p[0],r=s.style,u=a.nTFoot?h(a.nTFoot):null,x=a.oBrowser,U=x.bScrollOversize,Xb=D(a.aoColumns,"nTh"),Q,L,R,w,Ua=[],y=[],z=[],A=[],B,C=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};L=j.scrollHeight>j.clientHeight;if(a.scrollBarVis!==
 | 
			
		||||
L&&a.scrollBarVis!==k)a.scrollBarVis=L,$(a);else{a.scrollBarVis=L;p.children("thead, tfoot").remove();u&&(R=u.clone().prependTo(p),Q=u.find("tr"),R=R.find("tr"));w=o.clone().prependTo(p);o=o.find("tr");L=w.find("tr");w.find("th, td").removeAttr("tabindex");c||(q.width="100%",f[0].style.width="100%");h.each(ra(a,w),function(b,c){B=aa(a,b);c.style.width=a.aoColumns[B].sWidth});u&&I(function(a){a.style.width=""},R);f=p.outerWidth();if(""===c){r.width="100%";if(U&&(p.find("tbody").height()>j.offsetHeight||
 | 
			
		||||
"scroll"==l.css("overflow-y")))r.width=v(p.outerWidth()-b);f=p.outerWidth()}else""!==d&&(r.width=v(d),f=p.outerWidth());I(C,L);I(function(a){z.push(a.innerHTML);Ua.push(v(h(a).css("width")))},L);I(function(a,b){if(h.inArray(a,Xb)!==-1)a.style.width=Ua[b]},o);h(L).height(0);u&&(I(C,R),I(function(a){A.push(a.innerHTML);y.push(v(h(a).css("width")))},R),I(function(a,b){a.style.width=y[b]},Q),h(R).height(0));I(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+z[b]+"</div>";a.childNodes[0].style.height=
 | 
			
		||||
"0";a.childNodes[0].style.overflow="hidden";a.style.width=Ua[b]},L);u&&I(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+A[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=y[b]},R);if(p.outerWidth()<f){Q=j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")?f+b:f;if(U&&(j.scrollHeight>j.offsetHeight||"scroll"==l.css("overflow-y")))r.width=v(Q-b);(""===c||""!==d)&&K(a,1,"Possible column misalignment",6)}else Q="100%";q.width=v(Q);
 | 
			
		||||
g.width=v(Q);u&&(a.nScrollFoot.style.width=v(Q));!e&&U&&(q.height=v(s.offsetHeight+b));c=p.outerWidth();m[0].style.width=v(c);i.width=v(c);d=p.height()>j.clientHeight||"scroll"==l.css("overflow-y");e="padding"+(x.bScrollbarLeft?"Left":"Right");i[e]=d?b+"px":"0px";u&&(n[0].style.width=v(c),t[0].style.width=v(c),t[0].style[e]=d?b+"px":"0px");p.children("colgroup").insertBefore(p.children("thead"));l.scroll();if((a.bSorted||a.bFiltered)&&!a._drawHold)j.scrollTop=0}}function I(a,b,c){for(var d=0,e=0,
 | 
			
		||||
f=b.length,g,j;e<f;){g=b[e].firstChild;for(j=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,j,d):a(g,d),d++),g=g.nextSibling,j=c?j.nextSibling:null;e++}}function Fa(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,f=d.sX,g=d.sXInner,j=c.length,i=ma(a,"bVisible"),m=h("th",a.nTHead),l=b.getAttribute("width"),k=b.parentNode,t=!1,n,o,p=a.oBrowser,d=p.bScrollOversize;(n=b.style.width)&&-1!==n.indexOf("%")&&(l=n);for(n=0;n<i.length;n++)o=c[i[n]],null!==o.sWidth&&(o.sWidth=Eb(o.sWidthOrig,k),t=!0);if(d||
 | 
			
		||||
!t&&!f&&!e&&j==V(a)&&j==m.length)for(n=0;n<j;n++)i=aa(a,n),null!==i&&(c[i].sWidth=v(m.eq(n).width()));else{j=h(b).clone().css("visibility","hidden").removeAttr("id");j.find("tbody tr").remove();var s=h("<tr/>").appendTo(j.find("tbody"));j.find("thead, tfoot").remove();j.append(h(a.nTHead).clone()).append(h(a.nTFoot).clone());j.find("tfoot th, tfoot td").css("width","");m=ra(a,j.find("thead")[0]);for(n=0;n<i.length;n++)o=c[i[n]],m[n].style.width=null!==o.sWidthOrig&&""!==o.sWidthOrig?v(o.sWidthOrig):
 | 
			
		||||
"",o.sWidthOrig&&f&&h(m[n]).append(h("<div/>").css({width:o.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(n=0;n<i.length;n++)t=i[n],o=c[t],h(Fb(a,t)).clone(!1).append(o.sContentPadding).appendTo(s);h("[name]",j).removeAttr("name");o=h("<div/>").css(f||e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(j).appendTo(k);f&&g?j.width(g):f?(j.css("width","auto"),j.removeAttr("width"),j.width()<k.clientWidth&&l&&j.width(k.clientWidth)):e?j.width(k.clientWidth):
 | 
			
		||||
l&&j.width(l);for(n=e=0;n<i.length;n++)k=h(m[n]),g=k.outerWidth()-k.width(),k=p.bBounding?Math.ceil(m[n].getBoundingClientRect().width):k.outerWidth(),e+=k,c[i[n]].sWidth=v(k-g);b.style.width=v(e);o.remove()}l&&(b.style.width=v(l));if((l||f)&&!a._reszEvt)b=function(){h(E).on("resize.DT-"+a.sInstance,Oa(function(){$(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0}function Eb(a,b){if(!a)return 0;var c=h("<div/>").css("width",v(a)).appendTo(b||H.body),d=c[0].offsetWidth;c.remove();return d}function Fb(a,
 | 
			
		||||
b){var c=Gb(a,b);if(0>c)return null;var d=a.aoData[c];return!d.nTr?h("<td/>").html(B(a,c,b,"display"))[0]:d.anCells[b]}function Gb(a,b){for(var c,d=-1,e=-1,f=0,g=a.aoData.length;f<g;f++)c=B(a,f,b,"display")+"",c=c.replace(Yb,""),c=c.replace(/ /g," "),c.length>d&&(d=c.length,e=f);return e}function v(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function X(a){var b,c,d=[],e=a.aoColumns,f,g,j,i;b=a.aaSortingFixed;c=h.isPlainObject(b);var m=[];f=function(a){a.length&&
 | 
			
		||||
!h.isArray(a[0])?m.push(a):h.merge(m,a)};h.isArray(b)&&f(b);c&&b.pre&&f(b.pre);f(a.aaSorting);c&&b.post&&f(b.post);for(a=0;a<m.length;a++){i=m[a][0];f=e[i].aDataSort;b=0;for(c=f.length;b<c;b++)g=f[b],j=e[g].sType||"string",m[a]._idx===k&&(m[a]._idx=h.inArray(m[a][1],e[g].asSorting)),d.push({src:i,col:g,dir:m[a][1],index:m[a]._idx,type:j,formatter:n.ext.type.order[j+"-pre"]})}return d}function mb(a){var b,c,d=[],e=n.ext.type.order,f=a.aoData,g=0,j,i=a.aiDisplayMaster,h;Ga(a);h=X(a);b=0;for(c=h.length;b<
 | 
			
		||||
c;b++)j=h[b],j.formatter&&g++,Hb(a,j.col);if("ssp"!=y(a)&&0!==h.length){b=0;for(c=i.length;b<c;b++)d[i[b]]=b;g===h.length?i.sort(function(a,b){var c,e,g,j,i=h.length,k=f[a]._aSortData,n=f[b]._aSortData;for(g=0;g<i;g++)if(j=h[g],c=k[j.col],e=n[j.col],c=c<e?-1:c>e?1:0,0!==c)return"asc"===j.dir?c:-c;c=d[a];e=d[b];return c<e?-1:c>e?1:0}):i.sort(function(a,b){var c,g,j,i,k=h.length,n=f[a]._aSortData,o=f[b]._aSortData;for(j=0;j<k;j++)if(i=h[j],c=n[i.col],g=o[i.col],i=e[i.type+"-"+i.dir]||e["string-"+i.dir],
 | 
			
		||||
c=i(c,g),0!==c)return c;c=d[a];g=d[b];return c<g?-1:c>g?1:0})}a.bSorted=!0}function Ib(a){for(var b,c,d=a.aoColumns,e=X(a),a=a.oLanguage.oAria,f=0,g=d.length;f<g;f++){c=d[f];var j=c.asSorting;b=c.sTitle.replace(/<.*?>/g,"");var i=c.nTh;i.removeAttribute("aria-sort");c.bSortable&&(0<e.length&&e[0].col==f?(i.setAttribute("aria-sort","asc"==e[0].dir?"ascending":"descending"),c=j[e[0].index+1]||j[0]):c=j[0],b+="asc"===c?a.sSortAscending:a.sSortDescending);i.setAttribute("aria-label",b)}}function Va(a,
 | 
			
		||||
b,c,d){var e=a.aaSorting,f=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===k&&(c=h.inArray(a[1],f));return c+1<f.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=h.inArray(b,D(e,"0")),-1!==c?(b=g(e[c],!0),null===b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=f[b],e[c]._idx=b)):(e.push([b,f[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=f[b],e[0]._idx=b):(e.length=0,e.push([b,f[0]]),e[0]._idx=0);T(a);"function"==
 | 
			
		||||
typeof d&&d(a)}function Ma(a,b,c,d){var e=a.aoColumns[c];Wa(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(C(a,!0),setTimeout(function(){Va(a,c,b.shiftKey,d);"ssp"!==y(a)&&C(a,!1)},0)):Va(a,c,b.shiftKey,d))})}function wa(a){var b=a.aLastSort,c=a.oClasses.sSortColumn,d=X(a),e=a.oFeatures,f,g;if(e.bSort&&e.bSortClasses){e=0;for(f=b.length;e<f;e++)g=b[e].src,h(D(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3));e=0;for(f=d.length;e<f;e++)g=d[e].src,h(D(a.aoData,"anCells",g)).addClass(c+
 | 
			
		||||
(2>e?e+1:3))}a.aLastSort=d}function Hb(a,b){var c=a.aoColumns[b],d=n.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,ba(a,b)));for(var f,g=n.ext.type.order[c.sType+"-pre"],j=0,i=a.aoData.length;j<i;j++)if(c=a.aoData[j],c._aSortData||(c._aSortData=[]),!c._aSortData[b]||d)f=d?e[j]:B(a,j,b,"sort"),c._aSortData[b]=g?g(f):f}function xa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:h.extend(!0,[],a.aaSorting),search:Ab(a.oPreviousSearch),
 | 
			
		||||
columns:h.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:Ab(a.aoPreSearchCols[d])}})};r(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,b)}}function Jb(a,b,c){var d,e,f=a.aoColumns,b=function(b){if(b&&b.time){var g=r(a,"aoStateLoadParams","stateLoadParams",[a,b]);if(-1===h.inArray(!1,g)&&(g=a.iStateDuration,!(0<g&&b.time<+new Date-1E3*g)&&!(b.columns&&f.length!==b.columns.length))){a.oLoadedState=h.extend(!0,{},b);b.start!==k&&
 | 
			
		||||
(a._iDisplayStart=b.start,a.iInitDisplayStart=b.start);b.length!==k&&(a._iDisplayLength=b.length);b.order!==k&&(a.aaSorting=[],h.each(b.order,function(b,c){a.aaSorting.push(c[0]>=f.length?[0,c[1]]:c)}));b.search!==k&&h.extend(a.oPreviousSearch,Bb(b.search));if(b.columns){d=0;for(e=b.columns.length;d<e;d++)g=b.columns[d],g.visible!==k&&(f[d].bVisible=g.visible),g.search!==k&&h.extend(a.aoPreSearchCols[d],Bb(g.search))}r(a,"aoStateLoaded","stateLoaded",[a,b])}}c()};if(a.oFeatures.bStateSave){var g=
 | 
			
		||||
a.fnStateLoadCallback.call(a.oInstance,a,b);g!==k&&b(g)}else c()}function ya(a){var b=n.settings,a=h.inArray(a,D(b,"nTable"));return-1!==a?b[a]:null}function K(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+d);if(b)E.console&&console.log&&console.log(c);else if(b=n.ext,b=b.sErrMode||b.errMode,a&&r(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==
 | 
			
		||||
typeof b&&b(a,d,c)}}function F(a,b,c,d){h.isArray(c)?h.each(c,function(c,d){h.isArray(d)?F(a,b,d[0],d[1]):F(a,b,d)}):(d===k&&(d=c),b[c]!==k&&(a[d]=b[c]))}function Xa(a,b,c){var d,e;for(e in b)b.hasOwnProperty(e)&&(d=b[e],h.isPlainObject(d)?(h.isPlainObject(a[e])||(a[e]={}),h.extend(!0,a[e],d)):a[e]=c&&"data"!==e&&"aaData"!==e&&h.isArray(d)?d.slice():d);return a}function Wa(a,b,c){h(a).on("click.DT",b,function(b){h(a).blur();c(b)}).on("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).on("selectstart.DT",
 | 
			
		||||
function(){return!1})}function z(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function r(a,b,c,d){var e=[];b&&(e=h.map(a[b].slice().reverse(),function(b){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=h.Event(c+".dt"),h(a.nTable).trigger(b,d),e.push(b.result));return e}function Sa(a){var b=a._iDisplayStart,c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Na(a,b){var c=a.renderer,d=n.ext.renderer[b];return h.isPlainObject(c)&&c[b]?d[c[b]]||d._:"string"===
 | 
			
		||||
typeof c?d[c]||d._:d._}function y(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ia(a,b){var c=[],c=Kb.numbers_length,d=Math.floor(c/2);b<=c?c=Y(0,b):a<=d?(c=Y(0,c-2),c.push("ellipsis"),c.push(b-1)):(a>=b-1-d?c=Y(b-(c-2),b):(c=Y(a-d+2,a+d-1),c.push("ellipsis"),c.push(b-1)),c.splice(0,0,"ellipsis"),c.splice(0,0,0));c.DT_el="span";return c}function Da(a){h.each({num:function(b){return za(b,a)},"num-fmt":function(b){return za(b,a,Ya)},"html-num":function(b){return za(b,
 | 
			
		||||
a,Aa)},"html-num-fmt":function(b){return za(b,a,Aa,Ya)}},function(b,c){x.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(x.type.search[b+a]=x.type.search.html)})}function Lb(a){return function(){var b=[ya(this[n.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return n.ext.internal[a].apply(this,b)}}var n=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new s(ya(this[x.iApiIndex])):new s(this)};
 | 
			
		||||
this.fnAddData=function(a,b){var c=this.api(!0),d=h.isArray(a)&&(h.isArray(a[0])||h.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===k||b)&&c.draw();return d.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===k||a?b.draw(!1):(""!==d.sX||""!==d.sY)&&la(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===k||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,
 | 
			
		||||
b,c){var d=this.api(!0),a=d.rows(a),e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===k||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,h){e=this.api(!0);null===b||b===k?e.search(a,c,d,h):e.column(b).search(a,c,d,h);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==k){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==k||"td"==d||"th"==d?c.cell(a,b).data():
 | 
			
		||||
c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==k?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};
 | 
			
		||||
this.fnPageChange=function(a,b){var c=this.api(!0).page(a);(b===k||b)&&c.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===k||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return ya(this[x.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===k||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===k||e)&&h.columns.adjust();
 | 
			
		||||
(d===k||d)&&h.draw();return 0};this.fnVersionCheck=x.fnVersionCheck;var b=this,c=a===k,d=this.length;c&&(a={});this.oApi=this.internal=x.internal;for(var e in n.ext.internal)e&&(this[e]=Lb(e));this.each(function(){var e={},g=1<d?Xa(e,a,!0):a,j=0,i,e=this.getAttribute("id"),m=!1,l=n.defaults,q=h(this);if("table"!=this.nodeName.toLowerCase())K(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{eb(l);fb(l.column);J(l,l,!0);J(l.column,l.column,!0);J(l,h.extend(g,q.data()));var t=n.settings,
 | 
			
		||||
j=0;for(i=t.length;j<i;j++){var o=t[j];if(o.nTable==this||o.nTHead&&o.nTHead.parentNode==this||o.nTFoot&&o.nTFoot.parentNode==this){var s=g.bRetrieve!==k?g.bRetrieve:l.bRetrieve;if(c||s)return o.oInstance;if(g.bDestroy!==k?g.bDestroy:l.bDestroy){o.oInstance.fnDestroy();break}else{K(o,0,"Cannot reinitialise DataTable",3);return}}if(o.sTableId==this.id){t.splice(j,1);break}}if(null===e||""===e)this.id=e="DataTables_Table_"+n.ext._unique++;var p=h.extend(!0,{},n.models.oSettings,{sDestroyWidth:q[0].style.width,
 | 
			
		||||
sInstance:e,sTableId:e});p.nTable=this;p.oApi=b.internal;p.oInit=g;t.push(p);p.oInstance=1===b.length?b:q.dataTable();eb(g);Ca(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=h.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);g=Xa(h.extend(!0,{},l),g);F(p.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));F(p,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod",
 | 
			
		||||
"aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]);F(p.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);F(p.oLanguage,g,"fnInfoCallback");
 | 
			
		||||
z(p,"aoDrawCallback",g.fnDrawCallback,"user");z(p,"aoServerParams",g.fnServerParams,"user");z(p,"aoStateSaveParams",g.fnStateSaveParams,"user");z(p,"aoStateLoadParams",g.fnStateLoadParams,"user");z(p,"aoStateLoaded",g.fnStateLoaded,"user");z(p,"aoRowCallback",g.fnRowCallback,"user");z(p,"aoRowCreatedCallback",g.fnCreatedRow,"user");z(p,"aoHeaderCallback",g.fnHeaderCallback,"user");z(p,"aoFooterCallback",g.fnFooterCallback,"user");z(p,"aoInitComplete",g.fnInitComplete,"user");z(p,"aoPreDrawCallback",
 | 
			
		||||
g.fnPreDrawCallback,"user");p.rowIdFn=S(g.rowId);gb(p);var u=p.oClasses;h.extend(u,n.ext.classes,g.oClasses);q.addClass(u.sTable);p.iInitDisplayStart===k&&(p.iInitDisplayStart=g.iDisplayStart,p._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(p.bDeferLoading=!0,e=h.isArray(g.iDeferLoading),p._iRecordsDisplay=e?g.iDeferLoading[0]:g.iDeferLoading,p._iRecordsTotal=e?g.iDeferLoading[1]:g.iDeferLoading);var v=p.oLanguage;h.extend(!0,v,g.oLanguage);v.sUrl&&(h.ajax({dataType:"json",url:v.sUrl,success:function(a){Ca(a);
 | 
			
		||||
J(l.oLanguage,a);h.extend(true,v,a);ha(p)},error:function(){ha(p)}}),m=!0);null===g.asStripeClasses&&(p.asStripeClasses=[u.sStripeOdd,u.sStripeEven]);var e=p.asStripeClasses,x=q.children("tbody").find("tr").eq(0);-1!==h.inArray(!0,h.map(e,function(a){return x.hasClass(a)}))&&(h("tbody tr",this).removeClass(e.join(" ")),p.asDestroyStripes=e.slice());e=[];t=this.getElementsByTagName("thead");0!==t.length&&(ea(p.aoHeader,t[0]),e=ra(p));if(null===g.aoColumns){t=[];j=0;for(i=e.length;j<i;j++)t.push(null)}else t=
 | 
			
		||||
g.aoColumns;j=0;for(i=t.length;j<i;j++)Ea(p,e?e[j]:null);ib(p,g.aoColumnDefs,t,function(a,b){ka(p,a,b)});if(x.length){var w=function(a,b){return a.getAttribute("data-"+b)!==null?b:null};h(x[0]).children("th, td").each(function(a,b){var c=p.aoColumns[a];if(c.mData===a){var d=w(b,"sort")||w(b,"order"),e=w(b,"filter")||w(b,"search");if(d!==null||e!==null){c.mData={_:a+".display",sort:d!==null?a+".@data-"+d:k,type:d!==null?a+".@data-"+d:k,filter:e!==null?a+".@data-"+e:k};ka(p,a)}}})}var U=p.oFeatures,
 | 
			
		||||
e=function(){if(g.aaSorting===k){var a=p.aaSorting;j=0;for(i=a.length;j<i;j++)a[j][1]=p.aoColumns[j].asSorting[0]}wa(p);U.bSort&&z(p,"aoDrawCallback",function(){if(p.bSorted){var a=X(p),b={};h.each(a,function(a,c){b[c.src]=c.dir});r(p,null,"order",[p,a,b]);Ib(p)}});z(p,"aoDrawCallback",function(){(p.bSorted||y(p)==="ssp"||U.bDeferRender)&&wa(p)},"sc");var a=q.children("caption").each(function(){this._captionSide=h(this).css("caption-side")}),b=q.children("thead");b.length===0&&(b=h("<thead/>").appendTo(q));
 | 
			
		||||
p.nTHead=b[0];b=q.children("tbody");b.length===0&&(b=h("<tbody/>").appendTo(q));p.nTBody=b[0];b=q.children("tfoot");if(b.length===0&&a.length>0&&(p.oScroll.sX!==""||p.oScroll.sY!==""))b=h("<tfoot/>").appendTo(q);if(b.length===0||b.children().length===0)q.addClass(u.sNoFooter);else if(b.length>0){p.nTFoot=b[0];ea(p.aoFooter,p.nTFoot)}if(g.aaData)for(j=0;j<g.aaData.length;j++)O(p,g.aaData[j]);else(p.bDeferLoading||y(p)=="dom")&&na(p,h(p.nTBody).children("tr"));p.aiDisplay=p.aiDisplayMaster.slice();
 | 
			
		||||
p.bInitialised=true;m===false&&ha(p)};g.bStateSave?(U.bStateSave=!0,z(p,"aoDrawCallback",xa,"state_save"),Jb(p,g,e)):e()}});b=null;return this},x,s,o,u,Za={},Mb=/[\r\n]/g,Aa=/<.*?>/g,Zb=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,$b=RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^|\\-)","g"),Ya=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,M=function(a){return!a||!0===a||"-"===a?!0:!1},Nb=function(a){var b=parseInt(a,10);return!isNaN(b)&&
 | 
			
		||||
isFinite(a)?b:null},Ob=function(a,b){Za[b]||(Za[b]=RegExp(Qa(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(Za[b],"."):a},$a=function(a,b,c){var d="string"===typeof a;if(M(a))return!0;b&&d&&(a=Ob(a,b));c&&d&&(a=a.replace(Ya,""));return!isNaN(parseFloat(a))&&isFinite(a)},Pb=function(a,b,c){return M(a)?!0:!(M(a)||"string"===typeof a)?null:$a(a.replace(Aa,""),b,c)?!0:null},D=function(a,b,c){var d=[],e=0,f=a.length;if(c!==k)for(;e<f;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<
 | 
			
		||||
f;e++)a[e]&&d.push(a[e][b]);return d},ja=function(a,b,c,d){var e=[],f=0,g=b.length;if(d!==k)for(;f<g;f++)a[b[f]][c]&&e.push(a[b[f]][c][d]);else for(;f<g;f++)e.push(a[b[f]][c]);return e},Y=function(a,b){var c=[],d;b===k?(b=0,d=a):(d=b,b=a);for(var e=b;e<d;e++)c.push(e);return c},Qb=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},qa=function(a){var b;a:{if(!(2>a.length)){b=a.slice().sort();for(var c=b[0],d=1,e=b.length;d<e;d++){if(b[d]===c){b=!1;break a}c=b[d]}}b=!0}if(b)return a.slice();
 | 
			
		||||
b=[];var e=a.length,f,g=0,d=0;a:for(;d<e;d++){c=a[d];for(f=0;f<g;f++)if(b[f]===c)continue a;b.push(c);g++}return b};n.util={throttle:function(a,b){var c=b!==k?b:200,d,e;return function(){var b=this,g=+new Date,j=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d=k;a.apply(b,j)},c)):(d=g,a.apply(b,j))}},escapeRegex:function(a){return a.replace($b,"\\$1")}};var A=function(a,b,c){a[b]!==k&&(a[c]=a[b])},ca=/\[.*?\]$/,W=/\(\)$/,Qa=n.util.escapeRegex,va=h("<div>")[0],Wb=va.textContent!==k,Yb=
 | 
			
		||||
/<.*?>/g,Oa=n.util.throttle,Rb=[],w=Array.prototype,ac=function(a){var b,c,d=n.settings,e=h.map(d,function(a){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase())return b=h.inArray(a,e),-1!==b?[d[b]]:null;if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?c=h(a):a instanceof h&&(c=a)}else return[];if(c)return c.map(function(){b=h.inArray(this,e);return-1!==b?d[b]:null}).toArray()};s=function(a,b){if(!(this instanceof
 | 
			
		||||
s))return new s(a,b);var c=[],d=function(a){(a=ac(a))&&(c=c.concat(a))};if(h.isArray(a))for(var e=0,f=a.length;e<f;e++)d(a[e]);else d(a);this.context=qa(c);b&&h.merge(this,b);this.selector={rows:null,cols:null,opts:null};s.extend(this,this,Rb)};n.Api=s;h.extend(s.prototype,{any:function(){return 0!==this.count()},concat:w.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=
 | 
			
		||||
this.context;return b.length>a?new s(b[a],this[a]):null},filter:function(a){var b=[];if(w.filter)b=w.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new s(this.context,b)},flatten:function(){var a=[];return new s(this.context,a.concat.apply(a,this.toArray()))},join:w.join,indexOf:w.indexOf||function(a,b){for(var c=b||0,d=this.length;c<d;c++)if(this[c]===a)return c;return-1},iterator:function(a,b,c,d){var e=[],f,g,j,h,m,l=this.context,
 | 
			
		||||
n,o,u=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);g=0;for(j=l.length;g<j;g++){var r=new s(l[g]);if("table"===b)f=c.call(r,l[g],g),f!==k&&e.push(f);else if("columns"===b||"rows"===b)f=c.call(r,l[g],this[g],g),f!==k&&e.push(f);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){o=this[g];"column-rows"===b&&(n=Ba(l[g],u.opts));h=0;for(m=o.length;h<m;h++)f=o[h],f="cell"===b?c.call(r,l[g],f.row,f.column,g,h):c.call(r,l[g],f,g,h,n),f!==k&&e.push(f)}}return e.length||d?(a=new s(l,a?
 | 
			
		||||
e.concat.apply([],e):e),b=a.selector,b.rows=u.rows,b.cols=u.cols,b.opts=u.opts,a):this},lastIndexOf:w.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(w.map)b=w.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new s(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},pop:w.pop,push:w.push,reduce:w.reduce||function(a,b){return hb(this,a,b,0,this.length,
 | 
			
		||||
1)},reduceRight:w.reduceRight||function(a,b){return hb(this,a,b,this.length-1,-1,-1)},reverse:w.reverse,selector:null,shift:w.shift,slice:function(){return new s(this.context,this)},sort:w.sort,splice:w.splice,toArray:function(){return w.slice.call(this)},to$:function(){return h(this)},toJQuery:function(){return h(this)},unique:function(){return new s(this.context,qa(this))},unshift:w.unshift});s.extend=function(a,b,c){if(c.length&&b&&(b instanceof s||b.__dt_wrapper)){var d,e,f,g=function(a,b,c){return function(){var d=
 | 
			
		||||
b.apply(a,arguments);s.extend(d,d,c.methodExt);return d}};d=0;for(e=c.length;d<e;d++)f=c[d],b[f.name]="function"===typeof f.val?g(a,f.val,f):h.isPlainObject(f.val)?{}:f.val,b[f.name].__dt_wrapper=!0,s.extend(a,b[f.name],f.propExt)}};s.register=o=function(a,b){if(h.isArray(a))for(var c=0,d=a.length;c<d;c++)s.register(a[c],b);else for(var e=a.split("."),f=Rb,g,j,c=0,d=e.length;c<d;c++){g=(j=-1!==e[c].indexOf("()"))?e[c].replace("()",""):e[c];var i;a:{i=0;for(var m=f.length;i<m;i++)if(f[i].name===g){i=
 | 
			
		||||
f[i];break a}i=null}i||(i={name:g,val:{},methodExt:[],propExt:[]},f.push(i));c===d-1?i.val=b:f=j?i.methodExt:i.propExt}};s.registerPlural=u=function(a,b,c){s.register(a,c);s.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof s?a.length?h.isArray(a[0])?new s(a.context,a[0]):a[0]:k:a})};o("tables()",function(a){var b;if(a){b=s;var c=this.context;if("number"===typeof a)a=[c[a]];else var d=h.map(c,function(a){return a.nTable}),a=h(d).filter(a).map(function(){var a=h.inArray(this,
 | 
			
		||||
d);return c[a]}).toArray();b=new b(a)}else b=this;return b});o("table()",function(a){var a=this.tables(a),b=a.context;return b.length?new s(b[0]):a});u("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});u("tables().body()","table().body()",function(){return this.iterator("table",function(a){return a.nTBody},1)});u("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});u("tables().footer()",
 | 
			
		||||
"table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});u("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});o("draw()",function(a){return this.iterator("table",function(b){"page"===a?P(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),T(b,!1===a))})});o("page()",function(a){return a===k?this.page.info().page:this.iterator("table",function(b){Ta(b,a)})});o("page.info()",function(){if(0===
 | 
			
		||||
this.context.length)return k;var a=this.context[0],b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,serverSide:"ssp"===y(a)}});o("page.len()",function(a){return a===k?0!==this.context.length?this.context[0]._iDisplayLength:k:this.iterator("table",function(b){Ra(b,a)})});var Sb=function(a,b,c){if(c){var d=new s(a);
 | 
			
		||||
d.one("draw",function(){c(d.ajax.json())})}if("ssp"==y(a))T(a,b);else{C(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();sa(a,[],function(c){oa(a);for(var c=ta(a,c),d=0,e=c.length;d<e;d++)O(a,c[d]);T(a,b);C(a,!1)})}};o("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});o("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});o("ajax.reload()",function(a,b){return this.iterator("table",function(c){Sb(c,!1===b,a)})});o("ajax.url()",function(a){var b=
 | 
			
		||||
this.context;if(a===k){if(0===b.length)return k;b=b[0];return b.ajax?h.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){h.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});o("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Sb(c,!1===b,a)})});var ab=function(a,b,c,d,e){var f=[],g,j,i,m,l,n;i=typeof b;if(!b||"string"===i||"function"===i||b.length===k)b=[b];i=0;for(m=b.length;i<m;i++){j=b[i]&&b[i].split&&!b[i].match(/[\[\(:]/)?b[i].split(","):
 | 
			
		||||
[b[i]];l=0;for(n=j.length;l<n;l++)(g=c("string"===typeof j[l]?h.trim(j[l]):j[l]))&&g.length&&(f=f.concat(g))}a=x.selector[a];if(a.length){i=0;for(m=a.length;i<m;i++)f=a[i](d,e,f)}return qa(f)},bb=function(a){a||(a={});a.filter&&a.search===k&&(a.search=a.filter);return h.extend({search:"none",order:"current",page:"all"},a)},cb=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Ba=function(a,b){var c,
 | 
			
		||||
d,e,f=[],g=a.aiDisplay;e=a.aiDisplayMaster;var j=b.search;c=b.order;d=b.page;if("ssp"==y(a))return"removed"===j?[]:Y(0,e.length);if("current"==d){c=a._iDisplayStart;for(d=a.fnDisplayEnd();c<d;c++)f.push(g[c])}else if("current"==c||"applied"==c)if("none"==j)f=e.slice();else if("applied"==j)f=g.slice();else{if("removed"==j){var i={};c=0;for(d=g.length;c<d;c++)i[g[c]]=null;f=h.map(e,function(a){return!i.hasOwnProperty(a)?a:null})}}else if("index"==c||"original"==c){c=0;for(d=a.aoData.length;c<d;c++)"none"==
 | 
			
		||||
j?f.push(c):(e=h.inArray(c,g),(-1===e&&"removed"==j||0<=e&&"applied"==j)&&f.push(c))}return f};o("rows()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=bb(b),c=this.iterator("table",function(c){var e=b,f;return ab("row",a,function(a){var b=Nb(a),i=c.aoData;if(b!==null&&!e)return[b];f||(f=Ba(c,e));if(b!==null&&h.inArray(b,f)!==-1)return[b];if(a===null||a===k||a==="")return f;if(typeof a==="function")return h.map(f,function(b){var c=i[b];return a(b,c._aData,c.nTr)?b:null});if(a.nodeName){var b=
 | 
			
		||||
a._DT_RowIndex,m=a._DT_CellIndex;if(b!==k)return i[b]&&i[b].nTr===a?[b]:[];if(m)return i[m.row]&&i[m.row].nTr===a?[m.row]:[];b=h(a).closest("*[data-dt-row]");return b.length?[b.data("dt-row")]:[]}if(typeof a==="string"&&a.charAt(0)==="#"){b=c.aIds[a.replace(/^#/,"")];if(b!==k)return[b.idx]}b=Qb(ja(c.aoData,f,"nTr"));return h(b).filter(a).map(function(){return this._DT_RowIndex}).toArray()},c,e)},1);c.selector.rows=a;c.selector.opts=b;return c});o("rows().nodes()",function(){return this.iterator("row",
 | 
			
		||||
function(a,b){return a.aoData[b].nTr||k},1)});o("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return ja(a.aoData,b,"_aData")},1)});u("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){var d=b.aoData[c];return"search"===a?d._aFilterData:d._aSortData},1)});u("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){da(b,c,a)})});u("rows().indexes()","row().index()",function(){return this.iterator("row",
 | 
			
		||||
function(a,b){return b},1)});u("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var f=0,g=this[d].length;f<g;f++){var h=c[d].rowIdFn(c[d].aoData[this[d][f]]._aData);b.push((!0===a?"#":"")+h)}return new s(c,b)});u("rows().remove()","row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,f=e[c],g,h,i,m,l;e.splice(c,1);g=0;for(h=e.length;g<h;g++)if(i=e[g],l=i.anCells,null!==i.nTr&&(i.nTr._DT_RowIndex=g),null!==l){i=0;for(m=
 | 
			
		||||
l.length;i<m;i++)l[i]._DT_CellIndex.row=g}pa(b.aiDisplayMaster,c);pa(b.aiDisplay,c);pa(a[d],c,!1);0<b._iRecordsDisplay&&b._iRecordsDisplay--;Sa(b);c=b.rowIdFn(f._aData);c!==k&&delete b.aIds[c]});this.iterator("table",function(a){for(var c=0,d=a.aoData.length;c<d;c++)a.aoData[c].idx=c});return this});o("rows.add()",function(a){var b=this.iterator("table",function(b){var c,f,g,h=[];f=0;for(g=a.length;f<g;f++)c=a[f],c.nodeName&&"TR"===c.nodeName.toUpperCase()?h.push(na(b,c)[0]):h.push(O(b,c));return h},
 | 
			
		||||
1),c=this.rows(-1);c.pop();h.merge(c,b);return c});o("row()",function(a,b){return cb(this.rows(a,b))});o("row().data()",function(a){var b=this.context;if(a===k)return b.length&&this.length?b[0].aoData[this[0]]._aData:k;var c=b[0].aoData[this[0]];c._aData=a;h.isArray(a)&&c.nTr.id&&N(b[0].rowId)(a,c.nTr.id);da(b[0],this[0],"data");return this});o("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});o("row.add()",function(a){a instanceof h&&
 | 
			
		||||
a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?na(b,a)[0]:O(b,a)});return this.row(b[0])});var db=function(a,b){var c=a.context;if(c.length&&(c=c[0].aoData[b!==k?b:a[0]])&&c._details)c._details.remove(),c._detailsShow=k,c._details=k},Tb=function(a,b){var c=a.context;if(c.length&&a.length){var d=c[0].aoData[a[0]];if(d._details){(d._detailsShow=b)?d._details.insertAfter(d.nTr):d._details.detach();var e=c[0],f=new s(e),g=e.aoData;f.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");
 | 
			
		||||
0<D(g,"_details").length&&(f.on("draw.dt.DT_details",function(a,b){e===b&&f.rows({page:"current"}).eq(0).each(function(a){a=g[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),f.on("column-visibility.dt.DT_details",function(a,b){if(e===b)for(var c,d=V(b),f=0,h=g.length;f<h;f++)c=g[f],c._details&&c._details.children("td[colspan]").attr("colspan",d)}),f.on("destroy.dt.DT_details",function(a,b){if(e===b)for(var c=0,d=g.length;c<d;c++)g[c]._details&&db(f,c)}))}}};o("row().child()",function(a,b){var c=
 | 
			
		||||
this.context;if(a===k)return c.length&&this.length?c[0].aoData[this[0]]._details:k;if(!0===a)this.child.show();else if(!1===a)db(this);else if(c.length&&this.length){var d=c[0],c=c[0].aoData[this[0]],e=[],f=function(a,b){if(h.isArray(a)||a instanceof h)for(var c=0,k=a.length;c<k;c++)f(a[c],b);else a.nodeName&&"tr"===a.nodeName.toLowerCase()?e.push(a):(c=h("<tr><td/></tr>").addClass(b),h("td",c).addClass(b).html(a)[0].colSpan=V(d),e.push(c[0]))};f(a,b);c._details&&c._details.detach();c._details=h(e);
 | 
			
		||||
c._detailsShow&&c._details.insertAfter(c.nTr)}return this});o(["row().child.show()","row().child().show()"],function(){Tb(this,!0);return this});o(["row().child.hide()","row().child().hide()"],function(){Tb(this,!1);return this});o(["row().child.remove()","row().child().remove()"],function(){db(this);return this});o("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var bc=/^([^:]+):(name|visIdx|visible)$/,Ub=function(a,b,
 | 
			
		||||
c,d,e){for(var c=[],d=0,f=e.length;d<f;d++)c.push(B(a,e[d],b));return c};o("columns()",function(a,b){a===k?a="":h.isPlainObject(a)&&(b=a,a="");var b=bb(b),c=this.iterator("table",function(c){var e=a,f=b,g=c.aoColumns,j=D(g,"sName"),i=D(g,"nTh");return ab("column",e,function(a){var b=Nb(a);if(a==="")return Y(g.length);if(b!==null)return[b>=0?b:g.length+b];if(typeof a==="function"){var e=Ba(c,f);return h.map(g,function(b,f){return a(f,Ub(c,f,0,0,e),i[f])?f:null})}var k=typeof a==="string"?a.match(bc):
 | 
			
		||||
"";if(k)switch(k[2]){case "visIdx":case "visible":b=parseInt(k[1],10);if(b<0){var n=h.map(g,function(a,b){return a.bVisible?b:null});return[n[n.length+b]]}return[aa(c,b)];case "name":return h.map(j,function(a,b){return a===k[1]?b:null});default:return[]}if(a.nodeName&&a._DT_CellIndex)return[a._DT_CellIndex.column];b=h(i).filter(a).map(function(){return h.inArray(this,i)}).toArray();if(b.length||!a.nodeName)return b;b=h(a).closest("*[data-dt-column]");return b.length?[b.data("dt-column")]:[]},c,f)},
 | 
			
		||||
1);c.selector.cols=a;c.selector.opts=b;return c});u("columns().header()","column().header()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});u("columns().footer()","column().footer()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});u("columns().data()","column().data()",function(){return this.iterator("column-rows",Ub,1)});u("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},
 | 
			
		||||
1)});u("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return ja(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});u("columns().nodes()","column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return ja(a.aoData,e,"anCells",b)},1)});u("columns().visible()","column().visible()",function(a,b){var c=this.iterator("column",function(b,c){if(a===k)return b.aoColumns[c].bVisible;var f=b.aoColumns,g=f[c],j=b.aoData,
 | 
			
		||||
i,m,l;if(a!==k&&g.bVisible!==a){if(a){var n=h.inArray(!0,D(f,"bVisible"),c+1);i=0;for(m=j.length;i<m;i++)l=j[i].nTr,f=j[i].anCells,l&&l.insertBefore(f[c],f[n]||null)}else h(D(b.aoData,"anCells",c)).detach();g.bVisible=a;fa(b,b.aoHeader);fa(b,b.aoFooter);b.aiDisplay.length||h(b.nTBody).find("td[colspan]").attr("colspan",V(b));xa(b)}});a!==k&&(this.iterator("column",function(c,e){r(c,null,"column-visibility",[c,e,a,b])}),(b===k||b)&&this.columns.adjust());return c});u("columns().indexes()","column().index()",
 | 
			
		||||
function(a){return this.iterator("column",function(b,c){return"visible"===a?ba(b,c):c},1)});o("columns.adjust()",function(){return this.iterator("table",function(a){$(a)},1)});o("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return aa(c,b);if("fromData"===a||"toVisible"===a)return ba(c,b)}});o("column()",function(a,b){return cb(this.columns(a,b))});o("cells()",function(a,b,c){h.isPlainObject(a)&&(a.row===k?(c=a,a=null):(c=b,b=null));
 | 
			
		||||
h.isPlainObject(b)&&(c=b,b=null);if(null===b||b===k)return this.iterator("table",function(b){var d=a,e=bb(c),f=b.aoData,g=Ba(b,e),j=Qb(ja(f,g,"anCells")),i=h([].concat.apply([],j)),l,m=b.aoColumns.length,n,o,u,s,r,v;return ab("cell",d,function(a){var c=typeof a==="function";if(a===null||a===k||c){n=[];o=0;for(u=g.length;o<u;o++){l=g[o];for(s=0;s<m;s++){r={row:l,column:s};if(c){v=f[l];a(r,B(b,l,s),v.anCells?v.anCells[s]:null)&&n.push(r)}else n.push(r)}}return n}if(h.isPlainObject(a))return a.column!==
 | 
			
		||||
k&&a.row!==k&&h.inArray(a.row,g)!==-1?[a]:[];c=i.filter(a).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length||!a.nodeName)return c;v=h(a).closest("*[data-dt-row]");return v.length?[{row:v.data("dt-row"),column:v.data("dt-column")}]:[]},b,e)});var d=this.columns(b),e=this.rows(a),f,g,j,i,m;this.iterator("table",function(a,b){f=[];g=0;for(j=e[b].length;g<j;g++){i=0;for(m=d[b].length;i<m;i++)f.push({row:e[b][g],column:d[b][i]})}},1);var l=this.cells(f,
 | 
			
		||||
c);h.extend(l.selector,{cols:b,rows:a,opts:c});return l});u("cells().nodes()","cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&a.anCells?a.anCells[c]:k},1)});o("cells().data()",function(){return this.iterator("cell",function(a,b,c){return B(a,b,c)},1)});u("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});u("cells().render()","cell().render()",
 | 
			
		||||
function(a){return this.iterator("cell",function(b,c,d){return B(b,c,d,a)},1)});u("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,b,c){return{row:b,column:c,columnVisible:ba(a,c)}},1)});u("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){da(b,c,a,d)})});o("cell()",function(a,b,c){return cb(this.cells(a,b,c))});o("cell().data()",function(a){var b=this.context,c=this[0];if(a===k)return b.length&&c.length?B(b[0],
 | 
			
		||||
c[0].row,c[0].column):k;jb(b[0],c[0].row,c[0].column,a);da(b[0],c[0].row,"data",c[0].column);return this});o("order()",function(a,b){var c=this.context;if(a===k)return 0!==c.length?c[0].aaSorting:k;"number"===typeof a?a=[[a,b]]:a.length&&!h.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});o("order.listener()",function(a,b,c){return this.iterator("table",function(d){Ma(d,a,b,c)})});o("order.fixed()",function(a){if(!a){var b=
 | 
			
		||||
this.context,b=b.length?b[0].aaSortingFixed:k;return h.isArray(b)?{pre:b}:b}return this.iterator("table",function(b){b.aaSortingFixed=h.extend(!0,{},a)})});o(["columns().order()","column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];h.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});o("search()",function(a,b,c,d){var e=this.context;return a===k?0!==e.length?e[0].oPreviousSearch.sSearch:k:this.iterator("table",function(e){e.oFeatures.bFilter&&ga(e,
 | 
			
		||||
h.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});u("columns().search()","column().search()",function(a,b,c,d){return this.iterator("column",function(e,f){var g=e.aoPreSearchCols;if(a===k)return g[f].sSearch;e.oFeatures.bFilter&&(h.extend(g[f],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),ga(e,e.oPreviousSearch,1))})});o("state()",function(){return this.context.length?this.context[0].oSavedState:
 | 
			
		||||
null});o("state.clear()",function(){return this.iterator("table",function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});o("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null});o("state.save()",function(){return this.iterator("table",function(a){xa(a)})});n.versionCheck=n.fnVersionCheck=function(a){for(var b=n.version.split("."),a=a.split("."),c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};n.isDataTable=
 | 
			
		||||
n.fnIsDataTable=function(a){var b=h(a).get(0),c=!1;if(a instanceof n.Api)return!0;h.each(n.settings,function(a,e){var f=e.nScrollHead?h("table",e.nScrollHead)[0]:null,g=e.nScrollFoot?h("table",e.nScrollFoot)[0]:null;if(e.nTable===b||f===b||g===b)c=!0});return c};n.tables=n.fnTables=function(a){var b=!1;h.isPlainObject(a)&&(b=a.api,a=a.visible);var c=h.map(n.settings,function(b){if(!a||a&&h(b.nTable).is(":visible"))return b.nTable});return b?new s(c):c};n.camelToHungarian=J;o("$()",function(a,b){var c=
 | 
			
		||||
this.rows(b).nodes(),c=h(c);return h([].concat(c.filter(a).toArray(),c.find(a).toArray()))});h.each(["on","one","off"],function(a,b){o(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0]=h.map(a[0].split(/\s/),function(a){return!a.match(/\.dt\b/)?a+".dt":a}).join(" ");var d=h(this.tables().nodes());d[b].apply(d,a);return this})});o("clear()",function(){return this.iterator("table",function(a){oa(a)})});o("settings()",function(){return new s(this.context,this.context)});o("init()",function(){var a=
 | 
			
		||||
this.context;return a.length?a[0].oInit:null});o("data()",function(){return this.iterator("table",function(a){return D(a.aoData,"_aData")}).flatten()});o("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,f=b.nTBody,g=b.nTHead,j=b.nTFoot,i=h(e),f=h(f),k=h(b.nTableWrapper),l=h.map(b.aoData,function(a){return a.nTr}),o;b.bDestroying=!0;r(b,"aoDestroyCallback","destroy",[b]);a||(new s(b)).columns().visible(!0);k.off(".DT").find(":not(tbody *)").off(".DT");
 | 
			
		||||
h(E).off(".DT-"+b.sInstance);e!=g.parentNode&&(i.children("thead").detach(),i.append(g));j&&e!=j.parentNode&&(i.children("tfoot").detach(),i.append(j));b.aaSorting=[];b.aaSortingFixed=[];wa(b);h(l).removeClass(b.asStripeClasses.join(" "));h("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);f.children().detach();f.append(l);g=a?"remove":"detach";i[g]();k[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),i.css("width",b.sDestroyWidth).removeClass(d.sTable),
 | 
			
		||||
(o=b.asDestroyStripes.length)&&f.children().each(function(a){h(this).addClass(b.asDestroyStripes[a%o])}));c=h.inArray(b,n.settings);-1!==c&&n.settings.splice(c,1)})});h.each(["column","row","cell"],function(a,b){o(b+"s().every()",function(a){var d=this.selector.opts,e=this;return this.iterator(b,function(f,g,h,i,m){a.call(e[b](g,"cell"===b?h:d,"cell"===b?d:k),g,h,i,m)})})});o("i18n()",function(a,b,c){var d=this.context[0],a=S(a)(d.oLanguage);a===k&&(a=b);c!==k&&h.isPlainObject(a)&&(a=a[c]!==k?a[c]:
 | 
			
		||||
a._);return a.replace("%d",c)});n.version="1.10.18";n.settings=[];n.models={};n.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};n.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};n.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,
 | 
			
		||||
sClass:null,sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};n.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,
 | 
			
		||||
bSort:!0,bSortMulti:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+
 | 
			
		||||
a.sInstance+"_"+location.pathname))}catch(b){}},fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},
 | 
			
		||||
oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:h.extend({},
 | 
			
		||||
n.models.oSearch),sAjaxDataProp:"data",sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};Z(n.defaults);n.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};
 | 
			
		||||
Z(n.defaults.column);n.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],
 | 
			
		||||
aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",
 | 
			
		||||
iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal:
 | 
			
		||||
this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};n.ext=x={buttons:{},
 | 
			
		||||
classes:{},build:"ju/dt-1.10.18",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:n.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:n.version};h.extend(x,{afnFiltering:x.search,aTypes:x.type.detect,ofnSearch:x.type.search,oSort:x.type.order,afnSortData:x.order,aoFeatures:x.feature,oApi:x.internal,oStdClasses:x.classes,oPagination:x.pager});
 | 
			
		||||
h.extend(n.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",
 | 
			
		||||
sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",
 | 
			
		||||
sJUIHeader:"",sJUIFooter:""});var Kb=n.ext.pager;h.extend(Kb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ia(a,b)]},simple_numbers:function(a,b){return["previous",ia(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ia(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ia(a,b),"last"]},_numbers:ia,numbers_length:7});h.extend(!0,n.ext.renderer,{pageButton:{_:function(a,b,c,d,e,
 | 
			
		||||
f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},m,l,n=0,o=function(b,d){var k,s,u,r,v=function(b){Ta(a,b.data.action,true)};k=0;for(s=d.length;k<s;k++){r=d[k];if(h.isArray(r)){u=h("<"+(r.DT_el||"div")+"/>").appendTo(b);o(u,r)}else{m=null;l="";switch(r){case "ellipsis":b.append('<span class="ellipsis">…</span>');break;case "first":m=j.sFirst;l=r+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":m=j.sPrevious;l=r+(e>0?"":" "+g.sPageButtonDisabled);break;case "next":m=
 | 
			
		||||
j.sNext;l=r+(e<f-1?"":" "+g.sPageButtonDisabled);break;case "last":m=j.sLast;l=r+(e<f-1?"":" "+g.sPageButtonDisabled);break;default:m=r+1;l=e===r?g.sPageButtonActive:""}if(m!==null){u=h("<a>",{"class":g.sPageButton+" "+l,"aria-controls":a.sTableId,"aria-label":i[r],"data-dt-idx":n,tabindex:a.iTabIndex,id:c===0&&typeof r==="string"?a.sTableId+"_"+r:null}).html(m).appendTo(b);Wa(u,{action:r},v);n++}}}},s;try{s=h(b).find(H.activeElement).data("dt-idx")}catch(u){}o(h(b).empty(),d);s!==k&&h(b).find("[data-dt-idx="+
 | 
			
		||||
s+"]").focus()}}});h.extend(n.ext.type.detect,[function(a,b){var c=b.oLanguage.sDecimal;return $a(a,c)?"num"+c:null},function(a){if(a&&!(a instanceof Date)&&!Zb.test(a))return null;var b=Date.parse(a);return null!==b&&!isNaN(b)||M(a)?"date":null},function(a,b){var c=b.oLanguage.sDecimal;return $a(a,c,!0)?"num-fmt"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Pb(a,c)?"html-num"+c:null},function(a,b){var c=b.oLanguage.sDecimal;return Pb(a,c,!0)?"html-num-fmt"+c:null},function(a){return M(a)||
 | 
			
		||||
"string"===typeof a&&-1!==a.indexOf("<")?"html":null}]);h.extend(n.ext.type.search,{html:function(a){return M(a)?a:"string"===typeof a?a.replace(Mb," ").replace(Aa,""):""},string:function(a){return M(a)?a:"string"===typeof a?a.replace(Mb," "):a}});var za=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Ob(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};h.extend(x.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return M(a)?
 | 
			
		||||
"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return M(a)?"":"string"===typeof a?a.toLowerCase():!a.toString?"":a.toString()},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,b){return a<b?1:a>b?-1:0}});Da("");h.extend(!0,n.ext.renderer,{header:{_:function(a,b,c,d){h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:
 | 
			
		||||
c.sSortingClass)}})},jqueryui:function(a,b,c,d){h("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(h("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);h(a.nTable).on("order.dt.DT",function(e,f,g,h){if(a===f){e=c.idx;b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass(h[e]=="asc"?d.sSortAsc:h[e]=="desc"?d.sSortDesc:c.sSortingClass);b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass(h[e]==
 | 
			
		||||
"asc"?d.sSortJUIAsc:h[e]=="desc"?d.sSortJUIDesc:c.sSortingClassJUI)}})}}});var Vb=function(a){return"string"===typeof a?a.replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""):a};n.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return Vb(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,
 | 
			
		||||
a)+f+(e||"")}}},text:function(){return{display:Vb}}};h.extend(n.ext.internal,{_fnExternApiFunc:Lb,_fnBuildAjax:sa,_fnAjaxUpdate:lb,_fnAjaxParameters:ub,_fnAjaxUpdateDraw:vb,_fnAjaxDataSrc:ta,_fnAddColumn:Ea,_fnColumnOptions:ka,_fnAdjustColumnSizing:$,_fnVisibleToColumnIndex:aa,_fnColumnIndexToVisible:ba,_fnVisbleColumns:V,_fnGetColumns:ma,_fnColumnTypes:Ga,_fnApplyColumnDefs:ib,_fnHungarianMap:Z,_fnCamelToHungarian:J,_fnLanguageCompat:Ca,_fnBrowserDetect:gb,_fnAddData:O,_fnAddTr:na,_fnNodeToDataIndex:function(a,
 | 
			
		||||
b){return b._DT_RowIndex!==k?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return h.inArray(c,a.aoData[b].anCells)},_fnGetCellData:B,_fnSetCellData:jb,_fnSplitObjNotation:Ja,_fnGetObjectDataFn:S,_fnSetObjectDataFn:N,_fnGetDataMaster:Ka,_fnClearTable:oa,_fnDeleteIndex:pa,_fnInvalidate:da,_fnGetRowElements:Ia,_fnCreateTr:Ha,_fnBuildHead:kb,_fnDrawHead:fa,_fnDraw:P,_fnReDraw:T,_fnAddOptionsHtml:nb,_fnDetectHeader:ea,_fnGetUniqueThs:ra,_fnFeatureHtmlFilter:pb,_fnFilterComplete:ga,_fnFilterCustom:yb,
 | 
			
		||||
_fnFilterColumn:xb,_fnFilter:wb,_fnFilterCreateSearch:Pa,_fnEscapeRegex:Qa,_fnFilterData:zb,_fnFeatureHtmlInfo:sb,_fnUpdateInfo:Cb,_fnInfoMacros:Db,_fnInitialise:ha,_fnInitComplete:ua,_fnLengthChange:Ra,_fnFeatureHtmlLength:ob,_fnFeatureHtmlPaginate:tb,_fnPageChange:Ta,_fnFeatureHtmlProcessing:qb,_fnProcessingDisplay:C,_fnFeatureHtmlTable:rb,_fnScrollDraw:la,_fnApplyToChildren:I,_fnCalculateColumnWidths:Fa,_fnThrottle:Oa,_fnConvertToWidth:Eb,_fnGetWidestNode:Fb,_fnGetMaxLenString:Gb,_fnStringToCss:v,
 | 
			
		||||
_fnSortFlatten:X,_fnSort:mb,_fnSortAria:Ib,_fnSortListener:Va,_fnSortAttachListener:Ma,_fnSortingClasses:wa,_fnSortData:Hb,_fnSaveState:xa,_fnLoadState:Jb,_fnSettingsFromNode:ya,_fnLog:K,_fnMap:F,_fnBindAction:Wa,_fnCallbackReg:z,_fnCallbackFire:r,_fnLengthOverflow:Sa,_fnRenderer:Na,_fnDataSource:y,_fnRowAttributes:La,_fnExtend:Xa,_fnCalculateEnd:function(){}});h.fn.dataTable=n;n.$=h;h.fn.dataTableSettings=n.settings;h.fn.dataTableExt=n.ext;h.fn.DataTable=function(a){return h(this).dataTable(a).api()};
 | 
			
		||||
h.each(n,function(a,b){h.fn.DataTable[a]=b});return h.fn.dataTable});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*!
 | 
			
		||||
 DataTables jQuery UI integration
 | 
			
		||||
 ©2011-2014 SpryMedia Ltd - datatables.net/license
 | 
			
		||||
*/
 | 
			
		||||
(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,d){b||(b=window);if(!d||!d.fn.dataTable)d=require("datatables.net")(b,d).$;return a(d,b,b.document)}:a(jQuery,window,document)})(function(a){var b=a.fn.dataTable;a.extend(!0,b.defaults,{dom:'<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr"lfr>t<"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br"ip>',
 | 
			
		||||
renderer:"jqueryui"});a.extend(b.ext.classes,{sWrapper:"dataTables_wrapper dt-jqueryui",sPageButton:"fg-button ui-button ui-state-default",sPageButtonActive:"ui-state-disabled",sPageButtonDisabled:"ui-state-disabled",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:"ui-state-default sorting_asc",sSortDesc:"ui-state-default sorting_desc",sSortable:"ui-state-default sorting",sSortableAsc:"ui-state-default sorting_asc_disabled",sSortableDesc:"ui-state-default sorting_desc_disabled",
 | 
			
		||||
sSortableNone:"ui-state-default sorting_disabled",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scrollFoot ui-state-default",sHeaderTH:"ui-state-default",sFooterTH:"ui-state-default"});b.ext.renderer.header.jqueryui=function(b,h,e,c){var f="css_right ui-icon ui-icon-caret-2-n-s",g=-1!==a.inArray("asc",e.asSorting),i=-1!==a.inArray("desc",e.asSorting);!e.bSortable||!g&&!i?f="":g&&!i?f="css_right ui-icon ui-icon-caret-1-n":!g&&i&&(f="css_right ui-icon ui-icon-caret-1-s");
 | 
			
		||||
a("<div/>").addClass("DataTables_sort_wrapper").append(h.contents()).append(a("<span/>").addClass(c.sSortIcon+" "+f)).appendTo(h);a(b.nTable).on("order.dt",function(a,g,i,j){b===g&&(a=e.idx,h.removeClass(c.sSortAsc+" "+c.sSortDesc).addClass("asc"==j[a]?c.sSortAsc:"desc"==j[a]?c.sSortDesc:e.sSortingClass),h.find("span."+c.sSortIcon).removeClass("css_right ui-icon ui-icon-triangle-1-n css_right ui-icon ui-icon-triangle-1-s css_right ui-icon ui-icon-caret-2-n-s css_right ui-icon ui-icon-caret-1-n css_right ui-icon ui-icon-caret-1-s").addClass("asc"==
 | 
			
		||||
j[a]?"css_right ui-icon ui-icon-triangle-1-n":"desc"==j[a]?"css_right ui-icon ui-icon-triangle-1-s":f))})};b.TableTools&&a.extend(!0,b.TableTools.classes,{container:"DTTT_container ui-buttonset ui-buttonset-multi",buttons:{normal:"DTTT_button ui-button ui-state-default"},collection:{container:"DTTT_collection ui-buttonset ui-buttonset-multi"}});return b});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11008
									
								
								src/jqueryui1.12/external/jquery/jquery.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/jqueryui1.12/font/context-menu-icons.eot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/jqueryui1.12/font/context-menu-icons.ttf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/jqueryui1.12/font/context-menu-icons.woff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/jqueryui1.12/font/context-menu-icons.woff2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								src/jqueryui1.12/images/ui-icons_444444_256x240.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.8 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/jqueryui1.12/images/ui-icons_555555_256x240.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.8 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/jqueryui1.12/images/ui-icons_777620_256x240.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/jqueryui1.12/images/ui-icons_777777_256x240.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.8 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/jqueryui1.12/images/ui-icons_cc0000_256x240.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 4.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								src/jqueryui1.12/images/ui-icons_ffffff_256x240.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.2 KiB  | 
							
								
								
									
										559
									
								
								src/jqueryui1.12/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,559 @@
 | 
			
		||||
<!doctype html>
 | 
			
		||||
<html lang="us">
 | 
			
		||||
<head>
 | 
			
		||||
	<meta charset="utf-8">
 | 
			
		||||
	<title>jQuery UI Example Page</title>
 | 
			
		||||
	<link href="jquery-ui.css" rel="stylesheet">
 | 
			
		||||
	<style>
 | 
			
		||||
	body{
 | 
			
		||||
		font-family: "Trebuchet MS", sans-serif;
 | 
			
		||||
		margin: 50px;
 | 
			
		||||
	}
 | 
			
		||||
	.demoHeaders {
 | 
			
		||||
		margin-top: 2em;
 | 
			
		||||
	}
 | 
			
		||||
	#dialog-link {
 | 
			
		||||
		padding: .4em 1em .4em 20px;
 | 
			
		||||
		text-decoration: none;
 | 
			
		||||
		position: relative;
 | 
			
		||||
	}
 | 
			
		||||
	#dialog-link span.ui-icon {
 | 
			
		||||
		margin: 0 5px 0 0;
 | 
			
		||||
		position: absolute;
 | 
			
		||||
		left: .2em;
 | 
			
		||||
		top: 50%;
 | 
			
		||||
		margin-top: -8px;
 | 
			
		||||
	}
 | 
			
		||||
	#icons {
 | 
			
		||||
		margin: 0;
 | 
			
		||||
		padding: 0;
 | 
			
		||||
	}
 | 
			
		||||
	#icons li {
 | 
			
		||||
		margin: 2px;
 | 
			
		||||
		position: relative;
 | 
			
		||||
		padding: 4px 0;
 | 
			
		||||
		cursor: pointer;
 | 
			
		||||
		float: left;
 | 
			
		||||
		list-style: none;
 | 
			
		||||
	}
 | 
			
		||||
	#icons span.ui-icon {
 | 
			
		||||
		float: left;
 | 
			
		||||
		margin: 0 4px;
 | 
			
		||||
	}
 | 
			
		||||
	.fakewindowcontain .ui-widget-overlay {
 | 
			
		||||
		position: absolute;
 | 
			
		||||
	}
 | 
			
		||||
	select {
 | 
			
		||||
		width: 200px;
 | 
			
		||||
	}
 | 
			
		||||
	</style>
 | 
			
		||||
</head>
 | 
			
		||||
<body>
 | 
			
		||||
 | 
			
		||||
<h1>Welcome to jQuery UI!</h1>
 | 
			
		||||
 | 
			
		||||
<div class="ui-widget">
 | 
			
		||||
	<p>This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using them with a compatible jQuery version.</p>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<h1>YOUR COMPONENTS:</h1>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Accordion -->
 | 
			
		||||
<h2 class="demoHeaders">Accordion</h2>
 | 
			
		||||
<div id="accordion">
 | 
			
		||||
	<h3>First</h3>
 | 
			
		||||
	<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>
 | 
			
		||||
	<h3>Second</h3>
 | 
			
		||||
	<div>Phasellus mattis tincidunt nibh.</div>
 | 
			
		||||
	<h3>Third</h3>
 | 
			
		||||
	<div>Nam dui erat, auctor a, dignissim quis.</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Autocomplete -->
 | 
			
		||||
<h2 class="demoHeaders">Autocomplete</h2>
 | 
			
		||||
<div>
 | 
			
		||||
	<input id="autocomplete" title="type "a"">
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Button -->
 | 
			
		||||
<h2 class="demoHeaders">Button</h2>
 | 
			
		||||
<button id="button">A button element</button>
 | 
			
		||||
<button id="button-icon">An icon-only button</button>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Checkboxradio -->
 | 
			
		||||
<h2 class="demoHeaders">Checkboxradio</h2>
 | 
			
		||||
<form style="margin-top: 1em;">
 | 
			
		||||
	<div id="radioset">
 | 
			
		||||
		<input type="radio" id="radio1" name="radio"><label for="radio1">Choice 1</label>
 | 
			
		||||
		<input type="radio" id="radio2" name="radio" checked="checked"><label for="radio2">Choice 2</label>
 | 
			
		||||
		<input type="radio" id="radio3" name="radio"><label for="radio3">Choice 3</label>
 | 
			
		||||
	</div>
 | 
			
		||||
</form>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Controlgroup -->
 | 
			
		||||
<h2 class="demoHeaders">Controlgroup</h2>
 | 
			
		||||
<fieldset>
 | 
			
		||||
	<legend>Rental Car</legend>
 | 
			
		||||
	<div id="controlgroup">
 | 
			
		||||
		<select id="car-type">
 | 
			
		||||
			<option>Compact car</option>
 | 
			
		||||
			<option>Midsize car</option>
 | 
			
		||||
			<option>Full size car</option>
 | 
			
		||||
			<option>SUV</option>
 | 
			
		||||
			<option>Luxury</option>
 | 
			
		||||
			<option>Truck</option>
 | 
			
		||||
			<option>Van</option>
 | 
			
		||||
		</select>
 | 
			
		||||
		<label for="transmission-standard">Standard</label>
 | 
			
		||||
		<input type="radio" name="transmission" id="transmission-standard">
 | 
			
		||||
		<label for="transmission-automatic">Automatic</label>
 | 
			
		||||
		<input type="radio" name="transmission" id="transmission-automatic">
 | 
			
		||||
		<label for="insurance">Insurance</label>
 | 
			
		||||
		<input type="checkbox" name="insurance" id="insurance">
 | 
			
		||||
		<label for="horizontal-spinner" class="ui-controlgroup-label"># of cars</label>
 | 
			
		||||
		<input id="horizontal-spinner" class="ui-spinner-input">
 | 
			
		||||
		<button>Book Now!</button>
 | 
			
		||||
	</div>
 | 
			
		||||
</fieldset>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Tabs -->
 | 
			
		||||
<h2 class="demoHeaders">Tabs</h2>
 | 
			
		||||
<div id="tabs">
 | 
			
		||||
	<ul>
 | 
			
		||||
		<li><a href="#tabs-1">First</a></li>
 | 
			
		||||
		<li><a href="#tabs-2">Second</a></li>
 | 
			
		||||
		<li><a href="#tabs-3">Third</a></li>
 | 
			
		||||
	</ul>
 | 
			
		||||
	<div id="tabs-1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
 | 
			
		||||
	<div id="tabs-2">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div>
 | 
			
		||||
	<div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2 class="demoHeaders">Dialog</h2>
 | 
			
		||||
<p>
 | 
			
		||||
	<button id="dialog-link" class="ui-button ui-corner-all ui-widget">
 | 
			
		||||
		<span class="ui-icon ui-icon-newwin"></span>Open Dialog
 | 
			
		||||
	</button>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
<h2 class="demoHeaders">Overlay and Shadow Classes</h2>
 | 
			
		||||
<div style="position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;" class="fakewindowcontain">
 | 
			
		||||
	<p>Lorem ipsum dolor sit amet,  Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>
 | 
			
		||||
 | 
			
		||||
	<!-- ui-dialog -->
 | 
			
		||||
	<div class="ui-widget-overlay ui-front"></div>
 | 
			
		||||
	<div style="position: absolute; width: 320px; left: 50px; top: 30px; padding: 1.2em" class="ui-widget ui-front ui-widget-content ui-corner-all ui-widget-shadow">
 | 
			
		||||
		Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
 | 
			
		||||
	</div>
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<!-- ui-dialog -->
 | 
			
		||||
<div id="dialog" title="Dialog Title">
 | 
			
		||||
	<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<h2 class="demoHeaders">Framework Icons (content color preview)</h2>
 | 
			
		||||
<ul id="icons" class="ui-widget ui-helper-clearfix">
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-n"><span class="ui-icon ui-icon-caret-1-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-ne"><span class="ui-icon ui-icon-caret-1-ne"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-e"><span class="ui-icon ui-icon-caret-1-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-se"><span class="ui-icon ui-icon-caret-1-se"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-s"><span class="ui-icon ui-icon-caret-1-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-sw"><span class="ui-icon ui-icon-caret-1-sw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-w"><span class="ui-icon ui-icon-caret-1-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-nw"><span class="ui-icon ui-icon-caret-1-nw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-2-n-s"><span class="ui-icon ui-icon-caret-2-n-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-2-e-w"><span class="ui-icon ui-icon-caret-2-e-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-n"><span class="ui-icon ui-icon-triangle-1-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-ne"><span class="ui-icon ui-icon-triangle-1-ne"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-e"><span class="ui-icon ui-icon-triangle-1-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-se"><span class="ui-icon ui-icon-triangle-1-se"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-s"><span class="ui-icon ui-icon-triangle-1-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-sw"><span class="ui-icon ui-icon-triangle-1-sw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-w"><span class="ui-icon ui-icon-triangle-1-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-nw"><span class="ui-icon ui-icon-triangle-1-nw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-n-s"><span class="ui-icon ui-icon-triangle-2-n-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-e-w"><span class="ui-icon ui-icon-triangle-2-e-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-n"><span class="ui-icon ui-icon-arrow-1-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-ne"><span class="ui-icon ui-icon-arrow-1-ne"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-e"><span class="ui-icon ui-icon-arrow-1-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-se"><span class="ui-icon ui-icon-arrow-1-se"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-s"><span class="ui-icon ui-icon-arrow-1-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-sw"><span class="ui-icon ui-icon-arrow-1-sw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-w"><span class="ui-icon ui-icon-arrow-1-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-nw"><span class="ui-icon ui-icon-arrow-1-nw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-n-s"><span class="ui-icon ui-icon-arrow-2-n-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-ne-sw"><span class="ui-icon ui-icon-arrow-2-ne-sw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-e-w"><span class="ui-icon ui-icon-arrow-2-e-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-se-nw"><span class="ui-icon ui-icon-arrow-2-se-nw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-n"><span class="ui-icon ui-icon-arrowstop-1-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-e"><span class="ui-icon ui-icon-arrowstop-1-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-s"><span class="ui-icon ui-icon-arrowstop-1-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-w"><span class="ui-icon ui-icon-arrowstop-1-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-n"><span class="ui-icon ui-icon-arrowthick-1-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-ne"><span class="ui-icon ui-icon-arrowthick-1-ne"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-e"><span class="ui-icon ui-icon-arrowthick-1-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-se"><span class="ui-icon ui-icon-arrowthick-1-se"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-s"><span class="ui-icon ui-icon-arrowthick-1-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-sw"><span class="ui-icon ui-icon-arrowthick-1-sw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-w"><span class="ui-icon ui-icon-arrowthick-1-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-nw"><span class="ui-icon ui-icon-arrowthick-1-nw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-n-s"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-ne-sw"><span class="ui-icon ui-icon-arrowthick-2-ne-sw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-e-w"><span class="ui-icon ui-icon-arrowthick-2-e-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-se-nw"><span class="ui-icon ui-icon-arrowthick-2-se-nw"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-n"><span class="ui-icon ui-icon-arrowthickstop-1-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-e"><span class="ui-icon ui-icon-arrowthickstop-1-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-s"><span class="ui-icon ui-icon-arrowthickstop-1-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-w"><span class="ui-icon ui-icon-arrowthickstop-1-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-w"><span class="ui-icon ui-icon-arrowreturnthick-1-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-n"><span class="ui-icon ui-icon-arrowreturnthick-1-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-e"><span class="ui-icon ui-icon-arrowreturnthick-1-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-s"><span class="ui-icon ui-icon-arrowreturnthick-1-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-w"><span class="ui-icon ui-icon-arrowreturn-1-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-n"><span class="ui-icon ui-icon-arrowreturn-1-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-e"><span class="ui-icon ui-icon-arrowreturn-1-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-s"><span class="ui-icon ui-icon-arrowreturn-1-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-w"><span class="ui-icon ui-icon-arrowrefresh-1-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-n"><span class="ui-icon ui-icon-arrowrefresh-1-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-e"><span class="ui-icon ui-icon-arrowrefresh-1-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-s"><span class="ui-icon ui-icon-arrowrefresh-1-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4"><span class="ui-icon ui-icon-arrow-4"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4-diag"><span class="ui-icon ui-icon-arrow-4-diag"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-extlink"><span class="ui-icon ui-icon-extlink"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-newwin"><span class="ui-icon ui-icon-newwin"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-refresh"><span class="ui-icon ui-icon-refresh"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-shuffle"><span class="ui-icon ui-icon-shuffle"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-transfer-e-w"><span class="ui-icon ui-icon-transfer-e-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-transferthick-e-w"><span class="ui-icon ui-icon-transferthick-e-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-collapsed"><span class="ui-icon ui-icon-folder-collapsed"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-open"><span class="ui-icon ui-icon-folder-open"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-document"><span class="ui-icon ui-icon-document"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-document-b"><span class="ui-icon ui-icon-document-b"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-note"><span class="ui-icon ui-icon-note"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-open"><span class="ui-icon ui-icon-mail-open"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-suitcase"><span class="ui-icon ui-icon-suitcase"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-comment"><span class="ui-icon ui-icon-comment"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-person"><span class="ui-icon ui-icon-person"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-print"><span class="ui-icon ui-icon-print"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-trash"><span class="ui-icon ui-icon-trash"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-locked"><span class="ui-icon ui-icon-locked"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-unlocked"><span class="ui-icon ui-icon-unlocked"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-bookmark"><span class="ui-icon ui-icon-bookmark"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-tag"><span class="ui-icon ui-icon-tag"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-home"><span class="ui-icon ui-icon-home"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-flag"><span class="ui-icon ui-icon-flag"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-calculator"><span class="ui-icon ui-icon-calculator"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-cart"><span class="ui-icon ui-icon-cart"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-pencil"><span class="ui-icon ui-icon-pencil"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-clock"><span class="ui-icon ui-icon-clock"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-disk"><span class="ui-icon ui-icon-disk"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-calendar"><span class="ui-icon ui-icon-calendar"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomin"><span class="ui-icon ui-icon-zoomin"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomout"><span class="ui-icon ui-icon-zoomout"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-search"><span class="ui-icon ui-icon-search"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-wrench"><span class="ui-icon ui-icon-wrench"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-gear"><span class="ui-icon ui-icon-gear"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-heart"><span class="ui-icon ui-icon-heart"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-star"><span class="ui-icon ui-icon-star"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-link"><span class="ui-icon ui-icon-link"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-cancel"><span class="ui-icon ui-icon-cancel"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-plus"><span class="ui-icon ui-icon-plus"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-minus"><span class="ui-icon ui-icon-minus"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-minusthick"><span class="ui-icon ui-icon-minusthick"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-close"><span class="ui-icon ui-icon-close"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-closethick"><span class="ui-icon ui-icon-closethick"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-key"><span class="ui-icon ui-icon-key"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-lightbulb"><span class="ui-icon ui-icon-lightbulb"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-scissors"><span class="ui-icon ui-icon-scissors"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-clipboard"><span class="ui-icon ui-icon-clipboard"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-copy"><span class="ui-icon ui-icon-copy"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-contact"><span class="ui-icon ui-icon-contact"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-image"><span class="ui-icon ui-icon-image"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-video"><span class="ui-icon ui-icon-video"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-script"><span class="ui-icon ui-icon-script"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-alert"><span class="ui-icon ui-icon-alert"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-info"><span class="ui-icon ui-icon-info"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-notice"><span class="ui-icon ui-icon-notice"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-help"><span class="ui-icon ui-icon-help"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-bullet"><span class="ui-icon ui-icon-bullet"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-off"><span class="ui-icon ui-icon-radio-off"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-on"><span class="ui-icon ui-icon-radio-on"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-w"><span class="ui-icon ui-icon-pin-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-s"><span class="ui-icon ui-icon-pin-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-play"><span class="ui-icon ui-icon-play"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-pause"><span class="ui-icon ui-icon-pause"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-next"><span class="ui-icon ui-icon-seek-next"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-prev"><span class="ui-icon ui-icon-seek-prev"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-end"><span class="ui-icon ui-icon-seek-end"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-first"><span class="ui-icon ui-icon-seek-first"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-stop"><span class="ui-icon ui-icon-stop"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-eject"><span class="ui-icon ui-icon-eject"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-off"><span class="ui-icon ui-icon-volume-off"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-on"><span class="ui-icon ui-icon-volume-on"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-power"><span class="ui-icon ui-icon-power"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-signal-diag"><span class="ui-icon ui-icon-signal-diag"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-signal"><span class="ui-icon ui-icon-signal"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-0"><span class="ui-icon ui-icon-battery-0"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-1"><span class="ui-icon ui-icon-battery-1"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-2"><span class="ui-icon ui-icon-battery-2"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-3"><span class="ui-icon ui-icon-battery-3"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-plus"><span class="ui-icon ui-icon-circle-plus"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-minus"><span class="ui-icon ui-icon-circle-minus"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-close"><span class="ui-icon ui-icon-circle-close"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-e"><span class="ui-icon ui-icon-circle-triangle-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-s"><span class="ui-icon ui-icon-circle-triangle-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-w"><span class="ui-icon ui-icon-circle-triangle-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-n"><span class="ui-icon ui-icon-circle-triangle-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-e"><span class="ui-icon ui-icon-circle-arrow-e"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-s"><span class="ui-icon ui-icon-circle-arrow-s"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-w"><span class="ui-icon ui-icon-circle-arrow-w"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-n"><span class="ui-icon ui-icon-circle-arrow-n"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomin"><span class="ui-icon ui-icon-circle-zoomin"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomout"><span class="ui-icon ui-icon-circle-zoomout"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-check"><span class="ui-icon ui-icon-circle-check"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-plus"><span class="ui-icon ui-icon-circlesmall-plus"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-minus"><span class="ui-icon ui-icon-circlesmall-minus"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-close"><span class="ui-icon ui-icon-circlesmall-close"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-plus"><span class="ui-icon ui-icon-squaresmall-plus"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-minus"><span class="ui-icon ui-icon-squaresmall-minus"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-close"><span class="ui-icon ui-icon-squaresmall-close"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-vertical"><span class="ui-icon ui-icon-grip-dotted-vertical"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-horizontal"><span class="ui-icon ui-icon-grip-dotted-horizontal"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-vertical"><span class="ui-icon ui-icon-grip-solid-vertical"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-horizontal"><span class="ui-icon ui-icon-grip-solid-horizontal"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-gripsmall-diagonal-se"><span class="ui-icon ui-icon-gripsmall-diagonal-se"></span></li>
 | 
			
		||||
	<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span class="ui-icon ui-icon-grip-diagonal-se"></span></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Slider -->
 | 
			
		||||
<h2 class="demoHeaders">Slider</h2>
 | 
			
		||||
<div id="slider"></div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Datepicker -->
 | 
			
		||||
<h2 class="demoHeaders">Datepicker</h2>
 | 
			
		||||
<div id="datepicker"></div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Progressbar -->
 | 
			
		||||
<h2 class="demoHeaders">Progressbar</h2>
 | 
			
		||||
<div id="progressbar"></div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Progressbar -->
 | 
			
		||||
<h2 class="demoHeaders">Selectmenu</h2>
 | 
			
		||||
<select id="selectmenu">
 | 
			
		||||
	<option>Slower</option>
 | 
			
		||||
	<option>Slow</option>
 | 
			
		||||
	<option selected="selected">Medium</option>
 | 
			
		||||
	<option>Fast</option>
 | 
			
		||||
	<option>Faster</option>
 | 
			
		||||
</select>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Spinner -->
 | 
			
		||||
<h2 class="demoHeaders">Spinner</h2>
 | 
			
		||||
<input id="spinner">
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Menu -->
 | 
			
		||||
<h2 class="demoHeaders">Menu</h2>
 | 
			
		||||
<ul style="width:100px;" id="menu">
 | 
			
		||||
	<li><div>Item 1</div></li>
 | 
			
		||||
	<li><div>Item 2</div></li>
 | 
			
		||||
	<li><div>Item 3</div>
 | 
			
		||||
		<ul>
 | 
			
		||||
			<li><div>Item 3-1</div></li>
 | 
			
		||||
			<li><div>Item 3-2</div></li>
 | 
			
		||||
			<li><div>Item 3-3</div></li>
 | 
			
		||||
			<li><div>Item 3-4</div></li>
 | 
			
		||||
			<li><div>Item 3-5</div></li>
 | 
			
		||||
		</ul>
 | 
			
		||||
	</li>
 | 
			
		||||
	<li><div>Item 4</div></li>
 | 
			
		||||
	<li><div>Item 5</div></li>
 | 
			
		||||
</ul>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Tooltip -->
 | 
			
		||||
<h2 class="demoHeaders">Tooltip</h2>
 | 
			
		||||
<p id="tooltip">
 | 
			
		||||
	<a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover
 | 
			
		||||
the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- Highlight / Error -->
 | 
			
		||||
<h2 class="demoHeaders">Highlight / Error</h2>
 | 
			
		||||
<div class="ui-widget">
 | 
			
		||||
	<div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;">
 | 
			
		||||
		<p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
 | 
			
		||||
		<strong>Hey!</strong> Sample ui-state-highlight style.</p>
 | 
			
		||||
	</div>
 | 
			
		||||
</div>
 | 
			
		||||
<br>
 | 
			
		||||
<div class="ui-widget">
 | 
			
		||||
	<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;">
 | 
			
		||||
		<p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>
 | 
			
		||||
		<strong>Alert:</strong> Sample ui-state-error style.</p>
 | 
			
		||||
	</div>
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
<script src="external/jquery/jquery.js"></script>
 | 
			
		||||
<script src="jquery-ui.js"></script>
 | 
			
		||||
<script>
 | 
			
		||||
 | 
			
		||||
$( "#accordion" ).accordion();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
var availableTags = [
 | 
			
		||||
	"ActionScript",
 | 
			
		||||
	"AppleScript",
 | 
			
		||||
	"Asp",
 | 
			
		||||
	"BASIC",
 | 
			
		||||
	"C",
 | 
			
		||||
	"C++",
 | 
			
		||||
	"Clojure",
 | 
			
		||||
	"COBOL",
 | 
			
		||||
	"ColdFusion",
 | 
			
		||||
	"Erlang",
 | 
			
		||||
	"Fortran",
 | 
			
		||||
	"Groovy",
 | 
			
		||||
	"Haskell",
 | 
			
		||||
	"Java",
 | 
			
		||||
	"JavaScript",
 | 
			
		||||
	"Lisp",
 | 
			
		||||
	"Perl",
 | 
			
		||||
	"PHP",
 | 
			
		||||
	"Python",
 | 
			
		||||
	"Ruby",
 | 
			
		||||
	"Scala",
 | 
			
		||||
	"Scheme"
 | 
			
		||||
];
 | 
			
		||||
$( "#autocomplete" ).autocomplete({
 | 
			
		||||
	source: availableTags
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#button" ).button();
 | 
			
		||||
$( "#button-icon" ).button({
 | 
			
		||||
	icon: "ui-icon-gear",
 | 
			
		||||
	showLabel: false
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#radioset" ).buttonset();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#controlgroup" ).controlgroup();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#tabs" ).tabs();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#dialog" ).dialog({
 | 
			
		||||
	autoOpen: false,
 | 
			
		||||
	width: 400,
 | 
			
		||||
	buttons: [
 | 
			
		||||
		{
 | 
			
		||||
			text: "Ok",
 | 
			
		||||
			click: function() {
 | 
			
		||||
				$( this ).dialog( "close" );
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			text: "Cancel",
 | 
			
		||||
			click: function() {
 | 
			
		||||
				$( this ).dialog( "close" );
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Link to open the dialog
 | 
			
		||||
$( "#dialog-link" ).click(function( event ) {
 | 
			
		||||
	$( "#dialog" ).dialog( "open" );
 | 
			
		||||
	event.preventDefault();
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#datepicker" ).datepicker({
 | 
			
		||||
	inline: true
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#slider" ).slider({
 | 
			
		||||
	range: true,
 | 
			
		||||
	values: [ 17, 67 ]
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#progressbar" ).progressbar({
 | 
			
		||||
	value: 20
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#spinner" ).spinner();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#menu" ).menu();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#tooltip" ).tooltip();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$( "#selectmenu" ).selectmenu();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Hover states on the static widgets
 | 
			
		||||
$( "#dialog-link, #icons li" ).hover(
 | 
			
		||||
	function() {
 | 
			
		||||
		$( this ).addClass( "ui-state-hover" );
 | 
			
		||||
	},
 | 
			
		||||
	function() {
 | 
			
		||||
		$( this ).removeClass( "ui-state-hover" );
 | 
			
		||||
	}
 | 
			
		||||
);
 | 
			
		||||
</script>
 | 
			
		||||
</body>
 | 
			
		||||
</html>
 | 
			
		||||
							
								
								
									
										9210
									
								
								src/jqueryui1.12/jquery-2.1.4.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										51
									
								
								src/jqueryui1.12/jquery-editable-select.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,51 @@
 | 
			
		||||
/**
 | 
			
		||||
 * jQuery Editable Select
 | 
			
		||||
 * Indri Muska <indrimuska@gmail.com>
 | 
			
		||||
 *
 | 
			
		||||
 * Source on GitHub @ https://github.com/indrimuska/jquery-editable-select
 | 
			
		||||
 url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG2YAABzjgAA4DIAAIM2AAB5CAAAxgwAADT6AAAgbL5TJ5gAAABGSURBVHjaYvz//z8DOYCJgUzA0tnZidPK8vJyRpw24pLEpwnuVHRFhDQxMDAwMPz//x+OOzo6/iPz8WFGuocqAAAA//8DAD/sORHYg7kaAAAAAElFTkSuQmCC)
 | 
			
		||||
 
 | 
			
		||||
 
 | 
			
		||||
 */
 | 
			
		||||
input.es-input {
 | 
			
		||||
	padding-right: 20px !important;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
input.es-input.open {
 | 
			
		||||
	-webkit-border-bottom-left-radius: 0;
 | 
			
		||||
	-moz-border-radius-bottomleft: 0;
 | 
			
		||||
	border-bottom-left-radius: 0;
 | 
			
		||||
	-webkit-border-bottom-right-radius: 0;
 | 
			
		||||
	-moz-border-radius-bottomright: 0;
 | 
			
		||||
	border-bottom-right-radius: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.es-list {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	border: 1px solid #d1d1d1;
 | 
			
		||||
	display: none;
 | 
			
		||||
	z-index: 1000;
 | 
			
		||||
	background: #fff;
 | 
			
		||||
	max-height: 160px;
 | 
			
		||||
	overflow-y: auto;
 | 
			
		||||
	-moz-box-shadow: 0 2px 3px #ccc;
 | 
			
		||||
	-webkit-box-shadow: 0 2px 3px #ccc;
 | 
			
		||||
	box-shadow: 0 2px 3px #ccc;
 | 
			
		||||
	color: black;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.es-list li {
 | 
			
		||||
	display: block;
 | 
			
		||||
	padding: 5px 10px;
 | 
			
		||||
	margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.es-list li.selected {
 | 
			
		||||
	background: #f3f3f3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.es-list li[disabled] {
 | 
			
		||||
	opacity: .5;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										236
									
								
								src/jqueryui1.12/jquery-editable-select.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,236 @@
 | 
			
		||||
/**
 | 
			
		||||
 * jQuery Editable Select
 | 
			
		||||
 * Indri Muska <indrimuska@gmail.com>
 | 
			
		||||
 *
 | 
			
		||||
 * Source on GitHub @ https://github.com/indrimuska/jquery-editable-select
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
+(function ($) {
 | 
			
		||||
	// jQuery Editable Select
 | 
			
		||||
	EditableSelect = function (select, options) {
 | 
			
		||||
		var that     = this;
 | 
			
		||||
		
 | 
			
		||||
		this.options = options;
 | 
			
		||||
		this.$select = $(select);
 | 
			
		||||
		this.$input  = $('<input type="text" autocomplete="off">');
 | 
			
		||||
		this.$list   = $('<ul class="es-list">');
 | 
			
		||||
		this.utility = new EditableSelectUtility(this);
 | 
			
		||||
		
 | 
			
		||||
		if (['focus', 'manual'].indexOf(this.options.trigger) < 0) this.options.trigger = 'focus';
 | 
			
		||||
		if (['default', 'fade', 'slide'].indexOf(this.options.effects) < 0) this.options.effects = 'default';
 | 
			
		||||
		if (isNaN(this.options.duration) && ['fast', 'slow'].indexOf(this.options.duration) < 0) this.options.duration = 'fast';
 | 
			
		||||
		
 | 
			
		||||
		// create text input
 | 
			
		||||
		this.$select.replaceWith(this.$input);
 | 
			
		||||
		this.$list.appendTo(this.options.appendTo || this.$input.parent());
 | 
			
		||||
		
 | 
			
		||||
		// initalization
 | 
			
		||||
		this.utility.initialize();
 | 
			
		||||
		this.utility.initializeList();
 | 
			
		||||
		this.utility.initializeInput();
 | 
			
		||||
		this.utility.trigger('created');
 | 
			
		||||
	}
 | 
			
		||||
	EditableSelect.DEFAULTS = { filter: true, effects: 'default', duration: 'fast', trigger: 'focus' };
 | 
			
		||||
	EditableSelect.prototype.filter = function () {
 | 
			
		||||
		var hiddens = 0;
 | 
			
		||||
		var search  = this.$input.val().toLowerCase().trim();
 | 
			
		||||
		
 | 
			
		||||
		this.$list.find('li').addClass('es-visible').show();
 | 
			
		||||
		if (this.options.filter) {
 | 
			
		||||
			hiddens = this.$list.find('li').filter(function (i, li) { return $(li).text().toLowerCase().indexOf(search) < 0; }).hide().removeClass('es-visible').length;
 | 
			
		||||
			if (this.$list.find('li').length == hiddens) this.hide();
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelect.prototype.show = function () {
 | 
			
		||||
		this.$list.css({
 | 
			
		||||
			top:   this.$input.position().top + this.$input.outerHeight() - 1,
 | 
			
		||||
			left:  this.$input.position().left,
 | 
			
		||||
			width: this.$input.outerWidth()
 | 
			
		||||
		});
 | 
			
		||||
		
 | 
			
		||||
		if (!this.$list.is(':visible') && this.$list.find('li.es-visible').length > 0) {
 | 
			
		||||
			var fns = { default: 'show', fade: 'fadeIn', slide: 'slideDown' };
 | 
			
		||||
			var fn  = fns[this.options.effects];
 | 
			
		||||
			
 | 
			
		||||
			this.utility.trigger('show');
 | 
			
		||||
			this.$input.addClass('open');
 | 
			
		||||
			this.$list[fn](this.options.duration, $.proxy(this.utility.trigger, this.utility, 'shown'));
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelect.prototype.hide = function () {
 | 
			
		||||
		var fns = { default: 'hide', fade: 'fadeOut', slide: 'slideUp' };
 | 
			
		||||
		var fn  = fns[this.options.effects];
 | 
			
		||||
		
 | 
			
		||||
		this.utility.trigger('hide');
 | 
			
		||||
		this.$input.removeClass('open');
 | 
			
		||||
		this.$list[fn](this.options.duration, $.proxy(this.utility.trigger, this.utility, 'hidden'));
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelect.prototype.select = function ($li) {
 | 
			
		||||
		if (!this.$list.has($li) || !$li.is('li.es-visible:not([disabled])')) return;
 | 
			
		||||
		this.$input.val($li.text());
 | 
			
		||||
		if (this.options.filter) this.hide();
 | 
			
		||||
		this.filter();
 | 
			
		||||
		this.utility.trigger('select', $li);
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelect.prototype.add = function (text, index, attrs, data) {
 | 
			
		||||
		var $li     = $('<li>').html(text);
 | 
			
		||||
		var $option = $('<option>').text(text);
 | 
			
		||||
		var last    = this.$list.find('li').length;
 | 
			
		||||
		
 | 
			
		||||
		if (isNaN(index)) index = last;
 | 
			
		||||
		else index = Math.min(Math.max(0, index), last);
 | 
			
		||||
		if (index == 0) {
 | 
			
		||||
		  this.$list.prepend($li);
 | 
			
		||||
		  this.$select.prepend($option);
 | 
			
		||||
		} else {
 | 
			
		||||
		  this.$list.find('li').eq(index - 1).after($li);
 | 
			
		||||
		  this.$select.find('option').eq(index - 1).after($option);
 | 
			
		||||
		}
 | 
			
		||||
		this.utility.setAttributes($li, attrs, data);
 | 
			
		||||
		this.utility.setAttributes($option, attrs, data);
 | 
			
		||||
		this.filter();
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelect.prototype.remove = function (index) {
 | 
			
		||||
		var last = this.$list.find('li').length;
 | 
			
		||||
		
 | 
			
		||||
		if (isNaN(index)) index = last;
 | 
			
		||||
		else index = Math.min(Math.max(0, index), last - 1);
 | 
			
		||||
		this.$list.find('li').eq(index).remove();
 | 
			
		||||
		this.$select.find('option').eq(index).remove();
 | 
			
		||||
		this.filter();
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelect.prototype.clear = function () {
 | 
			
		||||
		this.$list.find('li').remove();
 | 
			
		||||
		this.$select.find('option').remove();
 | 
			
		||||
		this.filter();
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelect.prototype.destroy = function () {
 | 
			
		||||
		this.$list.off('mousemove mousedown mouseup');
 | 
			
		||||
		this.$input.off('focus blur input keydown');
 | 
			
		||||
		this.$input.replaceWith(this.$select);
 | 
			
		||||
		this.$list.remove();
 | 
			
		||||
		this.$select.removeData('editable-select');
 | 
			
		||||
	};
 | 
			
		||||
	
 | 
			
		||||
	// Utility
 | 
			
		||||
	EditableSelectUtility = function (es) {
 | 
			
		||||
		this.es = es;
 | 
			
		||||
	}
 | 
			
		||||
	EditableSelectUtility.prototype.initialize = function () {
 | 
			
		||||
		var that = this;
 | 
			
		||||
		that.setAttributes(that.es.$input, that.es.$select[0].attributes, that.es.$select.data());
 | 
			
		||||
		that.es.$input.addClass('es-input').data('editable-select', that.es);
 | 
			
		||||
		that.es.$select.find('option').each(function (i, option) {
 | 
			
		||||
			var $option = $(option).remove();
 | 
			
		||||
			that.es.add($option.text(), i, option.attributes, $option.data());
 | 
			
		||||
			if ($option.attr('selected')) that.es.$input.val($option.text());
 | 
			
		||||
		});
 | 
			
		||||
		that.es.filter();
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelectUtility.prototype.initializeList = function () {
 | 
			
		||||
		var that = this;
 | 
			
		||||
		that.es.$list
 | 
			
		||||
			.on('mousemove', 'li:not([disabled])', function () {
 | 
			
		||||
				that.es.$list.find('.selected').removeClass('selected');
 | 
			
		||||
				$(this).addClass('selected');
 | 
			
		||||
			})
 | 
			
		||||
			.on('mousedown', 'li', function (e) {
 | 
			
		||||
				if ($(this).is('[disabled]')) e.preventDefault();
 | 
			
		||||
				else that.es.select($(this));
 | 
			
		||||
			})
 | 
			
		||||
			.on('mouseup', function () {
 | 
			
		||||
				that.es.$list.find('li.selected').removeClass('selected');
 | 
			
		||||
			});
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelectUtility.prototype.initializeInput = function () {
 | 
			
		||||
		var that = this;
 | 
			
		||||
		switch (this.es.options.trigger) {
 | 
			
		||||
			default:
 | 
			
		||||
			case 'focus':
 | 
			
		||||
				that.es.$input
 | 
			
		||||
					.on('focus', $.proxy(that.es.show, that.es))
 | 
			
		||||
					.on('blur', $.proxy(that.es.hide, that.es));
 | 
			
		||||
				break;
 | 
			
		||||
			case 'manual':
 | 
			
		||||
				break;
 | 
			
		||||
		}
 | 
			
		||||
		that.es.$input.on('input keydown', function (e) {
 | 
			
		||||
			switch (e.keyCode) {
 | 
			
		||||
				case 38: // Up
 | 
			
		||||
					var visibles = that.es.$list.find('li.es-visible:not([disabled])');
 | 
			
		||||
					var selectedIndex = visibles.index(visibles.filter('li.selected'));
 | 
			
		||||
					that.highlight(selectedIndex - 1);
 | 
			
		||||
					e.preventDefault();
 | 
			
		||||
					break;
 | 
			
		||||
				case 40: // Down
 | 
			
		||||
					var visibles = that.es.$list.find('li.es-visible:not([disabled])');
 | 
			
		||||
					var selectedIndex = visibles.index(visibles.filter('li.selected'));
 | 
			
		||||
					that.highlight(selectedIndex + 1);
 | 
			
		||||
					e.preventDefault();
 | 
			
		||||
					break;
 | 
			
		||||
				case 13: // Enter
 | 
			
		||||
					if (that.es.$list.is(':visible')) {
 | 
			
		||||
						that.es.select(that.es.$list.find('li.selected'));
 | 
			
		||||
						e.preventDefault();
 | 
			
		||||
					}
 | 
			
		||||
					break;
 | 
			
		||||
				case 9:  // Tab
 | 
			
		||||
				case 27: // Esc
 | 
			
		||||
					that.es.hide();
 | 
			
		||||
					break;
 | 
			
		||||
				default:
 | 
			
		||||
					that.es.filter();
 | 
			
		||||
					that.highlight(0);
 | 
			
		||||
					break;
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelectUtility.prototype.highlight = function (index) {
 | 
			
		||||
		var that = this;
 | 
			
		||||
		that.es.show();
 | 
			
		||||
		setTimeout(function () {
 | 
			
		||||
			var visibles         = that.es.$list.find('li.es-visible');
 | 
			
		||||
			var oldSelected      = that.es.$list.find('li.selected').removeClass('selected');
 | 
			
		||||
			var oldSelectedIndex = visibles.index(oldSelected);
 | 
			
		||||
			
 | 
			
		||||
			if (visibles.length > 0) {
 | 
			
		||||
				var selectedIndex = (visibles.length + index) % visibles.length;
 | 
			
		||||
				var selected      = visibles.eq(selectedIndex);
 | 
			
		||||
				var top           = selected.position().top;
 | 
			
		||||
				
 | 
			
		||||
				selected.addClass('selected');
 | 
			
		||||
				if (selectedIndex < oldSelectedIndex && top < 0)
 | 
			
		||||
					that.es.$list.scrollTop(that.es.$list.scrollTop() + top);
 | 
			
		||||
				if (selectedIndex > oldSelectedIndex && top + selected.outerHeight() > that.es.$list.outerHeight())
 | 
			
		||||
					that.es.$list.scrollTop(that.es.$list.scrollTop() + selected.outerHeight() + 2 * (top - that.es.$list.outerHeight()));
 | 
			
		||||
			}
 | 
			
		||||
		});
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelectUtility.prototype.setAttributes = function ($element, attrs, data) {
 | 
			
		||||
		$.each(attrs || {}, function (i, attr) { $element.attr(attr.name, attr.value); });
 | 
			
		||||
		$element.data(data);
 | 
			
		||||
	};
 | 
			
		||||
	EditableSelectUtility.prototype.trigger = function (event) {
 | 
			
		||||
		var params = Array.prototype.slice.call(arguments, 1);
 | 
			
		||||
		var args   = [event + '.editable-select'];
 | 
			
		||||
		args.push(params);
 | 
			
		||||
		this.es.$select.trigger.apply(this.es.$select, args);
 | 
			
		||||
		this.es.$input.trigger.apply(this.es.$input, args);
 | 
			
		||||
	};
 | 
			
		||||
	
 | 
			
		||||
	// Plugin
 | 
			
		||||
	Plugin = function (option) {
 | 
			
		||||
		var args = Array.prototype.slice.call(arguments, 1);
 | 
			
		||||
		return this.each(function () {
 | 
			
		||||
			var $this   = $(this);
 | 
			
		||||
			var data    = $this.data('editable-select');
 | 
			
		||||
			var options = $.extend({}, EditableSelect.DEFAULTS, $this.data(), typeof option == 'object' && option);
 | 
			
		||||
			
 | 
			
		||||
			if (!data) data = new EditableSelect(this, options);
 | 
			
		||||
			if (typeof option == 'string') data[option].apply(data, args);
 | 
			
		||||
		});
 | 
			
		||||
	}
 | 
			
		||||
	$.fn.editableSelect             = Plugin;
 | 
			
		||||
	$.fn.editableSelect.Constructor = EditableSelect;
 | 
			
		||||
	
 | 
			
		||||
})(jQuery);
 | 
			
		||||
							
								
								
									
										2
									
								
								src/jqueryui1.12/jquery-editable-select.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,2 @@
 | 
			
		||||
/*! jQuery Editable Select - v2.2.5 - https://github.com/indrimuska/jquery-editable-select - (c) 2016 Indri Muska - MIT */
 | 
			
		||||
input.es-input{padding-right:20px!important;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAICAYAAADJEc7MAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG2YAABzjgAA4DIAAIM2AAB5CAAAxgwAADT6AAAgbL5TJ5gAAABGSURBVHjaYvz//z8DOYCJgUzA0tnZidPK8vJyRpw24pLEpwnuVHRFhDQxMDAwMPz//x+OOzo6/iPz8WFGuocqAAAA//8DAD/sORHYg7kaAAAAAElFTkSuQmCC) right center no-repeat}input.es-input.open{-webkit-border-bottom-left-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;-webkit-border-bottom-right-radius:0;-moz-border-radius-bottomright:0;border-bottom-right-radius:0}.es-list{position:absolute;padding:0;margin:0;border:1px solid #d1d1d1;display:none;z-index:1000;background:#fff;max-height:160px;overflow-y:auto;-moz-box-shadow:0 2px 3px #ccc;-webkit-box-shadow:0 2px 3px #ccc;box-shadow:0 2px 3px #ccc}.es-list li{display:block;padding:5px 10px;margin:0}.es-list li.selected{background:#f3f3f3}.es-list li[disabled]{opacity:.5}
 | 
			
		||||
							
								
								
									
										2
									
								
								src/jqueryui1.12/jquery-editable-select.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1312
									
								
								src/jqueryui1.12/jquery-ui.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										18707
									
								
								src/jqueryui1.12/jquery-ui.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										7
									
								
								src/jqueryui1.12/jquery-ui.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										13
									
								
								src/jqueryui1.12/jquery-ui.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										886
									
								
								src/jqueryui1.12/jquery-ui.structure.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,886 @@
 | 
			
		||||
/*!
 | 
			
		||||
 * jQuery UI CSS Framework 1.12.1
 | 
			
		||||
 * http://jqueryui.com
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright jQuery Foundation and other contributors
 | 
			
		||||
 * Released under the MIT license.
 | 
			
		||||
 * http://jquery.org/license
 | 
			
		||||
 *
 | 
			
		||||
 * http://api.jqueryui.com/category/theming/
 | 
			
		||||
 */
 | 
			
		||||
.ui-draggable-handle {
 | 
			
		||||
	-ms-touch-action: none;
 | 
			
		||||
	touch-action: none;
 | 
			
		||||
}
 | 
			
		||||
/* Layout helpers
 | 
			
		||||
----------------------------------*/
 | 
			
		||||
.ui-helper-hidden {
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-helper-hidden-accessible {
 | 
			
		||||
	border: 0;
 | 
			
		||||
	clip: rect(0 0 0 0);
 | 
			
		||||
	height: 1px;
 | 
			
		||||
	margin: -1px;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	width: 1px;
 | 
			
		||||
}
 | 
			
		||||
.ui-helper-reset {
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	border: 0;
 | 
			
		||||
	outline: 0;
 | 
			
		||||
	line-height: 1.3;
 | 
			
		||||
	text-decoration: none;
 | 
			
		||||
	font-size: 100%;
 | 
			
		||||
	list-style: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-helper-clearfix:before,
 | 
			
		||||
.ui-helper-clearfix:after {
 | 
			
		||||
	content: "";
 | 
			
		||||
	display: table;
 | 
			
		||||
	border-collapse: collapse;
 | 
			
		||||
}
 | 
			
		||||
.ui-helper-clearfix:after {
 | 
			
		||||
	clear: both;
 | 
			
		||||
}
 | 
			
		||||
.ui-helper-zfix {
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: 100%;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	left: 0;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	opacity: 0;
 | 
			
		||||
	filter:Alpha(Opacity=0); /* support: IE8 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ui-front {
 | 
			
		||||
	z-index: 100;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Interaction Cues
 | 
			
		||||
----------------------------------*/
 | 
			
		||||
.ui-state-disabled {
 | 
			
		||||
	cursor: default !important;
 | 
			
		||||
	pointer-events: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Icons
 | 
			
		||||
----------------------------------*/
 | 
			
		||||
.ui-icon {
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	vertical-align: middle;
 | 
			
		||||
	margin-top: -.25em;
 | 
			
		||||
	position: relative;
 | 
			
		||||
	text-indent: -99999px;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	background-repeat: no-repeat;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ui-widget-icon-block {
 | 
			
		||||
	left: 50%;
 | 
			
		||||
	margin-left: -8px;
 | 
			
		||||
	display: block;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Misc visuals
 | 
			
		||||
----------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Overlays */
 | 
			
		||||
.ui-widget-overlay {
 | 
			
		||||
	position: fixed;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	left: 0;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	height: 100%;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable {
 | 
			
		||||
	position: relative;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable-handle {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	font-size: 0.1px;
 | 
			
		||||
	display: block;
 | 
			
		||||
	-ms-touch-action: none;
 | 
			
		||||
	touch-action: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable-disabled .ui-resizable-handle,
 | 
			
		||||
.ui-resizable-autohide .ui-resizable-handle {
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable-n {
 | 
			
		||||
	cursor: n-resize;
 | 
			
		||||
	height: 7px;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	top: -5px;
 | 
			
		||||
	left: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable-s {
 | 
			
		||||
	cursor: s-resize;
 | 
			
		||||
	height: 7px;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	bottom: -5px;
 | 
			
		||||
	left: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable-e {
 | 
			
		||||
	cursor: e-resize;
 | 
			
		||||
	width: 7px;
 | 
			
		||||
	right: -5px;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	height: 100%;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable-w {
 | 
			
		||||
	cursor: w-resize;
 | 
			
		||||
	width: 7px;
 | 
			
		||||
	left: -5px;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	height: 100%;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable-se {
 | 
			
		||||
	cursor: se-resize;
 | 
			
		||||
	width: 12px;
 | 
			
		||||
	height: 12px;
 | 
			
		||||
	right: 1px;
 | 
			
		||||
	bottom: 1px;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable-sw {
 | 
			
		||||
	cursor: sw-resize;
 | 
			
		||||
	width: 9px;
 | 
			
		||||
	height: 9px;
 | 
			
		||||
	left: -5px;
 | 
			
		||||
	bottom: -5px;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable-nw {
 | 
			
		||||
	cursor: nw-resize;
 | 
			
		||||
	width: 9px;
 | 
			
		||||
	height: 9px;
 | 
			
		||||
	left: -5px;
 | 
			
		||||
	top: -5px;
 | 
			
		||||
}
 | 
			
		||||
.ui-resizable-ne {
 | 
			
		||||
	cursor: ne-resize;
 | 
			
		||||
	width: 9px;
 | 
			
		||||
	height: 9px;
 | 
			
		||||
	right: -5px;
 | 
			
		||||
	top: -5px;
 | 
			
		||||
}
 | 
			
		||||
.ui-selectable {
 | 
			
		||||
	-ms-touch-action: none;
 | 
			
		||||
	touch-action: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-selectable-helper {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	z-index: 100;
 | 
			
		||||
	border: 1px dotted black;
 | 
			
		||||
}
 | 
			
		||||
.ui-sortable-handle {
 | 
			
		||||
	-ms-touch-action: none;
 | 
			
		||||
	touch-action: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-accordion .ui-accordion-header {
 | 
			
		||||
	display: block;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	position: relative;
 | 
			
		||||
	margin: 2px 0 0 0;
 | 
			
		||||
	padding: .5em .5em .5em .7em;
 | 
			
		||||
	font-size: 100%;
 | 
			
		||||
}
 | 
			
		||||
.ui-accordion .ui-accordion-content {
 | 
			
		||||
	padding: 1em 2.2em;
 | 
			
		||||
	border-top: 0;
 | 
			
		||||
	overflow: auto;
 | 
			
		||||
}
 | 
			
		||||
.ui-autocomplete {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	left: 0;
 | 
			
		||||
	cursor: default;
 | 
			
		||||
}
 | 
			
		||||
.ui-menu {
 | 
			
		||||
	list-style: none;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	display: block;
 | 
			
		||||
	outline: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-menu .ui-menu {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
}
 | 
			
		||||
.ui-menu .ui-menu-item {
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	/* support: IE10, see #8844 */
 | 
			
		||||
	list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7");
 | 
			
		||||
}
 | 
			
		||||
.ui-menu .ui-menu-item-wrapper {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	padding: 3px 1em 3px .4em;
 | 
			
		||||
}
 | 
			
		||||
.ui-menu .ui-menu-divider {
 | 
			
		||||
	margin: 5px 0;
 | 
			
		||||
	height: 0;
 | 
			
		||||
	font-size: 0;
 | 
			
		||||
	line-height: 0;
 | 
			
		||||
	border-width: 1px 0 0 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-menu .ui-state-focus,
 | 
			
		||||
.ui-menu .ui-state-active {
 | 
			
		||||
	margin: -1px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* icon support */
 | 
			
		||||
.ui-menu-icons {
 | 
			
		||||
	position: relative;
 | 
			
		||||
}
 | 
			
		||||
.ui-menu-icons .ui-menu-item-wrapper {
 | 
			
		||||
	padding-left: 2em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* left-aligned */
 | 
			
		||||
.ui-menu .ui-icon {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	bottom: 0;
 | 
			
		||||
	left: .2em;
 | 
			
		||||
	margin: auto 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* right-aligned */
 | 
			
		||||
.ui-menu .ui-menu-icon {
 | 
			
		||||
	left: auto;
 | 
			
		||||
	right: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-button {
 | 
			
		||||
	padding: .4em 1em;
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	position: relative;
 | 
			
		||||
	line-height: normal;
 | 
			
		||||
	margin-right: .1em;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	vertical-align: middle;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
	-webkit-user-select: none;
 | 
			
		||||
	-moz-user-select: none;
 | 
			
		||||
	-ms-user-select: none;
 | 
			
		||||
	user-select: none;
 | 
			
		||||
 | 
			
		||||
	/* Support: IE <= 11 */
 | 
			
		||||
	overflow: visible;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ui-button,
 | 
			
		||||
.ui-button:link,
 | 
			
		||||
.ui-button:visited,
 | 
			
		||||
.ui-button:hover,
 | 
			
		||||
.ui-button:active {
 | 
			
		||||
	text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* to make room for the icon, a width needs to be set here */
 | 
			
		||||
.ui-button-icon-only {
 | 
			
		||||
	width: 2em;
 | 
			
		||||
	box-sizing: border-box;
 | 
			
		||||
	text-indent: -9999px;
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* no icon support for input elements */
 | 
			
		||||
input.ui-button.ui-button-icon-only {
 | 
			
		||||
	text-indent: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* button icon element(s) */
 | 
			
		||||
.ui-button-icon-only .ui-icon {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 50%;
 | 
			
		||||
	left: 50%;
 | 
			
		||||
	margin-top: -8px;
 | 
			
		||||
	margin-left: -8px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ui-button.ui-icon-notext .ui-icon {
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	width: 2.1em;
 | 
			
		||||
	height: 2.1em;
 | 
			
		||||
	text-indent: -9999px;
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
input.ui-button.ui-icon-notext .ui-icon {
 | 
			
		||||
	width: auto;
 | 
			
		||||
	height: auto;
 | 
			
		||||
	text-indent: 0;
 | 
			
		||||
	white-space: normal;
 | 
			
		||||
	padding: .4em 1em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* workarounds */
 | 
			
		||||
/* Support: Firefox 5 - 40 */
 | 
			
		||||
input.ui-button::-moz-focus-inner,
 | 
			
		||||
button.ui-button::-moz-focus-inner {
 | 
			
		||||
	border: 0;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup {
 | 
			
		||||
	vertical-align: middle;
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup > .ui-controlgroup-item {
 | 
			
		||||
	float: left;
 | 
			
		||||
	margin-left: 0;
 | 
			
		||||
	margin-right: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup > .ui-controlgroup-item:focus,
 | 
			
		||||
.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {
 | 
			
		||||
	z-index: 9999;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup-vertical > .ui-controlgroup-item {
 | 
			
		||||
	display: block;
 | 
			
		||||
	float: none;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	margin-top: 0;
 | 
			
		||||
	margin-bottom: 0;
 | 
			
		||||
	text-align: left;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup-vertical .ui-controlgroup-item {
 | 
			
		||||
	box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup .ui-controlgroup-label {
 | 
			
		||||
	padding: .4em 1em;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup .ui-controlgroup-label span {
 | 
			
		||||
	font-size: 80%;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {
 | 
			
		||||
	border-left: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {
 | 
			
		||||
	border-top: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {
 | 
			
		||||
	border-right: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {
 | 
			
		||||
	border-bottom: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Spinner specific style fixes */
 | 
			
		||||
.ui-controlgroup-vertical .ui-spinner-input {
 | 
			
		||||
 | 
			
		||||
	/* Support: IE8 only, Android < 4.4 only */
 | 
			
		||||
	width: 75%;
 | 
			
		||||
	width: calc( 100% - 2.4em );
 | 
			
		||||
}
 | 
			
		||||
.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {
 | 
			
		||||
	border-top-style: solid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ui-checkboxradio-label .ui-icon-background {
 | 
			
		||||
	box-shadow: inset 1px 1px 1px #ccc;
 | 
			
		||||
	border-radius: .12em;
 | 
			
		||||
	border: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-checkboxradio-radio-label .ui-icon-background {
 | 
			
		||||
	width: 16px;
 | 
			
		||||
	height: 16px;
 | 
			
		||||
	border-radius: 1em;
 | 
			
		||||
	overflow: visible;
 | 
			
		||||
	border: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,
 | 
			
		||||
.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {
 | 
			
		||||
	background-image: none;
 | 
			
		||||
	width: 8px;
 | 
			
		||||
	height: 8px;
 | 
			
		||||
	border-width: 4px;
 | 
			
		||||
	border-style: solid;
 | 
			
		||||
}
 | 
			
		||||
.ui-checkboxradio-disabled {
 | 
			
		||||
	pointer-events: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker {
 | 
			
		||||
	width: 17em;
 | 
			
		||||
	padding: .2em .2em 0;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-header {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	padding: .2em 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-prev,
 | 
			
		||||
.ui-datepicker .ui-datepicker-next {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 2px;
 | 
			
		||||
	width: 1.8em;
 | 
			
		||||
	height: 1.8em;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-prev-hover,
 | 
			
		||||
.ui-datepicker .ui-datepicker-next-hover {
 | 
			
		||||
	top: 1px;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-prev {
 | 
			
		||||
	left: 2px;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-next {
 | 
			
		||||
	right: 2px;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-prev-hover {
 | 
			
		||||
	left: 1px;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-next-hover {
 | 
			
		||||
	right: 1px;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-prev span,
 | 
			
		||||
.ui-datepicker .ui-datepicker-next span {
 | 
			
		||||
	display: block;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	left: 50%;
 | 
			
		||||
	margin-left: -8px;
 | 
			
		||||
	top: 50%;
 | 
			
		||||
	margin-top: -8px;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-title {
 | 
			
		||||
	margin: 0 2.3em;
 | 
			
		||||
	line-height: 1.8em;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-title select {
 | 
			
		||||
	font-size: 1em;
 | 
			
		||||
	margin: 1px 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker select.ui-datepicker-month,
 | 
			
		||||
.ui-datepicker select.ui-datepicker-year {
 | 
			
		||||
	width: 45%;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker table {
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	font-size: .9em;
 | 
			
		||||
	border-collapse: collapse;
 | 
			
		||||
	margin: 0 0 .4em;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker th {
 | 
			
		||||
	padding: .7em .3em;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
	font-weight: bold;
 | 
			
		||||
	border: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker td {
 | 
			
		||||
	border: 0;
 | 
			
		||||
	padding: 1px;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker td span,
 | 
			
		||||
.ui-datepicker td a {
 | 
			
		||||
	display: block;
 | 
			
		||||
	padding: .2em;
 | 
			
		||||
	text-align: right;
 | 
			
		||||
	text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-buttonpane {
 | 
			
		||||
	background-image: none;
 | 
			
		||||
	margin: .7em 0 0 0;
 | 
			
		||||
	padding: 0 .2em;
 | 
			
		||||
	border-left: 0;
 | 
			
		||||
	border-right: 0;
 | 
			
		||||
	border-bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-buttonpane button {
 | 
			
		||||
	float: right;
 | 
			
		||||
	margin: .5em .2em .4em;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
	padding: .2em .6em .3em .6em;
 | 
			
		||||
	width: auto;
 | 
			
		||||
	overflow: visible;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
 | 
			
		||||
	float: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* with multiple calendars */
 | 
			
		||||
.ui-datepicker.ui-datepicker-multi {
 | 
			
		||||
	width: auto;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-multi .ui-datepicker-group {
 | 
			
		||||
	float: left;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-multi .ui-datepicker-group table {
 | 
			
		||||
	width: 95%;
 | 
			
		||||
	margin: 0 auto .4em;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-multi-2 .ui-datepicker-group {
 | 
			
		||||
	width: 50%;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-multi-3 .ui-datepicker-group {
 | 
			
		||||
	width: 33.3%;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-multi-4 .ui-datepicker-group {
 | 
			
		||||
	width: 25%;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
 | 
			
		||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
 | 
			
		||||
	border-left-width: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-multi .ui-datepicker-buttonpane {
 | 
			
		||||
	clear: left;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-row-break {
 | 
			
		||||
	clear: both;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
	font-size: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* RTL support */
 | 
			
		||||
.ui-datepicker-rtl {
 | 
			
		||||
	direction: rtl;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-rtl .ui-datepicker-prev {
 | 
			
		||||
	right: 2px;
 | 
			
		||||
	left: auto;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-rtl .ui-datepicker-next {
 | 
			
		||||
	left: 2px;
 | 
			
		||||
	right: auto;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-rtl .ui-datepicker-prev:hover {
 | 
			
		||||
	right: 1px;
 | 
			
		||||
	left: auto;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-rtl .ui-datepicker-next:hover {
 | 
			
		||||
	left: 1px;
 | 
			
		||||
	right: auto;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-rtl .ui-datepicker-buttonpane {
 | 
			
		||||
	clear: right;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button {
 | 
			
		||||
	float: left;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
 | 
			
		||||
.ui-datepicker-rtl .ui-datepicker-group {
 | 
			
		||||
	float: right;
 | 
			
		||||
}
 | 
			
		||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
 | 
			
		||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
 | 
			
		||||
	border-right-width: 0;
 | 
			
		||||
	border-left-width: 1px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Icons */
 | 
			
		||||
.ui-datepicker .ui-icon {
 | 
			
		||||
	display: block;
 | 
			
		||||
	text-indent: -99999px;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	background-repeat: no-repeat;
 | 
			
		||||
	left: .5em;
 | 
			
		||||
	top: .3em;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	left: 0;
 | 
			
		||||
	padding: .2em;
 | 
			
		||||
	outline: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-dialog-titlebar {
 | 
			
		||||
	padding: .4em 1em;
 | 
			
		||||
	position: relative;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-dialog-title {
 | 
			
		||||
	float: left;
 | 
			
		||||
	margin: .1em 0;
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
	width: 90%;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	text-overflow: ellipsis;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-dialog-titlebar-close {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	right: .3em;
 | 
			
		||||
	top: 50%;
 | 
			
		||||
	width: 20px;
 | 
			
		||||
	margin: -10px 0 0 0;
 | 
			
		||||
	padding: 1px;
 | 
			
		||||
	height: 20px;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-dialog-content {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	border: 0;
 | 
			
		||||
	padding: .5em 1em;
 | 
			
		||||
	background: none;
 | 
			
		||||
	overflow: auto;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-dialog-buttonpane {
 | 
			
		||||
	text-align: left;
 | 
			
		||||
	border-width: 1px 0 0 0;
 | 
			
		||||
	background-image: none;
 | 
			
		||||
	margin-top: .5em;
 | 
			
		||||
	padding: .3em 1em .5em .4em;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
 | 
			
		||||
	float: right;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-dialog-buttonpane button {
 | 
			
		||||
	margin: .5em .4em .5em 0;
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-resizable-n {
 | 
			
		||||
	height: 2px;
 | 
			
		||||
	top: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-resizable-e {
 | 
			
		||||
	width: 2px;
 | 
			
		||||
	right: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-resizable-s {
 | 
			
		||||
	height: 2px;
 | 
			
		||||
	bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-resizable-w {
 | 
			
		||||
	width: 2px;
 | 
			
		||||
	left: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-resizable-se,
 | 
			
		||||
.ui-dialog .ui-resizable-sw,
 | 
			
		||||
.ui-dialog .ui-resizable-ne,
 | 
			
		||||
.ui-dialog .ui-resizable-nw {
 | 
			
		||||
	width: 7px;
 | 
			
		||||
	height: 7px;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-resizable-se {
 | 
			
		||||
	right: 0;
 | 
			
		||||
	bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-resizable-sw {
 | 
			
		||||
	left: 0;
 | 
			
		||||
	bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-resizable-ne {
 | 
			
		||||
	right: 0;
 | 
			
		||||
	top: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-dialog .ui-resizable-nw {
 | 
			
		||||
	left: 0;
 | 
			
		||||
	top: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-draggable .ui-dialog-titlebar {
 | 
			
		||||
	cursor: move;
 | 
			
		||||
}
 | 
			
		||||
.ui-progressbar {
 | 
			
		||||
	height: 2em;
 | 
			
		||||
	text-align: left;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
}
 | 
			
		||||
.ui-progressbar .ui-progressbar-value {
 | 
			
		||||
	margin: -1px;
 | 
			
		||||
	height: 100%;
 | 
			
		||||
}
 | 
			
		||||
.ui-progressbar .ui-progressbar-overlay {
 | 
			
		||||
	background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==");
 | 
			
		||||
	height: 100%;
 | 
			
		||||
	filter: alpha(opacity=25); /* support: IE8 */
 | 
			
		||||
	opacity: 0.25;
 | 
			
		||||
}
 | 
			
		||||
.ui-progressbar-indeterminate .ui-progressbar-value {
 | 
			
		||||
	background-image: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-selectmenu-menu {
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	left: 0;
 | 
			
		||||
	display: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-selectmenu-menu .ui-menu {
 | 
			
		||||
	overflow: auto;
 | 
			
		||||
	overflow-x: hidden;
 | 
			
		||||
	padding-bottom: 1px;
 | 
			
		||||
}
 | 
			
		||||
.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {
 | 
			
		||||
	font-size: 1em;
 | 
			
		||||
	font-weight: bold;
 | 
			
		||||
	line-height: 1.5;
 | 
			
		||||
	padding: 2px 0.4em;
 | 
			
		||||
	margin: 0.5em 0 0 0;
 | 
			
		||||
	height: auto;
 | 
			
		||||
	border: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-selectmenu-open {
 | 
			
		||||
	display: block;
 | 
			
		||||
}
 | 
			
		||||
.ui-selectmenu-text {
 | 
			
		||||
	display: block;
 | 
			
		||||
	margin-right: 20px;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	text-overflow: ellipsis;
 | 
			
		||||
}
 | 
			
		||||
.ui-selectmenu-button.ui-button {
 | 
			
		||||
	text-align: left;
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
	width: 14em;
 | 
			
		||||
}
 | 
			
		||||
.ui-selectmenu-icon.ui-icon {
 | 
			
		||||
	float: right;
 | 
			
		||||
	margin-top: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	text-align: left;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider .ui-slider-handle {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	z-index: 2;
 | 
			
		||||
	width: 1.2em;
 | 
			
		||||
	height: 1.2em;
 | 
			
		||||
	cursor: default;
 | 
			
		||||
	-ms-touch-action: none;
 | 
			
		||||
	touch-action: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider .ui-slider-range {
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	z-index: 1;
 | 
			
		||||
	font-size: .7em;
 | 
			
		||||
	display: block;
 | 
			
		||||
	border: 0;
 | 
			
		||||
	background-position: 0 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* support: IE8 - See #6727 */
 | 
			
		||||
.ui-slider.ui-state-disabled .ui-slider-handle,
 | 
			
		||||
.ui-slider.ui-state-disabled .ui-slider-range {
 | 
			
		||||
	filter: inherit;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ui-slider-horizontal {
 | 
			
		||||
	height: .8em;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider-horizontal .ui-slider-handle {
 | 
			
		||||
	top: -.3em;
 | 
			
		||||
	margin-left: -.6em;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider-horizontal .ui-slider-range {
 | 
			
		||||
	top: 0;
 | 
			
		||||
	height: 100%;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider-horizontal .ui-slider-range-min {
 | 
			
		||||
	left: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider-horizontal .ui-slider-range-max {
 | 
			
		||||
	right: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ui-slider-vertical {
 | 
			
		||||
	width: .8em;
 | 
			
		||||
	height: 100px;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider-vertical .ui-slider-handle {
 | 
			
		||||
	left: -.3em;
 | 
			
		||||
	margin-left: 0;
 | 
			
		||||
	margin-bottom: -.6em;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider-vertical .ui-slider-range {
 | 
			
		||||
	left: 0;
 | 
			
		||||
	width: 100%;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider-vertical .ui-slider-range-min {
 | 
			
		||||
	bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-slider-vertical .ui-slider-range-max {
 | 
			
		||||
	top: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-spinner {
 | 
			
		||||
	position: relative;
 | 
			
		||||
	display: inline-block;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	vertical-align: middle;
 | 
			
		||||
}
 | 
			
		||||
.ui-spinner-input {
 | 
			
		||||
	border: none;
 | 
			
		||||
	background: none;
 | 
			
		||||
	color: inherit;
 | 
			
		||||
	padding: .222em 0;
 | 
			
		||||
	margin: .2em 0;
 | 
			
		||||
	vertical-align: middle;
 | 
			
		||||
	margin-left: .4em;
 | 
			
		||||
	margin-right: 2em;
 | 
			
		||||
}
 | 
			
		||||
.ui-spinner-button {
 | 
			
		||||
	width: 1.6em;
 | 
			
		||||
	height: 50%;
 | 
			
		||||
	font-size: .5em;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	text-align: center;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	cursor: default;
 | 
			
		||||
	display: block;
 | 
			
		||||
	overflow: hidden;
 | 
			
		||||
	right: 0;
 | 
			
		||||
}
 | 
			
		||||
/* more specificity required here to override default borders */
 | 
			
		||||
.ui-spinner a.ui-spinner-button {
 | 
			
		||||
	border-top-style: none;
 | 
			
		||||
	border-bottom-style: none;
 | 
			
		||||
	border-right-style: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-spinner-up {
 | 
			
		||||
	top: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-spinner-down {
 | 
			
		||||
	bottom: 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-tabs {
 | 
			
		||||
	position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */
 | 
			
		||||
	padding: .2em;
 | 
			
		||||
}
 | 
			
		||||
.ui-tabs .ui-tabs-nav {
 | 
			
		||||
	margin: 0;
 | 
			
		||||
	padding: .2em .2em 0;
 | 
			
		||||
}
 | 
			
		||||
.ui-tabs .ui-tabs-nav li {
 | 
			
		||||
	list-style: none;
 | 
			
		||||
	float: left;
 | 
			
		||||
	position: relative;
 | 
			
		||||
	top: 0;
 | 
			
		||||
	margin: 1px .2em 0 0;
 | 
			
		||||
	border-bottom-width: 0;
 | 
			
		||||
	padding: 0;
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
.ui-tabs .ui-tabs-nav .ui-tabs-anchor {
 | 
			
		||||
	float: left;
 | 
			
		||||
	padding: .5em 1em;
 | 
			
		||||
	text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-tabs .ui-tabs-nav li.ui-tabs-active {
 | 
			
		||||
	margin-bottom: -1px;
 | 
			
		||||
	padding-bottom: 1px;
 | 
			
		||||
}
 | 
			
		||||
.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,
 | 
			
		||||
.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,
 | 
			
		||||
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {
 | 
			
		||||
	cursor: text;
 | 
			
		||||
}
 | 
			
		||||
.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {
 | 
			
		||||
	cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
.ui-tabs .ui-tabs-panel {
 | 
			
		||||
	display: block;
 | 
			
		||||
	border-width: 0;
 | 
			
		||||
	padding: 1em 1.4em;
 | 
			
		||||
	background: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-tooltip {
 | 
			
		||||
	padding: 8px;
 | 
			
		||||
	position: absolute;
 | 
			
		||||
	z-index: 9999;
 | 
			
		||||
	max-width: 300px;
 | 
			
		||||
}
 | 
			
		||||
body .ui-tooltip {
 | 
			
		||||
	border-width: 2px;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								src/jqueryui1.12/jquery-ui.structure.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										443
									
								
								src/jqueryui1.12/jquery-ui.theme.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,443 @@
 | 
			
		||||
/*!
 | 
			
		||||
 * jQuery UI CSS Framework 1.12.1
 | 
			
		||||
 * http://jqueryui.com
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright jQuery Foundation and other contributors
 | 
			
		||||
 * Released under the MIT license.
 | 
			
		||||
 * http://jquery.org/license
 | 
			
		||||
 *
 | 
			
		||||
 * http://api.jqueryui.com/category/theming/
 | 
			
		||||
 *
 | 
			
		||||
 * To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=custom-theme&bgImgOpacityError=55&bgImgOpacityHighlight=55&bgImgOpacityActive=75&bgImgOpacityHover=100&bgImgOpacityDefault=60&bgImgOpacityContent=50&bgImgOpacityHeader=35&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Component containers
 | 
			
		||||
----------------------------------*/
 | 
			
		||||
.ui-widget {
 | 
			
		||||
	font-family: Arial,Helvetica,sans-serif;
 | 
			
		||||
	font-size: 1em;
 | 
			
		||||
}
 | 
			
		||||
.ui-widget .ui-widget {
 | 
			
		||||
	font-size: 1em;
 | 
			
		||||
}
 | 
			
		||||
.ui-widget input,
 | 
			
		||||
.ui-widget select,
 | 
			
		||||
.ui-widget textarea,
 | 
			
		||||
.ui-widget button {
 | 
			
		||||
	font-family: Arial,Helvetica,sans-serif;
 | 
			
		||||
	font-size: 1em;
 | 
			
		||||
}
 | 
			
		||||
.ui-widget.ui-widget-content {
 | 
			
		||||
	border: 1px solid #c5c5c5;
 | 
			
		||||
}
 | 
			
		||||
.ui-widget-content {
 | 
			
		||||
	border: 1px solid #dddddd;
 | 
			
		||||
	background: #ffffff;
 | 
			
		||||
	color: #333333;
 | 
			
		||||
}
 | 
			
		||||
.ui-widget-content a {
 | 
			
		||||
	color: #333333;
 | 
			
		||||
}
 | 
			
		||||
.ui-widget-header {
 | 
			
		||||
	border: 1px solid #dddddd;
 | 
			
		||||
	background: #e9e9e9;
 | 
			
		||||
	color: #333333;
 | 
			
		||||
	font-weight: bold;
 | 
			
		||||
}
 | 
			
		||||
.ui-widget-header a {
 | 
			
		||||
	color: #333333;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Interaction states
 | 
			
		||||
----------------------------------*/
 | 
			
		||||
.ui-state-default,
 | 
			
		||||
.ui-widget-content .ui-state-default,
 | 
			
		||||
.ui-widget-header .ui-state-default,
 | 
			
		||||
.ui-button,
 | 
			
		||||
 | 
			
		||||
/* We use html here because we need a greater specificity to make sure disabled
 | 
			
		||||
works properly when clicked or hovered */
 | 
			
		||||
html .ui-button.ui-state-disabled:hover,
 | 
			
		||||
html .ui-button.ui-state-disabled:active {
 | 
			
		||||
	border: 1px solid #c5c5c5;
 | 
			
		||||
	background: #f6f6f6;
 | 
			
		||||
	font-weight: normal;
 | 
			
		||||
	color: #454545;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-default a,
 | 
			
		||||
.ui-state-default a:link,
 | 
			
		||||
.ui-state-default a:visited,
 | 
			
		||||
a.ui-button,
 | 
			
		||||
a:link.ui-button,
 | 
			
		||||
a:visited.ui-button,
 | 
			
		||||
.ui-button {
 | 
			
		||||
	color: #454545;
 | 
			
		||||
	text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-hover,
 | 
			
		||||
.ui-widget-content .ui-state-hover,
 | 
			
		||||
.ui-widget-header .ui-state-hover,
 | 
			
		||||
.ui-state-focus,
 | 
			
		||||
.ui-widget-content .ui-state-focus,
 | 
			
		||||
.ui-widget-header .ui-state-focus,
 | 
			
		||||
.ui-button:hover,
 | 
			
		||||
.ui-button:focus {
 | 
			
		||||
	border: 1px solid #cccccc;
 | 
			
		||||
	background: #ededed;
 | 
			
		||||
	font-weight: normal;
 | 
			
		||||
	color: #2b2b2b;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-hover a,
 | 
			
		||||
.ui-state-hover a:hover,
 | 
			
		||||
.ui-state-hover a:link,
 | 
			
		||||
.ui-state-hover a:visited,
 | 
			
		||||
.ui-state-focus a,
 | 
			
		||||
.ui-state-focus a:hover,
 | 
			
		||||
.ui-state-focus a:link,
 | 
			
		||||
.ui-state-focus a:visited,
 | 
			
		||||
a.ui-button:hover,
 | 
			
		||||
a.ui-button:focus {
 | 
			
		||||
	color: #2b2b2b;
 | 
			
		||||
	text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.ui-visual-focus {
 | 
			
		||||
	box-shadow: 0 0 3px 1px rgb(94, 158, 214);
 | 
			
		||||
}
 | 
			
		||||
.ui-state-active,
 | 
			
		||||
.ui-widget-content .ui-state-active,
 | 
			
		||||
.ui-widget-header .ui-state-active,
 | 
			
		||||
a.ui-button:active,
 | 
			
		||||
.ui-button:active,
 | 
			
		||||
.ui-button.ui-state-active:hover {
 | 
			
		||||
	border: 1px solid #003eff;
 | 
			
		||||
	background: #007fff;
 | 
			
		||||
	font-weight: normal;
 | 
			
		||||
	color: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
.ui-icon-background,
 | 
			
		||||
.ui-state-active .ui-icon-background {
 | 
			
		||||
	border: #003eff;
 | 
			
		||||
	background-color: #ffffff;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-active a,
 | 
			
		||||
.ui-state-active a:link,
 | 
			
		||||
.ui-state-active a:visited {
 | 
			
		||||
	color: #ffffff;
 | 
			
		||||
	text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Interaction Cues
 | 
			
		||||
----------------------------------*/
 | 
			
		||||
.ui-state-highlight,
 | 
			
		||||
.ui-widget-content .ui-state-highlight,
 | 
			
		||||
.ui-widget-header .ui-state-highlight {
 | 
			
		||||
	border: 1px solid #dad55e;
 | 
			
		||||
	background: #fffa90;
 | 
			
		||||
	color: #777620;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-checked {
 | 
			
		||||
	border: 1px solid #dad55e;
 | 
			
		||||
	background: #fffa90;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-highlight a,
 | 
			
		||||
.ui-widget-content .ui-state-highlight a,
 | 
			
		||||
.ui-widget-header .ui-state-highlight a {
 | 
			
		||||
	color: #777620;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-error,
 | 
			
		||||
.ui-widget-content .ui-state-error,
 | 
			
		||||
.ui-widget-header .ui-state-error {
 | 
			
		||||
	border: 1px solid #f1a899;
 | 
			
		||||
	background: #fddfdf;
 | 
			
		||||
	color: #5f3f3f;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-error a,
 | 
			
		||||
.ui-widget-content .ui-state-error a,
 | 
			
		||||
.ui-widget-header .ui-state-error a {
 | 
			
		||||
	color: #5f3f3f;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-error-text,
 | 
			
		||||
.ui-widget-content .ui-state-error-text,
 | 
			
		||||
.ui-widget-header .ui-state-error-text {
 | 
			
		||||
	color: #5f3f3f;
 | 
			
		||||
}
 | 
			
		||||
.ui-priority-primary,
 | 
			
		||||
.ui-widget-content .ui-priority-primary,
 | 
			
		||||
.ui-widget-header .ui-priority-primary {
 | 
			
		||||
	font-weight: bold;
 | 
			
		||||
}
 | 
			
		||||
.ui-priority-secondary,
 | 
			
		||||
.ui-widget-content .ui-priority-secondary,
 | 
			
		||||
.ui-widget-header .ui-priority-secondary {
 | 
			
		||||
	opacity: .7;
 | 
			
		||||
	filter:Alpha(Opacity=70); /* support: IE8 */
 | 
			
		||||
	font-weight: normal;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-disabled,
 | 
			
		||||
.ui-widget-content .ui-state-disabled,
 | 
			
		||||
.ui-widget-header .ui-state-disabled {
 | 
			
		||||
	opacity: .35;
 | 
			
		||||
	filter:Alpha(Opacity=35); /* support: IE8 */
 | 
			
		||||
	background-image: none;
 | 
			
		||||
}
 | 
			
		||||
.ui-state-disabled .ui-icon {
 | 
			
		||||
	filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Icons
 | 
			
		||||
----------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* states and images */
 | 
			
		||||
.ui-icon {
 | 
			
		||||
	width: 16px;
 | 
			
		||||
	height: 16px;
 | 
			
		||||
}
 | 
			
		||||
.ui-icon,
 | 
			
		||||
.ui-widget-content .ui-icon {
 | 
			
		||||
	background-image: url("images/ui-icons_444444_256x240.png");
 | 
			
		||||
}
 | 
			
		||||
.ui-widget-header .ui-icon {
 | 
			
		||||
	background-image: url("images/ui-icons_444444_256x240.png");
 | 
			
		||||
}
 | 
			
		||||
.ui-state-hover .ui-icon,
 | 
			
		||||
.ui-state-focus .ui-icon,
 | 
			
		||||
.ui-button:hover .ui-icon,
 | 
			
		||||
.ui-button:focus .ui-icon {
 | 
			
		||||
	background-image: url("images/ui-icons_555555_256x240.png");
 | 
			
		||||
}
 | 
			
		||||
.ui-state-active .ui-icon,
 | 
			
		||||
.ui-button:active .ui-icon {
 | 
			
		||||
	background-image: url("images/ui-icons_ffffff_256x240.png");
 | 
			
		||||
}
 | 
			
		||||
.ui-state-highlight .ui-icon,
 | 
			
		||||
.ui-button .ui-state-highlight.ui-icon {
 | 
			
		||||
	background-image: url("images/ui-icons_777620_256x240.png");
 | 
			
		||||
}
 | 
			
		||||
.ui-state-error .ui-icon,
 | 
			
		||||
.ui-state-error-text .ui-icon {
 | 
			
		||||
	background-image: url("images/ui-icons_cc0000_256x240.png");
 | 
			
		||||
}
 | 
			
		||||
.ui-button .ui-icon {
 | 
			
		||||
	background-image: url("images/ui-icons_777777_256x240.png");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* positioning */
 | 
			
		||||
.ui-icon-blank { background-position: 16px 16px; }
 | 
			
		||||
.ui-icon-caret-1-n { background-position: 0 0; }
 | 
			
		||||
.ui-icon-caret-1-ne { background-position: -16px 0; }
 | 
			
		||||
.ui-icon-caret-1-e { background-position: -32px 0; }
 | 
			
		||||
.ui-icon-caret-1-se { background-position: -48px 0; }
 | 
			
		||||
.ui-icon-caret-1-s { background-position: -65px 0; }
 | 
			
		||||
.ui-icon-caret-1-sw { background-position: -80px 0; }
 | 
			
		||||
.ui-icon-caret-1-w { background-position: -96px 0; }
 | 
			
		||||
.ui-icon-caret-1-nw { background-position: -112px 0; }
 | 
			
		||||
.ui-icon-caret-2-n-s { background-position: -128px 0; }
 | 
			
		||||
.ui-icon-caret-2-e-w { background-position: -144px 0; }
 | 
			
		||||
.ui-icon-triangle-1-n { background-position: 0 -16px; }
 | 
			
		||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
 | 
			
		||||
.ui-icon-triangle-1-e { background-position: -32px -16px; }
 | 
			
		||||
.ui-icon-triangle-1-se { background-position: -48px -16px; }
 | 
			
		||||
.ui-icon-triangle-1-s { background-position: -65px -16px; }
 | 
			
		||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
 | 
			
		||||
.ui-icon-triangle-1-w { background-position: -96px -16px; }
 | 
			
		||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
 | 
			
		||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
 | 
			
		||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
 | 
			
		||||
.ui-icon-arrow-1-n { background-position: 0 -32px; }
 | 
			
		||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
 | 
			
		||||
.ui-icon-arrow-1-e { background-position: -32px -32px; }
 | 
			
		||||
.ui-icon-arrow-1-se { background-position: -48px -32px; }
 | 
			
		||||
.ui-icon-arrow-1-s { background-position: -65px -32px; }
 | 
			
		||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
 | 
			
		||||
.ui-icon-arrow-1-w { background-position: -96px -32px; }
 | 
			
		||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
 | 
			
		||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
 | 
			
		||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
 | 
			
		||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
 | 
			
		||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
 | 
			
		||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
 | 
			
		||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
 | 
			
		||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
 | 
			
		||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
 | 
			
		||||
.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
 | 
			
		||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
 | 
			
		||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
 | 
			
		||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
 | 
			
		||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
 | 
			
		||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
 | 
			
		||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
 | 
			
		||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
 | 
			
		||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
 | 
			
		||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
 | 
			
		||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
 | 
			
		||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
 | 
			
		||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
 | 
			
		||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
 | 
			
		||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
 | 
			
		||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
 | 
			
		||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
 | 
			
		||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
 | 
			
		||||
.ui-icon-arrow-4 { background-position: 0 -80px; }
 | 
			
		||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
 | 
			
		||||
.ui-icon-extlink { background-position: -32px -80px; }
 | 
			
		||||
.ui-icon-newwin { background-position: -48px -80px; }
 | 
			
		||||
.ui-icon-refresh { background-position: -64px -80px; }
 | 
			
		||||
.ui-icon-shuffle { background-position: -80px -80px; }
 | 
			
		||||
.ui-icon-transfer-e-w { background-position: -96px -80px; }
 | 
			
		||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
 | 
			
		||||
.ui-icon-folder-collapsed { background-position: 0 -96px; }
 | 
			
		||||
.ui-icon-folder-open { background-position: -16px -96px; }
 | 
			
		||||
.ui-icon-document { background-position: -32px -96px; }
 | 
			
		||||
.ui-icon-document-b { background-position: -48px -96px; }
 | 
			
		||||
.ui-icon-note { background-position: -64px -96px; }
 | 
			
		||||
.ui-icon-mail-closed { background-position: -80px -96px; }
 | 
			
		||||
.ui-icon-mail-open { background-position: -96px -96px; }
 | 
			
		||||
.ui-icon-suitcase { background-position: -112px -96px; }
 | 
			
		||||
.ui-icon-comment { background-position: -128px -96px; }
 | 
			
		||||
.ui-icon-person { background-position: -144px -96px; }
 | 
			
		||||
.ui-icon-print { background-position: -160px -96px; }
 | 
			
		||||
.ui-icon-trash { background-position: -176px -96px; }
 | 
			
		||||
.ui-icon-locked { background-position: -192px -96px; }
 | 
			
		||||
.ui-icon-unlocked { background-position: -208px -96px; }
 | 
			
		||||
.ui-icon-bookmark { background-position: -224px -96px; }
 | 
			
		||||
.ui-icon-tag { background-position: -240px -96px; }
 | 
			
		||||
.ui-icon-home { background-position: 0 -112px; }
 | 
			
		||||
.ui-icon-flag { background-position: -16px -112px; }
 | 
			
		||||
.ui-icon-calendar { background-position: -32px -112px; }
 | 
			
		||||
.ui-icon-cart { background-position: -48px -112px; }
 | 
			
		||||
.ui-icon-pencil { background-position: -64px -112px; }
 | 
			
		||||
.ui-icon-clock { background-position: -80px -112px; }
 | 
			
		||||
.ui-icon-disk { background-position: -96px -112px; }
 | 
			
		||||
.ui-icon-calculator { background-position: -112px -112px; }
 | 
			
		||||
.ui-icon-zoomin { background-position: -128px -112px; }
 | 
			
		||||
.ui-icon-zoomout { background-position: -144px -112px; }
 | 
			
		||||
.ui-icon-search { background-position: -160px -112px; }
 | 
			
		||||
.ui-icon-wrench { background-position: -176px -112px; }
 | 
			
		||||
.ui-icon-gear { background-position: -192px -112px; }
 | 
			
		||||
.ui-icon-heart { background-position: -208px -112px; }
 | 
			
		||||
.ui-icon-star { background-position: -224px -112px; }
 | 
			
		||||
.ui-icon-link { background-position: -240px -112px; }
 | 
			
		||||
.ui-icon-cancel { background-position: 0 -128px; }
 | 
			
		||||
.ui-icon-plus { background-position: -16px -128px; }
 | 
			
		||||
.ui-icon-plusthick { background-position: -32px -128px; }
 | 
			
		||||
.ui-icon-minus { background-position: -48px -128px; }
 | 
			
		||||
.ui-icon-minusthick { background-position: -64px -128px; }
 | 
			
		||||
.ui-icon-close { background-position: -80px -128px; }
 | 
			
		||||
.ui-icon-closethick { background-position: -96px -128px; }
 | 
			
		||||
.ui-icon-key { background-position: -112px -128px; }
 | 
			
		||||
.ui-icon-lightbulb { background-position: -128px -128px; }
 | 
			
		||||
.ui-icon-scissors { background-position: -144px -128px; }
 | 
			
		||||
.ui-icon-clipboard { background-position: -160px -128px; }
 | 
			
		||||
.ui-icon-copy { background-position: -176px -128px; }
 | 
			
		||||
.ui-icon-contact { background-position: -192px -128px; }
 | 
			
		||||
.ui-icon-image { background-position: -208px -128px; }
 | 
			
		||||
.ui-icon-video { background-position: -224px -128px; }
 | 
			
		||||
.ui-icon-script { background-position: -240px -128px; }
 | 
			
		||||
.ui-icon-alert { background-position: 0 -144px; }
 | 
			
		||||
.ui-icon-info { background-position: -16px -144px; }
 | 
			
		||||
.ui-icon-notice { background-position: -32px -144px; }
 | 
			
		||||
.ui-icon-help { background-position: -48px -144px; }
 | 
			
		||||
.ui-icon-check { background-position: -64px -144px; }
 | 
			
		||||
.ui-icon-bullet { background-position: -80px -144px; }
 | 
			
		||||
.ui-icon-radio-on { background-position: -96px -144px; }
 | 
			
		||||
.ui-icon-radio-off { background-position: -112px -144px; }
 | 
			
		||||
.ui-icon-pin-w { background-position: -128px -144px; }
 | 
			
		||||
.ui-icon-pin-s { background-position: -144px -144px; }
 | 
			
		||||
.ui-icon-play { background-position: 0 -160px; }
 | 
			
		||||
.ui-icon-pause { background-position: -16px -160px; }
 | 
			
		||||
.ui-icon-seek-next { background-position: -32px -160px; }
 | 
			
		||||
.ui-icon-seek-prev { background-position: -48px -160px; }
 | 
			
		||||
.ui-icon-seek-end { background-position: -64px -160px; }
 | 
			
		||||
.ui-icon-seek-start { background-position: -80px -160px; }
 | 
			
		||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
 | 
			
		||||
.ui-icon-seek-first { background-position: -80px -160px; }
 | 
			
		||||
.ui-icon-stop { background-position: -96px -160px; }
 | 
			
		||||
.ui-icon-eject { background-position: -112px -160px; }
 | 
			
		||||
.ui-icon-volume-off { background-position: -128px -160px; }
 | 
			
		||||
.ui-icon-volume-on { background-position: -144px -160px; }
 | 
			
		||||
.ui-icon-power { background-position: 0 -176px; }
 | 
			
		||||
.ui-icon-signal-diag { background-position: -16px -176px; }
 | 
			
		||||
.ui-icon-signal { background-position: -32px -176px; }
 | 
			
		||||
.ui-icon-battery-0 { background-position: -48px -176px; }
 | 
			
		||||
.ui-icon-battery-1 { background-position: -64px -176px; }
 | 
			
		||||
.ui-icon-battery-2 { background-position: -80px -176px; }
 | 
			
		||||
.ui-icon-battery-3 { background-position: -96px -176px; }
 | 
			
		||||
.ui-icon-circle-plus { background-position: 0 -192px; }
 | 
			
		||||
.ui-icon-circle-minus { background-position: -16px -192px; }
 | 
			
		||||
.ui-icon-circle-close { background-position: -32px -192px; }
 | 
			
		||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
 | 
			
		||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
 | 
			
		||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
 | 
			
		||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
 | 
			
		||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
 | 
			
		||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
 | 
			
		||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
 | 
			
		||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
 | 
			
		||||
.ui-icon-circle-zoomin { background-position: -176px -192px; }
 | 
			
		||||
.ui-icon-circle-zoomout { background-position: -192px -192px; }
 | 
			
		||||
.ui-icon-circle-check { background-position: -208px -192px; }
 | 
			
		||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
 | 
			
		||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
 | 
			
		||||
.ui-icon-circlesmall-close { background-position: -32px -208px; }
 | 
			
		||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
 | 
			
		||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
 | 
			
		||||
.ui-icon-squaresmall-close { background-position: -80px -208px; }
 | 
			
		||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
 | 
			
		||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
 | 
			
		||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
 | 
			
		||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
 | 
			
		||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
 | 
			
		||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* Misc visuals
 | 
			
		||||
----------------------------------*/
 | 
			
		||||
 | 
			
		||||
/* Corner radius */
 | 
			
		||||
.ui-corner-all,
 | 
			
		||||
.ui-corner-top,
 | 
			
		||||
.ui-corner-left,
 | 
			
		||||
.ui-corner-tl {
 | 
			
		||||
	border-top-left-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
.ui-corner-all,
 | 
			
		||||
.ui-corner-top,
 | 
			
		||||
.ui-corner-right,
 | 
			
		||||
.ui-corner-tr {
 | 
			
		||||
	border-top-right-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
.ui-corner-all,
 | 
			
		||||
.ui-corner-bottom,
 | 
			
		||||
.ui-corner-left,
 | 
			
		||||
.ui-corner-bl {
 | 
			
		||||
	border-bottom-left-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
.ui-corner-all,
 | 
			
		||||
.ui-corner-bottom,
 | 
			
		||||
.ui-corner-right,
 | 
			
		||||
.ui-corner-br {
 | 
			
		||||
	border-bottom-right-radius: 3px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Overlays */
 | 
			
		||||
.ui-widget-overlay {
 | 
			
		||||
	background: #aaaaaa;
 | 
			
		||||
	opacity: .3;
 | 
			
		||||
	filter: Alpha(Opacity=30); /* support: IE8 */
 | 
			
		||||
}
 | 
			
		||||
.ui-widget-shadow {
 | 
			
		||||
	-webkit-box-shadow: 0px 0px 5px #666666;
 | 
			
		||||
	box-shadow: 0px 0px 5px #666666;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								src/jqueryui1.12/jquery-ui.theme.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										309
									
								
								src/jqueryui1.12/jquery.contextMenu.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,309 @@
 | 
			
		||||
@charset "UTF-8";
 | 
			
		||||
/*!
 | 
			
		||||
 * jQuery contextMenu - Plugin for simple contextMenu handling
 | 
			
		||||
 *
 | 
			
		||||
 * Version: v2.7.0
 | 
			
		||||
 *
 | 
			
		||||
 * Authors: Björn Brala (SWIS.nl), Rodney Rehm, Addy Osmani (patches for FF)
 | 
			
		||||
 * Web: http://swisnl.github.io/jQuery-contextMenu/
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright (c) 2011-2018 SWIS BV and contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under
 | 
			
		||||
 *   MIT License http://www.opensource.org/licenses/mit-license
 | 
			
		||||
 *
 | 
			
		||||
 * Date: 2018-07-12T09:06:55.859Z
 | 
			
		||||
 */
 | 
			
		||||
@-webkit-keyframes cm-spin {
 | 
			
		||||
  0% {
 | 
			
		||||
    -webkit-transform: translateY(-50%) rotate(0deg);
 | 
			
		||||
            transform: translateY(-50%) rotate(0deg);
 | 
			
		||||
  }
 | 
			
		||||
  100% {
 | 
			
		||||
    -webkit-transform: translateY(-50%) rotate(359deg);
 | 
			
		||||
            transform: translateY(-50%) rotate(359deg);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@-o-keyframes cm-spin {
 | 
			
		||||
  0% {
 | 
			
		||||
    -webkit-transform: translateY(-50%) rotate(0deg);
 | 
			
		||||
         -o-transform: translateY(-50%) rotate(0deg);
 | 
			
		||||
            transform: translateY(-50%) rotate(0deg);
 | 
			
		||||
  }
 | 
			
		||||
  100% {
 | 
			
		||||
    -webkit-transform: translateY(-50%) rotate(359deg);
 | 
			
		||||
         -o-transform: translateY(-50%) rotate(359deg);
 | 
			
		||||
            transform: translateY(-50%) rotate(359deg);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@keyframes cm-spin {
 | 
			
		||||
  0% {
 | 
			
		||||
    -webkit-transform: translateY(-50%) rotate(0deg);
 | 
			
		||||
         -o-transform: translateY(-50%) rotate(0deg);
 | 
			
		||||
            transform: translateY(-50%) rotate(0deg);
 | 
			
		||||
  }
 | 
			
		||||
  100% {
 | 
			
		||||
    -webkit-transform: translateY(-50%) rotate(359deg);
 | 
			
		||||
         -o-transform: translateY(-50%) rotate(359deg);
 | 
			
		||||
            transform: translateY(-50%) rotate(359deg);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@font-face {
 | 
			
		||||
  font-family: "context-menu-icons";
 | 
			
		||||
  font-style: normal; 
 | 
			
		||||
  font-weight: normal;
 | 
			
		||||
 | 
			
		||||
  src: url("font/context-menu-icons.eot?36hmp");
 | 
			
		||||
  src: url("font/context-menu-icons.eot?36hmp#iefix") format("embedded-opentype"), url("font/context-menu-icons.woff2?36hmp") format("woff2"), url("font/context-menu-icons.woff?36hmp") format("woff"), url("font/context-menu-icons.ttf?36hmp") format("truetype");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon-add:before {
 | 
			
		||||
  content: "\EA01";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon-copy:before {
 | 
			
		||||
  content: "\EA02";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon-cut:before {
 | 
			
		||||
  content: "\EA03";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon-delete:before {
 | 
			
		||||
  content: "\EA04";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon-edit:before {
 | 
			
		||||
  content: "\EA05";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon-loading:before {
 | 
			
		||||
  content: "\EA06";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon-paste:before {
 | 
			
		||||
  content: "\EA07";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon-quit:before {
 | 
			
		||||
  content: "\EA08";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon::before {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 50%;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  width: 2em; 
 | 
			
		||||
  font-family: "context-menu-icons";
 | 
			
		||||
  font-size: 1em;
 | 
			
		||||
  font-style: normal;
 | 
			
		||||
  font-weight: normal;
 | 
			
		||||
  line-height: 1;
 | 
			
		||||
  color: #2980b9;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  -webkit-transform: translateY(-50%);
 | 
			
		||||
      -ms-transform: translateY(-50%);
 | 
			
		||||
       -o-transform: translateY(-50%);
 | 
			
		||||
          transform: translateY(-50%);
 | 
			
		||||
 | 
			
		||||
  -webkit-font-smoothing: antialiased;
 | 
			
		||||
  -moz-osx-font-smoothing: grayscale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon.context-menu-hover:before {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon.context-menu-disabled::before {
 | 
			
		||||
  color: #bbb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon.context-menu-icon-loading:before {
 | 
			
		||||
  -webkit-animation: cm-spin 2s infinite;
 | 
			
		||||
       -o-animation: cm-spin 2s infinite;
 | 
			
		||||
          animation: cm-spin 2s infinite;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon.context-menu-icon--fa {
 | 
			
		||||
  display: list-item;
 | 
			
		||||
  font-family: inherit;
 | 
			
		||||
  line-height: inherit;
 | 
			
		||||
}
 | 
			
		||||
.context-menu-icon.context-menu-icon--fa::before {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 50%;
 | 
			
		||||
  left: 0;
 | 
			
		||||
  width: 2em; 
 | 
			
		||||
  font-family: FontAwesome;
 | 
			
		||||
  font-size: 1em;
 | 
			
		||||
  font-style: normal;
 | 
			
		||||
  font-weight: normal;
 | 
			
		||||
  line-height: 1;
 | 
			
		||||
  color: #2980b9;
 | 
			
		||||
  text-align: center;
 | 
			
		||||
  -webkit-transform: translateY(-50%);
 | 
			
		||||
      -ms-transform: translateY(-50%);
 | 
			
		||||
       -o-transform: translateY(-50%);
 | 
			
		||||
          transform: translateY(-50%);
 | 
			
		||||
 | 
			
		||||
  -webkit-font-smoothing: antialiased;
 | 
			
		||||
  -moz-osx-font-smoothing: grayscale;
 | 
			
		||||
}
 | 
			
		||||
.context-menu-icon.context-menu-icon--fa.context-menu-hover:before {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
}
 | 
			
		||||
.context-menu-icon.context-menu-icon--fa.context-menu-disabled::before {
 | 
			
		||||
  color: #bbb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-icon.context-menu-icon--fa5 {
 | 
			
		||||
  display: list-item;
 | 
			
		||||
  font-family: inherit;
 | 
			
		||||
  line-height: inherit;
 | 
			
		||||
}
 | 
			
		||||
.context-menu-icon.context-menu-icon--fa5 i, .context-menu-icon.context-menu-icon--fa5 svg {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: .3em; 
 | 
			
		||||
  left: .5em;
 | 
			
		||||
  color: #2980b9;
 | 
			
		||||
}
 | 
			
		||||
.context-menu-icon.context-menu-icon--fa5.context-menu-hover i, .context-menu-icon.context-menu-icon--fa5.context-menu-hover svg {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
}
 | 
			
		||||
.context-menu-icon.context-menu-icon--fa5.context-menu-disabled i, .context-menu-icon.context-menu-icon--fa5.context-menu-disabled svg {
 | 
			
		||||
  color: #bbb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-list {
 | 
			
		||||
  position: absolute; 
 | 
			
		||||
  display: inline-block;
 | 
			
		||||
  min-width: 13em;
 | 
			
		||||
  max-width: 26em;
 | 
			
		||||
  padding: .25em 0;
 | 
			
		||||
  margin: .3em;
 | 
			
		||||
  font-family: inherit;
 | 
			
		||||
  font-size: inherit;
 | 
			
		||||
  list-style-type: none;
 | 
			
		||||
  background: #fff;
 | 
			
		||||
  border: 1px solid #bebebe;
 | 
			
		||||
  border-radius: .2em;
 | 
			
		||||
  -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, .5);
 | 
			
		||||
          box-shadow: 0 2px 5px rgba(0, 0, 0, .5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-item {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  -webkit-box-sizing: content-box;
 | 
			
		||||
     -moz-box-sizing: content-box;
 | 
			
		||||
          box-sizing: content-box;
 | 
			
		||||
  padding: .2em 2em;
 | 
			
		||||
  color: #2f2f2f;
 | 
			
		||||
  -webkit-user-select: none;
 | 
			
		||||
     -moz-user-select: none;
 | 
			
		||||
      -ms-user-select: none;
 | 
			
		||||
          user-select: none; 
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-separator {
 | 
			
		||||
  padding: 0; 
 | 
			
		||||
  margin: .35em 0;
 | 
			
		||||
  border-bottom: 1px solid #e6e6e6;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-item > label > input,
 | 
			
		||||
.context-menu-item > label > textarea {
 | 
			
		||||
  -webkit-user-select: text;
 | 
			
		||||
     -moz-user-select: text;
 | 
			
		||||
      -ms-user-select: text;
 | 
			
		||||
          user-select: text;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-item.context-menu-hover {
 | 
			
		||||
  color: #fff;
 | 
			
		||||
  cursor: pointer; 
 | 
			
		||||
  background-color: #2980b9;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-item.context-menu-disabled {
 | 
			
		||||
  color: #bbb;
 | 
			
		||||
  cursor: default; 
 | 
			
		||||
  background-color: #fff;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-input.context-menu-hover {
 | 
			
		||||
  color: #2f2f2f; 
 | 
			
		||||
  cursor: default;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-submenu:after {
 | 
			
		||||
  position: absolute;
 | 
			
		||||
  top: 50%;
 | 
			
		||||
  right: .5em;
 | 
			
		||||
  z-index: 1; 
 | 
			
		||||
  width: 0;
 | 
			
		||||
  height: 0;
 | 
			
		||||
  content: '';
 | 
			
		||||
  border-color: transparent transparent transparent #2f2f2f;
 | 
			
		||||
  border-style: solid;
 | 
			
		||||
  border-width: .25em 0 .25em .25em;
 | 
			
		||||
  -webkit-transform: translateY(-50%);
 | 
			
		||||
      -ms-transform: translateY(-50%);
 | 
			
		||||
       -o-transform: translateY(-50%);
 | 
			
		||||
          transform: translateY(-50%);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Inputs
 | 
			
		||||
 */
 | 
			
		||||
.context-menu-item.context-menu-input {
 | 
			
		||||
  padding: .3em .6em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* vertically align inside labels */
 | 
			
		||||
.context-menu-input > label > * {
 | 
			
		||||
  vertical-align: top;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* position checkboxes and radios as icons */
 | 
			
		||||
.context-menu-input > label > input[type="checkbox"],
 | 
			
		||||
.context-menu-input > label > input[type="radio"] {
 | 
			
		||||
  position: relative;
 | 
			
		||||
  top: .12em; 
 | 
			
		||||
  margin-right: .4em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-input > label {
 | 
			
		||||
  margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-input > label,
 | 
			
		||||
.context-menu-input > label > input[type="text"],
 | 
			
		||||
.context-menu-input > label > textarea,
 | 
			
		||||
.context-menu-input > label > select {
 | 
			
		||||
  display: block;
 | 
			
		||||
  width: 100%; 
 | 
			
		||||
  -webkit-box-sizing: border-box;
 | 
			
		||||
     -moz-box-sizing: border-box;
 | 
			
		||||
          box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-input > label > textarea {
 | 
			
		||||
  height: 7em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-item > .context-menu-list {
 | 
			
		||||
  top: .3em; 
 | 
			
		||||
  /* re-positioned by js */
 | 
			
		||||
  right: -.3em;
 | 
			
		||||
  display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-item.context-menu-visible > .context-menu-list {
 | 
			
		||||
  display: block;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.context-menu-accesskey {
 | 
			
		||||
  text-decoration: underline;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2122
									
								
								src/jqueryui1.12/jquery.contextMenu.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										16
									
								
								src/jqueryui1.12/jquery.contextMenu.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								src/jqueryui1.12/jquery.contextMenu.min.css.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										2
									
								
								src/jqueryui1.12/jquery.contextMenu.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								src/jqueryui1.12/jquery.contextMenu.min.js.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										513
									
								
								src/jqueryui1.12/jquery.ui.position.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,513 @@
 | 
			
		||||
/*! jQuery UI - v1.12.1 - 2016-09-16
 | 
			
		||||
 * http://jqueryui.com
 | 
			
		||||
 * Includes: position.js
 | 
			
		||||
 * Copyright jQuery Foundation and other contributors; Licensed MIT */
 | 
			
		||||
 | 
			
		||||
(function( factory ) {
 | 
			
		||||
    if ( typeof define === "function" && define.amd ) {
 | 
			
		||||
 | 
			
		||||
        // AMD. Register as an anonymous module.
 | 
			
		||||
        define([ "jquery" ], factory );
 | 
			
		||||
    } else {
 | 
			
		||||
 | 
			
		||||
        // Browser globals
 | 
			
		||||
        factory( jQuery );
 | 
			
		||||
    }
 | 
			
		||||
}(function( $ ) {
 | 
			
		||||
 | 
			
		||||
    $.ui = $.ui || {};
 | 
			
		||||
 | 
			
		||||
    var version = $.ui.version = "1.12.1";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
     * jQuery UI Position 1.12.1
 | 
			
		||||
     * http://jqueryui.com
 | 
			
		||||
     *
 | 
			
		||||
     * Copyright jQuery Foundation and other contributors
 | 
			
		||||
     * Released under the MIT license.
 | 
			
		||||
     * http://jquery.org/license
 | 
			
		||||
     *
 | 
			
		||||
     * http://api.jqueryui.com/position/
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
//>>label: Position
 | 
			
		||||
//>>group: Core
 | 
			
		||||
//>>description: Positions elements relative to other elements.
 | 
			
		||||
//>>docs: http://api.jqueryui.com/position/
 | 
			
		||||
//>>demos: http://jqueryui.com/position/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    ( function() {
 | 
			
		||||
        var cachedScrollbarWidth,
 | 
			
		||||
            max = Math.max,
 | 
			
		||||
            abs = Math.abs,
 | 
			
		||||
            rhorizontal = /left|center|right/,
 | 
			
		||||
            rvertical = /top|center|bottom/,
 | 
			
		||||
            roffset = /[\+\-]\d+(\.[\d]+)?%?/,
 | 
			
		||||
            rposition = /^\w+/,
 | 
			
		||||
            rpercent = /%$/,
 | 
			
		||||
            _position = $.fn.position;
 | 
			
		||||
 | 
			
		||||
        function getOffsets( offsets, width, height ) {
 | 
			
		||||
            return [
 | 
			
		||||
                parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
 | 
			
		||||
                parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
 | 
			
		||||
            ];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function parseCss( element, property ) {
 | 
			
		||||
            return parseInt( $.css( element, property ), 10 ) || 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        function getDimensions( elem ) {
 | 
			
		||||
            var raw = elem[ 0 ];
 | 
			
		||||
            if ( raw.nodeType === 9 ) {
 | 
			
		||||
                return {
 | 
			
		||||
                    width: elem.width(),
 | 
			
		||||
                    height: elem.height(),
 | 
			
		||||
                    offset: { top: 0, left: 0 }
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
            if ( $.isWindow( raw ) ) {
 | 
			
		||||
                return {
 | 
			
		||||
                    width: elem.width(),
 | 
			
		||||
                    height: elem.height(),
 | 
			
		||||
                    offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
            if ( raw.preventDefault ) {
 | 
			
		||||
                return {
 | 
			
		||||
                    width: 0,
 | 
			
		||||
                    height: 0,
 | 
			
		||||
                    offset: { top: raw.pageY, left: raw.pageX }
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
            return {
 | 
			
		||||
                width: elem.outerWidth(),
 | 
			
		||||
                height: elem.outerHeight(),
 | 
			
		||||
                offset: elem.offset()
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $.position = {
 | 
			
		||||
            scrollbarWidth: function() {
 | 
			
		||||
                if ( cachedScrollbarWidth !== undefined ) {
 | 
			
		||||
                    return cachedScrollbarWidth;
 | 
			
		||||
                }
 | 
			
		||||
                var w1, w2,
 | 
			
		||||
                    div = $( "<div " +
 | 
			
		||||
                        "style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" +
 | 
			
		||||
                        "<div style='height:100px;width:auto;'></div></div>" ),
 | 
			
		||||
                    innerDiv = div.children()[ 0 ];
 | 
			
		||||
 | 
			
		||||
                $( "body" ).append( div );
 | 
			
		||||
                w1 = innerDiv.offsetWidth;
 | 
			
		||||
                div.css( "overflow", "scroll" );
 | 
			
		||||
 | 
			
		||||
                w2 = innerDiv.offsetWidth;
 | 
			
		||||
 | 
			
		||||
                if ( w1 === w2 ) {
 | 
			
		||||
                    w2 = div[ 0 ].clientWidth;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                div.remove();
 | 
			
		||||
 | 
			
		||||
                return ( cachedScrollbarWidth = w1 - w2 );
 | 
			
		||||
            },
 | 
			
		||||
            getScrollInfo: function( within ) {
 | 
			
		||||
                var overflowX = within.isWindow || within.isDocument ? "" :
 | 
			
		||||
                        within.element.css( "overflow-x" ),
 | 
			
		||||
                    overflowY = within.isWindow || within.isDocument ? "" :
 | 
			
		||||
                        within.element.css( "overflow-y" ),
 | 
			
		||||
                    hasOverflowX = overflowX === "scroll" ||
 | 
			
		||||
                        ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),
 | 
			
		||||
                    hasOverflowY = overflowY === "scroll" ||
 | 
			
		||||
                        ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );
 | 
			
		||||
                return {
 | 
			
		||||
                    width: hasOverflowY ? $.position.scrollbarWidth() : 0,
 | 
			
		||||
                    height: hasOverflowX ? $.position.scrollbarWidth() : 0
 | 
			
		||||
                };
 | 
			
		||||
            },
 | 
			
		||||
            getWithinInfo: function( element ) {
 | 
			
		||||
                var withinElement = $( element || window ),
 | 
			
		||||
                    isWindow = $.isWindow( withinElement[ 0 ] ),
 | 
			
		||||
                    isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,
 | 
			
		||||
                    hasOffset = !isWindow && !isDocument;
 | 
			
		||||
                return {
 | 
			
		||||
                    element: withinElement,
 | 
			
		||||
                    isWindow: isWindow,
 | 
			
		||||
                    isDocument: isDocument,
 | 
			
		||||
                    offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },
 | 
			
		||||
                    scrollLeft: withinElement.scrollLeft(),
 | 
			
		||||
                    scrollTop: withinElement.scrollTop(),
 | 
			
		||||
                    width: withinElement.outerWidth(),
 | 
			
		||||
                    height: withinElement.outerHeight()
 | 
			
		||||
                };
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        $.fn.position = function( options ) {
 | 
			
		||||
            if ( !options || !options.of ) {
 | 
			
		||||
                return _position.apply( this, arguments );
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Make a copy, we don't want to modify arguments
 | 
			
		||||
            options = $.extend( {}, options );
 | 
			
		||||
 | 
			
		||||
            var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
 | 
			
		||||
                target = $( options.of ),
 | 
			
		||||
                within = $.position.getWithinInfo( options.within ),
 | 
			
		||||
                scrollInfo = $.position.getScrollInfo( within ),
 | 
			
		||||
                collision = ( options.collision || "flip" ).split( " " ),
 | 
			
		||||
                offsets = {};
 | 
			
		||||
 | 
			
		||||
            dimensions = getDimensions( target );
 | 
			
		||||
            if ( target[ 0 ].preventDefault ) {
 | 
			
		||||
 | 
			
		||||
                // Force left top to allow flipping
 | 
			
		||||
                options.at = "left top";
 | 
			
		||||
            }
 | 
			
		||||
            targetWidth = dimensions.width;
 | 
			
		||||
            targetHeight = dimensions.height;
 | 
			
		||||
            targetOffset = dimensions.offset;
 | 
			
		||||
 | 
			
		||||
            // Clone to reuse original targetOffset later
 | 
			
		||||
            basePosition = $.extend( {}, targetOffset );
 | 
			
		||||
 | 
			
		||||
            // Force my and at to have valid horizontal and vertical positions
 | 
			
		||||
            // if a value is missing or invalid, it will be converted to center
 | 
			
		||||
            $.each( [ "my", "at" ], function() {
 | 
			
		||||
                var pos = ( options[ this ] || "" ).split( " " ),
 | 
			
		||||
                    horizontalOffset,
 | 
			
		||||
                    verticalOffset;
 | 
			
		||||
 | 
			
		||||
                if ( pos.length === 1 ) {
 | 
			
		||||
                    pos = rhorizontal.test( pos[ 0 ] ) ?
 | 
			
		||||
                        pos.concat( [ "center" ] ) :
 | 
			
		||||
                        rvertical.test( pos[ 0 ] ) ?
 | 
			
		||||
                            [ "center" ].concat( pos ) :
 | 
			
		||||
                            [ "center", "center" ];
 | 
			
		||||
                }
 | 
			
		||||
                pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
 | 
			
		||||
                pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
 | 
			
		||||
 | 
			
		||||
                // Calculate offsets
 | 
			
		||||
                horizontalOffset = roffset.exec( pos[ 0 ] );
 | 
			
		||||
                verticalOffset = roffset.exec( pos[ 1 ] );
 | 
			
		||||
                offsets[ this ] = [
 | 
			
		||||
                    horizontalOffset ? horizontalOffset[ 0 ] : 0,
 | 
			
		||||
                    verticalOffset ? verticalOffset[ 0 ] : 0
 | 
			
		||||
                ];
 | 
			
		||||
 | 
			
		||||
                // Reduce to just the positions without the offsets
 | 
			
		||||
                options[ this ] = [
 | 
			
		||||
                    rposition.exec( pos[ 0 ] )[ 0 ],
 | 
			
		||||
                    rposition.exec( pos[ 1 ] )[ 0 ]
 | 
			
		||||
                ];
 | 
			
		||||
            } );
 | 
			
		||||
 | 
			
		||||
            // Normalize collision option
 | 
			
		||||
            if ( collision.length === 1 ) {
 | 
			
		||||
                collision[ 1 ] = collision[ 0 ];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ( options.at[ 0 ] === "right" ) {
 | 
			
		||||
                basePosition.left += targetWidth;
 | 
			
		||||
            } else if ( options.at[ 0 ] === "center" ) {
 | 
			
		||||
                basePosition.left += targetWidth / 2;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            if ( options.at[ 1 ] === "bottom" ) {
 | 
			
		||||
                basePosition.top += targetHeight;
 | 
			
		||||
            } else if ( options.at[ 1 ] === "center" ) {
 | 
			
		||||
                basePosition.top += targetHeight / 2;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
 | 
			
		||||
            basePosition.left += atOffset[ 0 ];
 | 
			
		||||
            basePosition.top += atOffset[ 1 ];
 | 
			
		||||
 | 
			
		||||
            return this.each( function() {
 | 
			
		||||
                var collisionPosition, using,
 | 
			
		||||
                    elem = $( this ),
 | 
			
		||||
                    elemWidth = elem.outerWidth(),
 | 
			
		||||
                    elemHeight = elem.outerHeight(),
 | 
			
		||||
                    marginLeft = parseCss( this, "marginLeft" ),
 | 
			
		||||
                    marginTop = parseCss( this, "marginTop" ),
 | 
			
		||||
                    collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +
 | 
			
		||||
                        scrollInfo.width,
 | 
			
		||||
                    collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +
 | 
			
		||||
                        scrollInfo.height,
 | 
			
		||||
                    position = $.extend( {}, basePosition ),
 | 
			
		||||
                    myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
 | 
			
		||||
 | 
			
		||||
                if ( options.my[ 0 ] === "right" ) {
 | 
			
		||||
                    position.left -= elemWidth;
 | 
			
		||||
                } else if ( options.my[ 0 ] === "center" ) {
 | 
			
		||||
                    position.left -= elemWidth / 2;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if ( options.my[ 1 ] === "bottom" ) {
 | 
			
		||||
                    position.top -= elemHeight;
 | 
			
		||||
                } else if ( options.my[ 1 ] === "center" ) {
 | 
			
		||||
                    position.top -= elemHeight / 2;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                position.left += myOffset[ 0 ];
 | 
			
		||||
                position.top += myOffset[ 1 ];
 | 
			
		||||
 | 
			
		||||
                collisionPosition = {
 | 
			
		||||
                    marginLeft: marginLeft,
 | 
			
		||||
                    marginTop: marginTop
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                $.each( [ "left", "top" ], function( i, dir ) {
 | 
			
		||||
                    if ( $.ui.position[ collision[ i ] ] ) {
 | 
			
		||||
                        $.ui.position[ collision[ i ] ][ dir ]( position, {
 | 
			
		||||
                            targetWidth: targetWidth,
 | 
			
		||||
                            targetHeight: targetHeight,
 | 
			
		||||
                            elemWidth: elemWidth,
 | 
			
		||||
                            elemHeight: elemHeight,
 | 
			
		||||
                            collisionPosition: collisionPosition,
 | 
			
		||||
                            collisionWidth: collisionWidth,
 | 
			
		||||
                            collisionHeight: collisionHeight,
 | 
			
		||||
                            offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
 | 
			
		||||
                            my: options.my,
 | 
			
		||||
                            at: options.at,
 | 
			
		||||
                            within: within,
 | 
			
		||||
                            elem: elem
 | 
			
		||||
                        } );
 | 
			
		||||
                    }
 | 
			
		||||
                } );
 | 
			
		||||
 | 
			
		||||
                if ( options.using ) {
 | 
			
		||||
 | 
			
		||||
                    // Adds feedback as second argument to using callback, if present
 | 
			
		||||
                    using = function( props ) {
 | 
			
		||||
                        var left = targetOffset.left - position.left,
 | 
			
		||||
                            right = left + targetWidth - elemWidth,
 | 
			
		||||
                            top = targetOffset.top - position.top,
 | 
			
		||||
                            bottom = top + targetHeight - elemHeight,
 | 
			
		||||
                            feedback = {
 | 
			
		||||
                                target: {
 | 
			
		||||
                                    element: target,
 | 
			
		||||
                                    left: targetOffset.left,
 | 
			
		||||
                                    top: targetOffset.top,
 | 
			
		||||
                                    width: targetWidth,
 | 
			
		||||
                                    height: targetHeight
 | 
			
		||||
                                },
 | 
			
		||||
                                element: {
 | 
			
		||||
                                    element: elem,
 | 
			
		||||
                                    left: position.left,
 | 
			
		||||
                                    top: position.top,
 | 
			
		||||
                                    width: elemWidth,
 | 
			
		||||
                                    height: elemHeight
 | 
			
		||||
                                },
 | 
			
		||||
                                horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
 | 
			
		||||
                                vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
 | 
			
		||||
                            };
 | 
			
		||||
                        if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
 | 
			
		||||
                            feedback.horizontal = "center";
 | 
			
		||||
                        }
 | 
			
		||||
                        if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
 | 
			
		||||
                            feedback.vertical = "middle";
 | 
			
		||||
                        }
 | 
			
		||||
                        if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
 | 
			
		||||
                            feedback.important = "horizontal";
 | 
			
		||||
                        } else {
 | 
			
		||||
                            feedback.important = "vertical";
 | 
			
		||||
                        }
 | 
			
		||||
                        options.using.call( this, props, feedback );
 | 
			
		||||
                    };
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                elem.offset( $.extend( position, { using: using } ) );
 | 
			
		||||
            } );
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        $.ui.position = {
 | 
			
		||||
            fit: {
 | 
			
		||||
                left: function( position, data ) {
 | 
			
		||||
                    var within = data.within,
 | 
			
		||||
                        withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
 | 
			
		||||
                        outerWidth = within.width,
 | 
			
		||||
                        collisionPosLeft = position.left - data.collisionPosition.marginLeft,
 | 
			
		||||
                        overLeft = withinOffset - collisionPosLeft,
 | 
			
		||||
                        overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
 | 
			
		||||
                        newOverRight;
 | 
			
		||||
 | 
			
		||||
                    // Element is wider than within
 | 
			
		||||
                    if ( data.collisionWidth > outerWidth ) {
 | 
			
		||||
 | 
			
		||||
                        // Element is initially over the left side of within
 | 
			
		||||
                        if ( overLeft > 0 && overRight <= 0 ) {
 | 
			
		||||
                            newOverRight = position.left + overLeft + data.collisionWidth - outerWidth -
 | 
			
		||||
                                withinOffset;
 | 
			
		||||
                            position.left += overLeft - newOverRight;
 | 
			
		||||
 | 
			
		||||
                            // Element is initially over right side of within
 | 
			
		||||
                        } else if ( overRight > 0 && overLeft <= 0 ) {
 | 
			
		||||
                            position.left = withinOffset;
 | 
			
		||||
 | 
			
		||||
                            // Element is initially over both left and right sides of within
 | 
			
		||||
                        } else {
 | 
			
		||||
                            if ( overLeft > overRight ) {
 | 
			
		||||
                                position.left = withinOffset + outerWidth - data.collisionWidth;
 | 
			
		||||
                            } else {
 | 
			
		||||
                                position.left = withinOffset;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        // Too far left -> align with left edge
 | 
			
		||||
                    } else if ( overLeft > 0 ) {
 | 
			
		||||
                        position.left += overLeft;
 | 
			
		||||
 | 
			
		||||
                        // Too far right -> align with right edge
 | 
			
		||||
                    } else if ( overRight > 0 ) {
 | 
			
		||||
                        position.left -= overRight;
 | 
			
		||||
 | 
			
		||||
                        // Adjust based on position and margin
 | 
			
		||||
                    } else {
 | 
			
		||||
                        position.left = max( position.left - collisionPosLeft, position.left );
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                top: function( position, data ) {
 | 
			
		||||
                    var within = data.within,
 | 
			
		||||
                        withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
 | 
			
		||||
                        outerHeight = data.within.height,
 | 
			
		||||
                        collisionPosTop = position.top - data.collisionPosition.marginTop,
 | 
			
		||||
                        overTop = withinOffset - collisionPosTop,
 | 
			
		||||
                        overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
 | 
			
		||||
                        newOverBottom;
 | 
			
		||||
 | 
			
		||||
                    // Element is taller than within
 | 
			
		||||
                    if ( data.collisionHeight > outerHeight ) {
 | 
			
		||||
 | 
			
		||||
                        // Element is initially over the top of within
 | 
			
		||||
                        if ( overTop > 0 && overBottom <= 0 ) {
 | 
			
		||||
                            newOverBottom = position.top + overTop + data.collisionHeight - outerHeight -
 | 
			
		||||
                                withinOffset;
 | 
			
		||||
                            position.top += overTop - newOverBottom;
 | 
			
		||||
 | 
			
		||||
                            // Element is initially over bottom of within
 | 
			
		||||
                        } else if ( overBottom > 0 && overTop <= 0 ) {
 | 
			
		||||
                            position.top = withinOffset;
 | 
			
		||||
 | 
			
		||||
                            // Element is initially over both top and bottom of within
 | 
			
		||||
                        } else {
 | 
			
		||||
                            if ( overTop > overBottom ) {
 | 
			
		||||
                                position.top = withinOffset + outerHeight - data.collisionHeight;
 | 
			
		||||
                            } else {
 | 
			
		||||
                                position.top = withinOffset;
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        // Too far up -> align with top
 | 
			
		||||
                    } else if ( overTop > 0 ) {
 | 
			
		||||
                        position.top += overTop;
 | 
			
		||||
 | 
			
		||||
                        // Too far down -> align with bottom edge
 | 
			
		||||
                    } else if ( overBottom > 0 ) {
 | 
			
		||||
                        position.top -= overBottom;
 | 
			
		||||
 | 
			
		||||
                        // Adjust based on position and margin
 | 
			
		||||
                    } else {
 | 
			
		||||
                        position.top = max( position.top - collisionPosTop, position.top );
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            flip: {
 | 
			
		||||
                left: function( position, data ) {
 | 
			
		||||
                    var within = data.within,
 | 
			
		||||
                        withinOffset = within.offset.left + within.scrollLeft,
 | 
			
		||||
                        outerWidth = within.width,
 | 
			
		||||
                        offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
 | 
			
		||||
                        collisionPosLeft = position.left - data.collisionPosition.marginLeft,
 | 
			
		||||
                        overLeft = collisionPosLeft - offsetLeft,
 | 
			
		||||
                        overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
 | 
			
		||||
                        myOffset = data.my[ 0 ] === "left" ?
 | 
			
		||||
                            -data.elemWidth :
 | 
			
		||||
                            data.my[ 0 ] === "right" ?
 | 
			
		||||
                                data.elemWidth :
 | 
			
		||||
                                0,
 | 
			
		||||
                        atOffset = data.at[ 0 ] === "left" ?
 | 
			
		||||
                            data.targetWidth :
 | 
			
		||||
                            data.at[ 0 ] === "right" ?
 | 
			
		||||
                                -data.targetWidth :
 | 
			
		||||
                                0,
 | 
			
		||||
                        offset = -2 * data.offset[ 0 ],
 | 
			
		||||
                        newOverRight,
 | 
			
		||||
                        newOverLeft;
 | 
			
		||||
 | 
			
		||||
                    if ( overLeft < 0 ) {
 | 
			
		||||
                        newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -
 | 
			
		||||
                            outerWidth - withinOffset;
 | 
			
		||||
                        if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
 | 
			
		||||
                            position.left += myOffset + atOffset + offset;
 | 
			
		||||
                        }
 | 
			
		||||
                    } else if ( overRight > 0 ) {
 | 
			
		||||
                        newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +
 | 
			
		||||
                            atOffset + offset - offsetLeft;
 | 
			
		||||
                        if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
 | 
			
		||||
                            position.left += myOffset + atOffset + offset;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                top: function( position, data ) {
 | 
			
		||||
                    var within = data.within,
 | 
			
		||||
                        withinOffset = within.offset.top + within.scrollTop,
 | 
			
		||||
                        outerHeight = within.height,
 | 
			
		||||
                        offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
 | 
			
		||||
                        collisionPosTop = position.top - data.collisionPosition.marginTop,
 | 
			
		||||
                        overTop = collisionPosTop - offsetTop,
 | 
			
		||||
                        overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
 | 
			
		||||
                        top = data.my[ 1 ] === "top",
 | 
			
		||||
                        myOffset = top ?
 | 
			
		||||
                            -data.elemHeight :
 | 
			
		||||
                            data.my[ 1 ] === "bottom" ?
 | 
			
		||||
                                data.elemHeight :
 | 
			
		||||
                                0,
 | 
			
		||||
                        atOffset = data.at[ 1 ] === "top" ?
 | 
			
		||||
                            data.targetHeight :
 | 
			
		||||
                            data.at[ 1 ] === "bottom" ?
 | 
			
		||||
                                -data.targetHeight :
 | 
			
		||||
                                0,
 | 
			
		||||
                        offset = -2 * data.offset[ 1 ],
 | 
			
		||||
                        newOverTop,
 | 
			
		||||
                        newOverBottom;
 | 
			
		||||
                    if ( overTop < 0 ) {
 | 
			
		||||
                        newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -
 | 
			
		||||
                            outerHeight - withinOffset;
 | 
			
		||||
                        if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
 | 
			
		||||
                            position.top += myOffset + atOffset + offset;
 | 
			
		||||
                        }
 | 
			
		||||
                    } else if ( overBottom > 0 ) {
 | 
			
		||||
                        newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +
 | 
			
		||||
                            offset - offsetTop;
 | 
			
		||||
                        if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
 | 
			
		||||
                            position.top += myOffset + atOffset + offset;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            flipfit: {
 | 
			
		||||
                left: function() {
 | 
			
		||||
                    $.ui.position.flip.left.apply( this, arguments );
 | 
			
		||||
                    $.ui.position.fit.left.apply( this, arguments );
 | 
			
		||||
                },
 | 
			
		||||
                top: function() {
 | 
			
		||||
                    $.ui.position.flip.top.apply( this, arguments );
 | 
			
		||||
                    $.ui.position.fit.top.apply( this, arguments );
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
    } )();
 | 
			
		||||
 | 
			
		||||
    var position = $.ui.position;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}));
 | 
			
		||||
							
								
								
									
										6
									
								
								src/jqueryui1.12/jquery.ui.position.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										74
									
								
								src/jqueryui1.12/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,74 @@
 | 
			
		||||
{
 | 
			
		||||
	"name": "jquery-ui",
 | 
			
		||||
	"title": "jQuery UI",
 | 
			
		||||
	"description": "A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.",
 | 
			
		||||
	"version": "1.12.1",
 | 
			
		||||
	"homepage": "http://jqueryui.com",
 | 
			
		||||
	"author": {
 | 
			
		||||
		"name": "jQuery Foundation and other contributors",
 | 
			
		||||
		"url": "https://github.com/jquery/jquery-ui/blob/1.12.1/AUTHORS.txt"
 | 
			
		||||
	},
 | 
			
		||||
	"main": "ui/widget.js",
 | 
			
		||||
	"maintainers": [
 | 
			
		||||
		{
 | 
			
		||||
			"name": "Scott González",
 | 
			
		||||
			"email": "scott.gonzalez@gmail.com",
 | 
			
		||||
			"url": "http://scottgonzalez.com"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"name": "Jörn Zaefferer",
 | 
			
		||||
			"email": "joern.zaefferer@gmail.com",
 | 
			
		||||
			"url": "http://bassistance.de"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"name": "Mike Sherov",
 | 
			
		||||
			"email": "mike.sherov@gmail.com",
 | 
			
		||||
			"url": "http://mike.sherov.com"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"name": "TJ VanToll",
 | 
			
		||||
			"email": "tj.vantoll@gmail.com",
 | 
			
		||||
			"url": "http://tjvantoll.com"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"name": "Felix Nagel",
 | 
			
		||||
			"email": "info@felixnagel.com",
 | 
			
		||||
			"url": "http://www.felixnagel.com"
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"name": "Alex Schmitz",
 | 
			
		||||
			"email": "arschmitz@gmail.com",
 | 
			
		||||
			"url": "https://github.com/arschmitz"
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"repository": {
 | 
			
		||||
		"type": "git",
 | 
			
		||||
		"url": "git://github.com/jquery/jquery-ui.git"
 | 
			
		||||
	},
 | 
			
		||||
	"bugs": "https://bugs.jqueryui.com/",
 | 
			
		||||
	"license": "MIT",
 | 
			
		||||
	"scripts": {
 | 
			
		||||
		"test": "grunt"
 | 
			
		||||
	},
 | 
			
		||||
	"dependencies": {},
 | 
			
		||||
	"devDependencies": {
 | 
			
		||||
		"commitplease": "2.3.0",
 | 
			
		||||
		"grunt": "0.4.5",
 | 
			
		||||
		"grunt-bowercopy": "1.2.4",
 | 
			
		||||
		"grunt-cli": "0.1.13",
 | 
			
		||||
		"grunt-compare-size": "0.4.0",
 | 
			
		||||
		"grunt-contrib-concat": "0.5.1",
 | 
			
		||||
		"grunt-contrib-csslint": "0.5.0",
 | 
			
		||||
		"grunt-contrib-jshint": "0.12.0",
 | 
			
		||||
		"grunt-contrib-qunit": "1.0.1",
 | 
			
		||||
		"grunt-contrib-requirejs": "0.4.4",
 | 
			
		||||
		"grunt-contrib-uglify": "0.11.1",
 | 
			
		||||
		"grunt-git-authors": "3.1.0",
 | 
			
		||||
		"grunt-html": "6.0.0",
 | 
			
		||||
		"grunt-jscs": "2.1.0",
 | 
			
		||||
		"load-grunt-tasks": "3.4.0",
 | 
			
		||||
		"rimraf": "2.5.1",
 | 
			
		||||
		"testswarm": "1.1.0"
 | 
			
		||||
	},
 | 
			
		||||
	"keywords": []
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										355
									
								
								src/js/CenterPortal.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,355 @@
 | 
			
		||||
var applyRole = function (role) {
 | 
			
		||||
    global.wssocket.send("{\"action\":\"applyRole\",\"role\":\"" + role
 | 
			
		||||
        + "\",\"pubKey\":\"" + global.sm2Key.publicKey + "\"}");
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var WSHandler = function (event) {
 | 
			
		||||
    data = event.data;
 | 
			
		||||
    try {
 | 
			
		||||
        var obj = JSON.parse(data);
 | 
			
		||||
        switch (obj.action) {
 | 
			
		||||
            case "onSessionID":
 | 
			
		||||
                onSessionID(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onLogin":
 | 
			
		||||
                onLogin(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListAllUsers":
 | 
			
		||||
                onListAllUsers(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListApplyList":
 | 
			
		||||
                onListApplyList(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onApply":
 | 
			
		||||
                onApply(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onDelete":
 | 
			
		||||
                onDelete(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onApplyRole":
 | 
			
		||||
                onApplyRole(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onAuthNodeManager":
 | 
			
		||||
                onAuthNodeManager(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onQueryUserStat":
 | 
			
		||||
                onQueryUserStat(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListLicence":
 | 
			
		||||
                onListLicence(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onUpdateLicence":
 | 
			
		||||
                onUpdateLicence(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListNodes":
 | 
			
		||||
                onListNodes(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onListManageLogPie':
 | 
			
		||||
                onListManageLogPie(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onListCMLogPie':
 | 
			
		||||
                onListCMLogPie(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onListManageLogLine':
 | 
			
		||||
                onListManageLogLine(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onListCMLogLine':
 | 
			
		||||
                onListCMLogLine(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListTrustUnits":
 | 
			
		||||
                onListTrustUnits(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onCreateTrustUnit":
 | 
			
		||||
                onCreateTrustUnit(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onDeleteTrustUnit":
 | 
			
		||||
                onDeleteTrustUnit(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onListMultiPointContractProcess":
 | 
			
		||||
                onListMultiPointContractProcess(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case "onCountActionLogByCategory":
 | 
			
		||||
            case "onQueryCMLog":
 | 
			
		||||
            case "onCountCMLogByCategory":
 | 
			
		||||
            case "onQueryActionLog":
 | 
			
		||||
                invokeDrawCallbacks(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onException':
 | 
			
		||||
                handleNoPermission(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onGetOtherNC':
 | 
			
		||||
                onGetOtherNC(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onGetNCFile':
 | 
			
		||||
                onGetNCFile(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'onTransfer':
 | 
			
		||||
                onTransfer(obj);
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                displayOutput(obj);
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
        console.log(err);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
var invokeDrawCallbacks = function (obj) {
 | 
			
		||||
    global.wscallbacks[obj.responseID](obj);
 | 
			
		||||
};
 | 
			
		||||
var handleNoPermission = function (obj) {
 | 
			
		||||
    global.actionName = obj.data.split(" ")[2];
 | 
			
		||||
    switch (global.actionName) {
 | 
			
		||||
        case "queryUserStat":
 | 
			
		||||
        case "queryCMLogSimple":
 | 
			
		||||
            alertNoPermission("当前角色没有" + global.actionName
 | 
			
		||||
                + "权限,请申请成为NodeManager");
 | 
			
		||||
            break;
 | 
			
		||||
        case "listNodes":
 | 
			
		||||
        case "listTrustUnits":
 | 
			
		||||
            alertNoPermission("当前角色没有" + global.actionName
 | 
			
		||||
                + "权限,请申请成为CenterManager或者NodeManager");
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            alertNoPermission("当前角色没有" + global.actionName
 | 
			
		||||
                + "权限,请申请成为CenterManager");
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
var displayOutput = function (obj) {
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var getControlWsUrl = function (host) {
 | 
			
		||||
    var prefix = "ws://";
 | 
			
		||||
    if (document.location.href.startsWith("https"))
 | 
			
		||||
        prefix = "wss://";
 | 
			
		||||
    var path = document.location.pathname.lastIndexOf("/");
 | 
			
		||||
    path = document.location.pathname.substr(0, path + 1);
 | 
			
		||||
    path += "NodeCenterWS";
 | 
			
		||||
    return prefix + host + path;
 | 
			
		||||
};
 | 
			
		||||
var initWSocket = function () {
 | 
			
		||||
    console.log("[nodecenterManagement.js] initWSocket : ");
 | 
			
		||||
    var host = document.location.host;
 | 
			
		||||
    changeTitle(host);
 | 
			
		||||
    global.wscallbacks = {};
 | 
			
		||||
    var url = getControlWsUrl(host);
 | 
			
		||||
    global.wssocket = createWssocket(url, function () {
 | 
			
		||||
        getSession();
 | 
			
		||||
    }, WSHandler);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var getSession = function () {
 | 
			
		||||
    global.wssocket.send("{\"action\":\"getSessionID\"}");
 | 
			
		||||
};
 | 
			
		||||
var exportSMKeyPair = function () {
 | 
			
		||||
    $("#dialog").html("Save Your key:<br/>" + JSON.stringify(global.sm2Key))
 | 
			
		||||
    $("#dialog").dialog("open");
 | 
			
		||||
};
 | 
			
		||||
// ====== wsHandler
 | 
			
		||||
var onSessionID = function (data) {
 | 
			
		||||
    global.session = data.session;
 | 
			
		||||
    var loginParam = {};
 | 
			
		||||
    loginParam.pubKey = global.sm2Key.publicKey;
 | 
			
		||||
    loginParam.signature = sm2.doSignature(global.session,
 | 
			
		||||
        global.sm2Key.privateKey, {hash: true, der: true});
 | 
			
		||||
    loginParam.action = "login";
 | 
			
		||||
    global.wssocket.send(JSON.stringify(loginParam));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onLogin = function (data) {
 | 
			
		||||
    pubkeyDialogVue.myRole = data.data;
 | 
			
		||||
    loadDashBoard();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onListAllUsers = function (data) {
 | 
			
		||||
    console.log("onListAllUsers");
 | 
			
		||||
    fillUserData(data.data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onListApplyList = function (data) {
 | 
			
		||||
    console.log("onListApplyList");
 | 
			
		||||
    global.result = data.data;
 | 
			
		||||
    fillApplyUserData(data.data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onApply = function (data) {
 | 
			
		||||
    myToast("申请操作", data.data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onDelete = function (data) {
 | 
			
		||||
    myToast("删除操作", data.data);
 | 
			
		||||
    if (data.data == "success") {
 | 
			
		||||
        var arg = {};
 | 
			
		||||
        arg.action = "listAllUsers";
 | 
			
		||||
        global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onApplyRole = function (data) {
 | 
			
		||||
    myToast("申请操作", data.data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onAuthNodeManager = function (data) {
 | 
			
		||||
    myToast("授权/忽略操作", data.data);
 | 
			
		||||
    if (data.data == "success") {
 | 
			
		||||
        var arg = {};
 | 
			
		||||
        arg.action = "listApplyList";
 | 
			
		||||
        global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
        var arg = {};
 | 
			
		||||
        arg.action = "listAllUsers";
 | 
			
		||||
        global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onQueryUserStat = function (data) {
 | 
			
		||||
    console.log("onQueryUserStat");
 | 
			
		||||
    mainVue.userCount = data.userListCount + data.applyListCount;
 | 
			
		||||
    var div = $("#userTypeDistribution");
 | 
			
		||||
    if (div.css("height") == "0px") {
 | 
			
		||||
        div = $("#userTypeDistributionDASH");
 | 
			
		||||
    }
 | 
			
		||||
    if (div.css("height") == "0px") {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    setUserTypeDistribution(div, data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onQueryActionLog = function (data) {
 | 
			
		||||
    global.lastData = data;
 | 
			
		||||
    drawLogTable("auditLogTabDiv", data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onQueryActionLogSimple = function (data) {
 | 
			
		||||
    setUSERMANBar(data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onUpdateLicence = function (data) {
 | 
			
		||||
    console.log("==onUploadLicence");
 | 
			
		||||
    if (data.data == "success") {
 | 
			
		||||
        listLicence();
 | 
			
		||||
    }
 | 
			
		||||
    myToast("配置Licence", data.data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onQueryCMLog = function (data) {
 | 
			
		||||
    var tab = $("#v-pills-home-tab")[0];
 | 
			
		||||
    var isActive = (tab.getAttribute("aria-selected") == "true");
 | 
			
		||||
    if (isActive) {
 | 
			
		||||
        drawDashBoardCMLog(data);
 | 
			
		||||
    }
 | 
			
		||||
    tab = $("#v-pills-messages-tab")[0];
 | 
			
		||||
    isActive = (tab.getAttribute("aria-selected") == "true");
 | 
			
		||||
    if (isActive) {
 | 
			
		||||
        //drawLogBar("auditCMLogBarDiv", data);
 | 
			
		||||
        drawLogTable("auditCMLogTabDiv", data);
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ====== wsHandler done!
 | 
			
		||||
var myToast = function (title, msg) {
 | 
			
		||||
    toastVue.toastTitle = title;
 | 
			
		||||
    toastVue.toastMessage = msg;
 | 
			
		||||
    $("#alertDiv").toast("show");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var countChar = function (str, c) {
 | 
			
		||||
    var ret = 0;
 | 
			
		||||
    for (var i = 0; i < str.length; i++) {
 | 
			
		||||
        if (str.charAt(i) == c)
 | 
			
		||||
            ret++;
 | 
			
		||||
    }
 | 
			
		||||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
var generate = function () {
 | 
			
		||||
    var key = sm2.generateKeyPairHex();
 | 
			
		||||
    global.sm2Key = key;
 | 
			
		||||
    localStorage.setItem("PrivKey", JSON.stringify(key));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function init() {
 | 
			
		||||
    console.log("[nodecenterManagement.js] init : ");
 | 
			
		||||
    initVue();
 | 
			
		||||
    pubkeyDialogVue.productList = [{
 | 
			
		||||
        id: 0,
 | 
			
		||||
        title: "NodeManager"
 | 
			
		||||
    }];
 | 
			
		||||
    pubkeyDialogVue.test = "0";
 | 
			
		||||
    initGlobal();
 | 
			
		||||
    initWSocket();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var getRequestParameters = function () {
 | 
			
		||||
    var arr = (location.search || "").replace(/^\?/, '').split("&");
 | 
			
		||||
    var params = {};
 | 
			
		||||
    for (var i = 0; i < arr.length; i++) {
 | 
			
		||||
        var data = arr[i].split("=");
 | 
			
		||||
        if (data.length == 2) {
 | 
			
		||||
            params[data[0]] = data[1];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return params;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var changeOtherNC = function () {
 | 
			
		||||
    console.log("changeOtherNC");
 | 
			
		||||
 | 
			
		||||
    var str = "";
 | 
			
		||||
    if ($("#OtherNCInput")[0].value == undefined || $("#OtherNCInput")[0].value == "") {
 | 
			
		||||
        console.log("未配置OtherNC");
 | 
			
		||||
    } else {
 | 
			
		||||
        str = $("#OtherNCInput")[0].value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    global.wssocket.send(JSON.stringify({
 | 
			
		||||
        action: 'changeOtherNC',
 | 
			
		||||
        data: str
 | 
			
		||||
    }));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var getOtherNC = function () {
 | 
			
		||||
    setTimeout(function () {
 | 
			
		||||
        console.log("getOtherNC");
 | 
			
		||||
        global.wssocket.send(JSON.stringify({
 | 
			
		||||
            action: 'getOtherNC'
 | 
			
		||||
        }));
 | 
			
		||||
    }, 300);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onGetOtherNC = function (obj) {
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
    $("#OtherNCInput")[0].value = obj.address;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var changeNCFile = function () {
 | 
			
		||||
    console.log("changeNCFile");
 | 
			
		||||
    var str = "";
 | 
			
		||||
    if ($("#ncFileInput")[0].value == undefined || $("#ncFileInput")[0].value == "") {
 | 
			
		||||
        console.log("未配置NCFile");
 | 
			
		||||
    } else {
 | 
			
		||||
        str = $("#ncFileInput")[0].value;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    global.wssocket.send(JSON.stringify({
 | 
			
		||||
        action: 'changeNCFile',
 | 
			
		||||
        data: str
 | 
			
		||||
    }));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var getNCFile = function () {
 | 
			
		||||
    setTimeout(function () {
 | 
			
		||||
        console.log("getNCFile");
 | 
			
		||||
        global.wssocket.send(JSON.stringify({
 | 
			
		||||
            action: 'getNCFile'
 | 
			
		||||
        }));
 | 
			
		||||
    }, 300);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onGetNCFile = function (obj) {
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
    $("#ncFileInput")[0].value = obj.fileName;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										11
									
								
								src/js/DataTables/dataTables.bootstrap4.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,11 @@
 | 
			
		||||
/*!
 | 
			
		||||
 DataTables Bootstrap 4 integration
 | 
			
		||||
 ©2011-2017 SpryMedia Ltd - datatables.net/license
 | 
			
		||||
*/
 | 
			
		||||
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(a,b,c){a instanceof String&&(a=String(a));for(var e=a.length,d=0;d<e;d++){var k=a[d];if(b.call(c,k,d,a))return{i:d,v:k}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
 | 
			
		||||
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)};$jscomp.getGlobal=function(a){return"undefined"!=typeof window&&window===a?a:"undefined"!=typeof global&&null!=global?global:a};$jscomp.global=$jscomp.getGlobal(this);
 | 
			
		||||
$jscomp.polyfill=function(a,b,c,e){if(b){c=$jscomp.global;a=a.split(".");for(e=0;e<a.length-1;e++){var d=a[e];d in c||(c[d]={});c=c[d]}a=a[a.length-1];e=c[a];b=b(e);b!=e&&null!=b&&$jscomp.defineProperty(c,a,{configurable:!0,writable:!0,value:b})}};$jscomp.polyfill("Array.prototype.find",function(a){return a?a:function(a,c){return $jscomp.findInternal(this,a,c).v}},"es6","es3");
 | 
			
		||||
(function(a){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(b){return a(b,window,document)}):"object"===typeof exports?module.exports=function(b,c){b||(b=window);c&&c.fn.dataTable||(c=require("datatables.net")(b,c).$);return a(c,b,b.document)}:a(jQuery,window,document)})(function(a,b,c,e){var d=a.fn.dataTable;a.extend(!0,d.defaults,{dom:"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>><'row'<'col-sm-12'tr>><'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>",
 | 
			
		||||
renderer:"bootstrap"});a.extend(d.ext.classes,{sWrapper:"dataTables_wrapper dt-bootstrap4",sFilterInput:"form-control form-control-sm",sLengthSelect:"custom-select custom-select-sm form-control form-control-sm",sProcessing:"dataTables_processing card",sPageButton:"paginate_button page-item"});d.ext.renderer.pageButton.bootstrap=function(b,l,v,w,m,r){var k=new d.Api(b),x=b.oClasses,n=b.oLanguage.oPaginate,y=b.oLanguage.oAria.paginate||{},g,h,t=0,u=function(c,d){var e,l=function(b){b.preventDefault();
 | 
			
		||||
a(b.currentTarget).hasClass("disabled")||k.page()==b.data.action||k.page(b.data.action).draw("page")};var q=0;for(e=d.length;q<e;q++){var f=d[q];if(a.isArray(f))u(c,f);else{h=g="";switch(f){case "ellipsis":g="…";h="disabled";break;case "first":g=n.sFirst;h=f+(0<m?"":" disabled");break;case "previous":g=n.sPrevious;h=f+(0<m?"":" disabled");break;case "next":g=n.sNext;h=f+(m<r-1?"":" disabled");break;case "last":g=n.sLast;h=f+(m<r-1?"":" disabled");break;default:g=f+1,h=m===f?"active":""}if(g){var p=
 | 
			
		||||
a("<li>",{"class":x.sPageButton+" "+h,id:0===v&&"string"===typeof f?b.sTableId+"_"+f:null}).append(a("<a>",{href:"#","aria-controls":b.sTableId,"aria-label":y[f],"data-dt-idx":t,tabindex:b.iTabIndex,"class":"page-link"}).html(g)).appendTo(c);b.oApi._fnBindAction(p,{action:f},l);t++}}}};try{var p=a(l).find(c.activeElement).data("dt-idx")}catch(z){}u(a(l).empty().html('<ul class="pagination"/>').children("ul"),w);p!==e&&a(l).find("[data-dt-idx="+p+"]").focus()};return d});
 | 
			
		||||
							
								
								
									
										230
									
								
								src/js/DataTables/datatables.extra.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,230 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Table styles
 | 
			
		||||
 */
 | 
			
		||||
table.dataTable.row-border tbody th, table.dataTable.row-border tbody td,
 | 
			
		||||
	table.dataTable.display tbody th, table.dataTable.display tbody td {
 | 
			
		||||
	border-top: 1px solid #dddddd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.row-border tbody tr:first-child th, table.dataTable.row-border tbody tr:first-child td,
 | 
			
		||||
	table.dataTable.display tbody tr:first-child th, table.dataTable.display tbody tr:first-child td
 | 
			
		||||
	{
 | 
			
		||||
	border-top: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td
 | 
			
		||||
	{
 | 
			
		||||
	border-top: 1px solid #dddddd;
 | 
			
		||||
	border-right: 1px solid #dddddd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.cell-border tbody tr th:first-child, table.dataTable.cell-border tbody tr td:first-child
 | 
			
		||||
	{
 | 
			
		||||
	border-left: 1px solid #dddddd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.cell-border tbody tr:first-child th, table.dataTable.cell-border tbody tr:first-child td
 | 
			
		||||
	{
 | 
			
		||||
	border-top: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #f9f9f9;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #abb9d3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover
 | 
			
		||||
	{
 | 
			
		||||
	background-color: whitesmoke;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a9b7d1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.order-column tbody tr>.sorting_1, table.dataTable.order-column tbody tr>.sorting_2,
 | 
			
		||||
	table.dataTable.order-column tbody tr>.sorting_3, table.dataTable.display tbody tr>.sorting_1,
 | 
			
		||||
	table.dataTable.display tbody tr>.sorting_2, table.dataTable.display tbody tr>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #f9f9f9;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.order-column tbody tr.selected>.sorting_1, table.dataTable.order-column tbody tr.selected>.sorting_2,
 | 
			
		||||
	table.dataTable.order-column tbody tr.selected>.sorting_3, table.dataTable.display tbody tr.selected>.sorting_1,
 | 
			
		||||
	table.dataTable.display tbody tr.selected>.sorting_2, table.dataTable.display tbody tr.selected>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #acbad4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd>.sorting_1, table.dataTable.order-column.stripe tbody tr.odd>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #f1f1f1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd>.sorting_2, table.dataTable.order-column.stripe tbody tr.odd>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #f3f3f3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd>.sorting_3, table.dataTable.order-column.stripe tbody tr.odd>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: whitesmoke;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd.selected>.sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a6b3cd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd.selected>.sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a7b5ce;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.odd.selected>.sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a9b6d0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even>.sorting_1, table.dataTable.order-column.stripe tbody tr.even>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #f9f9f9;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even>.sorting_2, table.dataTable.order-column.stripe tbody tr.even>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #fbfbfb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even>.sorting_3, table.dataTable.order-column.stripe tbody tr.even>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #fdfdfd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even.selected>.sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #acbad4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even.selected>.sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #adbbd6;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr.even.selected>.sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #afbdd8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover>.sorting_1, table.dataTable.order-column.hover tbody tr:hover>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #eaeaea;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover>.sorting_2, table.dataTable.order-column.hover tbody tr:hover>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #ebebeb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover>.sorting_3, table.dataTable.order-column.hover tbody tr:hover>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #eeeeee;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover.selected>.sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a1aec7;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover.selected>.sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a2afc8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.display tbody tr:hover.selected>.sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3
 | 
			
		||||
	{
 | 
			
		||||
	background-color: #a4b2cb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.no-footer {
 | 
			
		||||
	border-bottom: 1px solid #111111;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.nowrap th, table.dataTable.nowrap td {
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.compact thead th, table.dataTable.compact thead td {
 | 
			
		||||
	padding: 4px 17px 4px 4px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.compact tfoot th, table.dataTable.compact tfoot td {
 | 
			
		||||
	padding: 4px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable.compact tbody th, table.dataTable.compact tbody td {
 | 
			
		||||
	padding: 4px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable th.dt-left, table.dataTable td.dt-left {
 | 
			
		||||
	text-align: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable th.dt-center, table.dataTable td.dt-center, table.dataTable td.dataTables_empty
 | 
			
		||||
	{
 | 
			
		||||
	text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable th.dt-right, table.dataTable td.dt-right {
 | 
			
		||||
	text-align: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable th.dt-justify, table.dataTable td.dt-justify {
 | 
			
		||||
	text-align: justify;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable th.dt-nowrap, table.dataTable td.dt-nowrap {
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.dt-head-left, table.dataTable thead td.dt-head-left,
 | 
			
		||||
	table.dataTable tfoot th.dt-head-left, table.dataTable tfoot td.dt-head-left
 | 
			
		||||
	{
 | 
			
		||||
	text-align: left;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.dt-head-center, table.dataTable thead td.dt-head-center,
 | 
			
		||||
	table.dataTable tfoot th.dt-head-center, table.dataTable tfoot td.dt-head-center
 | 
			
		||||
	{
 | 
			
		||||
	text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.dt-head-right, table.dataTable thead td.dt-head-right,
 | 
			
		||||
	table.dataTable tfoot th.dt-head-right, table.dataTable tfoot td.dt-head-right
 | 
			
		||||
	{
 | 
			
		||||
	text-align: right;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.dt-head-justify, table.dataTable thead td.dt-head-justify,
 | 
			
		||||
	table.dataTable tfoot th.dt-head-justify, table.dataTable tfoot td.dt-head-justify
 | 
			
		||||
	{
 | 
			
		||||
	text-align: justify;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable thead th.dt-head-nowrap, table.dataTable thead td.dt-head-nowrap,
 | 
			
		||||
	table.dataTable tfoot th.dt-head-nowrap, table.dataTable tfoot td.dt-head-nowrap
 | 
			
		||||
	{
 | 
			
		||||
	white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable tbody th.dt-body-left, table.dataTable tbody td.dt-body-left
 | 
			
		||||
	{
 | 
			
		||||
	text-align: left;
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								src/js/DataTables/datatables.min.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										180
									
								
								src/js/DataTables/jquery.dataTables.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,180 @@
 | 
			
		||||
/*!
 | 
			
		||||
   Copyright 2008-2019 SpryMedia Ltd.
 | 
			
		||||
 | 
			
		||||
 This source file is free software, available under the following license:
 | 
			
		||||
   MIT license - http://datatables.net/license
 | 
			
		||||
 | 
			
		||||
 This source file is distributed in the hope that it will be useful, but
 | 
			
		||||
 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 | 
			
		||||
 or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
 | 
			
		||||
 | 
			
		||||
 For details please refer to: http://www.datatables.net
 | 
			
		||||
 DataTables 1.10.20
 | 
			
		||||
 ©2008-2019 SpryMedia Ltd - datatables.net/license
 | 
			
		||||
*/
 | 
			
		||||
var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(f,z,y){f instanceof String&&(f=String(f));for(var p=f.length,H=0;H<p;H++){var L=f[H];if(z.call(y,L,H,f))return{i:H,v:L}}return{i:-1,v:void 0}};$jscomp.ASSUME_ES5=!1;$jscomp.ASSUME_NO_NATIVE_MAP=!1;$jscomp.ASSUME_NO_NATIVE_SET=!1;$jscomp.SIMPLE_FROUND_POLYFILL=!1;
 | 
			
		||||
$jscomp.defineProperty=$jscomp.ASSUME_ES5||"function"==typeof Object.defineProperties?Object.defineProperty:function(f,z,y){f!=Array.prototype&&f!=Object.prototype&&(f[z]=y.value)};$jscomp.getGlobal=function(f){return"undefined"!=typeof window&&window===f?f:"undefined"!=typeof global&&null!=global?global:f};$jscomp.global=$jscomp.getGlobal(this);
 | 
			
		||||
$jscomp.polyfill=function(f,z,y,p){if(z){y=$jscomp.global;f=f.split(".");for(p=0;p<f.length-1;p++){var H=f[p];H in y||(y[H]={});y=y[H]}f=f[f.length-1];p=y[f];z=z(p);z!=p&&null!=z&&$jscomp.defineProperty(y,f,{configurable:!0,writable:!0,value:z})}};$jscomp.polyfill("Array.prototype.find",function(f){return f?f:function(f,y){return $jscomp.findInternal(this,f,y).v}},"es6","es3");
 | 
			
		||||
(function(f){"function"===typeof define&&define.amd?define(["jquery"],function(z){return f(z,window,document)}):"object"===typeof exports?module.exports=function(z,y){z||(z=window);y||(y="undefined"!==typeof window?require("jquery"):require("jquery")(z));return f(y,z,z.document)}:f(jQuery,window,document)})(function(f,z,y,p){function H(a){var b,c,d={};f.each(a,function(e,h){(b=e.match(/^([^A-Z]+?)([A-Z])/))&&-1!=="a aa ai ao as b fn i m o s ".indexOf(b[1]+" ")&&(c=e.replace(b[0],b[2].toLowerCase()),
 | 
			
		||||
d[c]=e,"o"===b[1]&&H(a[e]))});a._hungarianMap=d}function L(a,b,c){a._hungarianMap||H(a);var d;f.each(b,function(e,h){d=a._hungarianMap[e];d===p||!c&&b[d]!==p||("o"===d.charAt(0)?(b[d]||(b[d]={}),f.extend(!0,b[d],b[e]),L(a[d],b[d],c)):b[d]=b[e])})}function Ga(a){var b=q.defaults.oLanguage,c=b.sDecimal;c&&Ha(c);if(a){var d=a.sZeroRecords;!a.sEmptyTable&&d&&"No data available in table"===b.sEmptyTable&&M(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&d&&"Loading..."===b.sLoadingRecords&&M(a,a,
 | 
			
		||||
"sZeroRecords","sLoadingRecords");a.sInfoThousands&&(a.sThousands=a.sInfoThousands);(a=a.sDecimal)&&c!==a&&Ha(a)}}function jb(a){F(a,"ordering","bSort");F(a,"orderMulti","bSortMulti");F(a,"orderClasses","bSortClasses");F(a,"orderCellsTop","bSortCellsTop");F(a,"order","aaSorting");F(a,"orderFixed","aaSortingFixed");F(a,"paging","bPaginate");F(a,"pagingType","sPaginationType");F(a,"pageLength","iDisplayLength");F(a,"searching","bFilter");"boolean"===typeof a.sScrollX&&(a.sScrollX=a.sScrollX?"100%":
 | 
			
		||||
"");"boolean"===typeof a.scrollX&&(a.scrollX=a.scrollX?"100%":"");if(a=a.aoSearchCols)for(var b=0,c=a.length;b<c;b++)a[b]&&L(q.models.oSearch,a[b])}function kb(a){F(a,"orderable","bSortable");F(a,"orderData","aDataSort");F(a,"orderSequence","asSorting");F(a,"orderDataType","sortDataType");var b=a.aDataSort;"number"!==typeof b||f.isArray(b)||(a.aDataSort=[b])}function lb(a){if(!q.__browser){var b={};q.__browser=b;var c=f("<div/>").css({position:"fixed",top:0,left:-1*f(z).scrollLeft(),height:1,width:1,
 | 
			
		||||
overflow:"hidden"}).append(f("<div/>").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(f("<div/>").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}f.extend(a.oBrowser,q.__browser);a.oScroll.iBarWidth=q.__browser.barWidth}
 | 
			
		||||
function mb(a,b,c,d,e,h){var g=!1;if(c!==p){var k=c;g=!0}for(;d!==e;)a.hasOwnProperty(d)&&(k=g?b(k,a[d],d,a):a[d],g=!0,d+=h);return k}function Ia(a,b){var c=q.defaults.column,d=a.aoColumns.length;c=f.extend({},q.models.oColumn,c,{nTh:b?b:y.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=f.extend({},q.models.oSearch,c[d]);ma(a,d,f(b).data())}function ma(a,b,c){b=a.aoColumns[b];
 | 
			
		||||
var d=a.oClasses,e=f(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var h=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);h&&(b.sWidthOrig=h[1])}c!==p&&null!==c&&(kb(c),L(q.defaults.column,c,!0),c.mDataProp===p||c.mData||(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),f.extend(b,c),M(b,c,"sWidth","sWidthOrig"),c.iDataSort!==p&&(b.aDataSort=[c.iDataSort]),M(b,c,"aDataSort"));var g=b.mData,k=U(g),
 | 
			
		||||
l=b.mRender?U(b.mRender):null;c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=f.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=k(a,b,p,c);return l&&b?l(d,b,a,c):d};b.fnSetData=function(a,b,c){return Q(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==f.inArray("asc",b.asSorting);c=-1!==f.inArray("desc",b.asSorting);b.bSortable&&(a||c)?a&&!c?(b.sSortingClass=
 | 
			
		||||
d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI):(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI="")}function aa(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ja(a);for(var c=0,d=b.length;c<d;c++)b[c].nTh.style.width=b[c].sWidth}b=a.oScroll;""===b.sY&&""===b.sX||na(a);A(a,null,"column-sizing",[a])}function ba(a,b){a=oa(a,"bVisible");return"number"===
 | 
			
		||||
typeof a[b]?a[b]:null}function ca(a,b){a=oa(a,"bVisible");b=f.inArray(b,a);return-1!==b?b:null}function W(a){var b=0;f.each(a.aoColumns,function(a,d){d.bVisible&&"none"!==f(d.nTh).css("display")&&b++});return b}function oa(a,b){var c=[];f.map(a.aoColumns,function(a,e){a[b]&&c.push(e)});return c}function Ka(a){var b=a.aoColumns,c=a.aoData,d=q.ext.type.detect,e,h,g;var k=0;for(e=b.length;k<e;k++){var f=b[k];var n=[];if(!f.sType&&f._sManualType)f.sType=f._sManualType;else if(!f.sType){var m=0;for(h=
 | 
			
		||||
d.length;m<h;m++){var w=0;for(g=c.length;w<g;w++){n[w]===p&&(n[w]=I(a,w,k,"type"));var u=d[m](n[w],a);if(!u&&m!==d.length-1)break;if("html"===u)break}if(u){f.sType=u;break}}f.sType||(f.sType="string")}}}function nb(a,b,c,d){var e,h,g,k=a.aoColumns;if(b)for(e=b.length-1;0<=e;e--){var l=b[e];var n=l.targets!==p?l.targets:l.aTargets;f.isArray(n)||(n=[n]);var m=0;for(h=n.length;m<h;m++)if("number"===typeof n[m]&&0<=n[m]){for(;k.length<=n[m];)Ia(a);d(n[m],l)}else if("number"===typeof n[m]&&0>n[m])d(k.length+
 | 
			
		||||
n[m],l);else if("string"===typeof n[m]){var w=0;for(g=k.length;w<g;w++)("_all"==n[m]||f(k[w].nTh).hasClass(n[m]))&&d(w,l)}}if(c)for(e=0,a=c.length;e<a;e++)d(e,c[e])}function R(a,b,c,d){var e=a.aoData.length,h=f.extend(!0,{},q.models.oRow,{src:c?"dom":"data",idx:e});h._aData=b;a.aoData.push(h);for(var g=a.aoColumns,k=0,l=g.length;k<l;k++)g[k].sType=null;a.aiDisplayMaster.push(e);b=a.rowIdFn(b);b!==p&&(a.aIds[b]=h);!c&&a.oFeatures.bDeferRender||La(a,e,c,d);return e}function pa(a,b){var c;b instanceof
 | 
			
		||||
f||(b=f(b));return b.map(function(b,e){c=Ma(a,e);return R(a,c.data,e,c.cells)})}function I(a,b,c,d){var e=a.iDraw,h=a.aoColumns[c],g=a.aoData[b]._aData,k=h.sDefaultContent,f=h.fnGetData(g,d,{settings:a,row:b,col:c});if(f===p)return a.iDrawError!=e&&null===k&&(O(a,0,"Requested unknown parameter "+("function"==typeof h.mData?"{function}":"'"+h.mData+"'")+" for row "+b+", column "+c,4),a.iDrawError=e),k;if((f===g||null===f)&&null!==k&&d!==p)f=k;else if("function"===typeof f)return f.call(g);return null===
 | 
			
		||||
f&&"display"==d?"":f}function ob(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d,{settings:a,row:b,col:c})}function Na(a){return f.map(a.match(/(\\.|[^\.])+/g)||[""],function(a){return a.replace(/\\\./g,".")})}function U(a){if(f.isPlainObject(a)){var b={};f.each(a,function(a,c){c&&(b[a]=U(c))});return function(a,c,h,g){var d=b[c]||b._;return d!==p?d(a,c,h,g):a}}if(null===a)return function(a){return a};if("function"===typeof a)return function(b,c,h,g){return a(b,c,h,g)};if("string"!==typeof a||
 | 
			
		||||
-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(b,c){return b[a]};var c=function(a,b,h){if(""!==h){var d=Na(h);for(var e=0,l=d.length;e<l;e++){h=d[e].match(da);var n=d[e].match(X);if(h){d[e]=d[e].replace(da,"");""!==d[e]&&(a=a[d[e]]);n=[];d.splice(0,e+1);d=d.join(".");if(f.isArray(a))for(e=0,l=a.length;e<l;e++)n.push(c(a[e],b,d));a=h[0].substring(1,h[0].length-1);a=""===a?n:n.join(a);break}else if(n){d[e]=d[e].replace(X,"");a=a[d[e]]();continue}if(null===a||a[d[e]]===
 | 
			
		||||
p)return p;a=a[d[e]]}}return a};return function(b,e){return c(b,e,a)}}function Q(a){if(f.isPlainObject(a))return Q(a._);if(null===a)return function(){};if("function"===typeof a)return function(b,d,e){a(b,"set",d,e)};if("string"!==typeof a||-1===a.indexOf(".")&&-1===a.indexOf("[")&&-1===a.indexOf("("))return function(b,d){b[a]=d};var b=function(a,d,e){e=Na(e);var c=e[e.length-1];for(var g,k,l=0,n=e.length-1;l<n;l++){g=e[l].match(da);k=e[l].match(X);if(g){e[l]=e[l].replace(da,"");a[e[l]]=[];c=e.slice();
 | 
			
		||||
c.splice(0,l+1);g=c.join(".");if(f.isArray(d))for(k=0,n=d.length;k<n;k++)c={},b(c,d[k],g),a[e[l]].push(c);else a[e[l]]=d;return}k&&(e[l]=e[l].replace(X,""),a=a[e[l]](d));if(null===a[e[l]]||a[e[l]]===p)a[e[l]]={};a=a[e[l]]}if(c.match(X))a[c.replace(X,"")](d);else a[c.replace(da,"")]=d};return function(c,d){return b(c,d,a)}}function Oa(a){return J(a.aoData,"_aData")}function qa(a){a.aoData.length=0;a.aiDisplayMaster.length=0;a.aiDisplay.length=0;a.aIds={}}function ra(a,b,c){for(var d=-1,e=0,h=a.length;e<
 | 
			
		||||
h;e++)a[e]==b?d=e:a[e]>b&&a[e]--; -1!=d&&c===p&&a.splice(d,1)}function ea(a,b,c,d){var e=a.aoData[b],h,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);c.innerHTML=I(a,b,d,"display")};if("dom"!==c&&(c&&"auto"!==c||"dom"!==e.src)){var k=e.anCells;if(k)if(d!==p)g(k[d],d);else for(c=0,h=k.length;c<h;c++)g(k[c],c)}else e._aData=Ma(a,e,d,d===p?p:e._aData).data;e._aSortData=null;e._aFilterData=null;g=a.aoColumns;if(d!==p)g[d].sType=null;else{c=0;for(h=g.length;c<h;c++)g[c].sType=null;
 | 
			
		||||
Pa(a,e)}}function Ma(a,b,c,d){var e=[],h=b.firstChild,g,k=0,l,n=a.aoColumns,m=a._rowReadObject;d=d!==p?d:m?{}:[];var w=function(a,b){if("string"===typeof a){var c=a.indexOf("@");-1!==c&&(c=a.substring(c+1),Q(a)(d,b.getAttribute(c)))}},u=function(a){if(c===p||c===k)g=n[k],l=f.trim(a.innerHTML),g&&g._bAttrSrc?(Q(g.mData._)(d,l),w(g.mData.sort,a),w(g.mData.type,a),w(g.mData.filter,a)):m?(g._setter||(g._setter=Q(g.mData)),g._setter(d,l)):d[k]=l;k++};if(h)for(;h;){var q=h.nodeName.toUpperCase();if("TD"==
 | 
			
		||||
q||"TH"==q)u(h),e.push(h);h=h.nextSibling}else for(e=b.anCells,h=0,q=e.length;h<q;h++)u(e[h]);(b=b.firstChild?b:b.nTr)&&(b=b.getAttribute("id"))&&Q(a.rowId)(d,b);return{data:d,cells:e}}function La(a,b,c,d){var e=a.aoData[b],h=e._aData,g=[],k,l;if(null===e.nTr){var n=c||y.createElement("tr");e.nTr=n;e.anCells=g;n._DT_RowIndex=b;Pa(a,e);var m=0;for(k=a.aoColumns.length;m<k;m++){var w=a.aoColumns[m];var p=(l=c?!1:!0)?y.createElement(w.sCellType):d[m];p._DT_CellIndex={row:b,column:m};g.push(p);if(l||
 | 
			
		||||
!(c&&!w.mRender&&w.mData===m||f.isPlainObject(w.mData)&&w.mData._===m+".display"))p.innerHTML=I(a,b,m,"display");w.sClass&&(p.className+=" "+w.sClass);w.bVisible&&!c?n.appendChild(p):!w.bVisible&&c&&p.parentNode.removeChild(p);w.fnCreatedCell&&w.fnCreatedCell.call(a.oInstance,p,I(a,b,m),h,b,m)}A(a,"aoRowCreatedCallback",null,[n,h,b,g])}e.nTr.setAttribute("role","row")}function Pa(a,b){var c=b.nTr,d=b._aData;if(c){if(a=a.rowIdFn(d))c.id=a;d.DT_RowClass&&(a=d.DT_RowClass.split(" "),b.__rowc=b.__rowc?
 | 
			
		||||
ta(b.__rowc.concat(a)):a,f(c).removeClass(b.__rowc.join(" ")).addClass(d.DT_RowClass));d.DT_RowAttr&&f(c).attr(d.DT_RowAttr);d.DT_RowData&&f(c).data(d.DT_RowData)}}function pb(a){var b,c,d=a.nTHead,e=a.nTFoot,h=0===f("th, td",d).length,g=a.oClasses,k=a.aoColumns;h&&(c=f("<tr/>").appendTo(d));var l=0;for(b=k.length;l<b;l++){var n=k[l];var m=f(n.nTh).addClass(n.sClass);h&&m.appendTo(c);a.oFeatures.bSort&&(m.addClass(n.sSortingClass),!1!==n.bSortable&&(m.attr("tabindex",a.iTabIndex).attr("aria-controls",
 | 
			
		||||
a.sTableId),Qa(a,n.nTh,l)));n.sTitle!=m[0].innerHTML&&m.html(n.sTitle);Ra(a,"header")(a,m,n,g)}h&&fa(a.aoHeader,d);f(d).find(">tr").attr("role","row");f(d).find(">tr>th, >tr>td").addClass(g.sHeaderTH);f(e).find(">tr>th, >tr>td").addClass(g.sFooterTH);if(null!==e)for(a=a.aoFooter[0],l=0,b=a.length;l<b;l++)n=k[l],n.nTf=a[l].cell,n.sClass&&f(n.nTf).addClass(n.sClass)}function ha(a,b,c){var d,e,h=[],g=[],k=a.aoColumns.length;if(b){c===p&&(c=!1);var l=0;for(d=b.length;l<d;l++){h[l]=b[l].slice();h[l].nTr=
 | 
			
		||||
b[l].nTr;for(e=k-1;0<=e;e--)a.aoColumns[e].bVisible||c||h[l].splice(e,1);g.push([])}l=0;for(d=h.length;l<d;l++){if(a=h[l].nTr)for(;e=a.firstChild;)a.removeChild(e);e=0;for(b=h[l].length;e<b;e++){var n=k=1;if(g[l][e]===p){a.appendChild(h[l][e].cell);for(g[l][e]=1;h[l+k]!==p&&h[l][e].cell==h[l+k][e].cell;)g[l+k][e]=1,k++;for(;h[l][e+n]!==p&&h[l][e].cell==h[l][e+n].cell;){for(c=0;c<k;c++)g[l+c][e+n]=1;n++}f(h[l][e].cell).attr("rowspan",k).attr("colspan",n)}}}}}function S(a){var b=A(a,"aoPreDrawCallback",
 | 
			
		||||
"preDraw",[a]);if(-1!==f.inArray(!1,b))K(a,!1);else{b=[];var c=0,d=a.asStripeClasses,e=d.length,h=a.oLanguage,g=a.iInitDisplayStart,k="ssp"==D(a),l=a.aiDisplay;a.bDrawing=!0;g!==p&&-1!==g&&(a._iDisplayStart=k?g:g>=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);g=a._iDisplayStart;var n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,K(a,!1);else if(!k)a.iDraw++;else if(!a.bDestroying&&!qb(a))return;if(0!==l.length)for(h=k?a.aoData.length:n,k=k?0:g;k<h;k++){var m=l[k],w=a.aoData[m];
 | 
			
		||||
null===w.nTr&&La(a,m);var u=w.nTr;if(0!==e){var q=d[c%e];w._sRowStripe!=q&&(f(u).removeClass(w._sRowStripe).addClass(q),w._sRowStripe=q)}A(a,"aoRowCallback",null,[u,w._aData,c,k,m]);b.push(u);c++}else c=h.sZeroRecords,1==a.iDraw&&"ajax"==D(a)?c=h.sLoadingRecords:h.sEmptyTable&&0===a.fnRecordsTotal()&&(c=h.sEmptyTable),b[0]=f("<tr/>",{"class":e?d[0]:""}).append(f("<td />",{valign:"top",colSpan:W(a),"class":a.oClasses.sRowEmpty}).html(c))[0];A(a,"aoHeaderCallback","header",[f(a.nTHead).children("tr")[0],
 | 
			
		||||
Oa(a),g,n,l]);A(a,"aoFooterCallback","footer",[f(a.nTFoot).children("tr")[0],Oa(a),g,n,l]);d=f(a.nTBody);d.children().detach();d.append(f(b));A(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function V(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&rb(a);d?ia(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;S(a);a._drawHold=!1}function sb(a){var b=a.oClasses,c=f(a.nTable);c=f("<div/>").insertBefore(c);var d=a.oFeatures,e=
 | 
			
		||||
f("<div/>",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var h=a.sDom.split(""),g,k,l,n,m,p,u=0;u<h.length;u++){g=null;k=h[u];if("<"==k){l=f("<div/>")[0];n=h[u+1];if("'"==n||'"'==n){m="";for(p=2;h[u+p]!=n;)m+=h[u+p],p++;"H"==m?m=b.sJUIHeader:"F"==m&&(m=b.sJUIFooter);-1!=m.indexOf(".")?(n=m.split("."),l.id=n[0].substr(1,n[0].length-1),l.className=n[1]):"#"==m.charAt(0)?l.id=m.substr(1,
 | 
			
		||||
m.length-1):l.className=m;u+=p}e.append(l);e=f(l)}else if(">"==k)e=e.parent();else if("l"==k&&d.bPaginate&&d.bLengthChange)g=tb(a);else if("f"==k&&d.bFilter)g=ub(a);else if("r"==k&&d.bProcessing)g=vb(a);else if("t"==k)g=wb(a);else if("i"==k&&d.bInfo)g=xb(a);else if("p"==k&&d.bPaginate)g=yb(a);else if(0!==q.ext.feature.length)for(l=q.ext.feature,p=0,n=l.length;p<n;p++)if(k==l[p].cFeature){g=l[p].fnInit(a);break}g&&(l=a.aanFeatures,l[k]||(l[k]=[]),l[k].push(g),e.append(g))}c.replaceWith(e);a.nHolding=
 | 
			
		||||
null}function fa(a,b){b=f(b).children("tr");var c,d,e;a.splice(0,a.length);var h=0;for(e=b.length;h<e;h++)a.push([]);h=0;for(e=b.length;h<e;h++){var g=b[h];for(c=g.firstChild;c;){if("TD"==c.nodeName.toUpperCase()||"TH"==c.nodeName.toUpperCase()){var k=1*c.getAttribute("colspan");var l=1*c.getAttribute("rowspan");k=k&&0!==k&&1!==k?k:1;l=l&&0!==l&&1!==l?l:1;var n=0;for(d=a[h];d[n];)n++;var m=n;var p=1===k?!0:!1;for(d=0;d<k;d++)for(n=0;n<l;n++)a[h+n][m+d]={cell:c,unique:p},a[h+n].nTr=g}c=c.nextSibling}}}
 | 
			
		||||
function ua(a,b,c){var d=[];c||(c=a.aoHeader,b&&(c=[],fa(c,b)));b=0;for(var e=c.length;b<e;b++)for(var h=0,g=c[b].length;h<g;h++)!c[b][h].unique||d[h]&&a.bSortCellsTop||(d[h]=c[b][h].cell);return d}function va(a,b,c){A(a,"aoServerParams","serverParams",[b]);if(b&&f.isArray(b)){var d={},e=/(.*?)\[\]$/;f.each(b,function(a,b){(a=b.name.match(e))?(a=a[0],d[a]||(d[a]=[]),d[a].push(b.value)):d[b.name]=b.value});b=d}var h=a.ajax,g=a.oInstance,k=function(b){A(a,null,"xhr",[a,b,a.jqXHR]);c(b)};if(f.isPlainObject(h)&&
 | 
			
		||||
h.data){var l=h.data;var n="function"===typeof l?l(b,a):l;b="function"===typeof l&&n?n:f.extend(!0,b,n);delete h.data}n={data:b,success:function(b){var c=b.error||b.sError;c&&O(a,0,c);a.json=b;k(b)},dataType:"json",cache:!1,type:a.sServerMethod,error:function(b,c,d){d=A(a,null,"xhr",[a,null,a.jqXHR]);-1===f.inArray(!0,d)&&("parsererror"==c?O(a,0,"Invalid JSON response",1):4===b.readyState&&O(a,0,"Ajax error",7));K(a,!1)}};a.oAjaxData=b;A(a,null,"preXhr",[a,b]);a.fnServerData?a.fnServerData.call(g,
 | 
			
		||||
a.sAjaxSource,f.map(b,function(a,b){return{name:b,value:a}}),k,a):a.sAjaxSource||"string"===typeof h?a.jqXHR=f.ajax(f.extend(n,{url:h||a.sAjaxSource})):"function"===typeof h?a.jqXHR=h.call(g,b,k,a):(a.jqXHR=f.ajax(f.extend(n,h)),h.data=l)}function qb(a){return a.bAjaxDataGet?(a.iDraw++,K(a,!0),va(a,zb(a),function(b){Ab(a,b)}),!1):!0}function zb(a){var b=a.aoColumns,c=b.length,d=a.oFeatures,e=a.oPreviousSearch,h=a.aoPreSearchCols,g=[],k=Y(a);var l=a._iDisplayStart;var n=!1!==d.bPaginate?a._iDisplayLength:
 | 
			
		||||
-1;var m=function(a,b){g.push({name:a,value:b})};m("sEcho",a.iDraw);m("iColumns",c);m("sColumns",J(b,"sName").join(","));m("iDisplayStart",l);m("iDisplayLength",n);var p={draw:a.iDraw,columns:[],order:[],start:l,length:n,search:{value:e.sSearch,regex:e.bRegex}};for(l=0;l<c;l++){var u=b[l];var sa=h[l];n="function"==typeof u.mData?"function":u.mData;p.columns.push({data:n,name:u.sName,searchable:u.bSearchable,orderable:u.bSortable,search:{value:sa.sSearch,regex:sa.bRegex}});m("mDataProp_"+l,n);d.bFilter&&
 | 
			
		||||
(m("sSearch_"+l,sa.sSearch),m("bRegex_"+l,sa.bRegex),m("bSearchable_"+l,u.bSearchable));d.bSort&&m("bSortable_"+l,u.bSortable)}d.bFilter&&(m("sSearch",e.sSearch),m("bRegex",e.bRegex));d.bSort&&(f.each(k,function(a,b){p.order.push({column:b.col,dir:b.dir});m("iSortCol_"+a,b.col);m("sSortDir_"+a,b.dir)}),m("iSortingCols",k.length));b=q.ext.legacy.ajax;return null===b?a.sAjaxSource?g:p:b?g:p}function Ab(a,b){var c=function(a,c){return b[a]!==p?b[a]:b[c]},d=wa(a,b),e=c("sEcho","draw"),h=c("iTotalRecords",
 | 
			
		||||
"recordsTotal");c=c("iTotalDisplayRecords","recordsFiltered");if(e){if(1*e<a.iDraw)return;a.iDraw=1*e}qa(a);a._iRecordsTotal=parseInt(h,10);a._iRecordsDisplay=parseInt(c,10);e=0;for(h=d.length;e<h;e++)R(a,d[e]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;S(a);a._bInitComplete||xa(a,b);a.bAjaxDataGet=!0;K(a,!1)}function wa(a,b){a=f.isPlainObject(a.ajax)&&a.ajax.dataSrc!==p?a.ajax.dataSrc:a.sAjaxDataProp;return"data"===a?b.aaData||b[a]:""!==a?U(a)(b):b}function ub(a){var b=a.oClasses,c=
 | 
			
		||||
a.sTableId,d=a.oLanguage,e=a.oPreviousSearch,h=a.aanFeatures,g='<input type="search" class="'+b.sFilterInput+'"/>',k=d.sSearch;k=k.match(/_INPUT_/)?k.replace("_INPUT_",g):k+g;b=f("<div/>",{id:h.f?null:c+"_filter","class":b.sFilter}).append(f("<label/>").append(k));h=function(){var b=this.value?this.value:"";b!=e.sSearch&&(ia(a,{sSearch:b,bRegex:e.bRegex,bSmart:e.bSmart,bCaseInsensitive:e.bCaseInsensitive}),a._iDisplayStart=0,S(a))};g=null!==a.searchDelay?a.searchDelay:"ssp"===D(a)?400:0;var l=f("input",
 | 
			
		||||
b).val(e.sSearch).attr("placeholder",d.sSearchPlaceholder).on("keyup.DT search.DT input.DT paste.DT cut.DT",g?Sa(h,g):h).on("keypress.DT",function(a){if(13==a.keyCode)return!1}).attr("aria-controls",c);f(a.nTable).on("search.dt.DT",function(b,c){if(a===c)try{l[0]!==y.activeElement&&l.val(e.sSearch)}catch(w){}});return b[0]}function ia(a,b,c){var d=a.oPreviousSearch,e=a.aoPreSearchCols,h=function(a){d.sSearch=a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive},g=function(a){return a.bEscapeRegex!==
 | 
			
		||||
p?!a.bEscapeRegex:a.bRegex};Ka(a);if("ssp"!=D(a)){Bb(a,b.sSearch,c,g(b),b.bSmart,b.bCaseInsensitive);h(b);for(b=0;b<e.length;b++)Cb(a,e[b].sSearch,b,g(e[b]),e[b].bSmart,e[b].bCaseInsensitive);Db(a)}else h(b);a.bFiltered=!0;A(a,null,"search",[a])}function Db(a){for(var b=q.ext.search,c=a.aiDisplay,d,e,h=0,g=b.length;h<g;h++){for(var k=[],l=0,n=c.length;l<n;l++)e=c[l],d=a.aoData[e],b[h](a,d._aFilterData,e,d._aData,l)&&k.push(e);c.length=0;f.merge(c,k)}}function Cb(a,b,c,d,e,h){if(""!==b){var g=[],k=
 | 
			
		||||
a.aiDisplay;d=Ta(b,d,e,h);for(e=0;e<k.length;e++)b=a.aoData[k[e]]._aFilterData[c],d.test(b)&&g.push(k[e]);a.aiDisplay=g}}function Bb(a,b,c,d,e,h){e=Ta(b,d,e,h);var g=a.oPreviousSearch.sSearch,k=a.aiDisplayMaster;h=[];0!==q.ext.search.length&&(c=!0);var f=Eb(a);if(0>=b.length)a.aiDisplay=k.slice();else{if(f||c||d||g.length>b.length||0!==b.indexOf(g)||a.bSorted)a.aiDisplay=k.slice();b=a.aiDisplay;for(c=0;c<b.length;c++)e.test(a.aoData[b[c]]._sFilterRow)&&h.push(b[c]);a.aiDisplay=h}}function Ta(a,b,
 | 
			
		||||
c,d){a=b?a:Ua(a);c&&(a="^(?=.*?"+f.map(a.match(/"[^"]+"|[^ ]+/g)||[""],function(a){if('"'===a.charAt(0)){var b=a.match(/^"(.*)"$/);a=b?b[1]:a}return a.replace('"',"")}).join(")(?=.*?")+").*$");return new RegExp(a,d?"i":"")}function Eb(a){var b=a.aoColumns,c,d,e=q.ext.type.search;var h=!1;var g=0;for(c=a.aoData.length;g<c;g++){var k=a.aoData[g];if(!k._aFilterData){var f=[];var n=0;for(d=b.length;n<d;n++){h=b[n];if(h.bSearchable){var m=I(a,g,n,"filter");e[h.sType]&&(m=e[h.sType](m));null===m&&(m="");
 | 
			
		||||
"string"!==typeof m&&m.toString&&(m=m.toString())}else m="";m.indexOf&&-1!==m.indexOf("&")&&(ya.innerHTML=m,m=$b?ya.textContent:ya.innerText);m.replace&&(m=m.replace(/[\r\n\u2028]/g,""));f.push(m)}k._aFilterData=f;k._sFilterRow=f.join("  ");h=!0}}return h}function Fb(a){return{search:a.sSearch,smart:a.bSmart,regex:a.bRegex,caseInsensitive:a.bCaseInsensitive}}function Gb(a){return{sSearch:a.search,bSmart:a.smart,bRegex:a.regex,bCaseInsensitive:a.caseInsensitive}}function xb(a){var b=a.sTableId,c=a.aanFeatures.i,
 | 
			
		||||
d=f("<div/>",{"class":a.oClasses.sInfo,id:c?null:b+"_info"});c||(a.aoDrawCallback.push({fn:Hb,sName:"information"}),d.attr("role","status").attr("aria-live","polite"),f(a.nTable).attr("aria-describedby",b+"_info"));return d[0]}function Hb(a){var b=a.aanFeatures.i;if(0!==b.length){var c=a.oLanguage,d=a._iDisplayStart+1,e=a.fnDisplayEnd(),h=a.fnRecordsTotal(),g=a.fnRecordsDisplay(),k=g?c.sInfo:c.sInfoEmpty;g!==h&&(k+=" "+c.sInfoFiltered);k+=c.sInfoPostFix;k=Ib(a,k);c=c.fnInfoCallback;null!==c&&(k=c.call(a.oInstance,
 | 
			
		||||
a,d,e,h,g,k));f(b).html(k)}}function Ib(a,b){var c=a.fnFormatNumber,d=a._iDisplayStart+1,e=a._iDisplayLength,h=a.fnRecordsDisplay(),g=-1===e;return b.replace(/_START_/g,c.call(a,d)).replace(/_END_/g,c.call(a,a.fnDisplayEnd())).replace(/_MAX_/g,c.call(a,a.fnRecordsTotal())).replace(/_TOTAL_/g,c.call(a,h)).replace(/_PAGE_/g,c.call(a,g?1:Math.ceil(d/e))).replace(/_PAGES_/g,c.call(a,g?1:Math.ceil(h/e)))}function ja(a){var b=a.iInitDisplayStart,c=a.aoColumns;var d=a.oFeatures;var e=a.bDeferLoading;if(a.bInitialised){sb(a);
 | 
			
		||||
pb(a);ha(a,a.aoHeader);ha(a,a.aoFooter);K(a,!0);d.bAutoWidth&&Ja(a);var h=0;for(d=c.length;h<d;h++){var g=c[h];g.sWidth&&(g.nTh.style.width=B(g.sWidth))}A(a,null,"preInit",[a]);V(a);c=D(a);if("ssp"!=c||e)"ajax"==c?va(a,[],function(c){var d=wa(a,c);for(h=0;h<d.length;h++)R(a,d[h]);a.iInitDisplayStart=b;V(a);K(a,!1);xa(a,c)},a):(K(a,!1),xa(a))}else setTimeout(function(){ja(a)},200)}function xa(a,b){a._bInitComplete=!0;(b||a.oInit.aaData)&&aa(a);A(a,null,"plugin-init",[a,b]);A(a,"aoInitComplete","init",
 | 
			
		||||
[a,b])}function Va(a,b){b=parseInt(b,10);a._iDisplayLength=b;Wa(a);A(a,null,"length",[a,b])}function tb(a){var b=a.oClasses,c=a.sTableId,d=a.aLengthMenu,e=f.isArray(d[0]),h=e?d[0]:d;d=e?d[1]:d;e=f("<select/>",{name:c+"_length","aria-controls":c,"class":b.sLengthSelect});for(var g=0,k=h.length;g<k;g++)e[0][g]=new Option("number"===typeof d[g]?a.fnFormatNumber(d[g]):d[g],h[g]);var l=f("<div><label/></div>").addClass(b.sLength);a.aanFeatures.l||(l[0].id=c+"_length");l.children().append(a.oLanguage.sLengthMenu.replace("_MENU_",
 | 
			
		||||
e[0].outerHTML));f("select",l).val(a._iDisplayLength).on("change.DT",function(b){Va(a,f(this).val());S(a)});f(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&f("select",l).val(d)});return l[0]}function yb(a){var b=a.sPaginationType,c=q.ext.pager[b],d="function"===typeof c,e=function(a){S(a)};b=f("<div/>").addClass(a.oClasses.sPaging+b)[0];var h=a.aanFeatures;d||c.fnInit(a,b,e);h.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,g=a._iDisplayLength,
 | 
			
		||||
f=a.fnRecordsDisplay(),m=-1===g;b=m?0:Math.ceil(b/g);g=m?1:Math.ceil(f/g);f=c(b,g);var p;m=0;for(p=h.p.length;m<p;m++)Ra(a,"pageButton")(a,h.p[m],m,f,b,g)}else c.fnUpdate(a,e)},sName:"pagination"}));return b}function Xa(a,b,c){var d=a._iDisplayStart,e=a._iDisplayLength,h=a.fnRecordsDisplay();0===h||-1===e?d=0:"number"===typeof b?(d=b*e,d>h&&(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e<h&&(d+=e):"last"==b?d=Math.floor((h-1)/e)*e:O(a,0,"Unknown paging action: "+b,5);b=
 | 
			
		||||
a._iDisplayStart!==d;a._iDisplayStart=d;b&&(A(a,null,"page",[a]),c&&S(a));return b}function vb(a){return f("<div/>",{id:a.aanFeatures.r?null:a.sTableId+"_processing","class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function K(a,b){a.oFeatures.bProcessing&&f(a.aanFeatures.r).css("display",b?"block":"none");A(a,null,"processing",[a,b])}function wb(a){var b=f(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY,
 | 
			
		||||
h=a.oClasses,g=b.children("caption"),k=g.length?g[0]._captionSide:null,l=f(b[0].cloneNode(!1)),n=f(b[0].cloneNode(!1)),m=b.children("tfoot");m.length||(m=null);l=f("<div/>",{"class":h.sScrollWrapper}).append(f("<div/>",{"class":h.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?d?B(d):null:"100%"}).append(f("<div/>",{"class":h.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===k?g:null).append(b.children("thead"))))).append(f("<div/>",
 | 
			
		||||
{"class":h.sScrollBody}).css({position:"relative",overflow:"auto",width:d?B(d):null}).append(b));m&&l.append(f("<div/>",{"class":h.sScrollFoot}).css({overflow:"hidden",border:0,width:d?d?B(d):null:"100%"}).append(f("<div/>",{"class":h.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",0).append("bottom"===k?g:null).append(b.children("tfoot")))));b=l.children();var p=b[0];h=b[1];var u=m?b[2]:null;if(d)f(h).on("scroll.DT",function(a){a=this.scrollLeft;p.scrollLeft=a;m&&(u.scrollLeft=a)});
 | 
			
		||||
f(h).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=p;a.nScrollBody=h;a.nScrollFoot=u;a.aoDrawCallback.push({fn:na,sName:"scrolling"});return l[0]}function na(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY;b=b.iBarWidth;var h=f(a.nScrollHead),g=h[0].style,k=h.children("div"),l=k[0].style,n=k.children("table");k=a.nScrollBody;var m=f(k),w=k.style,u=f(a.nScrollFoot).children("div"),q=u.children("table"),t=f(a.nTHead),r=f(a.nTable),v=r[0],za=v.style,T=a.nTFoot?f(a.nTFoot):null,A=a.oBrowser,
 | 
			
		||||
x=A.bScrollOversize,ac=J(a.aoColumns,"nTh"),Ya=[],y=[],z=[],C=[],G,H=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};var D=k.scrollHeight>k.clientHeight;if(a.scrollBarVis!==D&&a.scrollBarVis!==p)a.scrollBarVis=D,aa(a);else{a.scrollBarVis=D;r.children("thead, tfoot").remove();if(T){var E=T.clone().prependTo(r);var F=T.find("tr");E=E.find("tr")}var I=t.clone().prependTo(r);t=t.find("tr");D=I.find("tr");I.find("th, td").removeAttr("tabindex");
 | 
			
		||||
c||(w.width="100%",h[0].style.width="100%");f.each(ua(a,I),function(b,c){G=ba(a,b);c.style.width=a.aoColumns[G].sWidth});T&&N(function(a){a.style.width=""},E);h=r.outerWidth();""===c?(za.width="100%",x&&(r.find("tbody").height()>k.offsetHeight||"scroll"==m.css("overflow-y"))&&(za.width=B(r.outerWidth()-b)),h=r.outerWidth()):""!==d&&(za.width=B(d),h=r.outerWidth());N(H,D);N(function(a){z.push(a.innerHTML);Ya.push(B(f(a).css("width")))},D);N(function(a,b){-1!==f.inArray(a,ac)&&(a.style.width=Ya[b])},
 | 
			
		||||
t);f(D).height(0);T&&(N(H,E),N(function(a){C.push(a.innerHTML);y.push(B(f(a).css("width")))},E),N(function(a,b){a.style.width=y[b]},F),f(E).height(0));N(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+z[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=Ya[b]},D);T&&N(function(a,b){a.innerHTML='<div class="dataTables_sizing">'+C[b]+"</div>";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=y[b]},E);r.outerWidth()<
 | 
			
		||||
h?(F=k.scrollHeight>k.offsetHeight||"scroll"==m.css("overflow-y")?h+b:h,x&&(k.scrollHeight>k.offsetHeight||"scroll"==m.css("overflow-y"))&&(za.width=B(F-b)),""!==c&&""===d||O(a,1,"Possible column misalignment",6)):F="100%";w.width=B(F);g.width=B(F);T&&(a.nScrollFoot.style.width=B(F));!e&&x&&(w.height=B(v.offsetHeight+b));c=r.outerWidth();n[0].style.width=B(c);l.width=B(c);d=r.height()>k.clientHeight||"scroll"==m.css("overflow-y");e="padding"+(A.bScrollbarLeft?"Left":"Right");l[e]=d?b+"px":"0px";T&&
 | 
			
		||||
(q[0].style.width=B(c),u[0].style.width=B(c),u[0].style[e]=d?b+"px":"0px");r.children("colgroup").insertBefore(r.children("thead"));m.trigger("scroll");!a.bSorted&&!a.bFiltered||a._drawHold||(k.scrollTop=0)}}function N(a,b,c){for(var d=0,e=0,h=b.length,g,k;e<h;){g=b[e].firstChild;for(k=c?c[e].firstChild:null;g;)1===g.nodeType&&(c?a(g,k,d):a(g,d),d++),g=g.nextSibling,k=c?k.nextSibling:null;e++}}function Ja(a){var b=a.nTable,c=a.aoColumns,d=a.oScroll,e=d.sY,h=d.sX,g=d.sXInner,k=c.length,l=oa(a,"bVisible"),
 | 
			
		||||
n=f("th",a.nTHead),m=b.getAttribute("width"),p=b.parentNode,u=!1,q,t=a.oBrowser;d=t.bScrollOversize;(q=b.style.width)&&-1!==q.indexOf("%")&&(m=q);for(q=0;q<l.length;q++){var r=c[l[q]];null!==r.sWidth&&(r.sWidth=Jb(r.sWidthOrig,p),u=!0)}if(d||!u&&!h&&!e&&k==W(a)&&k==n.length)for(q=0;q<k;q++)l=ba(a,q),null!==l&&(c[l].sWidth=B(n.eq(q).width()));else{k=f(b).clone().css("visibility","hidden").removeAttr("id");k.find("tbody tr").remove();var v=f("<tr/>").appendTo(k.find("tbody"));k.find("thead, tfoot").remove();
 | 
			
		||||
k.append(f(a.nTHead).clone()).append(f(a.nTFoot).clone());k.find("tfoot th, tfoot td").css("width","");n=ua(a,k.find("thead")[0]);for(q=0;q<l.length;q++)r=c[l[q]],n[q].style.width=null!==r.sWidthOrig&&""!==r.sWidthOrig?B(r.sWidthOrig):"",r.sWidthOrig&&h&&f(n[q]).append(f("<div/>").css({width:r.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(q=0;q<l.length;q++)u=l[q],r=c[u],f(Kb(a,u)).clone(!1).append(r.sContentPadding).appendTo(v);f("[name]",k).removeAttr("name");r=f("<div/>").css(h||
 | 
			
		||||
e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(k).appendTo(p);h&&g?k.width(g):h?(k.css("width","auto"),k.removeAttr("width"),k.width()<p.clientWidth&&m&&k.width(p.clientWidth)):e?k.width(p.clientWidth):m&&k.width(m);for(q=e=0;q<l.length;q++)p=f(n[q]),g=p.outerWidth()-p.width(),p=t.bBounding?Math.ceil(n[q].getBoundingClientRect().width):p.outerWidth(),e+=p,c[l[q]].sWidth=B(p-g);b.style.width=B(e);r.remove()}m&&(b.style.width=B(m));!m&&!h||a._reszEvt||(b=function(){f(z).on("resize.DT-"+
 | 
			
		||||
a.sInstance,Sa(function(){aa(a)}))},d?setTimeout(b,1E3):b(),a._reszEvt=!0)}function Jb(a,b){if(!a)return 0;a=f("<div/>").css("width",B(a)).appendTo(b||y.body);b=a[0].offsetWidth;a.remove();return b}function Kb(a,b){var c=Lb(a,b);if(0>c)return null;var d=a.aoData[c];return d.nTr?d.anCells[b]:f("<td/>").html(I(a,c,b,"display"))[0]}function Lb(a,b){for(var c,d=-1,e=-1,h=0,g=a.aoData.length;h<g;h++)c=I(a,h,b,"display")+"",c=c.replace(bc,""),c=c.replace(/ /g," "),c.length>d&&(d=c.length,e=h);return e}
 | 
			
		||||
function B(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function Y(a){var b=[],c=a.aoColumns;var d=a.aaSortingFixed;var e=f.isPlainObject(d);var h=[];var g=function(a){a.length&&!f.isArray(a[0])?h.push(a):f.merge(h,a)};f.isArray(d)&&g(d);e&&d.pre&&g(d.pre);g(a.aaSorting);e&&d.post&&g(d.post);for(a=0;a<h.length;a++){var k=h[a][0];g=c[k].aDataSort;d=0;for(e=g.length;d<e;d++){var l=g[d];var n=c[l].sType||"string";h[a]._idx===p&&(h[a]._idx=f.inArray(h[a][1],c[l].asSorting));
 | 
			
		||||
b.push({src:k,col:l,dir:h[a][1],index:h[a]._idx,type:n,formatter:q.ext.type.order[n+"-pre"]})}}return b}function rb(a){var b,c=[],d=q.ext.type.order,e=a.aoData,h=0,g=a.aiDisplayMaster;Ka(a);var k=Y(a);var f=0;for(b=k.length;f<b;f++){var n=k[f];n.formatter&&h++;Mb(a,n.col)}if("ssp"!=D(a)&&0!==k.length){f=0;for(b=g.length;f<b;f++)c[g[f]]=f;h===k.length?g.sort(function(a,b){var d,h=k.length,g=e[a]._aSortData,f=e[b]._aSortData;for(d=0;d<h;d++){var l=k[d];var m=g[l.col];var n=f[l.col];m=m<n?-1:m>n?1:0;
 | 
			
		||||
if(0!==m)return"asc"===l.dir?m:-m}m=c[a];n=c[b];return m<n?-1:m>n?1:0}):g.sort(function(a,b){var h,g=k.length,f=e[a]._aSortData,l=e[b]._aSortData;for(h=0;h<g;h++){var m=k[h];var n=f[m.col];var p=l[m.col];m=d[m.type+"-"+m.dir]||d["string-"+m.dir];n=m(n,p);if(0!==n)return n}n=c[a];p=c[b];return n<p?-1:n>p?1:0})}a.bSorted=!0}function Nb(a){var b=a.aoColumns,c=Y(a);a=a.oLanguage.oAria;for(var d=0,e=b.length;d<e;d++){var h=b[d];var g=h.asSorting;var k=h.sTitle.replace(/<.*?>/g,"");var f=h.nTh;f.removeAttribute("aria-sort");
 | 
			
		||||
h.bSortable&&(0<c.length&&c[0].col==d?(f.setAttribute("aria-sort","asc"==c[0].dir?"ascending":"descending"),h=g[c[0].index+1]||g[0]):h=g[0],k+="asc"===h?a.sSortAscending:a.sSortDescending);f.setAttribute("aria-label",k)}}function Za(a,b,c,d){var e=a.aaSorting,h=a.aoColumns[b].asSorting,g=function(a,b){var c=a._idx;c===p&&(c=f.inArray(a[1],h));return c+1<h.length?c+1:b?null:0};"number"===typeof e[0]&&(e=a.aaSorting=[e]);c&&a.oFeatures.bSortMulti?(c=f.inArray(b,J(e,"0")),-1!==c?(b=g(e[c],!0),null===
 | 
			
		||||
b&&1===e.length&&(b=0),null===b?e.splice(c,1):(e[c][1]=h[b],e[c]._idx=b)):(e.push([b,h[0],0]),e[e.length-1]._idx=0)):e.length&&e[0][0]==b?(b=g(e[0]),e.length=1,e[0][1]=h[b],e[0]._idx=b):(e.length=0,e.push([b,h[0]]),e[0]._idx=0);V(a);"function"==typeof d&&d(a)}function Qa(a,b,c,d){var e=a.aoColumns[c];$a(b,{},function(b){!1!==e.bSortable&&(a.oFeatures.bProcessing?(K(a,!0),setTimeout(function(){Za(a,c,b.shiftKey,d);"ssp"!==D(a)&&K(a,!1)},0)):Za(a,c,b.shiftKey,d))})}function Aa(a){var b=a.aLastSort,
 | 
			
		||||
c=a.oClasses.sSortColumn,d=Y(a),e=a.oFeatures,h;if(e.bSort&&e.bSortClasses){e=0;for(h=b.length;e<h;e++){var g=b[e].src;f(J(a.aoData,"anCells",g)).removeClass(c+(2>e?e+1:3))}e=0;for(h=d.length;e<h;e++)g=d[e].src,f(J(a.aoData,"anCells",g)).addClass(c+(2>e?e+1:3))}a.aLastSort=d}function Mb(a,b){var c=a.aoColumns[b],d=q.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,ca(a,b)));for(var h,g=q.ext.type.order[c.sType+"-pre"],k=0,f=a.aoData.length;k<f;k++)if(c=a.aoData[k],c._aSortData||(c._aSortData=
 | 
			
		||||
[]),!c._aSortData[b]||d)h=d?e[k]:I(a,k,b,"sort"),c._aSortData[b]=g?g(h):h}function Ba(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b={time:+new Date,start:a._iDisplayStart,length:a._iDisplayLength,order:f.extend(!0,[],a.aaSorting),search:Fb(a.oPreviousSearch),columns:f.map(a.aoColumns,function(b,d){return{visible:b.bVisible,search:Fb(a.aoPreSearchCols[d])}})};A(a,"aoStateSaveParams","stateSaveParams",[a,b]);a.oSavedState=b;a.fnStateSaveCallback.call(a.oInstance,a,b)}}function Ob(a,b,c){var d,
 | 
			
		||||
e,h=a.aoColumns;b=function(b){if(b&&b.time){var g=A(a,"aoStateLoadParams","stateLoadParams",[a,b]);if(-1===f.inArray(!1,g)&&(g=a.iStateDuration,!(0<g&&b.time<+new Date-1E3*g||b.columns&&h.length!==b.columns.length))){a.oLoadedState=f.extend(!0,{},b);b.start!==p&&(a._iDisplayStart=b.start,a.iInitDisplayStart=b.start);b.length!==p&&(a._iDisplayLength=b.length);b.order!==p&&(a.aaSorting=[],f.each(b.order,function(b,c){a.aaSorting.push(c[0]>=h.length?[0,c[1]]:c)}));b.search!==p&&f.extend(a.oPreviousSearch,
 | 
			
		||||
Gb(b.search));if(b.columns)for(d=0,e=b.columns.length;d<e;d++)g=b.columns[d],g.visible!==p&&(h[d].bVisible=g.visible),g.search!==p&&f.extend(a.aoPreSearchCols[d],Gb(g.search));A(a,"aoStateLoaded","stateLoaded",[a,b])}}c()};if(a.oFeatures.bStateSave){var g=a.fnStateLoadCallback.call(a.oInstance,a,b);g!==p&&b(g)}else c()}function Ca(a){var b=q.settings;a=f.inArray(a,J(b,"nTable"));return-1!==a?b[a]:null}function O(a,b,c,d){c="DataTables warning: "+(a?"table id="+a.sTableId+" - ":"")+c;d&&(c+=". For more information about this error, please see http://datatables.net/tn/"+
 | 
			
		||||
d);if(b)z.console&&console.log&&console.log(c);else if(b=q.ext,b=b.sErrMode||b.errMode,a&&A(a,null,"error",[a,d,c]),"alert"==b)alert(c);else{if("throw"==b)throw Error(c);"function"==typeof b&&b(a,d,c)}}function M(a,b,c,d){f.isArray(c)?f.each(c,function(c,d){f.isArray(d)?M(a,b,d[0],d[1]):M(a,b,d)}):(d===p&&(d=c),b[c]!==p&&(a[d]=b[c]))}function ab(a,b,c){var d;for(d in b)if(b.hasOwnProperty(d)){var e=b[d];f.isPlainObject(e)?(f.isPlainObject(a[d])||(a[d]={}),f.extend(!0,a[d],e)):c&&"data"!==d&&"aaData"!==
 | 
			
		||||
d&&f.isArray(e)?a[d]=e.slice():a[d]=e}return a}function $a(a,b,c){f(a).on("click.DT",b,function(b){f(a).blur();c(b)}).on("keypress.DT",b,function(a){13===a.which&&(a.preventDefault(),c(a))}).on("selectstart.DT",function(){return!1})}function E(a,b,c,d){c&&a[b].push({fn:c,sName:d})}function A(a,b,c,d){var e=[];b&&(e=f.map(a[b].slice().reverse(),function(b,c){return b.fn.apply(a.oInstance,d)}));null!==c&&(b=f.Event(c+".dt"),f(a.nTable).trigger(b,d),e.push(b.result));return e}function Wa(a){var b=a._iDisplayStart,
 | 
			
		||||
c=a.fnDisplayEnd(),d=a._iDisplayLength;b>=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Ra(a,b){a=a.renderer;var c=q.ext.renderer[b];return f.isPlainObject(a)&&a[b]?c[a[b]]||c._:"string"===typeof a?c[a]||c._:c._}function D(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ka(a,b){var c=Pb.numbers_length,d=Math.floor(c/2);b<=c?a=Z(0,b):a<=d?(a=Z(0,c-2),a.push("ellipsis"),a.push(b-1)):(a>=b-1-d?a=Z(b-(c-2),b):(a=Z(a-d+2,a+d-1),a.push("ellipsis"),
 | 
			
		||||
a.push(b-1)),a.splice(0,0,"ellipsis"),a.splice(0,0,0));a.DT_el="span";return a}function Ha(a){f.each({num:function(b){return Da(b,a)},"num-fmt":function(b){return Da(b,a,bb)},"html-num":function(b){return Da(b,a,Ea)},"html-num-fmt":function(b){return Da(b,a,Ea,bb)}},function(b,c){C.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(C.type.search[b+a]=C.type.search.html)})}function Qb(a){return function(){var b=[Ca(this[q.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return q.ext.internal[a].apply(this,
 | 
			
		||||
b)}}var q=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new v(Ca(this[C.iApiIndex])):new v(this)};this.fnAddData=function(a,b){var c=this.api(!0);a=f.isArray(a)&&(f.isArray(a[0])||f.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===p||b)&&c.draw();return a.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===p||a?b.draw(!1):
 | 
			
		||||
(""!==d.sX||""!==d.sY)&&na(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===p||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0);a=d.rows(a);var e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===p||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,f){e=this.api(!0);null===b||b===p?
 | 
			
		||||
e.search(a,c,d,f):e.column(b).search(a,c,d,f);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==p){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==p||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==p?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(),
 | 
			
		||||
[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){a=this.api(!0).page(a);(b===p||b)&&a.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===p||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return Ca(this[C.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener=
 | 
			
		||||
function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===p||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===p||e)&&h.columns.adjust();(d===p||d)&&h.draw();return 0};this.fnVersionCheck=C.fnVersionCheck;var b=this,c=a===p,d=this.length;c&&(a={});this.oApi=this.internal=C.internal;for(var e in q.ext.internal)e&&(this[e]=Qb(e));this.each(function(){var e={},g=1<d?ab(e,a,!0):a,k=0,l;e=this.getAttribute("id");var n=!1,m=q.defaults,w=f(this);if("table"!=
 | 
			
		||||
this.nodeName.toLowerCase())O(null,0,"Non-table node initialisation ("+this.nodeName+")",2);else{jb(m);kb(m.column);L(m,m,!0);L(m.column,m.column,!0);L(m,f.extend(g,w.data()),!0);var u=q.settings;k=0;for(l=u.length;k<l;k++){var t=u[k];if(t.nTable==this||t.nTHead&&t.nTHead.parentNode==this||t.nTFoot&&t.nTFoot.parentNode==this){var v=g.bRetrieve!==p?g.bRetrieve:m.bRetrieve;if(c||v)return t.oInstance;if(g.bDestroy!==p?g.bDestroy:m.bDestroy){t.oInstance.fnDestroy();break}else{O(t,0,"Cannot reinitialise DataTable",
 | 
			
		||||
3);return}}if(t.sTableId==this.id){u.splice(k,1);break}}if(null===e||""===e)this.id=e="DataTables_Table_"+q.ext._unique++;var r=f.extend(!0,{},q.models.oSettings,{sDestroyWidth:w[0].style.width,sInstance:e,sTableId:e});r.nTable=this;r.oApi=b.internal;r.oInit=g;u.push(r);r.oInstance=1===b.length?b:w.dataTable();jb(g);Ga(g.oLanguage);g.aLengthMenu&&!g.iDisplayLength&&(g.iDisplayLength=f.isArray(g.aLengthMenu[0])?g.aLengthMenu[0][0]:g.aLengthMenu[0]);g=ab(f.extend(!0,{},m),g);M(r.oFeatures,g,"bPaginate bLengthChange bFilter bSort bSortMulti bInfo bProcessing bAutoWidth bSortClasses bServerSide bDeferRender".split(" "));
 | 
			
		||||
M(r,g,["asStripeClasses","ajax","fnServerData","fnFormatNumber","sServerMethod","aaSorting","aaSortingFixed","aLengthMenu","sPaginationType","sAjaxSource","sAjaxDataProp","iStateDuration","sDom","bSortCellsTop","iTabIndex","fnStateLoadCallback","fnStateSaveCallback","renderer","searchDelay","rowId",["iCookieDuration","iStateDuration"],["oSearch","oPreviousSearch"],["aoSearchCols","aoPreSearchCols"],["iDisplayLength","_iDisplayLength"]]);M(r.oScroll,g,[["sScrollX","sX"],["sScrollXInner","sXInner"],
 | 
			
		||||
["sScrollY","sY"],["bScrollCollapse","bCollapse"]]);M(r.oLanguage,g,"fnInfoCallback");E(r,"aoDrawCallback",g.fnDrawCallback,"user");E(r,"aoServerParams",g.fnServerParams,"user");E(r,"aoStateSaveParams",g.fnStateSaveParams,"user");E(r,"aoStateLoadParams",g.fnStateLoadParams,"user");E(r,"aoStateLoaded",g.fnStateLoaded,"user");E(r,"aoRowCallback",g.fnRowCallback,"user");E(r,"aoRowCreatedCallback",g.fnCreatedRow,"user");E(r,"aoHeaderCallback",g.fnHeaderCallback,"user");E(r,"aoFooterCallback",g.fnFooterCallback,
 | 
			
		||||
"user");E(r,"aoInitComplete",g.fnInitComplete,"user");E(r,"aoPreDrawCallback",g.fnPreDrawCallback,"user");r.rowIdFn=U(g.rowId);lb(r);var x=r.oClasses;f.extend(x,q.ext.classes,g.oClasses);w.addClass(x.sTable);r.iInitDisplayStart===p&&(r.iInitDisplayStart=g.iDisplayStart,r._iDisplayStart=g.iDisplayStart);null!==g.iDeferLoading&&(r.bDeferLoading=!0,e=f.isArray(g.iDeferLoading),r._iRecordsDisplay=e?g.iDeferLoading[0]:g.iDeferLoading,r._iRecordsTotal=e?g.iDeferLoading[1]:g.iDeferLoading);var y=r.oLanguage;
 | 
			
		||||
f.extend(!0,y,g.oLanguage);y.sUrl&&(f.ajax({dataType:"json",url:y.sUrl,success:function(a){Ga(a);L(m.oLanguage,a);f.extend(!0,y,a);ja(r)},error:function(){ja(r)}}),n=!0);null===g.asStripeClasses&&(r.asStripeClasses=[x.sStripeOdd,x.sStripeEven]);e=r.asStripeClasses;var z=w.children("tbody").find("tr").eq(0);-1!==f.inArray(!0,f.map(e,function(a,b){return z.hasClass(a)}))&&(f("tbody tr",this).removeClass(e.join(" ")),r.asDestroyStripes=e.slice());e=[];u=this.getElementsByTagName("thead");0!==u.length&&
 | 
			
		||||
(fa(r.aoHeader,u[0]),e=ua(r));if(null===g.aoColumns)for(u=[],k=0,l=e.length;k<l;k++)u.push(null);else u=g.aoColumns;k=0;for(l=u.length;k<l;k++)Ia(r,e?e[k]:null);nb(r,g.aoColumnDefs,u,function(a,b){ma(r,a,b)});if(z.length){var B=function(a,b){return null!==a.getAttribute("data-"+b)?b:null};f(z[0]).children("th, td").each(function(a,b){var c=r.aoColumns[a];if(c.mData===a){var d=B(b,"sort")||B(b,"order");b=B(b,"filter")||B(b,"search");if(null!==d||null!==b)c.mData={_:a+".display",sort:null!==d?a+".@data-"+
 | 
			
		||||
d:p,type:null!==d?a+".@data-"+d:p,filter:null!==b?a+".@data-"+b:p},ma(r,a)}})}var C=r.oFeatures;e=function(){if(g.aaSorting===p){var a=r.aaSorting;k=0;for(l=a.length;k<l;k++)a[k][1]=r.aoColumns[k].asSorting[0]}Aa(r);C.bSort&&E(r,"aoDrawCallback",function(){if(r.bSorted){var a=Y(r),b={};f.each(a,function(a,c){b[c.src]=c.dir});A(r,null,"order",[r,a,b]);Nb(r)}});E(r,"aoDrawCallback",function(){(r.bSorted||"ssp"===D(r)||C.bDeferRender)&&Aa(r)},"sc");a=w.children("caption").each(function(){this._captionSide=
 | 
			
		||||
f(this).css("caption-side")});var b=w.children("thead");0===b.length&&(b=f("<thead/>").appendTo(w));r.nTHead=b[0];b=w.children("tbody");0===b.length&&(b=f("<tbody/>").appendTo(w));r.nTBody=b[0];b=w.children("tfoot");0===b.length&&0<a.length&&(""!==r.oScroll.sX||""!==r.oScroll.sY)&&(b=f("<tfoot/>").appendTo(w));0===b.length||0===b.children().length?w.addClass(x.sNoFooter):0<b.length&&(r.nTFoot=b[0],fa(r.aoFooter,r.nTFoot));if(g.aaData)for(k=0;k<g.aaData.length;k++)R(r,g.aaData[k]);else(r.bDeferLoading||
 | 
			
		||||
"dom"==D(r))&&pa(r,f(r.nTBody).children("tr"));r.aiDisplay=r.aiDisplayMaster.slice();r.bInitialised=!0;!1===n&&ja(r)};g.bStateSave?(C.bStateSave=!0,E(r,"aoDrawCallback",Ba,"state_save"),Ob(r,g,e)):e()}});b=null;return this},C,t,x,cb={},Rb=/[\r\n\u2028]/g,Ea=/<.*?>/g,cc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,dc=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\|\$|\^|\-)/g,bb=/[',$£€¥%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,P=function(a){return a&&!0!==a&&"-"!==a?!1:
 | 
			
		||||
!0},Sb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Tb=function(a,b){cb[b]||(cb[b]=new RegExp(Ua(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(cb[b],"."):a},db=function(a,b,c){var d="string"===typeof a;if(P(a))return!0;b&&d&&(a=Tb(a,b));c&&d&&(a=a.replace(bb,""));return!isNaN(parseFloat(a))&&isFinite(a)},Ub=function(a,b,c){return P(a)?!0:P(a)||"string"===typeof a?db(a.replace(Ea,""),b,c)?!0:null:null},J=function(a,b,c){var d=[],e=0,h=a.length;if(c!==
 | 
			
		||||
p)for(;e<h;e++)a[e]&&a[e][b]&&d.push(a[e][b][c]);else for(;e<h;e++)a[e]&&d.push(a[e][b]);return d},la=function(a,b,c,d){var e=[],h=0,g=b.length;if(d!==p)for(;h<g;h++)a[b[h]][c]&&e.push(a[b[h]][c][d]);else for(;h<g;h++)e.push(a[b[h]][c]);return e},Z=function(a,b){var c=[];if(b===p){b=0;var d=a}else d=b,b=a;for(a=b;a<d;a++)c.push(a);return c},Vb=function(a){for(var b=[],c=0,d=a.length;c<d;c++)a[c]&&b.push(a[c]);return b},ta=function(a){a:{if(!(2>a.length)){var b=a.slice().sort();for(var c=b[0],d=1,
 | 
			
		||||
e=b.length;d<e;d++){if(b[d]===c){b=!1;break a}c=b[d]}}b=!0}if(b)return a.slice();b=[];e=a.length;var h,g=0;d=0;a:for(;d<e;d++){c=a[d];for(h=0;h<g;h++)if(b[h]===c)continue a;b.push(c);g++}return b};q.util={throttle:function(a,b){var c=b!==p?b:200,d,e;return function(){var b=this,g=+new Date,f=arguments;d&&g<d+c?(clearTimeout(e),e=setTimeout(function(){d=p;a.apply(b,f)},c)):(d=g,a.apply(b,f))}},escapeRegex:function(a){return a.replace(dc,"\\$1")}};var F=function(a,b,c){a[b]!==p&&(a[c]=a[b])},da=/\[.*?\]$/,
 | 
			
		||||
X=/\(\)$/,Ua=q.util.escapeRegex,ya=f("<div>")[0],$b=ya.textContent!==p,bc=/<.*?>/g,Sa=q.util.throttle,Wb=[],G=Array.prototype,ec=function(a){var b,c=q.settings,d=f.map(c,function(a,b){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase()){var e=f.inArray(a,d);return-1!==e?[c[e]]:null}if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?b=f(a):a instanceof f&&(b=a)}else return[];if(b)return b.map(function(a){e=f.inArray(this,
 | 
			
		||||
d);return-1!==e?c[e]:null}).toArray()};var v=function(a,b){if(!(this instanceof v))return new v(a,b);var c=[],d=function(a){(a=ec(a))&&c.push.apply(c,a)};if(f.isArray(a))for(var e=0,h=a.length;e<h;e++)d(a[e]);else d(a);this.context=ta(c);b&&f.merge(this,b);this.selector={rows:null,cols:null,opts:null};v.extend(this,this,Wb)};q.Api=v;f.extend(v.prototype,{any:function(){return 0!==this.count()},concat:G.concat,context:[],count:function(){return this.flatten().length},each:function(a){for(var b=0,c=
 | 
			
		||||
this.length;b<c;b++)a.call(this,this[b],b,this);return this},eq:function(a){var b=this.context;return b.length>a?new v(b[a],this[a]):null},filter:function(a){var b=[];if(G.filter)b=G.filter.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)a.call(this,this[c],c,this)&&b.push(this[c]);return new v(this.context,b)},flatten:function(){var a=[];return new v(this.context,a.concat.apply(a,this.toArray()))},join:G.join,indexOf:G.indexOf||function(a,b){b=b||0;for(var c=this.length;b<c;b++)if(this[b]===
 | 
			
		||||
a)return b;return-1},iterator:function(a,b,c,d){var e=[],h,g,f=this.context,l,n=this.selector;"string"===typeof a&&(d=c,c=b,b=a,a=!1);var m=0;for(h=f.length;m<h;m++){var q=new v(f[m]);if("table"===b){var u=c.call(q,f[m],m);u!==p&&e.push(u)}else if("columns"===b||"rows"===b)u=c.call(q,f[m],this[m],m),u!==p&&e.push(u);else if("column"===b||"column-rows"===b||"row"===b||"cell"===b){var t=this[m];"column-rows"===b&&(l=Fa(f[m],n.opts));var x=0;for(g=t.length;x<g;x++)u=t[x],u="cell"===b?c.call(q,f[m],u.row,
 | 
			
		||||
u.column,m,x):c.call(q,f[m],u,m,x,l),u!==p&&e.push(u)}}return e.length||d?(a=new v(f,a?e.concat.apply([],e):e),b=a.selector,b.rows=n.rows,b.cols=n.cols,b.opts=n.opts,a):this},lastIndexOf:G.lastIndexOf||function(a,b){return this.indexOf.apply(this.toArray.reverse(),arguments)},length:0,map:function(a){var b=[];if(G.map)b=G.map.call(this,a,this);else for(var c=0,d=this.length;c<d;c++)b.push(a.call(this,this[c],c));return new v(this.context,b)},pluck:function(a){return this.map(function(b){return b[a]})},
 | 
			
		||||
pop:G.pop,push:G.push,reduce:G.reduce||function(a,b){return mb(this,a,b,0,this.length,1)},reduceRight:G.reduceRight||function(a,b){return mb(this,a,b,this.length-1,-1,-1)},reverse:G.reverse,selector:null,shift:G.shift,slice:function(){return new v(this.context,this)},sort:G.sort,splice:G.splice,toArray:function(){return G.slice.call(this)},to$:function(){return f(this)},toJQuery:function(){return f(this)},unique:function(){return new v(this.context,ta(this))},unshift:G.unshift});v.extend=function(a,
 | 
			
		||||
b,c){if(c.length&&b&&(b instanceof v||b.__dt_wrapper)){var d,e=function(a,b,c){return function(){var d=b.apply(a,arguments);v.extend(d,d,c.methodExt);return d}};var h=0;for(d=c.length;h<d;h++){var g=c[h];b[g.name]="function"===g.type?e(a,g.val,g):"object"===g.type?{}:g.val;b[g.name].__dt_wrapper=!0;v.extend(a,b[g.name],g.propExt)}}};v.register=t=function(a,b){if(f.isArray(a))for(var c=0,d=a.length;c<d;c++)v.register(a[c],b);else{d=a.split(".");var e=Wb,h;a=0;for(c=d.length;a<c;a++){var g=(h=-1!==
 | 
			
		||||
d[a].indexOf("()"))?d[a].replace("()",""):d[a];a:{var k=0;for(var l=e.length;k<l;k++)if(e[k].name===g){k=e[k];break a}k=null}k||(k={name:g,val:{},methodExt:[],propExt:[],type:"object"},e.push(k));a===c-1?(k.val=b,k.type="function"===typeof b?"function":f.isPlainObject(b)?"object":"other"):e=h?k.methodExt:k.propExt}}};v.registerPlural=x=function(a,b,c){v.register(a,c);v.register(b,function(){var a=c.apply(this,arguments);return a===this?this:a instanceof v?a.length?f.isArray(a[0])?new v(a.context,
 | 
			
		||||
a[0]):a[0]:p:a})};var fc=function(a,b){if("number"===typeof a)return[b[a]];var c=f.map(b,function(a,b){return a.nTable});return f(c).filter(a).map(function(a){a=f.inArray(this,c);return b[a]}).toArray()};t("tables()",function(a){return a?new v(fc(a,this.context)):this});t("table()",function(a){a=this.tables(a);var b=a.context;return b.length?new v(b[0]):a});x("tables().nodes()","table().node()",function(){return this.iterator("table",function(a){return a.nTable},1)});x("tables().body()","table().body()",
 | 
			
		||||
function(){return this.iterator("table",function(a){return a.nTBody},1)});x("tables().header()","table().header()",function(){return this.iterator("table",function(a){return a.nTHead},1)});x("tables().footer()","table().footer()",function(){return this.iterator("table",function(a){return a.nTFoot},1)});x("tables().containers()","table().container()",function(){return this.iterator("table",function(a){return a.nTableWrapper},1)});t("draw()",function(a){return this.iterator("table",function(b){"page"===
 | 
			
		||||
a?S(b):("string"===typeof a&&(a="full-hold"===a?!1:!0),V(b,!1===a))})});t("page()",function(a){return a===p?this.page.info().page:this.iterator("table",function(b){Xa(b,a)})});t("page.info()",function(a){if(0===this.context.length)return p;a=this.context[0];var b=a._iDisplayStart,c=a.oFeatures.bPaginate?a._iDisplayLength:-1,d=a.fnRecordsDisplay(),e=-1===c;return{page:e?0:Math.floor(b/c),pages:e?1:Math.ceil(d/c),start:b,end:a.fnDisplayEnd(),length:c,recordsTotal:a.fnRecordsTotal(),recordsDisplay:d,
 | 
			
		||||
serverSide:"ssp"===D(a)}});t("page.len()",function(a){return a===p?0!==this.context.length?this.context[0]._iDisplayLength:p:this.iterator("table",function(b){Va(b,a)})});var Xb=function(a,b,c){if(c){var d=new v(a);d.one("draw",function(){c(d.ajax.json())})}if("ssp"==D(a))V(a,b);else{K(a,!0);var e=a.jqXHR;e&&4!==e.readyState&&e.abort();va(a,[],function(c){qa(a);c=wa(a,c);for(var d=0,e=c.length;d<e;d++)R(a,c[d]);V(a,b);K(a,!1)})}};t("ajax.json()",function(){var a=this.context;if(0<a.length)return a[0].json});
 | 
			
		||||
t("ajax.params()",function(){var a=this.context;if(0<a.length)return a[0].oAjaxData});t("ajax.reload()",function(a,b){return this.iterator("table",function(c){Xb(c,!1===b,a)})});t("ajax.url()",function(a){var b=this.context;if(a===p){if(0===b.length)return p;b=b[0];return b.ajax?f.isPlainObject(b.ajax)?b.ajax.url:b.ajax:b.sAjaxSource}return this.iterator("table",function(b){f.isPlainObject(b.ajax)?b.ajax.url=a:b.ajax=a})});t("ajax.url().load()",function(a,b){return this.iterator("table",function(c){Xb(c,
 | 
			
		||||
!1===b,a)})});var eb=function(a,b,c,d,e){var h=[],g,k,l;var n=typeof b;b&&"string"!==n&&"function"!==n&&b.length!==p||(b=[b]);n=0;for(k=b.length;n<k;n++){var m=b[n]&&b[n].split&&!b[n].match(/[\[\(:]/)?b[n].split(","):[b[n]];var q=0;for(l=m.length;q<l;q++)(g=c("string"===typeof m[q]?f.trim(m[q]):m[q]))&&g.length&&(h=h.concat(g))}a=C.selector[a];if(a.length)for(n=0,k=a.length;n<k;n++)h=a[n](d,e,h);return ta(h)},fb=function(a){a||(a={});a.filter&&a.search===p&&(a.search=a.filter);return f.extend({search:"none",
 | 
			
		||||
order:"current",page:"all"},a)},gb=function(a){for(var b=0,c=a.length;b<c;b++)if(0<a[b].length)return a[0]=a[b],a[0].length=1,a.length=1,a.context=[a.context[b]],a;a.length=0;return a},Fa=function(a,b){var c=[],d=a.aiDisplay;var e=a.aiDisplayMaster;var h=b.search;var g=b.order;b=b.page;if("ssp"==D(a))return"removed"===h?[]:Z(0,e.length);if("current"==b)for(g=a._iDisplayStart,a=a.fnDisplayEnd();g<a;g++)c.push(d[g]);else if("current"==g||"applied"==g)if("none"==h)c=e.slice();else if("applied"==h)c=
 | 
			
		||||
d.slice();else{if("removed"==h){var k={};g=0;for(a=d.length;g<a;g++)k[d[g]]=null;c=f.map(e,function(a){return k.hasOwnProperty(a)?null:a})}}else if("index"==g||"original"==g)for(g=0,a=a.aoData.length;g<a;g++)"none"==h?c.push(g):(e=f.inArray(g,d),(-1===e&&"removed"==h||0<=e&&"applied"==h)&&c.push(g));return c},gc=function(a,b,c){var d;return eb("row",b,function(b){var e=Sb(b),g=a.aoData;if(null!==e&&!c)return[e];d||(d=Fa(a,c));if(null!==e&&-1!==f.inArray(e,d))return[e];if(null===b||b===p||""===b)return d;
 | 
			
		||||
if("function"===typeof b)return f.map(d,function(a){var c=g[a];return b(a,c._aData,c.nTr)?a:null});if(b.nodeName){e=b._DT_RowIndex;var k=b._DT_CellIndex;if(e!==p)return g[e]&&g[e].nTr===b?[e]:[];if(k)return g[k.row]&&g[k.row].nTr===b.parentNode?[k.row]:[];e=f(b).closest("*[data-dt-row]");return e.length?[e.data("dt-row")]:[]}if("string"===typeof b&&"#"===b.charAt(0)&&(e=a.aIds[b.replace(/^#/,"")],e!==p))return[e.idx];e=Vb(la(a.aoData,d,"nTr"));return f(e).filter(b).map(function(){return this._DT_RowIndex}).toArray()},
 | 
			
		||||
a,c)};t("rows()",function(a,b){a===p?a="":f.isPlainObject(a)&&(b=a,a="");b=fb(b);var c=this.iterator("table",function(c){return gc(c,a,b)},1);c.selector.rows=a;c.selector.opts=b;return c});t("rows().nodes()",function(){return this.iterator("row",function(a,b){return a.aoData[b].nTr||p},1)});t("rows().data()",function(){return this.iterator(!0,"rows",function(a,b){return la(a.aoData,b,"_aData")},1)});x("rows().cache()","row().cache()",function(a){return this.iterator("row",function(b,c){b=b.aoData[c];
 | 
			
		||||
return"search"===a?b._aFilterData:b._aSortData},1)});x("rows().invalidate()","row().invalidate()",function(a){return this.iterator("row",function(b,c){ea(b,c,a)})});x("rows().indexes()","row().index()",function(){return this.iterator("row",function(a,b){return b},1)});x("rows().ids()","row().id()",function(a){for(var b=[],c=this.context,d=0,e=c.length;d<e;d++)for(var h=0,g=this[d].length;h<g;h++){var f=c[d].rowIdFn(c[d].aoData[this[d][h]]._aData);b.push((!0===a?"#":"")+f)}return new v(c,b)});x("rows().remove()",
 | 
			
		||||
"row().remove()",function(){var a=this;this.iterator("row",function(b,c,d){var e=b.aoData,h=e[c],g,f;e.splice(c,1);var l=0;for(g=e.length;l<g;l++){var n=e[l];var m=n.anCells;null!==n.nTr&&(n.nTr._DT_RowIndex=l);if(null!==m)for(n=0,f=m.length;n<f;n++)m[n]._DT_CellIndex.row=l}ra(b.aiDisplayMaster,c);ra(b.aiDisplay,c);ra(a[d],c,!1);0<b._iRecordsDisplay&&b._iRecordsDisplay--;Wa(b);c=b.rowIdFn(h._aData);c!==p&&delete b.aIds[c]});this.iterator("table",function(a){for(var b=0,d=a.aoData.length;b<d;b++)a.aoData[b].idx=
 | 
			
		||||
b});return this});t("rows.add()",function(a){var b=this.iterator("table",function(b){var c,d=[];var g=0;for(c=a.length;g<c;g++){var f=a[g];f.nodeName&&"TR"===f.nodeName.toUpperCase()?d.push(pa(b,f)[0]):d.push(R(b,f))}return d},1),c=this.rows(-1);c.pop();f.merge(c,b);return c});t("row()",function(a,b){return gb(this.rows(a,b))});t("row().data()",function(a){var b=this.context;if(a===p)return b.length&&this.length?b[0].aoData[this[0]]._aData:p;var c=b[0].aoData[this[0]];c._aData=a;f.isArray(a)&&c.nTr.id&&
 | 
			
		||||
Q(b[0].rowId)(a,c.nTr.id);ea(b[0],this[0],"data");return this});t("row().node()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]].nTr||null:null});t("row.add()",function(a){a instanceof f&&a.length&&(a=a[0]);var b=this.iterator("table",function(b){return a.nodeName&&"TR"===a.nodeName.toUpperCase()?pa(b,a)[0]:R(b,a)});return this.row(b[0])});var hc=function(a,b,c,d){var e=[],h=function(b,c){if(f.isArray(b)||b instanceof f)for(var d=0,g=b.length;d<g;d++)h(b[d],c);else b.nodeName&&
 | 
			
		||||
"tr"===b.nodeName.toLowerCase()?e.push(b):(d=f("<tr><td/></tr>").addClass(c),f("td",d).addClass(c).html(b)[0].colSpan=W(a),e.push(d[0]))};h(c,d);b._details&&b._details.detach();b._details=f(e);b._detailsShow&&b._details.insertAfter(b.nTr)},hb=function(a,b){var c=a.context;c.length&&(a=c[0].aoData[b!==p?b:a[0]])&&a._details&&(a._details.remove(),a._detailsShow=p,a._details=p)},Yb=function(a,b){var c=a.context;c.length&&a.length&&(a=c[0].aoData[a[0]],a._details&&((a._detailsShow=b)?a._details.insertAfter(a.nTr):
 | 
			
		||||
a._details.detach(),ic(c[0])))},ic=function(a){var b=new v(a),c=a.aoData;b.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0<J(c,"_details").length&&(b.on("draw.dt.DT_details",function(d,e){a===e&&b.rows({page:"current"}).eq(0).each(function(a){a=c[a];a._detailsShow&&a._details.insertAfter(a.nTr)})}),b.on("column-visibility.dt.DT_details",function(b,e,f,g){if(a===e)for(e=W(e),f=0,g=c.length;f<g;f++)b=c[f],b._details&&b._details.children("td[colspan]").attr("colspan",
 | 
			
		||||
e)}),b.on("destroy.dt.DT_details",function(d,e){if(a===e)for(d=0,e=c.length;d<e;d++)c[d]._details&&hb(b,d)}))};t("row().child()",function(a,b){var c=this.context;if(a===p)return c.length&&this.length?c[0].aoData[this[0]]._details:p;!0===a?this.child.show():!1===a?hb(this):c.length&&this.length&&hc(c[0],c[0].aoData[this[0]],a,b);return this});t(["row().child.show()","row().child().show()"],function(a){Yb(this,!0);return this});t(["row().child.hide()","row().child().hide()"],function(){Yb(this,!1);
 | 
			
		||||
return this});t(["row().child.remove()","row().child().remove()"],function(){hb(this);return this});t("row().child.isShown()",function(){var a=this.context;return a.length&&this.length?a[0].aoData[this[0]]._detailsShow||!1:!1});var jc=/^([^:]+):(name|visIdx|visible)$/,Zb=function(a,b,c,d,e){c=[];d=0;for(var f=e.length;d<f;d++)c.push(I(a,e[d],b));return c},kc=function(a,b,c){var d=a.aoColumns,e=J(d,"sName"),h=J(d,"nTh");return eb("column",b,function(b){var g=Sb(b);if(""===b)return Z(d.length);if(null!==
 | 
			
		||||
g)return[0<=g?g:d.length+g];if("function"===typeof b){var l=Fa(a,c);return f.map(d,function(c,d){return b(d,Zb(a,d,0,0,l),h[d])?d:null})}var n="string"===typeof b?b.match(jc):"";if(n)switch(n[2]){case "visIdx":case "visible":g=parseInt(n[1],10);if(0>g){var m=f.map(d,function(a,b){return a.bVisible?b:null});return[m[m.length+g]]}return[ba(a,g)];case "name":return f.map(e,function(a,b){return a===n[1]?b:null});default:return[]}if(b.nodeName&&b._DT_CellIndex)return[b._DT_CellIndex.column];g=f(h).filter(b).map(function(){return f.inArray(this,
 | 
			
		||||
h)}).toArray();if(g.length||!b.nodeName)return g;g=f(b).closest("*[data-dt-column]");return g.length?[g.data("dt-column")]:[]},a,c)};t("columns()",function(a,b){a===p?a="":f.isPlainObject(a)&&(b=a,a="");b=fb(b);var c=this.iterator("table",function(c){return kc(c,a,b)},1);c.selector.cols=a;c.selector.opts=b;return c});x("columns().header()","column().header()",function(a,b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});x("columns().footer()","column().footer()",function(a,
 | 
			
		||||
b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});x("columns().data()","column().data()",function(){return this.iterator("column-rows",Zb,1)});x("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});x("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return la(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});x("columns().nodes()",
 | 
			
		||||
"column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return la(a.aoData,e,"anCells",b)},1)});x("columns().visible()","column().visible()",function(a,b){var c=this,d=this.iterator("column",function(b,c){if(a===p)return b.aoColumns[c].bVisible;var d=b.aoColumns,e=d[c],h=b.aoData,n;if(a!==p&&e.bVisible!==a){if(a){var m=f.inArray(!0,J(d,"bVisible"),c+1);d=0;for(n=h.length;d<n;d++){var q=h[d].nTr;b=h[d].anCells;q&&q.insertBefore(b[c],b[m]||null)}}else f(J(b.aoData,"anCells",
 | 
			
		||||
c)).detach();e.bVisible=a}});a!==p&&this.iterator("table",function(d){ha(d,d.aoHeader);ha(d,d.aoFooter);d.aiDisplay.length||f(d.nTBody).find("td[colspan]").attr("colspan",W(d));Ba(d);c.iterator("column",function(c,d){A(c,null,"column-visibility",[c,d,a,b])});(b===p||b)&&c.columns.adjust()});return d});x("columns().indexes()","column().index()",function(a){return this.iterator("column",function(b,c){return"visible"===a?ca(b,c):c},1)});t("columns.adjust()",function(){return this.iterator("table",function(a){aa(a)},
 | 
			
		||||
1)});t("column.index()",function(a,b){if(0!==this.context.length){var c=this.context[0];if("fromVisible"===a||"toData"===a)return ba(c,b);if("fromData"===a||"toVisible"===a)return ca(c,b)}});t("column()",function(a,b){return gb(this.columns(a,b))});var lc=function(a,b,c){var d=a.aoData,e=Fa(a,c),h=Vb(la(d,e,"anCells")),g=f([].concat.apply([],h)),k,l=a.aoColumns.length,n,m,q,u,t,v;return eb("cell",b,function(b){var c="function"===typeof b;if(null===b||b===p||c){n=[];m=0;for(q=e.length;m<q;m++)for(k=
 | 
			
		||||
e[m],u=0;u<l;u++)t={row:k,column:u},c?(v=d[k],b(t,I(a,k,u),v.anCells?v.anCells[u]:null)&&n.push(t)):n.push(t);return n}if(f.isPlainObject(b))return b.column!==p&&b.row!==p&&-1!==f.inArray(b.row,e)?[b]:[];c=g.filter(b).map(function(a,b){return{row:b._DT_CellIndex.row,column:b._DT_CellIndex.column}}).toArray();if(c.length||!b.nodeName)return c;v=f(b).closest("*[data-dt-row]");return v.length?[{row:v.data("dt-row"),column:v.data("dt-column")}]:[]},a,c)};t("cells()",function(a,b,c){f.isPlainObject(a)&&
 | 
			
		||||
(a.row===p?(c=a,a=null):(c=b,b=null));f.isPlainObject(b)&&(c=b,b=null);if(null===b||b===p)return this.iterator("table",function(b){return lc(b,a,fb(c))});var d=c?{page:c.page,order:c.order,search:c.search}:{},e=this.columns(b,d),h=this.rows(a,d),g,k,l,n;d=this.iterator("table",function(a,b){a=[];g=0;for(k=h[b].length;g<k;g++)for(l=0,n=e[b].length;l<n;l++)a.push({row:h[b][g],column:e[b][l]});return a},1);d=c&&c.selected?this.cells(d,c):d;f.extend(d.selector,{cols:b,rows:a,opts:c});return d});x("cells().nodes()",
 | 
			
		||||
"cell().node()",function(){return this.iterator("cell",function(a,b,c){return(a=a.aoData[b])&&a.anCells?a.anCells[c]:p},1)});t("cells().data()",function(){return this.iterator("cell",function(a,b,c){return I(a,b,c)},1)});x("cells().cache()","cell().cache()",function(a){a="search"===a?"_aFilterData":"_aSortData";return this.iterator("cell",function(b,c,d){return b.aoData[c][a][d]},1)});x("cells().render()","cell().render()",function(a){return this.iterator("cell",function(b,c,d){return I(b,c,d,a)},
 | 
			
		||||
1)});x("cells().indexes()","cell().index()",function(){return this.iterator("cell",function(a,b,c){return{row:b,column:c,columnVisible:ca(a,c)}},1)});x("cells().invalidate()","cell().invalidate()",function(a){return this.iterator("cell",function(b,c,d){ea(b,c,a,d)})});t("cell()",function(a,b,c){return gb(this.cells(a,b,c))});t("cell().data()",function(a){var b=this.context,c=this[0];if(a===p)return b.length&&c.length?I(b[0],c[0].row,c[0].column):p;ob(b[0],c[0].row,c[0].column,a);ea(b[0],c[0].row,
 | 
			
		||||
"data",c[0].column);return this});t("order()",function(a,b){var c=this.context;if(a===p)return 0!==c.length?c[0].aaSorting:p;"number"===typeof a?a=[[a,b]]:a.length&&!f.isArray(a[0])&&(a=Array.prototype.slice.call(arguments));return this.iterator("table",function(b){b.aaSorting=a.slice()})});t("order.listener()",function(a,b,c){return this.iterator("table",function(d){Qa(d,a,b,c)})});t("order.fixed()",function(a){if(!a){var b=this.context;b=b.length?b[0].aaSortingFixed:p;return f.isArray(b)?{pre:b}:
 | 
			
		||||
b}return this.iterator("table",function(b){b.aaSortingFixed=f.extend(!0,{},a)})});t(["columns().order()","column().order()"],function(a){var b=this;return this.iterator("table",function(c,d){var e=[];f.each(b[d],function(b,c){e.push([c,a])});c.aaSorting=e})});t("search()",function(a,b,c,d){var e=this.context;return a===p?0!==e.length?e[0].oPreviousSearch.sSearch:p:this.iterator("table",function(e){e.oFeatures.bFilter&&ia(e,f.extend({},e.oPreviousSearch,{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===
 | 
			
		||||
c?!0:c,bCaseInsensitive:null===d?!0:d}),1)})});x("columns().search()","column().search()",function(a,b,c,d){return this.iterator("column",function(e,h){var g=e.aoPreSearchCols;if(a===p)return g[h].sSearch;e.oFeatures.bFilter&&(f.extend(g[h],{sSearch:a+"",bRegex:null===b?!1:b,bSmart:null===c?!0:c,bCaseInsensitive:null===d?!0:d}),ia(e,e.oPreviousSearch,1))})});t("state()",function(){return this.context.length?this.context[0].oSavedState:null});t("state.clear()",function(){return this.iterator("table",
 | 
			
		||||
function(a){a.fnStateSaveCallback.call(a.oInstance,a,{})})});t("state.loaded()",function(){return this.context.length?this.context[0].oLoadedState:null});t("state.save()",function(){return this.iterator("table",function(a){Ba(a)})});q.versionCheck=q.fnVersionCheck=function(a){var b=q.version.split(".");a=a.split(".");for(var c,d,e=0,f=a.length;e<f;e++)if(c=parseInt(b[e],10)||0,d=parseInt(a[e],10)||0,c!==d)return c>d;return!0};q.isDataTable=q.fnIsDataTable=function(a){var b=f(a).get(0),c=!1;if(a instanceof
 | 
			
		||||
q.Api)return!0;f.each(q.settings,function(a,e){a=e.nScrollHead?f("table",e.nScrollHead)[0]:null;var d=e.nScrollFoot?f("table",e.nScrollFoot)[0]:null;if(e.nTable===b||a===b||d===b)c=!0});return c};q.tables=q.fnTables=function(a){var b=!1;f.isPlainObject(a)&&(b=a.api,a=a.visible);var c=f.map(q.settings,function(b){if(!a||a&&f(b.nTable).is(":visible"))return b.nTable});return b?new v(c):c};q.camelToHungarian=L;t("$()",function(a,b){b=this.rows(b).nodes();b=f(b);return f([].concat(b.filter(a).toArray(),
 | 
			
		||||
b.find(a).toArray()))});f.each(["on","one","off"],function(a,b){t(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0]=f.map(a[0].split(/\s/),function(a){return a.match(/\.dt\b/)?a:a+".dt"}).join(" ");var d=f(this.tables().nodes());d[b].apply(d,a);return this})});t("clear()",function(){return this.iterator("table",function(a){qa(a)})});t("settings()",function(){return new v(this.context,this.context)});t("init()",function(){var a=this.context;return a.length?a[0].oInit:null});t("data()",
 | 
			
		||||
function(){return this.iterator("table",function(a){return J(a.aoData,"_aData")}).flatten()});t("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,h=b.nTBody,g=b.nTHead,k=b.nTFoot,l=f(e);h=f(h);var n=f(b.nTableWrapper),m=f.map(b.aoData,function(a){return a.nTr}),p;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);a||(new v(b)).columns().visible(!0);n.off(".DT").find(":not(tbody *)").off(".DT");f(z).off(".DT-"+b.sInstance);
 | 
			
		||||
e!=g.parentNode&&(l.children("thead").detach(),l.append(g));k&&e!=k.parentNode&&(l.children("tfoot").detach(),l.append(k));b.aaSorting=[];b.aaSortingFixed=[];Aa(b);f(m).removeClass(b.asStripeClasses.join(" "));f("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);h.children().detach();h.append(m);g=a?"remove":"detach";l[g]();n[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),l.css("width",b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&&
 | 
			
		||||
h.children().each(function(a){f(this).addClass(b.asDestroyStripes[a%p])}));c=f.inArray(b,q.settings);-1!==c&&q.settings.splice(c,1)})});f.each(["column","row","cell"],function(a,b){t(b+"s().every()",function(a){var c=this.selector.opts,e=this;return this.iterator(b,function(d,f,k,l,n){a.call(e[b](f,"cell"===b?k:c,"cell"===b?c:p),f,k,l,n)})})});t("i18n()",function(a,b,c){var d=this.context[0];a=U(a)(d.oLanguage);a===p&&(a=b);c!==p&&f.isPlainObject(a)&&(a=a[c]!==p?a[c]:a._);return a.replace("%d",c)});
 | 
			
		||||
q.version="1.10.20";q.settings=[];q.models={};q.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};q.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};q.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null,
 | 
			
		||||
sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};q.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1,
 | 
			
		||||
bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}},
 | 
			
		||||
fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",
 | 
			
		||||
sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:f.extend({},q.models.oSearch),sAjaxDataProp:"data",
 | 
			
		||||
sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};H(q.defaults);q.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};H(q.defaults.column);q.models.oSettings=
 | 
			
		||||
{oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{},
 | 
			
		||||
aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0,
 | 
			
		||||
aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:p,oAjaxData:p,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==D(this)?1*this._iRecordsTotal:
 | 
			
		||||
this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==D(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};q.ext=C={buttons:{},
 | 
			
		||||
classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:q.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:q.version};f.extend(C,{afnFiltering:C.search,aTypes:C.type.detect,ofnSearch:C.type.search,oSort:C.type.order,afnSortData:C.order,aoFeatures:C.feature,oApi:C.internal,oStdClasses:C.classes,oPagination:C.pager});
 | 
			
		||||
f.extend(q.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",
 | 
			
		||||
sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",
 | 
			
		||||
sJUIHeader:"",sJUIFooter:""});var Pb=q.ext.pager;f.extend(Pb,{simple:function(a,b){return["previous","next"]},full:function(a,b){return["first","previous","next","last"]},numbers:function(a,b){return[ka(a,b)]},simple_numbers:function(a,b){return["previous",ka(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ka(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ka(a,b),"last"]},_numbers:ka,numbers_length:7});f.extend(!0,q.ext.renderer,{pageButton:{_:function(a,b,
 | 
			
		||||
c,d,e,h){var g=a.oClasses,k=a.oLanguage.oPaginate,l=a.oLanguage.oAria.paginate||{},n,m,q=0,t=function(b,d){var p,r=g.sPageButtonDisabled,u=function(b){Xa(a,b.data.action,!0)};var w=0;for(p=d.length;w<p;w++){var v=d[w];if(f.isArray(v)){var x=f("<"+(v.DT_el||"div")+"/>").appendTo(b);t(x,v)}else{n=null;m=v;x=a.iTabIndex;switch(v){case "ellipsis":b.append('<span class="ellipsis">…</span>');break;case "first":n=k.sFirst;0===e&&(x=-1,m+=" "+r);break;case "previous":n=k.sPrevious;0===e&&(x=-1,m+=
 | 
			
		||||
" "+r);break;case "next":n=k.sNext;e===h-1&&(x=-1,m+=" "+r);break;case "last":n=k.sLast;e===h-1&&(x=-1,m+=" "+r);break;default:n=v+1,m=e===v?g.sPageButtonActive:""}null!==n&&(x=f("<a>",{"class":g.sPageButton+" "+m,"aria-controls":a.sTableId,"aria-label":l[v],"data-dt-idx":q,tabindex:x,id:0===c&&"string"===typeof v?a.sTableId+"_"+v:null}).html(n).appendTo(b),$a(x,{action:v},u),q++)}}};try{var v=f(b).find(y.activeElement).data("dt-idx")}catch(mc){}t(f(b).empty(),d);v!==p&&f(b).find("[data-dt-idx="+
 | 
			
		||||
v+"]").focus()}}});f.extend(q.ext.type.detect,[function(a,b){b=b.oLanguage.sDecimal;return db(a,b)?"num"+b:null},function(a,b){if(a&&!(a instanceof Date)&&!cc.test(a))return null;b=Date.parse(a);return null!==b&&!isNaN(b)||P(a)?"date":null},function(a,b){b=b.oLanguage.sDecimal;return db(a,b,!0)?"num-fmt"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Ub(a,b)?"html-num"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Ub(a,b,!0)?"html-num-fmt"+b:null},function(a,b){return P(a)||"string"===
 | 
			
		||||
typeof a&&-1!==a.indexOf("<")?"html":null}]);f.extend(q.ext.type.search,{html:function(a){return P(a)?a:"string"===typeof a?a.replace(Rb," ").replace(Ea,""):""},string:function(a){return P(a)?a:"string"===typeof a?a.replace(Rb," "):a}});var Da=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Tb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};f.extend(C.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return P(a)?
 | 
			
		||||
"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return P(a)?"":"string"===typeof a?a.toLowerCase():a.toString?a.toString():""},"string-asc":function(a,b){return a<b?-1:a>b?1:0},"string-desc":function(a,b){return a<b?1:a>b?-1:0}});Ha("");f.extend(!0,q.ext.renderer,{header:{_:function(a,b,c,d){f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc:
 | 
			
		||||
c.sSortingClass))})},jqueryui:function(a,b,c,d){f("<div/>").addClass(d.sSortJUIWrapper).append(b.contents()).append(f("<span/>").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc:c.sSortingClass),b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass("asc"==
 | 
			
		||||
k[e]?d.sSortJUIAsc:"desc"==k[e]?d.sSortJUIDesc:c.sSortingClassJUI))})}}});var ib=function(a){return"string"===typeof a?a.replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""):a};q.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return ib(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g,
 | 
			
		||||
a)+f+(e||"")}}},text:function(){return{display:ib,filter:ib}}};f.extend(q.ext.internal,{_fnExternApiFunc:Qb,_fnBuildAjax:va,_fnAjaxUpdate:qb,_fnAjaxParameters:zb,_fnAjaxUpdateDraw:Ab,_fnAjaxDataSrc:wa,_fnAddColumn:Ia,_fnColumnOptions:ma,_fnAdjustColumnSizing:aa,_fnVisibleToColumnIndex:ba,_fnColumnIndexToVisible:ca,_fnVisbleColumns:W,_fnGetColumns:oa,_fnColumnTypes:Ka,_fnApplyColumnDefs:nb,_fnHungarianMap:H,_fnCamelToHungarian:L,_fnLanguageCompat:Ga,_fnBrowserDetect:lb,_fnAddData:R,_fnAddTr:pa,_fnNodeToDataIndex:function(a,
 | 
			
		||||
b){return b._DT_RowIndex!==p?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return f.inArray(c,a.aoData[b].anCells)},_fnGetCellData:I,_fnSetCellData:ob,_fnSplitObjNotation:Na,_fnGetObjectDataFn:U,_fnSetObjectDataFn:Q,_fnGetDataMaster:Oa,_fnClearTable:qa,_fnDeleteIndex:ra,_fnInvalidate:ea,_fnGetRowElements:Ma,_fnCreateTr:La,_fnBuildHead:pb,_fnDrawHead:ha,_fnDraw:S,_fnReDraw:V,_fnAddOptionsHtml:sb,_fnDetectHeader:fa,_fnGetUniqueThs:ua,_fnFeatureHtmlFilter:ub,_fnFilterComplete:ia,_fnFilterCustom:Db,
 | 
			
		||||
_fnFilterColumn:Cb,_fnFilter:Bb,_fnFilterCreateSearch:Ta,_fnEscapeRegex:Ua,_fnFilterData:Eb,_fnFeatureHtmlInfo:xb,_fnUpdateInfo:Hb,_fnInfoMacros:Ib,_fnInitialise:ja,_fnInitComplete:xa,_fnLengthChange:Va,_fnFeatureHtmlLength:tb,_fnFeatureHtmlPaginate:yb,_fnPageChange:Xa,_fnFeatureHtmlProcessing:vb,_fnProcessingDisplay:K,_fnFeatureHtmlTable:wb,_fnScrollDraw:na,_fnApplyToChildren:N,_fnCalculateColumnWidths:Ja,_fnThrottle:Sa,_fnConvertToWidth:Jb,_fnGetWidestNode:Kb,_fnGetMaxLenString:Lb,_fnStringToCss:B,
 | 
			
		||||
_fnSortFlatten:Y,_fnSort:rb,_fnSortAria:Nb,_fnSortListener:Za,_fnSortAttachListener:Qa,_fnSortingClasses:Aa,_fnSortData:Mb,_fnSaveState:Ba,_fnLoadState:Ob,_fnSettingsFromNode:Ca,_fnLog:O,_fnMap:M,_fnBindAction:$a,_fnCallbackReg:E,_fnCallbackFire:A,_fnLengthOverflow:Wa,_fnRenderer:Ra,_fnDataSource:D,_fnRowAttributes:Pa,_fnExtend:ab,_fnCalculateEnd:function(){}});f.fn.dataTable=q;q.$=f;f.fn.dataTableSettings=q.settings;f.fn.dataTableExt=q.ext;f.fn.DataTable=function(a){return f(this).dataTable(a).api()};
 | 
			
		||||
f.each(q,function(a,b){f.fn.DataTable[a]=b});return f.fn.dataTable});
 | 
			
		||||
							
								
								
									
										356
									
								
								src/js/NodePortal.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,356 @@
 | 
			
		||||
var applyRole = function(role) {
 | 
			
		||||
	global.wssocket.send("{\"action\":\"applyNodeRole\",\"role\":\"" + role
 | 
			
		||||
			+ "\",\"pubKey\":\"" + global.sm2Key.publicKey + "\"}");
 | 
			
		||||
};
 | 
			
		||||
var WSHandler = function(event) {
 | 
			
		||||
	console.log(event);
 | 
			
		||||
	data = event.data;
 | 
			
		||||
	//console.log("   -->" + data);
 | 
			
		||||
	try {
 | 
			
		||||
		var obj = JSON.parse(data);
 | 
			
		||||
		console.log(obj);
 | 
			
		||||
		console.log(obj.action);
 | 
			
		||||
		switch (obj.action) {
 | 
			
		||||
		case 'onGetHashCount':
 | 
			
		||||
			onGetHashCount(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onStartSync':
 | 
			
		||||
			onStartSync(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onStopSync':
 | 
			
		||||
			onStopSync(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onTransferTo':
 | 
			
		||||
			onTransferTo(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onHashResult':
 | 
			
		||||
			onHashResult(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onListMemoryFiles':
 | 
			
		||||
			onListMemoryFiles(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onDumpContract':
 | 
			
		||||
			onDumpContract(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onChangeDumpPeriod':
 | 
			
		||||
			onChangeDumpPeriod(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onGetDumpPeriod':
 | 
			
		||||
			onGetDumpPeriod(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onStaticVerifyResult':
 | 
			
		||||
			onStaticVerifyResult(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListContractProcess":
 | 
			
		||||
			onListContractProcess(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onDeleteFile":
 | 
			
		||||
			onDeleteFile(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onCancelAuth":
 | 
			
		||||
			onCancelAuth(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onDownloadContract":
 | 
			
		||||
			onDownloadFile(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onChangePublic":
 | 
			
		||||
			onChangePublic(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListProjects":
 | 
			
		||||
			onListProjects(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListProject":
 | 
			
		||||
			onListProject(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListLocalNodeLog":
 | 
			
		||||
			onListLocalNodeLog(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListLocalNodeLogPie":
 | 
			
		||||
			onListLocalNodeLogPie(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListLocalNodeLogLine":
 | 
			
		||||
			onListLocalNodeLogLine(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListLocalContractLog":
 | 
			
		||||
			onListLocalContractLog(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListLocalContractLogPie":
 | 
			
		||||
			onListLocalContractLogPie(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListLocalContractLogLine":
 | 
			
		||||
			onListLocalContractLogLine(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onGetNodeSessionID":
 | 
			
		||||
			onGetNodeSessionID(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onLogin":
 | 
			
		||||
			onNodeLogin(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onGetNodeRole":
 | 
			
		||||
			onGetNodeRole(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onApplyRole":
 | 
			
		||||
			onApplyRole(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListAllAuthRole":
 | 
			
		||||
			onListAllAuthRole(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onListUnAuthRole":
 | 
			
		||||
			onListUnAuthRole(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onDeleteRole":
 | 
			
		||||
			onDeleteRole(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onCountRole":
 | 
			
		||||
			onCountRole(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onAuthNodeRole":
 | 
			
		||||
			onAuthNodeRole(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onApplyNet":
 | 
			
		||||
			onApplyNet(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onLoadNodeConfig":
 | 
			
		||||
			onLoadNodeConfig(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onChangeNodeName":
 | 
			
		||||
			onChangeNodeName(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onChangeYJSPath":
 | 
			
		||||
			onChangeYJSPath(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case "onGetLicenceExpiredDate":
 | 
			
		||||
			$("#expiredDate").html(convertDate(data.data));
 | 
			
		||||
			break;
 | 
			
		||||
		case "onGetPeerID":
 | 
			
		||||
			global.peerID = obj.data;
 | 
			
		||||
//			getNodeTrustUnits();//still connecting to centerportalws
 | 
			
		||||
			break;
 | 
			
		||||
		case "onViewContractInstance":
 | 
			
		||||
			onViewContractInstance(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onExecuteResult':
 | 
			
		||||
			onExecuteResult(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onUploadFile':
 | 
			
		||||
			onUploadFile(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onStartContract':
 | 
			
		||||
			onStartContract(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onKillContractProcess':
 | 
			
		||||
			onStopContract(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onKillAllContract':
 | 
			
		||||
			onKillAllContract(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onSetPermission':
 | 
			
		||||
			onSetPermission(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onOutputStream':
 | 
			
		||||
			displayOutput(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onOutputStream':
 | 
			
		||||
			displayOutput(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onChangeNodeCenter':
 | 
			
		||||
			console.log("onChangeNodeCenter");
 | 
			
		||||
			onChangeNodeCenter(obj);
 | 
			
		||||
			break;
 | 
			
		||||
        case 'onChangeBDledger':
 | 
			
		||||
            console.log("onChangeBDledger");
 | 
			
		||||
            onChangeBDledger(obj);
 | 
			
		||||
            break;
 | 
			
		||||
		case 'onHashResult':
 | 
			
		||||
			onHashResult(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			displayOutput(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	} catch (err) {
 | 
			
		||||
		console.log(err);
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var displayOutput = function(obj) {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var getControlWsUrl = function(host) {
 | 
			
		||||
	var prefix = "ws://";
 | 
			
		||||
	if (document.location.href.startsWith("https"))
 | 
			
		||||
		prefix = "wss://";
 | 
			
		||||
	var path = document.location.pathname.lastIndexOf("/");
 | 
			
		||||
	path = document.location.pathname.substr(0, path + 1);
 | 
			
		||||
	if (path.indexOf("SCIDE")<0)
 | 
			
		||||
		path+="SCIDE/";
 | 
			
		||||
	path += "SCExecutor";
 | 
			
		||||
	return prefix + host + path;
 | 
			
		||||
};
 | 
			
		||||
var initWSocket = function() {
 | 
			
		||||
	var host = document.location.host;
 | 
			
		||||
	var url = getControlWsUrl(host);
 | 
			
		||||
	console.log("connect ws:" + url);
 | 
			
		||||
	global.wssocket = createWssocket(url, function() {
 | 
			
		||||
		getSession();
 | 
			
		||||
		loadNodeConfig();//get center portal & create centerportalsocket in onLoadNodeConfig
 | 
			
		||||
	}, WSHandler);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var centerportalWSHandler = function(event){
 | 
			
		||||
	console.log(event);
 | 
			
		||||
	data = event.data;
 | 
			
		||||
	try {
 | 
			
		||||
		var obj = JSON.parse(data);
 | 
			
		||||
		switch (obj.action) {
 | 
			
		||||
		case "onGetNodeTrustUnits":
 | 
			
		||||
			onGetNodeTrustUnits(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onSessionID':
 | 
			
		||||
			onSessionID(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onStartContract':
 | 
			
		||||
			onStartContract(obj);
 | 
			
		||||
			break;	
 | 
			
		||||
		case 'onStartTrustfulContract':
 | 
			
		||||
			onStartTrustfulContract(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onDistributeContract':
 | 
			
		||||
			onDistributeContract(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'onDistributeFinish':
 | 
			
		||||
			onDistributeFinish(obj);
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	} catch (err) {
 | 
			
		||||
		console.log(err);
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var getSession = function() {
 | 
			
		||||
	global.wssocket.send("{\"action\":\"getNodeSessionID\"}");
 | 
			
		||||
};
 | 
			
		||||
var exportSMKeyPair = function() {
 | 
			
		||||
	$("#dialog").html("Save Your key:<br/>" + JSON.stringify(global.sm2Key))
 | 
			
		||||
	$("#dialog").dialog("open");
 | 
			
		||||
};
 | 
			
		||||
// ====== wsHandler
 | 
			
		||||
var onGetNodeSessionID = function(data) {
 | 
			
		||||
	console.log("onGetNodeSessionID");
 | 
			
		||||
	global.session = data.session;
 | 
			
		||||
	var loginParam = {};
 | 
			
		||||
	loginParam.pubKey = global.sm2Key.publicKey;
 | 
			
		||||
	loginParam.signature = sm2.doSignature(global.session,
 | 
			
		||||
			global.sm2Key.privateKey);
 | 
			
		||||
	loginParam.action = "login";
 | 
			
		||||
	global.wssocket.send(JSON.stringify(loginParam));
 | 
			
		||||
};
 | 
			
		||||
var onNodeLogin = function(data) {
 | 
			
		||||
	console.log("onNodeLogin");
 | 
			
		||||
	var param = {};
 | 
			
		||||
	param.action = "getNodeRole";
 | 
			
		||||
	global.wssocket.send(JSON.stringify(param));
 | 
			
		||||
};
 | 
			
		||||
var onGetNodeRole = function(data) {
 | 
			
		||||
	console.log("onGetNodeRole");
 | 
			
		||||
	pubkeyDialogVue.myRole = data.data;
 | 
			
		||||
	global.myRole = data.data;
 | 
			
		||||
	loadUserMan();
 | 
			
		||||
	
 | 
			
		||||
};
 | 
			
		||||
var onListLocalNodeLog =  function(data){
 | 
			
		||||
	var userManTab = $("#v-pills-userManager-tab")[0];
 | 
			
		||||
	var isActive = (userManTab.getAttribute("aria-selected") == "true");
 | 
			
		||||
	if (isActive) {
 | 
			
		||||
		drawUserActivityGraph(data);
 | 
			
		||||
	}else{
 | 
			
		||||
		drawLocalLogGraphs(data);
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
var onListAllAuthRole = function(data) {
 | 
			
		||||
	console.log("onListAllAuthRole");
 | 
			
		||||
	fillAuthRoleData(data.data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onListUnAuthRole = function(data) {
 | 
			
		||||
	console.log("onListUnAuthRole");
 | 
			
		||||
	fillUnAuthRoleData(data.data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onApplyNet = function(data) {
 | 
			
		||||
	console.log("onApplyNet");
 | 
			
		||||
};
 | 
			
		||||
var onCountRole=function(data){
 | 
			
		||||
	console.log("onCountRole");
 | 
			
		||||
	setUserTypeDistribution(data.data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var onAuthNodeRole=function(data){
 | 
			
		||||
	myToast("授权/忽略操作", data.data);
 | 
			
		||||
	if (data.data == "success") {
 | 
			
		||||
		var arg = {};
 | 
			
		||||
		arg.action = "listAllAuthRole";
 | 
			
		||||
		global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
		var arg = {};
 | 
			
		||||
		arg.action = "listUnAuthRole";
 | 
			
		||||
		global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onApplyRole = function(data) {
 | 
			
		||||
	myToast("申请操作", data.data);
 | 
			
		||||
};
 | 
			
		||||
var onDeleteRole = function(data) {
 | 
			
		||||
	myToast("删除操作", data.data);
 | 
			
		||||
	var loginAllUser = {};
 | 
			
		||||
	loginAllUser.action = "listAllAuthRole";
 | 
			
		||||
	global.wssocket.send(JSON.stringify(loginAllUser));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ====== wsHandler done!
 | 
			
		||||
var myToast = function(title, msg) {
 | 
			
		||||
	toastVue.toastTitle = title;
 | 
			
		||||
	toastVue.toastMessage = msg;
 | 
			
		||||
	$("#alertDiv").toast("show");
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var countChar = function(str, c) {
 | 
			
		||||
	var ret = 0;
 | 
			
		||||
	for (var i = 0; i < str.length; i++) {
 | 
			
		||||
		if (str.charAt(i) == c)
 | 
			
		||||
			ret++;
 | 
			
		||||
	}
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
var generate = function() {
 | 
			
		||||
	var key = sm2.generateKeyPairHex();
 | 
			
		||||
	global.sm2Key = key;
 | 
			
		||||
	localStorage.setItem("PrivKey", JSON.stringify(key));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
var killAllContract = function() {
 | 
			
		||||
	var request = {};
 | 
			
		||||
	request.action = "killAllContract";
 | 
			
		||||
	global.wssocket.send(JSON.stringify(request));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var init = function() {
 | 
			
		||||
	initVue();
 | 
			
		||||
	initGlobal();
 | 
			
		||||
	initWSocket();
 | 
			
		||||
};
 | 
			
		||||
var getRequestParameters = function() {
 | 
			
		||||
	var arr = (location.search || "").replace(/^\?/, '').split("&");
 | 
			
		||||
	var params = {};
 | 
			
		||||
	for (var i = 0; i < arr.length; i++) {
 | 
			
		||||
		var data = arr[i].split("=");
 | 
			
		||||
		if (data.length == 2) {
 | 
			
		||||
			params[data[0]] = data[1];
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return params;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										523
									
								
								src/js/auditlog.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,523 @@
 | 
			
		||||
// 在WSHandler的onUserList之类的方法里使用。
 | 
			
		||||
// -----------------------------------------------
 | 
			
		||||
var loadAuditLog = function() {
 | 
			
		||||
	$('[data-toggle="tooltip"]').tooltip();
 | 
			
		||||
	console.log("loadAuditLog!");
 | 
			
		||||
	
 | 
			
		||||
	changePie1Time($("#pie1")[0].value);
 | 
			
		||||
	changePie2Time($("#pie2")[0].value);
 | 
			
		||||
 | 
			
		||||
	changeLine1Time($("#line1")[0].value);
 | 
			
		||||
	changeLine2Time($("#line2")[0].value);
 | 
			
		||||
	
 | 
			
		||||
	document.getElementById('manageLogInput').value="2";
 | 
			
		||||
	changeManageLogTime(2);   //默认查看近2天的日志
 | 
			
		||||
	document.getElementById('CMLogInput').value="2";
 | 
			
		||||
	changeCMLogTime(2);
 | 
			
		||||
};
 | 
			
		||||
var logCategoryStr = "getSessionID,login,getRole,listAllUsers,listApplyList,applyRole,accept,delete,authNodeManager,queryCMLog,queryActionLog,queryUserStat,"+
 | 
			
		||||
                     		"listManageLogPie,listCMLogPie,listManageLogLine,listCMLogLine,listLicence,updateLicence,listNodes,listTrustUnits,"+
 | 
			
		||||
                     		"getNodeTrustUnits,distributeContract,startContractTrustfully,createTrustUnit";
 | 
			
		||||
 | 
			
		||||
var cmCategoryStr = "setNodeID,onGetUDPID,listCMInfo,updateContract,pubEvent,subEvent,executeContractOnOtherNodes,onReceiveContractExecution"+
 | 
			
		||||
"receiveProject,onReceiveProject,onStartEachNode";
 | 
			
		||||
 | 
			
		||||
var changePie1Time = function(data){
 | 
			
		||||
	var time = data.split("天")[0];
 | 
			
		||||
	setTimeout(function() {
 | 
			
		||||
		var arg = {};
 | 
			
		||||
		arg.action = "countActionLogByCategory";
 | 
			
		||||
		arg.start = getDateDaysBefore(time);
 | 
			
		||||
		arg.interval = time*25*3600*1000;
 | 
			
		||||
		arg.category = logCategoryStr;
 | 
			
		||||
		arg.requestID = "changePie1Time_"+new Date().getTime()+"_"+Math.floor(Math.random()*1000000);
 | 
			
		||||
        global.wscallbacks[arg.requestID]=onListManageLogPie;
 | 
			
		||||
		global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
	}, 300);
 | 
			
		||||
};
 | 
			
		||||
var onListManageLogPie = function(obj){
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
	//console.log(data.data);
 | 
			
		||||
	drawLogPie("auditLogPieDiv", obj.data, logActionToCategory);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var changePie2Time = function(data){
 | 
			
		||||
	var time = data.split("天")[0];
 | 
			
		||||
	setTimeout(function() {
 | 
			
		||||
		var arg = {};
 | 
			
		||||
		arg.action = "countCMLogByCategory";
 | 
			
		||||
		arg.start = getDateDaysBefore(time);
 | 
			
		||||
        arg.interval = time*25*3600*1000;
 | 
			
		||||
        arg.category = cmCategoryStr;
 | 
			
		||||
        arg.requestID = "changePie1Time_"+new Date().getTime()+"_"+Math.floor(Math.random()*1000000);
 | 
			
		||||
        global.wscallbacks[arg.requestID]=onListCMLogPie;
 | 
			
		||||
		global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
	}, 300);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onListCMLogPie = function(obj){
 | 
			
		||||
	//console.log(data.data);
 | 
			
		||||
	drawLogPie("auditCMLogPieDiv", obj.data, cmActionToCategory);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var changeLine1Time = function(data){
 | 
			
		||||
	var time = data.split("天")[0];
 | 
			
		||||
	global.ManageLineTime = time;
 | 
			
		||||
	setTimeout(function() {
 | 
			
		||||
		var arg = {};
 | 
			
		||||
		arg.action = "countActionLogByCategory";
 | 
			
		||||
 		arg.start = getDateDaysBefore(global.ManageLineTime);
 | 
			
		||||
 		arg.interval = 24*3600*1000;
 | 
			
		||||
 		arg.requestID = "changeLine1Time_"+new Date().getTime()+"_"+Math.floor(Math.random()*1000000);
 | 
			
		||||
        global.wscallbacks[arg.requestID]=onListManageLogLine;
 | 
			
		||||
		global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
	}, 300);
 | 
			
		||||
};
 | 
			
		||||
var onListManageLogLine = function(obj){
 | 
			
		||||
	//console.log(data.data);
 | 
			
		||||
	var data = {};
 | 
			
		||||
    data.xAxis = [];
 | 
			
		||||
    var start = getDateDaysBefore(global.ManageLineTime);
 | 
			
		||||
    data.yAxis = obj.data.primary;
 | 
			
		||||
    for (var i=0;i<obj.data.primary.length;i++){
 | 
			
		||||
        var date = new Date(start);
 | 
			
		||||
    	data.xAxis.push(date.getMonth()+1+"/"+date.getDate())
 | 
			
		||||
    	start+=24*3600*1000;
 | 
			
		||||
    }
 | 
			
		||||
	drawLogBar("auditLogBarDiv", data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
var changeLine2Time = function(data){
 | 
			
		||||
	var time = data.split("天")[0];
 | 
			
		||||
	global.CMLineTime = time;
 | 
			
		||||
	setTimeout(function() {
 | 
			
		||||
		var arg = {};
 | 
			
		||||
		arg.action = "countCMLogByCategory";
 | 
			
		||||
 		arg.start = getDateDaysBefore(global.CMLineTime);
 | 
			
		||||
 		arg.interval = 24*3600*1000;
 | 
			
		||||
        arg.requestID = "changeLine12ime_"+new Date().getTime()+"_"+Math.floor(Math.random()*1000000);
 | 
			
		||||
        global.wscallbacks[arg.requestID]=onListCMLogLine;
 | 
			
		||||
		global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
	}, 300);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
var onListCMLogLine = function(obj){
 | 
			
		||||
	//console.log(data.data);
 | 
			
		||||
	var data = {};
 | 
			
		||||
    data.xAxis = [];
 | 
			
		||||
    var start = getDateDaysBefore(global.ManageLineTime);
 | 
			
		||||
    data.yAxis = obj.data.primary;
 | 
			
		||||
    for (var i=0;i<obj.data.primary.length;i++){
 | 
			
		||||
        var date = new Date(start);
 | 
			
		||||
    	data.xAxis.push(date.getMonth()+1+"/"+date.getDate())
 | 
			
		||||
    	start+=24*3600*1000;
 | 
			
		||||
    }
 | 
			
		||||
	drawLogBar("auditCMLogBarDiv", data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var customAlert = function(message, title) {
 | 
			
		||||
	if (!title)
 | 
			
		||||
		title = '提示';
 | 
			
		||||
 | 
			
		||||
	if (!message)
 | 
			
		||||
		message = 'No Message to Display.';
 | 
			
		||||
 | 
			
		||||
	$('<div></div>').html(message).dialog({
 | 
			
		||||
		title : title,
 | 
			
		||||
		resizable : false,
 | 
			
		||||
		modal : true,
 | 
			
		||||
		buttons : {
 | 
			
		||||
			'Ok' : function() {
 | 
			
		||||
				$(this).dialog('close');
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var changeManageLogTime = function(){
 | 
			
		||||
	var data = document.getElementById('manageLogInput').value;
 | 
			
		||||
	data = parseInt(data);
 | 
			
		||||
	console.log(data);
 | 
			
		||||
	if(data > 30 || data < 1){
 | 
			
		||||
		customAlert("超出时间范围!");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	global.manageLogTime = parseInt(data);
 | 
			
		||||
	setTimeout(function() {
 | 
			
		||||
		var arg = {};
 | 
			
		||||
		arg.action = "queryActionLog";
 | 
			
		||||
		arg.start = getDateDaysBefore(global.manageLogTime);
 | 
			
		||||
		arg.requestID = "changeManageLogTime_"+new Date().getTime()+"_"+Math.floor(Math.random()*1000000);
 | 
			
		||||
        global.wscallbacks[arg.requestID]=onChangeManageLogTime;
 | 
			
		||||
		global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
	}, 300);
 | 
			
		||||
};
 | 
			
		||||
var onChangeManageLogTime = function(obj){
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
    var data = {};
 | 
			
		||||
    data.data = obj.data.primary;
 | 
			
		||||
    drawLogTable("auditLogTabDiv", data);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var changeCMLogTime = function(){
 | 
			
		||||
	var data = document.getElementById('CMLogInput').value;
 | 
			
		||||
	data = parseInt(data);
 | 
			
		||||
	console.log(data);
 | 
			
		||||
	if(data > 30 || data < 1){
 | 
			
		||||
		customAlert("超出时间范围!");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	global.CMLogTime = parseInt(data);
 | 
			
		||||
	setTimeout(function() {
 | 
			
		||||
		var arg = {};
 | 
			
		||||
	    arg.start = getDateDaysBefore(global.CMLogTime);
 | 
			
		||||
		arg.action = "queryCMLog";
 | 
			
		||||
		arg.category = "setNodeID,onGetUDPID,listCMInfo,updateContract,pubEvent,subEvent,executeContractOnOtherNodes,onReceiveContractExecution,onReceiveProject,onStartEachNode";
 | 
			
		||||
		arg.requestID = "changeCMLogTime_"+new Date().getTime()+"_"+Math.floor(Math.random()*1000000);
 | 
			
		||||
        global.wscallbacks[arg.requestID]=onChangeCMLogTime;
 | 
			
		||||
		global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
	}, 300);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onChangeCMLogTime = function(obj){
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
    var data = {};
 | 
			
		||||
    var category = "setNodeID,onGetUDPID,listCMInfo,updateContract,pubEvent,subEvent,executeContractOnOtherNodes,onReceiveContractExecution,onReceiveProject,onStartEachNode";
 | 
			
		||||
    var list = category.split(",");
 | 
			
		||||
    data.data=[];
 | 
			
		||||
    for (var key in obj.data){
 | 
			
		||||
        for (var i=0;i< obj.data[key].length;i++)
 | 
			
		||||
            data.data.push(obj.data[key][i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    drawLogTable("auditCMLogTabDiv", data);
 | 
			
		||||
}
 | 
			
		||||
var auditConf = {
 | 
			
		||||
	firstRowHeight : '200px'
 | 
			
		||||
};
 | 
			
		||||
// -----------------------------------------------
 | 
			
		||||
var logActionToCategory = function(action) {
 | 
			
		||||
	switch (action) {
 | 
			
		||||
	case 'getSessionID':
 | 
			
		||||
	case 'login':
 | 
			
		||||
	case 'getRole':
 | 
			
		||||
		return "登录类";
 | 
			
		||||
	case 'listAllUsers':
 | 
			
		||||
	case 'listApplyList':
 | 
			
		||||
	case 'applyRole':
 | 
			
		||||
	case 'accept':
 | 
			
		||||
	case 'delete':
 | 
			
		||||
	case 'authNodeManager':
 | 
			
		||||
		return "用户类";
 | 
			
		||||
	case 'queryCMLog':
 | 
			
		||||
	case 'queryActionLog':
 | 
			
		||||
	case 'queryUserStat':
 | 
			
		||||
	case 'listManageLogPie':
 | 
			
		||||
	case 'listCMLogPie':
 | 
			
		||||
	case 'listManageLogLine':
 | 
			
		||||
	case 'listCMLogLine':
 | 
			
		||||
		return "日志类";
 | 
			
		||||
	case 'listLicence':
 | 
			
		||||
	case 'updateLicence':
 | 
			
		||||
	case 'listNodes':
 | 
			
		||||
	case 'listTrustUnits':
 | 
			
		||||
	case 'getNodeTrustUnits':
 | 
			
		||||
	case 'distributeContract':
 | 
			
		||||
	case 'startContractTrustfully':
 | 
			
		||||
	case 'createTrustUnit':
 | 
			
		||||
		return "维护类";
 | 
			
		||||
	default:{
 | 
			
		||||
		console.log(action);
 | 
			
		||||
		return "其他类";
 | 
			
		||||
	}
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
var cmActionToCategory = function(action) {
 | 
			
		||||
	switch (action) {
 | 
			
		||||
	case "syncPing":
 | 
			
		||||
		return undefined;
 | 
			
		||||
	case "setNodeID":
 | 
			
		||||
	case "onGetUDPID":
 | 
			
		||||
		return "连接类";
 | 
			
		||||
	case "listCMInfo":
 | 
			
		||||
	case "updateContract":
 | 
			
		||||
		return "状态更新类";
 | 
			
		||||
	case "pubEvent":
 | 
			
		||||
	case "subEvent":
 | 
			
		||||
	case "executeContractOnOtherNodes":
 | 
			
		||||
	case "onReceiveContractExecution":
 | 
			
		||||
	case "receiveProject":
 | 
			
		||||
	case "onReceiveProject":
 | 
			
		||||
	case 'onStartEachNode':
 | 
			
		||||
		return "合约执行类";
 | 
			
		||||
	default:{
 | 
			
		||||
		console.log(action);
 | 
			
		||||
		return "其他类";
 | 
			
		||||
	}
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var drawLogPie = function(id, data, cateFun) {
 | 
			
		||||
	if(id == "auditLogPieDiv"){
 | 
			
		||||
		$("#Pie1").html("管理操作分类统计(" + global.manageLogTime + "日)");
 | 
			
		||||
	}else if(id == "auditCMLogPieDiv"){
 | 
			
		||||
		$("#Pie2").html("合约操作分类统计(" + global.CMLogTime + "日)");
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	if ($("#" + id).css("height") == "0px") {
 | 
			
		||||
		console.log("drawLogPie: ignore");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	$("#" + id).html(
 | 
			
		||||
			"<div class='col-12' id='" + id
 | 
			
		||||
					+ "Canv' style='width:100%; min-height: "
 | 
			
		||||
					+ auditConf.firstRowHeight + "; padding: 0px'></div>");
 | 
			
		||||
	var result = {};
 | 
			
		||||
	for (var key in data) {
 | 
			
		||||
		var obj = data[key];
 | 
			
		||||
		var act = cateFun(key)
 | 
			
		||||
		if (act == undefined)
 | 
			
		||||
			continue;
 | 
			
		||||
		if (result[act] == undefined) {
 | 
			
		||||
			result[act] = obj[0];
 | 
			
		||||
		} else
 | 
			
		||||
			result[act] += obj[0];
 | 
			
		||||
	}
 | 
			
		||||
	global.result = result;
 | 
			
		||||
	var dataList = [];
 | 
			
		||||
	var valDataList = [];
 | 
			
		||||
	for ( var key in result) {
 | 
			
		||||
		dataList.push(key);
 | 
			
		||||
		var l = {};
 | 
			
		||||
		l.name = key
 | 
			
		||||
		l.value = result[key];
 | 
			
		||||
		valDataList.push(l);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var myChart = echarts.init($("#" + id + "Canv")[0], 'walden');
 | 
			
		||||
 | 
			
		||||
	var option222 = {
 | 
			
		||||
		toolbox : {
 | 
			
		||||
			show : true,
 | 
			
		||||
			feature : {
 | 
			
		||||
				restore : {},
 | 
			
		||||
				saveAsImage : {}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		tooltip : {
 | 
			
		||||
			trigger : 'item',
 | 
			
		||||
			formatter : '{a} <br/>{b}: {c} ({d}%)'
 | 
			
		||||
		},
 | 
			
		||||
		legend : {
 | 
			
		||||
			y : 'bottom',
 | 
			
		||||
			data : dataList
 | 
			
		||||
		},
 | 
			
		||||
		series : [ {
 | 
			
		||||
			name : '访问来源',
 | 
			
		||||
			type : 'pie',
 | 
			
		||||
			radius : [ '50%', '70%' ],
 | 
			
		||||
			avoidLabelOverlap : false,
 | 
			
		||||
			label : {
 | 
			
		||||
				normal : {
 | 
			
		||||
					show : false,
 | 
			
		||||
					position : 'center'
 | 
			
		||||
				},
 | 
			
		||||
				emphasis : {
 | 
			
		||||
					show : true,
 | 
			
		||||
					textStyle : {
 | 
			
		||||
						fontSize : '15',
 | 
			
		||||
						fontWeight : 'bold'
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			labelLine : {
 | 
			
		||||
				normal : {
 | 
			
		||||
					show : false
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			data : valDataList
 | 
			
		||||
		} ]
 | 
			
		||||
	};
 | 
			
		||||
	myChart.setOption(option222);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var drawLogBar = function(id, data) {
 | 
			
		||||
	time = 30;
 | 
			
		||||
	var startTime;
 | 
			
		||||
	if(id == "auditLogBarDiv"){
 | 
			
		||||
		time = global.manageLogTime;
 | 
			
		||||
		$("#Bar1").html("管理操作每日统计(" + global.manageLogTime + "日)");
 | 
			
		||||
		startTime = getDateDaysBefore(global.ManageLineTime);
 | 
			
		||||
	}else if(id == "auditCMLogBarDiv"){
 | 
			
		||||
		time = global.CMLogTime;
 | 
			
		||||
		$("#Bar2").html("合约操作每日统计(" + global.CMLogTime + "日)");
 | 
			
		||||
		startTime = getDateDaysBefore(global.CMLineTime);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	if ($("#" + id).css("height") == "0px") {
 | 
			
		||||
		console.log("drawLogBar: ignore");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	$("#" + id).html(
 | 
			
		||||
			"<div class='col-12' id='" + id
 | 
			
		||||
					+ "Canv' style='width:100%; min-height: "
 | 
			
		||||
					+ auditConf.firstRowHeight + "; padding: 0px'></div>");
 | 
			
		||||
	var myChart = echarts.init($("#" + id + "Canv")[0], 'walden');
 | 
			
		||||
	var xAxisData = data.xAxis;
 | 
			
		||||
	var data1 = data.yAxis;
 | 
			
		||||
	
 | 
			
		||||
	var option = {
 | 
			
		||||
		title : {
 | 
			
		||||
			subtext : '次数'
 | 
			
		||||
		},
 | 
			
		||||
		tooltip : {
 | 
			
		||||
			trigger : 'axis'
 | 
			
		||||
		},
 | 
			
		||||
		legend : {
 | 
			
		||||
			data : [ '操作次数' ],
 | 
			
		||||
			y : 'bottom',
 | 
			
		||||
		},
 | 
			
		||||
		toolbox : {
 | 
			
		||||
			show : true,
 | 
			
		||||
			feature : {
 | 
			
		||||
				dataZoom : {
 | 
			
		||||
					yAxisIndex : 'none'
 | 
			
		||||
				},
 | 
			
		||||
				dataView : {
 | 
			
		||||
					readOnly : false
 | 
			
		||||
				},
 | 
			
		||||
				magicType : {
 | 
			
		||||
					type : [ 'line', 'bar' ]
 | 
			
		||||
				},
 | 
			
		||||
				restore : {},
 | 
			
		||||
				saveAsImage : {}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		xAxis : {
 | 
			
		||||
			type : 'category',
 | 
			
		||||
			boundaryGap : false,
 | 
			
		||||
			data : xAxisData
 | 
			
		||||
		},
 | 
			
		||||
		yAxis : {
 | 
			
		||||
			type : 'value',
 | 
			
		||||
			axisLabel : {
 | 
			
		||||
				formatter : '{value}次'
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		series : [ {
 | 
			
		||||
			name : '操作次数',
 | 
			
		||||
			type : 'line',
 | 
			
		||||
			data : data1,
 | 
			
		||||
			markPoint : {
 | 
			
		||||
				data : [ {
 | 
			
		||||
					type : 'max',
 | 
			
		||||
					name : '最大值'
 | 
			
		||||
				}, {
 | 
			
		||||
					type : 'min',
 | 
			
		||||
					name : '最小值'
 | 
			
		||||
				} ]
 | 
			
		||||
			},
 | 
			
		||||
 | 
			
		||||
		} ]
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	myChart.setOption(option);
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
var drawLogTable = function(id, data) {
 | 
			
		||||
	if ($("#" + id).css("height") == "0px") {
 | 
			
		||||
		console.log("drawLogTable: ignore");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	var dtLang = {
 | 
			
		||||
		"sProcessing" : "处理中...",
 | 
			
		||||
		"lengthMenu" : '显示 <select>' + '<option value="10">10</option>'
 | 
			
		||||
				+ '<option value="50">50</option>'
 | 
			
		||||
				+ '<option value="100">100</option>'
 | 
			
		||||
				+ '<option value="-1">全部</option>' + '</select> 项结果',
 | 
			
		||||
		"sZeroRecords" : "没有匹配结果",
 | 
			
		||||
		"sInfo" : "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
 | 
			
		||||
		"sInfoEmpty" : "显示第 0 至 0 项结果,共 0 项",
 | 
			
		||||
		"sInfoFiltered" : "(由 _MAX_ 项结果过滤)",
 | 
			
		||||
		"sInfoPostFix" : "",
 | 
			
		||||
		"sSearch" : "搜索:",
 | 
			
		||||
		"sUrl" : "",
 | 
			
		||||
		"sEmptyTable" : "表中数据为空",
 | 
			
		||||
		"sLoadingRecords" : "载入中...",
 | 
			
		||||
		"sInfoThousands" : ",",
 | 
			
		||||
		"oPaginate" : {
 | 
			
		||||
			"sFirst" : "首页",
 | 
			
		||||
			"sPrevious" : "上页",
 | 
			
		||||
			"sNext" : "下页",
 | 
			
		||||
			"sLast" : "末页"
 | 
			
		||||
		},
 | 
			
		||||
		"oAria" : {
 | 
			
		||||
			"sSortAscending" : ": 以升序排列此列",
 | 
			
		||||
			"sSortDescending" : ": 以降序排列此列"
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
	var tableHead = "<table id='"
 | 
			
		||||
			+ id
 | 
			
		||||
			+ "Tab' class='table display row-border'><thead><tr><th>序号</th><th>时间</th><th>操作</th><th>公钥</th></tr></thead><tbody>";
 | 
			
		||||
	var tableTail = "</tbody></table>";
 | 
			
		||||
 | 
			
		||||
	console.log("drawLogTable");
 | 
			
		||||
	var html = tableHead;
 | 
			
		||||
	var lines = data.data;
 | 
			
		||||
	
 | 
			
		||||
	for (var i = 0; i < lines.length; i++) {
 | 
			
		||||
		var obj = lines[i];
 | 
			
		||||
		html += "<tr><td>";
 | 
			
		||||
		html += (i + 1);
 | 
			
		||||
		html += ("</td><td>");
 | 
			
		||||
		html += (obj.date);
 | 
			
		||||
		html += ("</td><td>");
 | 
			
		||||
		html += (obj.action);
 | 
			
		||||
		html += ("</td><td>");
 | 
			
		||||
		html += (obj.pubKey);
 | 
			
		||||
		html += "</td> </tr>";
 | 
			
		||||
	}
 | 
			
		||||
	html += applyTableTail;
 | 
			
		||||
	$("#" + id).html(html);
 | 
			
		||||
	$("#" + id + "Tab").DataTable(
 | 
			
		||||
			{
 | 
			
		||||
				"language" : dtLang,
 | 
			
		||||
				"rowCallback" : function(row, data, displayNum, displayIndex,
 | 
			
		||||
						dataIndex) {
 | 
			
		||||
 | 
			
		||||
				},
 | 
			
		||||
				"headerCallback" : function(thead, data, start, end, display) {
 | 
			
		||||
					$(thead).css("background", primaryColor);
 | 
			
		||||
					$(thead).css("color", "white");
 | 
			
		||||
					$(thead).children().css("background", primaryColor);
 | 
			
		||||
					$(thead).children().css("color", "white");
 | 
			
		||||
				},
 | 
			
		||||
				scrollCollapse : false,
 | 
			
		||||
				paging : true,
 | 
			
		||||
				pageLength : 10,
 | 
			
		||||
				order : [ [ 0, 'desc' ] ],
 | 
			
		||||
				"columnDefs" : [
 | 
			
		||||
						{
 | 
			
		||||
							"targets" : 1,
 | 
			
		||||
							"render" : function(data, type, row, meta) {
 | 
			
		||||
								return new Date(data / 1).toLocaleString();
 | 
			
		||||
							}
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							"targets" : 3,
 | 
			
		||||
							"render" : function(data, type, row, meta) {
 | 
			
		||||
								if (data.length > 15)
 | 
			
		||||
									return "<span title='" + data + "'>"
 | 
			
		||||
											+ data.substring(0, 25)
 | 
			
		||||
											+ "  ...</span>";
 | 
			
		||||
								else
 | 
			
		||||
									return data;
 | 
			
		||||
							}
 | 
			
		||||
 | 
			
		||||
						} ]
 | 
			
		||||
			});
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										676
									
								
								src/js/bootstrap-multiselect.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,676 @@
 | 
			
		||||
/**
 | 
			
		||||
 * bootstrap-multiselect.js
 | 
			
		||||
 * https://github.com/davidstutz/bootstrap-multiselect
 | 
			
		||||
 *
 | 
			
		||||
 * Copyright 2012, 2013 David Stutz
 | 
			
		||||
 * 
 | 
			
		||||
 * Dual licensed under the BSD-3-Clause and the Apache License, Version 2.0.
 | 
			
		||||
 */
 | 
			
		||||
!function($) {
 | 
			
		||||
    
 | 
			
		||||
    "use strict";// jshint ;_;
 | 
			
		||||
 | 
			
		||||
    if (typeof ko != 'undefined' && ko.bindingHandlers && !ko.bindingHandlers.multiselect) {
 | 
			
		||||
        ko.bindingHandlers.multiselect = {
 | 
			
		||||
            init : function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {},
 | 
			
		||||
            update : function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
 | 
			
		||||
                var ms = $(element).data('multiselect');
 | 
			
		||||
                if (!ms) {
 | 
			
		||||
                    $(element).multiselect(ko.utils.unwrapObservable(valueAccessor()));
 | 
			
		||||
                }
 | 
			
		||||
                else if (allBindingsAccessor().options && allBindingsAccessor().options().length !== ms.originalOptions.length) {
 | 
			
		||||
                    ms.updateOriginalOptions();
 | 
			
		||||
                    $(element).multiselect('rebuild');
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function Multiselect(select, options) {
 | 
			
		||||
 | 
			
		||||
        this.options = this.mergeOptions(options);
 | 
			
		||||
        this.$select = $(select);
 | 
			
		||||
        
 | 
			
		||||
        // Initialization.
 | 
			
		||||
        // We have to clone to create a new reference.
 | 
			
		||||
        this.originalOptions = this.$select.clone()[0].options;
 | 
			
		||||
        this.query = '';
 | 
			
		||||
        this.searchTimeout = null;
 | 
			
		||||
        
 | 
			
		||||
        this.options.multiple = this.$select.attr('multiple') == "multiple";
 | 
			
		||||
        this.options.onChange = $.proxy(this.options.onChange, this);
 | 
			
		||||
        
 | 
			
		||||
        // Build select all if enabled.
 | 
			
		||||
        this.buildContainer();
 | 
			
		||||
        this.buildButton();
 | 
			
		||||
        this.buildSelectAll();
 | 
			
		||||
        this.buildDropdown();
 | 
			
		||||
        this.buildDropdownOptions();
 | 
			
		||||
        this.buildFilter();
 | 
			
		||||
        this.updateButtonText();
 | 
			
		||||
 | 
			
		||||
        this.$select.hide().after(this.$container);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    Multiselect.prototype = {
 | 
			
		||||
        
 | 
			
		||||
        // Default options.
 | 
			
		||||
        defaults: {
 | 
			
		||||
            // Default text function will either print 'None selected' in case no
 | 
			
		||||
            // option is selected, or a list of the selected options up to a length of 3 selected options.
 | 
			
		||||
            // If more than 3 options are selected, the number of selected options is printed.
 | 
			
		||||
            buttonText: function(options, select) {
 | 
			
		||||
                if (options.length == 0) {
 | 
			
		||||
                    return this.nonSelectedText + ' <b class="caret"></b>';
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    
 | 
			
		||||
                    if (options.length > 5) {
 | 
			
		||||
                        return options.length + ' ' + this.nSelectedText + ' <b class="caret"></b>';
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        var selected = '';
 | 
			
		||||
                        options.each(function() {
 | 
			
		||||
                            var label = ($(this).attr('label') !== undefined) ? $(this).attr('label') : $(this).html();
 | 
			
		||||
                            
 | 
			
		||||
                            //Hack by Victor Valencia R.
 | 
			
		||||
                            if($(select).hasClass('multiselect-icon')){
 | 
			
		||||
                                var icon = $(this).data('icon');
 | 
			
		||||
                                label = '<span class="glyphicon ' + icon + '"></span> ' + label;
 | 
			
		||||
                            }
 | 
			
		||||
                            
 | 
			
		||||
                            selected += label + ', ';
 | 
			
		||||
                        });
 | 
			
		||||
                        return selected.substr(0, selected.length - 2) + ' <b class="caret"></b>';
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            // Like the buttonText option to update the title of the button.
 | 
			
		||||
            buttonTitle: function(options, select) {
 | 
			
		||||
                if (options.length == 0) {
 | 
			
		||||
                    return this.nonSelectedText;
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    var selected = '';
 | 
			
		||||
                    options.each(function () {
 | 
			
		||||
                        selected += $(this).text() + ', ';
 | 
			
		||||
                    });
 | 
			
		||||
                    return selected.substr(0, selected.length - 2);
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            // Is triggered on change of the selected options.
 | 
			
		||||
            onChange : function(option, checked) {
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            buttonClass: 'btn',
 | 
			
		||||
            dropRight: false,
 | 
			
		||||
            selectedClass: 'active',
 | 
			
		||||
            buttonWidth: 'auto',
 | 
			
		||||
            buttonContainer: '<div class="btn-group custom-btn" />',
 | 
			
		||||
            // Maximum height of the dropdown menu.
 | 
			
		||||
            // If maximum height is exceeded a scrollbar will be displayed.
 | 
			
		||||
            maxHeight: false,
 | 
			
		||||
            includeSelectAllOption: false,
 | 
			
		||||
            selectAllText: ' Select all',
 | 
			
		||||
            selectAllValue: 'multiselect-all',
 | 
			
		||||
            enableFiltering: false,
 | 
			
		||||
            enableCaseInsensitiveFiltering: false,
 | 
			
		||||
            filterPlaceholder: 'Search',
 | 
			
		||||
            // possible options: 'text', 'value', 'both'
 | 
			
		||||
            filterBehavior: 'text',
 | 
			
		||||
            preventInputChangeEvent: false,        
 | 
			
		||||
            nonSelectedText: 'None selected',            
 | 
			
		||||
            nSelectedText: 'selected'
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        // Templates.
 | 
			
		||||
        templates: {
 | 
			
		||||
            button: '<button type="button" class="multiselect dropdown-toggle form-control" data-toggle="dropdown"></button>',
 | 
			
		||||
            ul: '<ul class="multiselect-container dropdown-menu custom-multi"></ul>',
 | 
			
		||||
            filter: '<div class="input-group"><span class="input-group-addon"><i class="glyphicon glyphicon-search"></i></span><input class="form-control multiselect-search" type="text"></div>',
 | 
			
		||||
            li: '<li><a href="javascript:void(0);"><label></label></a></li>',
 | 
			
		||||
            liGroup: '<li><label class="multiselect-group"></label></li>'
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        constructor: Multiselect,
 | 
			
		||||
        
 | 
			
		||||
        buildContainer: function() {
 | 
			
		||||
            this.$container = $(this.options.buttonContainer);
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        buildButton: function() {
 | 
			
		||||
            // Build button.
 | 
			
		||||
            this.$button = $(this.templates.button).addClass(this.options.buttonClass);
 | 
			
		||||
            
 | 
			
		||||
            // Adopt active state.
 | 
			
		||||
            if (this.$select.prop('disabled')) {
 | 
			
		||||
                this.disable();
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                this.enable();
 | 
			
		||||
            }
 | 
			
		||||
           
 | 
			
		||||
            // Manually add button width if set.
 | 
			
		||||
            if (this.options.buttonWidth) {
 | 
			
		||||
                this.$button.css({
 | 
			
		||||
                    'width' : this.options.buttonWidth
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Keep the tab index from the select.
 | 
			
		||||
            var tabindex = this.$select.attr('tabindex');
 | 
			
		||||
            if (tabindex) {
 | 
			
		||||
                this.$button.attr('tabindex', tabindex);
 | 
			
		||||
            }
 | 
			
		||||
           
 | 
			
		||||
            this.$container.prepend(this.$button)
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        // Build dropdown container ul.
 | 
			
		||||
        buildDropdown: function() {
 | 
			
		||||
            
 | 
			
		||||
            // Build ul.
 | 
			
		||||
            this.$ul = $(this.templates.ul);
 | 
			
		||||
            
 | 
			
		||||
            if (this.options.dropRight) {
 | 
			
		||||
                this.$ul.addClass('pull-right');
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // Set max height of dropdown menu to activate auto scrollbar.
 | 
			
		||||
            if (this.options.maxHeight) {
 | 
			
		||||
                // TODO: Add a class for this option to move the css declarations.
 | 
			
		||||
                this.$ul.css({
 | 
			
		||||
                    'max-height': this.options.maxHeight + 'px',
 | 
			
		||||
                    'overflow-y': 'auto',
 | 
			
		||||
                    'overflow-x': 'hidden'
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            this.$container.append(this.$ul)
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        // Build the dropdown and bind event handling.
 | 
			
		||||
        buildDropdownOptions: function() {
 | 
			
		||||
            
 | 
			
		||||
            this.$select.children().each($.proxy(function(index, element) {
 | 
			
		||||
                // Support optgroups and options without a group simultaneously.
 | 
			
		||||
                var tag = $(element).prop('tagName').toLowerCase();
 | 
			
		||||
                if (tag == 'optgroup') {
 | 
			
		||||
                    this.createOptgroup(element);
 | 
			
		||||
                }
 | 
			
		||||
                else if (tag == 'option') {
 | 
			
		||||
                    this.createOptionValue(element);
 | 
			
		||||
                }
 | 
			
		||||
                // Other illegal tags will be ignored.
 | 
			
		||||
            }, this));
 | 
			
		||||
 | 
			
		||||
            // Bind the change event on the dropdown elements.
 | 
			
		||||
            $('li input', this.$ul).on('change', $.proxy(function(event) {
 | 
			
		||||
                var checked = $(event.target).prop('checked') || false;
 | 
			
		||||
                var isSelectAllOption = $(event.target).val() == this.options.selectAllValue;
 | 
			
		||||
 | 
			
		||||
                // Apply or unapply the configured selected class.
 | 
			
		||||
                if (this.options.selectedClass) {
 | 
			
		||||
                    if (checked) {
 | 
			
		||||
                        $(event.target).parents('li').addClass(this.options.selectedClass);
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        $(event.target).parents('li').removeClass(this.options.selectedClass);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                // Get the corresponding option.
 | 
			
		||||
                var value = $(event.target).val();
 | 
			
		||||
                var $option = this.getOptionByValue(value);
 | 
			
		||||
 | 
			
		||||
                var $optionsNotThis = $('option', this.$select).not($option);
 | 
			
		||||
                var $checkboxesNotThis = $('input', this.$container).not($(event.target));
 | 
			
		||||
 | 
			
		||||
                // Toggle all options if the select all option was changed.
 | 
			
		||||
                if (isSelectAllOption) {
 | 
			
		||||
                    $checkboxesNotThis.filter(function() {
 | 
			
		||||
                        return $(this).is(':checked') != checked;
 | 
			
		||||
                    }).trigger('click');
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (checked) {
 | 
			
		||||
                    $option.prop('selected', true);
 | 
			
		||||
 | 
			
		||||
                    if (this.options.multiple) {
 | 
			
		||||
                        // Simply select additional option.
 | 
			
		||||
                        $option.prop('selected', true);
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        // Unselect all other options and corresponding checkboxes.
 | 
			
		||||
                        if (this.options.selectedClass) {
 | 
			
		||||
                            $($checkboxesNotThis).parents('li').removeClass(this.options.selectedClass);
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        $($checkboxesNotThis).prop('checked', false);
 | 
			
		||||
                        $optionsNotThis.prop('selected', false);
 | 
			
		||||
 | 
			
		||||
                        // It's a single selection, so close.
 | 
			
		||||
                        this.$button.click();
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    if (this.options.selectedClass == "active") {
 | 
			
		||||
                        $optionsNotThis.parents("a").css("outline", "");
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    // Unselect option.
 | 
			
		||||
                    $option.prop('selected', false);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                this.updateButtonText();
 | 
			
		||||
                this.$select.change();
 | 
			
		||||
                this.options.onChange($option, checked);
 | 
			
		||||
                
 | 
			
		||||
                if(this.options.preventInputChangeEvent) {
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
            }, this));
 | 
			
		||||
 | 
			
		||||
            $('li a', this.$ul).on('touchstart click', function(event) {
 | 
			
		||||
                event.stopPropagation();
 | 
			
		||||
                $(event.target).blur();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            // Keyboard support.
 | 
			
		||||
            this.$container.on('keydown', $.proxy(function(event) {
 | 
			
		||||
                if ($('input[type="text"]', this.$container).is(':focus')) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                if ((event.keyCode == 9 || event.keyCode == 27) && this.$container.hasClass('open')) {
 | 
			
		||||
                    // Close on tab or escape.
 | 
			
		||||
                    this.$button.click();
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    var $items = $(this.$container).find("li:not(.divider):visible a");
 | 
			
		||||
 | 
			
		||||
                    if (!$items.length) {
 | 
			
		||||
                        return;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    var index = $items.index($items.filter(':focus'));
 | 
			
		||||
 | 
			
		||||
                    // Navigation up.
 | 
			
		||||
                    if (event.keyCode == 38 && index > 0) {
 | 
			
		||||
                        index--;
 | 
			
		||||
                    }
 | 
			
		||||
                    // Navigate down.
 | 
			
		||||
                    else if (event.keyCode == 40 && index < $items.length - 1) {
 | 
			
		||||
                        index++;
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (!~index) {
 | 
			
		||||
                        index = 0;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    var $current = $items.eq(index);
 | 
			
		||||
                    $current.focus();
 | 
			
		||||
 | 
			
		||||
                    if (event.keyCode == 32 || event.keyCode == 13) {
 | 
			
		||||
                        var $checkbox = $current.find('input');
 | 
			
		||||
 | 
			
		||||
                        $checkbox.prop("checked", !$checkbox.prop("checked"));
 | 
			
		||||
                        $checkbox.change();
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    event.stopPropagation();
 | 
			
		||||
                    event.preventDefault();
 | 
			
		||||
                }
 | 
			
		||||
            }, this));
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        // Will build an dropdown element for the given option.
 | 
			
		||||
        createOptionValue: function(element) {
 | 
			
		||||
            if ($(element).is(':selected')) {
 | 
			
		||||
                $(element).prop('selected', true);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Support the label attribute on options.
 | 
			
		||||
            var label = $(element).attr('label') || $(element).html();            
 | 
			
		||||
            var value = $(element).val();
 | 
			
		||||
                        
 | 
			
		||||
            //Hack by Victor Valencia R.            
 | 
			
		||||
            if($(element).parent().hasClass('multiselect-icon') || $(element).parent().parent().hasClass('multiselect-icon')){                                
 | 
			
		||||
                var icon = $(element).data('icon');
 | 
			
		||||
                label = '<span class="glyphicon ' + icon + '"></span> ' + label;
 | 
			
		||||
            } 
 | 
			
		||||
            
 | 
			
		||||
            var inputType = this.options.multiple ? "checkbox" : "radio";
 | 
			
		||||
 | 
			
		||||
            var $li = $(this.templates.li);
 | 
			
		||||
            $('label', $li).addClass(inputType);
 | 
			
		||||
            $('label', $li).append('<input type="' + inputType + '" />');
 | 
			
		||||
            
 | 
			
		||||
            //Hack by Victor Valencia R.
 | 
			
		||||
            if(($(element).parent().hasClass('multiselect-icon') || $(element).parent().parent().hasClass('multiselect-icon')) && inputType == 'radio'){                
 | 
			
		||||
                $('label', $li).css('padding-left', '0px');
 | 
			
		||||
                $('label', $li).find('input').css('display', 'none');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            var selected = $(element).prop('selected') || false;
 | 
			
		||||
            var $checkbox = $('input', $li);
 | 
			
		||||
            $checkbox.val(value);
 | 
			
		||||
 | 
			
		||||
            if (value == this.options.selectAllValue) {
 | 
			
		||||
                $checkbox.parent().parent().addClass('multiselect-all');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $('label', $li).append(" " + label);
 | 
			
		||||
 | 
			
		||||
            this.$ul.append($li);
 | 
			
		||||
 | 
			
		||||
            if ($(element).is(':disabled')) {
 | 
			
		||||
                $checkbox.attr('disabled', 'disabled').prop('disabled', true).parents('li').addClass('disabled');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $checkbox.prop('checked', selected);
 | 
			
		||||
 | 
			
		||||
            if (selected && this.options.selectedClass) {
 | 
			
		||||
                $checkbox.parents('li').addClass(this.options.selectedClass);
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Create optgroup.
 | 
			
		||||
        createOptgroup: function(group) {
 | 
			
		||||
            var groupName = $(group).prop('label');
 | 
			
		||||
 | 
			
		||||
            // Add a header for the group.
 | 
			
		||||
            var $li = $(this.templates.liGroup);
 | 
			
		||||
            $('label', $li).text(groupName);
 | 
			
		||||
            
 | 
			
		||||
            //Hack by Victor Valencia R.
 | 
			
		||||
            $li.addClass('text-primary');
 | 
			
		||||
            
 | 
			
		||||
            this.$ul.append($li);
 | 
			
		||||
            
 | 
			
		||||
            // Add the options of the group.
 | 
			
		||||
            $('option', group).each($.proxy(function(index, element) {                
 | 
			
		||||
                this.createOptionValue(element);
 | 
			
		||||
            }, this));
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        // Add the select all option to the select.
 | 
			
		||||
        buildSelectAll: function() {
 | 
			
		||||
            var alreadyHasSelectAll = this.$select[0][0] ? this.$select[0][0].value == this.options.selectAllValue : false;
 | 
			
		||||
            // If options.includeSelectAllOption === true, add the include all checkbox.
 | 
			
		||||
            if (this.options.includeSelectAllOption && this.options.multiple && !alreadyHasSelectAll) {
 | 
			
		||||
                this.$select.prepend('<option value="' + this.options.selectAllValue + '">' + this.options.selectAllText + '</option>');
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        // Build and bind filter.
 | 
			
		||||
        buildFilter: function() {
 | 
			
		||||
            
 | 
			
		||||
            // Build filter if filtering OR case insensitive filtering is enabled and the number of options exceeds (or equals) enableFilterLength.
 | 
			
		||||
            if (this.options.enableFiltering || this.options.enableCaseInsensitiveFiltering) {
 | 
			
		||||
                var enableFilterLength = Math.max(this.options.enableFiltering, this.options.enableCaseInsensitiveFiltering);
 | 
			
		||||
                if (this.$select.find('option').length >= enableFilterLength) {
 | 
			
		||||
                    
 | 
			
		||||
                    this.$filter = $(this.templates.filter);
 | 
			
		||||
                    $('input', this.$filter).attr('placeholder', this.options.filterPlaceholder);
 | 
			
		||||
                    this.$ul.prepend(this.$filter);
 | 
			
		||||
 | 
			
		||||
                    this.$filter.val(this.query).on('click', function(event) {
 | 
			
		||||
                        event.stopPropagation();
 | 
			
		||||
                    }).on('keydown', $.proxy(function(event) {
 | 
			
		||||
                        // This is useful to catch "keydown" events after the browser has updated the control.
 | 
			
		||||
                        clearTimeout(this.searchTimeout);
 | 
			
		||||
 | 
			
		||||
                        this.searchTimeout = this.asyncFunction($.proxy(function() {
 | 
			
		||||
 | 
			
		||||
                            if (this.query != event.target.value) {
 | 
			
		||||
                                this.query = event.target.value;
 | 
			
		||||
 | 
			
		||||
                                $.each($('li', this.$ul), $.proxy(function(index, element) {
 | 
			
		||||
                                    var value = $('input', element).val();
 | 
			
		||||
                                    if (value != this.options.selectAllValue) {
 | 
			
		||||
                                        var text = $('label', element).text();
 | 
			
		||||
                                        var value = $('input', element).val();
 | 
			
		||||
                                        if (value && text && value != this.options.selectAllValue) {
 | 
			
		||||
                                            // by default lets assume that element is not
 | 
			
		||||
                                            // interesting for this search
 | 
			
		||||
                                            var showElement = false;
 | 
			
		||||
 | 
			
		||||
                                            var filterCandidate = '';
 | 
			
		||||
                                            if ((this.options.filterBehavior == 'text' || this.options.filterBehavior == 'both')) {
 | 
			
		||||
                                                filterCandidate = text;
 | 
			
		||||
                                            }
 | 
			
		||||
                                            if ((this.options.filterBehavior == 'value' || this.options.filterBehavior == 'both')) {
 | 
			
		||||
                                                filterCandidate = value;
 | 
			
		||||
                                            }
 | 
			
		||||
 | 
			
		||||
                                            if (this.options.enableCaseInsensitiveFiltering && filterCandidate.toLowerCase().indexOf(this.query.toLowerCase()) > -1) {
 | 
			
		||||
                                                showElement = true;
 | 
			
		||||
                                            }
 | 
			
		||||
                                            else if (filterCandidate.indexOf(this.query) > -1) {
 | 
			
		||||
                                                showElement = true;
 | 
			
		||||
                                            }
 | 
			
		||||
 | 
			
		||||
                                            if (showElement) {
 | 
			
		||||
                                                $(element).show();
 | 
			
		||||
                                            }
 | 
			
		||||
                                            else {
 | 
			
		||||
                                                $(element).hide();
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                }, this));
 | 
			
		||||
                            }
 | 
			
		||||
                        }, this), 300, this);
 | 
			
		||||
                    }, this));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Destroy - unbind - the plugin.
 | 
			
		||||
        destroy: function() {
 | 
			
		||||
            this.$container.remove();
 | 
			
		||||
            this.$select.show();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Refreshs the checked options based on the current state of the select.
 | 
			
		||||
        refresh: function() {
 | 
			
		||||
            $('option', this.$select).each($.proxy(function(index, element) {
 | 
			
		||||
                var $input = $('li input', this.$ul).filter(function() {
 | 
			
		||||
                    return $(this).val() == $(element).val();
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                if ($(element).is(':selected')) {
 | 
			
		||||
                    $input.prop('checked', true);
 | 
			
		||||
 | 
			
		||||
                    if (this.options.selectedClass) {
 | 
			
		||||
                        $input.parents('li').addClass(this.options.selectedClass);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    $input.prop('checked', false);
 | 
			
		||||
 | 
			
		||||
                    if (this.options.selectedClass) {
 | 
			
		||||
                        $input.parents('li').removeClass(this.options.selectedClass);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if ($(element).is(":disabled")) {
 | 
			
		||||
                    $input.attr('disabled', 'disabled').prop('disabled', true).parents('li').addClass('disabled');
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    $input.prop('disabled', false).parents('li').removeClass('disabled');
 | 
			
		||||
                }
 | 
			
		||||
            }, this));
 | 
			
		||||
 | 
			
		||||
            this.updateButtonText();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Select an option by its value or multiple options using an array of values.
 | 
			
		||||
        select: function(selectValues) {
 | 
			
		||||
            if(selectValues && !$.isArray(selectValues)) {
 | 
			
		||||
                selectValues = [selectValues];
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            for (var i = 0; i < selectValues.length; i++) {
 | 
			
		||||
                
 | 
			
		||||
                var value = selectValues[i];
 | 
			
		||||
                
 | 
			
		||||
                var $option = this.getOptionByValue(value);
 | 
			
		||||
                var $checkbox = this.getInputByValue(value);
 | 
			
		||||
 | 
			
		||||
                if (this.options.selectedClass) {
 | 
			
		||||
                    $checkbox.parents('li').addClass(this.options.selectedClass);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                $checkbox.prop('checked', true);
 | 
			
		||||
                $option.prop('selected', true);                
 | 
			
		||||
                this.options.onChange($option, true);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.updateButtonText();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Deselect an option by its value or using an array of values.
 | 
			
		||||
        deselect: function(deselectValues) {
 | 
			
		||||
            if(deselectValues && !$.isArray(deselectValues)) {
 | 
			
		||||
                deselectValues = [deselectValues];
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            for (var i = 0; i < deselectValues.length; i++) {
 | 
			
		||||
                
 | 
			
		||||
                var value = deselectValues[i];
 | 
			
		||||
                
 | 
			
		||||
                var $option = this.getOptionByValue(value);
 | 
			
		||||
                var $checkbox = this.getInputByValue(value);
 | 
			
		||||
 | 
			
		||||
                if (this.options.selectedClass) {
 | 
			
		||||
                    $checkbox.parents('li').removeClass(this.options.selectedClass);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                $checkbox.prop('checked', false);
 | 
			
		||||
                $option.prop('selected', false);               
 | 
			
		||||
                this.options.onChange($option, false);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this.updateButtonText();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Rebuild the whole dropdown menu.
 | 
			
		||||
        rebuild: function() {
 | 
			
		||||
            this.$ul.html('');
 | 
			
		||||
            
 | 
			
		||||
            // Remove select all option in select.
 | 
			
		||||
            $('option[value="' + this.options.selectAllValue + '"]', this.$select).remove();
 | 
			
		||||
            
 | 
			
		||||
            // Important to distinguish between radios and checkboxes.
 | 
			
		||||
            this.options.multiple = this.$select.attr('multiple') == "multiple";
 | 
			
		||||
            
 | 
			
		||||
            this.buildSelectAll();
 | 
			
		||||
            this.buildDropdownOptions();
 | 
			
		||||
            this.updateButtonText();
 | 
			
		||||
            this.buildFilter();
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        // Build select using the given data as options.
 | 
			
		||||
        dataprovider: function(dataprovider) {
 | 
			
		||||
            var optionDOM = "";
 | 
			
		||||
            dataprovider.forEach(function (option) {
 | 
			
		||||
                optionDOM += '<option value="' + option.value + '">' + option.label + '</option>';
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            this.$select.html(optionDOM);
 | 
			
		||||
            this.rebuild();
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Enable button.
 | 
			
		||||
        enable: function() {
 | 
			
		||||
            this.$select.prop('disabled', false);
 | 
			
		||||
            this.$button.prop('disabled', false)
 | 
			
		||||
                .removeClass('disabled');
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Disable button.
 | 
			
		||||
        disable: function() {
 | 
			
		||||
            this.$select.prop('disabled', true);
 | 
			
		||||
            this.$button.prop('disabled', true)
 | 
			
		||||
                .addClass('disabled');
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Set options.
 | 
			
		||||
        setOptions: function(options) {
 | 
			
		||||
            this.options = this.mergeOptions(options);
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Get options by merging defaults and given options.
 | 
			
		||||
        mergeOptions: function(options) {
 | 
			
		||||
            return $.extend({}, this.defaults, options);
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        // Update button text and button title.
 | 
			
		||||
        updateButtonText: function() {
 | 
			
		||||
            var options = this.getSelected();
 | 
			
		||||
            
 | 
			
		||||
            // First update the displayed button text.
 | 
			
		||||
            $('button', this.$container).html(this.options.buttonText(options, this.$select));            
 | 
			
		||||
            
 | 
			
		||||
            // Now update the title attribute of the button.
 | 
			
		||||
            $('button', this.$container).attr('title', this.options.buttonTitle(options, this.$select));
 | 
			
		||||
            
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        // Get all selected options.
 | 
			
		||||
        getSelected: function() {
 | 
			
		||||
            return $('option[value!="' + this.options.selectAllValue + '"]:selected', this.$select).filter(function() {
 | 
			
		||||
                return $(this).prop('selected');
 | 
			
		||||
            });
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        // Get the corresponding option by ts value.
 | 
			
		||||
        getOptionByValue: function(value) {
 | 
			
		||||
            return $('option', this.$select).filter(function() {
 | 
			
		||||
                return $(this).val() == value;
 | 
			
		||||
            });
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        // Get an input in the dropdown by its value.
 | 
			
		||||
        getInputByValue: function(value) {
 | 
			
		||||
            return $('li input', this.$ul).filter(function() {
 | 
			
		||||
                return $(this).val() == value;
 | 
			
		||||
            });
 | 
			
		||||
        },
 | 
			
		||||
        
 | 
			
		||||
        updateOriginalOptions: function() {
 | 
			
		||||
            this.originalOptions = this.$select.clone()[0].options;
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        asyncFunction: function(callback, timeout, self) {
 | 
			
		||||
            var args = Array.prototype.slice.call(arguments, 3);
 | 
			
		||||
            return setTimeout(function() {
 | 
			
		||||
                callback.apply(self || window, args);
 | 
			
		||||
            }, timeout);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    $.fn.multiselect = function(option, parameter) {
 | 
			
		||||
        return this.each(function() {
 | 
			
		||||
            var data = $(this).data('multiselect'), options = typeof option == 'object' && option;
 | 
			
		||||
 | 
			
		||||
            // Initialize the multiselect.
 | 
			
		||||
            if (!data) {
 | 
			
		||||
                $(this).data('multiselect', ( data = new Multiselect(this, options)));
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Call multiselect method.
 | 
			
		||||
            if ( typeof option == 'string') {
 | 
			
		||||
                data[option](parameter);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    $.fn.multiselect.Constructor = Multiselect;
 | 
			
		||||
    
 | 
			
		||||
    // Automatically init selects by their data-role.
 | 
			
		||||
    $(function() {
 | 
			
		||||
        $("select[role='multiselect']").multiselect();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
}(window.jQuery);
 | 
			
		||||
							
								
								
									
										1
									
								
								src/js/bootstrap-select.js.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										9
									
								
								src/js/bootstrap-select.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										7
									
								
								src/js/bootstrap.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								src/js/bootstrap.min.js.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										11
									
								
								src/js/bootstrap4-toggle.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,11 @@
 | 
			
		||||
/*\
 | 
			
		||||
|*| ========================================================================
 | 
			
		||||
|*| Bootstrap Toggle: bootstrap4-toggle.js v3.6.1
 | 
			
		||||
|*| https://gitbrent.github.io/bootstrap4-toggle/
 | 
			
		||||
|*| ========================================================================
 | 
			
		||||
|*| Copyright 2018-2019 Brent Ely
 | 
			
		||||
|*| Licensed under MIT
 | 
			
		||||
|*| ========================================================================
 | 
			
		||||
\*/
 | 
			
		||||
!function(a){"use strict";function l(t,e){this.$element=a(t),this.options=a.extend({},this.defaults(),e),this.render()}l.VERSION="3.6.0",l.DEFAULTS={on:"On",off:"Off",onstyle:"primary",offstyle:"light",size:"normal",style:"",width:null,height:null},l.prototype.defaults=function(){return{on:this.$element.attr("data-on")||l.DEFAULTS.on,off:this.$element.attr("data-off")||l.DEFAULTS.off,onstyle:this.$element.attr("data-onstyle")||l.DEFAULTS.onstyle,offstyle:this.$element.attr("data-offstyle")||l.DEFAULTS.offstyle,size:this.$element.attr("data-size")||l.DEFAULTS.size,style:this.$element.attr("data-style")||l.DEFAULTS.style,width:this.$element.attr("data-width")||l.DEFAULTS.width,height:this.$element.attr("data-height")||l.DEFAULTS.height}},l.prototype.render=function(){this._onstyle="btn-"+this.options.onstyle,this._offstyle="btn-"+this.options.offstyle;var t="large"===this.options.size||"lg"===this.options.size?"btn-lg":"small"===this.options.size||"sm"===this.options.size?"btn-sm":"mini"===this.options.size||"xs"===this.options.size?"btn-xs":"",e=a('<label for="'+this.$element.prop("id")+'" class="btn">').html(this.options.on).addClass(this._onstyle+" "+t),s=a('<label for="'+this.$element.prop("id")+'" class="btn">').html(this.options.off).addClass(this._offstyle+" "+t),o=a('<span class="toggle-handle btn btn-light">').addClass(t),i=a('<div class="toggle-group">').append(e,s,o),l=a('<div class="toggle btn" data-toggle="toggle" role="button">').addClass(this.$element.prop("checked")?this._onstyle:this._offstyle+" off").addClass(t).addClass(this.options.style);this.$element.wrap(l),a.extend(this,{$toggle:this.$element.parent(),$toggleOn:e,$toggleOff:s,$toggleGroup:i}),this.$toggle.append(i);var n=this.options.width||Math.max(e.outerWidth(),s.outerWidth())+o.outerWidth()/2,h=this.options.height||Math.max(e.outerHeight(),s.outerHeight());e.addClass("toggle-on"),s.addClass("toggle-off"),this.$toggle.css({width:n,height:h}),this.options.height&&(e.css("line-height",e.height()+"px"),s.css("line-height",s.height()+"px")),this.update(!0),this.trigger(!0)},l.prototype.toggle=function(){this.$element.prop("checked")?this.off():this.on()},l.prototype.on=function(t){if(this.$element.prop("disabled"))return!1;this.$toggle.removeClass(this._offstyle+" off").addClass(this._onstyle),this.$element.prop("checked",!0),t||this.trigger()},l.prototype.off=function(t){if(this.$element.prop("disabled"))return!1;this.$toggle.removeClass(this._onstyle).addClass(this._offstyle+" off"),this.$element.prop("checked",!1),t||this.trigger()},l.prototype.enable=function(){this.$toggle.removeClass("disabled"),this.$toggle.removeAttr("disabled"),this.$element.prop("disabled",!1)},l.prototype.disable=function(){this.$toggle.addClass("disabled"),this.$toggle.attr("disabled","disabled"),this.$element.prop("disabled",!0)},l.prototype.update=function(t){this.$element.prop("disabled")?this.disable():this.enable(),this.$element.prop("checked")?this.on(t):this.off(t)},l.prototype.trigger=function(t){this.$element.off("change.bs.toggle"),t||this.$element.change(),this.$element.on("change.bs.toggle",a.proxy(function(){this.update()},this))},l.prototype.destroy=function(){this.$element.off("change.bs.toggle"),this.$toggleGroup.remove(),this.$element.removeData("bs.toggle"),this.$element.unwrap()};var t=a.fn.bootstrapToggle;a.fn.bootstrapToggle=function(o){var i=Array.prototype.slice.call(arguments,1)[0];return this.each(function(){var t=a(this),e=t.data("bs.toggle"),s="object"==typeof o&&o;e||t.data("bs.toggle",e=new l(this,s)),"string"==typeof o&&e[o]&&"boolean"==typeof i?e[o](i):"string"==typeof o&&e[o]&&e[o]()})},a.fn.bootstrapToggle.Constructor=l,a.fn.toggle.noConflict=function(){return a.fn.bootstrapToggle=t,this},a(function(){a("input[type=checkbox][data-toggle^=toggle]").bootstrapToggle()}),a(document).on("click.bs.toggle","div[data-toggle^=toggle]",function(t){a(this).find("input[type=checkbox]").bootstrapToggle("toggle"),t.preventDefault()})}(jQuery);
 | 
			
		||||
//# sourceMappingURL=bootstrap4-toggle.min.js.map
 | 
			
		||||
							
								
								
									
										251
									
								
								src/js/commonutil.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,251 @@
 | 
			
		||||
var getDateDaysBefore = function (daysAgo) {
 | 
			
		||||
    var dateStr = new Date().toISOString().substring(0, 10);
 | 
			
		||||
    var ret = new Date(dateStr).getTime() - daysAgo * 24 * 3600 * 1000;
 | 
			
		||||
    return ret;
 | 
			
		||||
};
 | 
			
		||||
var primaryColor = "#2E324C";
 | 
			
		||||
 | 
			
		||||
// ======Vue start
 | 
			
		||||
var headerVue = "";
 | 
			
		||||
var pubkeyDialogVue = "";
 | 
			
		||||
var mainVue = "";
 | 
			
		||||
var toastVue = "";
 | 
			
		||||
var select = "";
 | 
			
		||||
var initVue = function () {
 | 
			
		||||
    console.log("[nodePortal.js] initVue : ");
 | 
			
		||||
    headerVue = new Vue({
 | 
			
		||||
        el: 'header',
 | 
			
		||||
        data: {
 | 
			
		||||
            shortName: "00000"
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    pubkeyDialogVue = new Vue({
 | 
			
		||||
        el: '#pubkeyDialog',
 | 
			
		||||
        data: {
 | 
			
		||||
            sm2KeyStr: "00000",
 | 
			
		||||
            myRole: "匿名用户",
 | 
			
		||||
            test: "0",
 | 
			
		||||
            selectedSM2Key: "0",
 | 
			
		||||
            List: [{id: 0, title: "ContractProvider"}, {id: 1, title: "ContractUser"}, {
 | 
			
		||||
                id: 2,
 | 
			
		||||
                title: "ContractInstanceManager"
 | 
			
		||||
            }],
 | 
			
		||||
            sm2KeyList: []
 | 
			
		||||
        },
 | 
			
		||||
        methods: {
 | 
			
		||||
            importPubkey: function () {
 | 
			
		||||
                console.log("importkey trigged");
 | 
			
		||||
                try {
 | 
			
		||||
                    var sm2Key = JSON.parse(this.sm2KeyStr);
 | 
			
		||||
                    if (sm2Key.publicKey == undefined
 | 
			
		||||
                        || sm2Key.privateKey == undefined) {
 | 
			
		||||
                        this.sm2KeyStr = (JSON.stringify(global.sm2Key));
 | 
			
		||||
                    } else {
 | 
			
		||||
                        if (sm2Key.publicKey.search("\\.") != -1 || sm2Key.publicKey.search("\\.\\.") != -1 || sm2Key.publicKey.search("/") != -1 || sm2Key.publicKey.search("\\\\") != -1) {
 | 
			
		||||
                            myToast("导入失败", "不是合法的公钥!");
 | 
			
		||||
                            return;
 | 
			
		||||
                        }
 | 
			
		||||
                        if (sm2Key.privateKey.search("\\.") != -1 || sm2Key.privateKey.search("\\.\\.") != -1 || sm2Key.privateKey.search("/") != -1 || sm2Key.privateKey.search("\\\\") != -1) {
 | 
			
		||||
                            myToast("导入失败", "不是合法的私钥!");
 | 
			
		||||
                            return;
 | 
			
		||||
                        }
 | 
			
		||||
                        global.sm2Key = sm2Key;
 | 
			
		||||
                        localStorage.setItem("PrivKey", JSON
 | 
			
		||||
                            .stringify(sm2Key));
 | 
			
		||||
                        headerVue.shortName = global.sm2Key.publicKey
 | 
			
		||||
                            .substr(0, 5);
 | 
			
		||||
                        var newKey = {};
 | 
			
		||||
                        newKey.id = this.sm2KeyList.length;
 | 
			
		||||
                        newKey.title = headerVue.shortName;
 | 
			
		||||
                        newKey.sm2Key = this.sm2KeyStr;
 | 
			
		||||
                        this.sm2KeyList.push(newKey);
 | 
			
		||||
                        localStorage.setItem("PrivKeyList", JSON.stringify(this.sm2KeyList));
 | 
			
		||||
 | 
			
		||||
                        getSession();
 | 
			
		||||
                        listProjects("priv");
 | 
			
		||||
                    }
 | 
			
		||||
                } catch (e) {
 | 
			
		||||
                    console.log(e);
 | 
			
		||||
                    this.sm2KeyStr = (JSON.stringify(global.sm2Key));
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            generatePubkey: function () {
 | 
			
		||||
                console.log("generate pubkey trigged");
 | 
			
		||||
                var sm2Key = sm2.generateKeyPairHex();
 | 
			
		||||
                this.sm2KeyStr = JSON.stringify(sm2Key);
 | 
			
		||||
                global.sm2Key = sm2Key;
 | 
			
		||||
                localStorage.setItem("PrivKey", JSON
 | 
			
		||||
                    .stringify(sm2Key));
 | 
			
		||||
                headerVue.shortName = global.sm2Key.publicKey
 | 
			
		||||
                    .substr(0, 5);
 | 
			
		||||
                var newKey = {};
 | 
			
		||||
                newKey.id = this.sm2KeyList.length;
 | 
			
		||||
                newKey.title = headerVue.shortName;
 | 
			
		||||
                newKey.sm2Key = this.sm2KeyStr;
 | 
			
		||||
                this.sm2KeyList.push(newKey);
 | 
			
		||||
                this.selectedSM2Key = newKey.id;
 | 
			
		||||
                localStorage.setItem("PrivKeyList", JSON.stringify(this.sm2KeyList));
 | 
			
		||||
                getSession();
 | 
			
		||||
            },
 | 
			
		||||
            changeProduct(event) {
 | 
			
		||||
                this.test = event.target.value; // 获取option对应的value值
 | 
			
		||||
                this.role = this.productList[this.test].title;
 | 
			
		||||
                console.log("选了", this.role);
 | 
			
		||||
                global.role = this.role;
 | 
			
		||||
            },
 | 
			
		||||
            apply: function () {
 | 
			
		||||
                console.log("apply");
 | 
			
		||||
                global.wssocket
 | 
			
		||||
                    .send("{\"action\":\"applyNet\",\"role\":\"NodeManager\"}");
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            applyRole: function () {
 | 
			
		||||
                var role = this.productList[this.test];
 | 
			
		||||
                console.log("applyRole, " + role);
 | 
			
		||||
                applyRole(role.title);
 | 
			
		||||
 | 
			
		||||
            }, changeSM2Key: function (event) {
 | 
			
		||||
                var order = event.target.value; // 获取option对应的value值
 | 
			
		||||
                if (order == undefined)
 | 
			
		||||
                    return;
 | 
			
		||||
                console.log("changeSM2Key, -->" + order);
 | 
			
		||||
                headerVue.shortName = this.sm2KeyList[order].title;
 | 
			
		||||
                this.selectedSM2Key = order;
 | 
			
		||||
                this.sm2KeyStr = this.sm2KeyList[order].sm2Key;
 | 
			
		||||
                global.sm2Key = JSON.parse(this.sm2KeyStr);
 | 
			
		||||
                localStorage.setItem("PrivKey", this.sm2KeyStr);
 | 
			
		||||
                getSession();
 | 
			
		||||
                location.reload();
 | 
			
		||||
            }, deletePubkey: function (event) {
 | 
			
		||||
                var order = this.selectedSM2Key;
 | 
			
		||||
                var obj = this.sm2KeyList[order];
 | 
			
		||||
                if (this.sm2KeyList.length == 1) {
 | 
			
		||||
                    alert("最后一对密钥不可以删除");
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                var newList = [];
 | 
			
		||||
                for (var i = 0; i < order; i++) {
 | 
			
		||||
                    newList.push(this.sm2KeyList[i]);
 | 
			
		||||
                }
 | 
			
		||||
                ;
 | 
			
		||||
                for (var i = order / 1 + 1; i < this.sm2KeyList.length; i++) {
 | 
			
		||||
                    newList.push(this.sm2KeyList[i]);
 | 
			
		||||
                }
 | 
			
		||||
                ;
 | 
			
		||||
                this.sm2KeyList = newList;
 | 
			
		||||
                for (var i = 0; i < newList.length; i++) {
 | 
			
		||||
                    newList[i].id = i;
 | 
			
		||||
                }
 | 
			
		||||
                if (order >= newList.length) {
 | 
			
		||||
                    order--;
 | 
			
		||||
                }
 | 
			
		||||
                console.log("after delete, size:" + newList.length + " order:" + order);
 | 
			
		||||
                localStorage.setItem("PrivKeyList", JSON.stringify(newList));
 | 
			
		||||
                headerVue.shortName = this.sm2KeyList[order].title;
 | 
			
		||||
                this.selectedSM2Key = order + "";
 | 
			
		||||
                this.sm2KeyStr = this.sm2KeyList[order].sm2Key;
 | 
			
		||||
                global.sm2Key = JSON.parse(this.sm2KeyStr);
 | 
			
		||||
                localStorage.setItem("PrivKey", this.sm2KeyStr);
 | 
			
		||||
                getSession();
 | 
			
		||||
            }, exportPubkey: function (event) {
 | 
			
		||||
                var uri = "data:text/html,";
 | 
			
		||||
                uri += localStorage.getItem("PrivKeyList");
 | 
			
		||||
                var link = document.createElement("a");
 | 
			
		||||
                link.download = "sm2keyList.json";
 | 
			
		||||
                link.href = uri;
 | 
			
		||||
                document.body.appendChild(link);
 | 
			
		||||
                link.click();
 | 
			
		||||
                document.body.removeChild(link);
 | 
			
		||||
                delete link;
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    mainVue = new Vue({
 | 
			
		||||
        el: "#main",
 | 
			
		||||
        data: {
 | 
			
		||||
            licenceDueDate: "已过期",
 | 
			
		||||
            licenceNodes: 0,
 | 
			
		||||
            offlineLicence: undefined,
 | 
			
		||||
            licenceRemark: undefined,
 | 
			
		||||
            userCount: ".",
 | 
			
		||||
            contractCount: ".",
 | 
			
		||||
            nodeCount: ".",
 | 
			
		||||
            eventCount: ".",
 | 
			
		||||
            unitCount: ".",
 | 
			
		||||
            pubDialogVue: {},
 | 
			
		||||
            projects: [],
 | 
			
		||||
            contracts: [],
 | 
			
		||||
            contractFunctions: [],
 | 
			
		||||
            openedFiles: [{
 | 
			
		||||
                isDir: false,
 | 
			
		||||
                val: "Please Checkout code from left side!",
 | 
			
		||||
                path: "Hello",
 | 
			
		||||
                name: "Hello"
 | 
			
		||||
            }]
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
    toastVue = new Vue({
 | 
			
		||||
        el: "#alertDiv",
 | 
			
		||||
        data: {
 | 
			
		||||
            toastTitle: "提示",
 | 
			
		||||
            toastMessage: "消息"
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
};
 | 
			
		||||
// ======Vue done
 | 
			
		||||
 | 
			
		||||
var initGlobal = function () {
 | 
			
		||||
    window.global = {};
 | 
			
		||||
    global.sm2Key = localStorage.getItem("PrivKey");
 | 
			
		||||
    global.result = "";
 | 
			
		||||
    if (global.sm2Key == undefined || global.sm2Key == null
 | 
			
		||||
        || global.sm2Key.length < 100) {
 | 
			
		||||
        generate();
 | 
			
		||||
    } else {
 | 
			
		||||
        global.sm2Key = JSON.parse(global.sm2Key);
 | 
			
		||||
    }
 | 
			
		||||
    headerVue.shortName = global.sm2Key.publicKey.substr(0, 5);
 | 
			
		||||
    pubkeyDialogVue.sm2KeyStr = JSON.stringify(global.sm2Key);
 | 
			
		||||
    mainVue.pubDialogVue = pubkeyDialogVue;
 | 
			
		||||
    var keyListStr = localStorage.getItem("PrivKeyList");
 | 
			
		||||
    if (!keyListStr) {
 | 
			
		||||
        var keyObj = {};
 | 
			
		||||
        keyObj.id = 0;
 | 
			
		||||
        keyObj.title = headerVue.shortName;
 | 
			
		||||
        keyObj.sm2Key = pubkeyDialogVue.sm2KeyStr;
 | 
			
		||||
        pubkeyDialogVue.sm2KeyList = [];
 | 
			
		||||
        pubkeyDialogVue.sm2KeyList.push(keyObj);
 | 
			
		||||
        pubkeyDialogVue.selectedSM2Key = 0;
 | 
			
		||||
        // mainVue.sm2KeyList = pubkeyDialogVue.sm2KeyList;
 | 
			
		||||
        // mainVue.selectedSM2Key = 0;
 | 
			
		||||
    } else {
 | 
			
		||||
        pubkeyDialogVue.sm2KeyList = JSON.parse(keyListStr);
 | 
			
		||||
        pubkeyDialogVue.selectedSM2Key = -1;
 | 
			
		||||
        for (var i = 0; i < pubkeyDialogVue.sm2KeyList.length; i++) {
 | 
			
		||||
            var obj = pubkeyDialogVue.sm2KeyList[i];
 | 
			
		||||
            if (obj.sm2Key == pubkeyDialogVue.sm2KeyStr) {
 | 
			
		||||
                pubkeyDialogVue.selectedSM2Key = i;
 | 
			
		||||
                // mainVue.sm2KeyList = pubkeyDialogVue.sm2KeyList;
 | 
			
		||||
                // mainVue.selectedSM2Key = pubkeyDialogVue.selectedSM2Key;
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        var keyObj = {};
 | 
			
		||||
        keyObj.id = pubkeyDialogVue.sm2KeyList.length;
 | 
			
		||||
        keyObj.title = headerVue.shortName;
 | 
			
		||||
        keyObj.sm2Key = pubkeyDialogVue.sm2KeyStr;
 | 
			
		||||
        pubkeyDialogVue.sm2KeyList.push(keyObj);
 | 
			
		||||
        pubkeyDialogVue.selectedSM2Key = keyObj.id;
 | 
			
		||||
        // mainVue.sm2KeyList = pubkeyDialogVue.sm2KeyList;
 | 
			
		||||
        // mainVue.selectedSM2Key = pubkeyDialogVue.selectedSM2Key;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function changeTitle(suffix) {
 | 
			
		||||
    document.title = `数瑞智能合约路由及准入管理(${suffix})`
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										32
									
								
								src/js/contractAuthManage.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,32 @@
 | 
			
		||||
var updateResultDisplay = function (obj) {
 | 
			
		||||
    obj_label = document.getElementById("result");
 | 
			
		||||
    var jsonData = JSON.stringify(obj);// 转成JSON格式
 | 
			
		||||
    //  var result = $.parseJSON(jsonData);// 转成JSON对象
 | 
			
		||||
    obj_label.innerHTML = jsonData;
 | 
			
		||||
};
 | 
			
		||||
var showDialog = function (title, cb) {
 | 
			
		||||
    $("#dialogTitleH5").html(title);
 | 
			
		||||
    $("#dialogConfimBtn").off("click").on("click", cb);
 | 
			
		||||
    $("#dialog").modal("show");
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var updateResultDisplayStr = function (str) {
 | 
			
		||||
    obj_label = document.getElementById("result");
 | 
			
		||||
    obj_label.innerHTML = str;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var alertNoPermission = function (message, title) {
 | 
			
		||||
    if ($("#nopermissionSpan").length > 0) {
 | 
			
		||||
        console.log(message + " status:" + $("#dialog")[0].getAttribute("class"));
 | 
			
		||||
        $("#nopermissionSpan").append("<br/>" + message);
 | 
			
		||||
    } else {
 | 
			
		||||
        var body = "<div class='row'><div class='col-sm-12'><span id='nopermissionSpan'>";
 | 
			
		||||
        body += message;
 | 
			
		||||
        body += "</span></div></div>";
 | 
			
		||||
        $("#dialogBodyDiv").html(body);
 | 
			
		||||
        showDialog("提示", function () {
 | 
			
		||||
            $("#dialogBodyDiv").html("");
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										229
									
								
								src/js/contractlist.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,229 @@
 | 
			
		||||
var loadContractList = function (e) {
 | 
			
		||||
    var param = {};
 | 
			
		||||
    param.action = "listNodes";
 | 
			
		||||
    param.pubKey = global.sm2Key.publicKey;
 | 
			
		||||
    global.wssocket.send(JSON.stringify(param));
 | 
			
		||||
    if (global.nodeInfo == undefined) {
 | 
			
		||||
        setTimeout(loadContractList, 300);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    setTimeout(function () {
 | 
			
		||||
        var list = [];
 | 
			
		||||
        for (var i = 0; i < global.nodeInfo.online.length; i++) {
 | 
			
		||||
            var node = global.nodeInfo.online[i];
 | 
			
		||||
            if (node.contracts != undefined)
 | 
			
		||||
                for (var j = 0; j < node.contracts.length; j++) {
 | 
			
		||||
                    list.push(node.contracts[j]);
 | 
			
		||||
                }
 | 
			
		||||
        }
 | 
			
		||||
        drawContractListStatusPie(list);
 | 
			
		||||
        drawContractListTable(global.nodeInfo.online);
 | 
			
		||||
    }, 200);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var toSimple = function (name) {
 | 
			
		||||
    switch (name) {
 | 
			
		||||
        case 'Shading':
 | 
			
		||||
            return "Shading";
 | 
			
		||||
        case 'RequestAllResponseAll':
 | 
			
		||||
            return "RARA";
 | 
			
		||||
        case 'RequestAllResponseHalf':
 | 
			
		||||
            return "RARH";
 | 
			
		||||
        case 'RequestAllResponseFirst':
 | 
			
		||||
            return "RARF";
 | 
			
		||||
        case 'RequestOnce':
 | 
			
		||||
        case 'Responseonce':
 | 
			
		||||
        case "Sole":
 | 
			
		||||
        default:
 | 
			
		||||
            return name;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
var drawContractListStatusPie = function (obj) {
 | 
			
		||||
    var id = "contractStatusPieDiv";
 | 
			
		||||
    if ($("#" + id).css("height") == "0px") {
 | 
			
		||||
 | 
			
		||||
        console.log("drawNodesStatusPie: ignore");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    $("#" + id)
 | 
			
		||||
        .html(
 | 
			
		||||
            "<div class='col-12' id='"
 | 
			
		||||
            + id
 | 
			
		||||
            + "Canv' style='width:100%; min-height: 150px; padding: 0px'></div>");
 | 
			
		||||
    var result = {};
 | 
			
		||||
    for (var i = 0; i < obj.length; i++) {
 | 
			
		||||
        if (result[obj[i].type] == undefined)
 | 
			
		||||
            result[obj[i].type] = 0;
 | 
			
		||||
        result[obj[i].type]++;
 | 
			
		||||
    }
 | 
			
		||||
    var dataList = [];
 | 
			
		||||
    var valDataList = [];
 | 
			
		||||
    for (var key in result) {
 | 
			
		||||
        dataList.push(toSimple(key));
 | 
			
		||||
        var l = {};
 | 
			
		||||
        l.name = toSimple(key)
 | 
			
		||||
        l.value = result[key];
 | 
			
		||||
        valDataList.push(l);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var myChart = echarts.init($("#" + id + "Canv")[0], 'walden');
 | 
			
		||||
    var option222 = {
 | 
			
		||||
        tooltip: {
 | 
			
		||||
            trigger: 'item',
 | 
			
		||||
            formatter: '{a} <br/>{b}: {c} ({d}%)'
 | 
			
		||||
        },
 | 
			
		||||
        legend: {
 | 
			
		||||
            orient: 'vertical',
 | 
			
		||||
            left: 10,
 | 
			
		||||
            data: dataList
 | 
			
		||||
        },
 | 
			
		||||
        series: [{
 | 
			
		||||
            name: '合约数量',
 | 
			
		||||
            type: 'pie',
 | 
			
		||||
            radius: ['50%', '70%'],
 | 
			
		||||
            avoidLabelOverlap: false,
 | 
			
		||||
            label: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                    show: false,
 | 
			
		||||
                    position: 'center'
 | 
			
		||||
                },
 | 
			
		||||
                emphasis: {
 | 
			
		||||
                    show: true,
 | 
			
		||||
                    textStyle: {
 | 
			
		||||
                        fontSize: '15',
 | 
			
		||||
                        fontWeight: 'bold'
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            labelLine: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                    show: false
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            data: valDataList
 | 
			
		||||
        }]
 | 
			
		||||
    };
 | 
			
		||||
    myChart.setOption(option222);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var jumpToContractClient = function (nodeAddr, contractID) {
 | 
			
		||||
    console.log("[jumpToContractClient] " + nodeAddr + " " + contractID);
 | 
			
		||||
    var ip = nodeAddr.split(":")[0];
 | 
			
		||||
    var port = nodeAddr.split(":")[1] - 1;
 | 
			
		||||
    var url = "./client/bdwareclient.html?";
 | 
			
		||||
    url += "nodeAddr=" + ip + ":" + port;
 | 
			
		||||
    url += "&contract=" + contractID;
 | 
			
		||||
    window.open(url);
 | 
			
		||||
}
 | 
			
		||||
var drawContractListTable = function (list) {
 | 
			
		||||
    var dtLang = {
 | 
			
		||||
        "sProcessing": "处理中...",
 | 
			
		||||
        "lengthMenu": '显示 <select>' + '<option value="10">10</option>'
 | 
			
		||||
            + '<option value="50">50</option>'
 | 
			
		||||
            + '<option value="100">100</option>'
 | 
			
		||||
            + '<option value="-1">全部</option>' + '</select> 项结果',
 | 
			
		||||
        "sZeroRecords": "没有匹配结果",
 | 
			
		||||
        "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
 | 
			
		||||
        "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
 | 
			
		||||
        "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
 | 
			
		||||
        "sInfoPostFix": "",
 | 
			
		||||
        "sSearch": "搜索:",
 | 
			
		||||
        "sUrl": "",
 | 
			
		||||
        "sEmptyTable": "表中数据为空",
 | 
			
		||||
        "sLoadingRecords": "载入中...",
 | 
			
		||||
        "sInfoThousands": ",",
 | 
			
		||||
        "oPaginate": {
 | 
			
		||||
            "sFirst": "首页",
 | 
			
		||||
            "sPrevious": "上页",
 | 
			
		||||
            "sNext": "下页",
 | 
			
		||||
            "sLast": "末页"
 | 
			
		||||
        },
 | 
			
		||||
        "oAria": {
 | 
			
		||||
            "sSortAscending": ": 以升序排列此列",
 | 
			
		||||
            "sSortDescending": ": 以降序排列此列"
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    var tableHead = "<table id='contractListTabDivTab' class='table display row-border'><thead><tr><th>序号</th><th>合约ID</th><th>合约名称</th><th>运行模式</th><th>合约类型</th><th>方法数量</th></tr></thead><tbody>";
 | 
			
		||||
    var tableTail = "</tbody></table>";
 | 
			
		||||
    var html = tableHead;
 | 
			
		||||
    var count = 0;
 | 
			
		||||
    for (var i = 0; i < list.length; i++) {
 | 
			
		||||
        var node = list[i];
 | 
			
		||||
        if (node.contracts != undefined)
 | 
			
		||||
            for (var j = 0; j < node.contracts.length; j++) {
 | 
			
		||||
                var c = node.contracts[j];
 | 
			
		||||
                if (c.type != undefined && c.type.startsWith("RequestAll") && !c.isMaster)
 | 
			
		||||
                    continue;
 | 
			
		||||
                html += "<tr><td>";
 | 
			
		||||
                html += (++count);
 | 
			
		||||
                html += "</td><td>";
 | 
			
		||||
                html += c.contractID;
 | 
			
		||||
                html += "</td><td>";
 | 
			
		||||
                html += "<a onclick='jumpToContractClient(\"" + node.masterAddress + "\",\"" + c.contractID + "\")' style='cursor: pointer'>"
 | 
			
		||||
                html += c.contractName;
 | 
			
		||||
                html += "</a>"
 | 
			
		||||
                html += "</td><td>";
 | 
			
		||||
                html += c.type;
 | 
			
		||||
                html += "</td><td>";
 | 
			
		||||
                html += c.yjsType
 | 
			
		||||
                // if (c.events!=undefined)
 | 
			
		||||
                // html+=c.events.length
 | 
			
		||||
                // else html+=0;
 | 
			
		||||
                html += "</td><td>";
 | 
			
		||||
                if (c.exportedFunctions != undefined)
 | 
			
		||||
                    html += c.exportedFunctions.length;
 | 
			
		||||
                else html += "-1";
 | 
			
		||||
                html += "</td></tr>";
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    html += tableTail;
 | 
			
		||||
    $("#contractListTabDiv").html(html);
 | 
			
		||||
    $("#contractListTabDivTab").DataTable(
 | 
			
		||||
        {
 | 
			
		||||
            "language": dtLang,
 | 
			
		||||
            "rowCallback": function (row, data, displayNum, displayIndex,
 | 
			
		||||
                                     dataIndex) {
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            "headerCallback": function (thead, data, start, end, display) {
 | 
			
		||||
                $(thead).css("background", primaryColor);
 | 
			
		||||
                $(thead).css("color", "white");
 | 
			
		||||
                $(thead).children().css("background", primaryColor);
 | 
			
		||||
                $(thead).children().css("color", "white");
 | 
			
		||||
            },
 | 
			
		||||
            scrollCollapse: false,
 | 
			
		||||
            paging: true,
 | 
			
		||||
            pageLength: 10,
 | 
			
		||||
            order: [[0, 'desc']],
 | 
			
		||||
            "columnDefs": [
 | 
			
		||||
                {
 | 
			
		||||
                    "targets": 1,
 | 
			
		||||
                    "render": function (data, type, row, meta) {
 | 
			
		||||
                        if (data.length > 15)
 | 
			
		||||
                            return "<span title='" + data + "'>"
 | 
			
		||||
                                + data.substring(0, 15)
 | 
			
		||||
                                + "  ...</span>";
 | 
			
		||||
                        else
 | 
			
		||||
                            return data;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "targets": 5,
 | 
			
		||||
                    "render": function (data, type, row, meta) {
 | 
			
		||||
                        if (data.length > 10)
 | 
			
		||||
                            return "<span title='" + data + "'>"
 | 
			
		||||
                                + data.substring(0, 10)
 | 
			
		||||
                                + "  ...</span>";
 | 
			
		||||
                        else
 | 
			
		||||
                            return data;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            ]
 | 
			
		||||
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								src/js/createWS.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1 @@
 | 
			
		||||
var createWssocket=function(wsurl,onopen,handler){console.log("[createWS.js] createWssocket : "+wsurl);var retsocket={};var wssocket=new WebSocket(wsurl);wssocket.onerror=function(error){console.log(error)};wssocket.onopen=onopen;var onmessage=function(event){var obj=JSON.parse(event.data);switch(obj.action){case"sendNextSegment":retsocket.sendNextSegment();break;case"sendSeg":retsocket.receiveSeg(obj);C;break;default:handler(event,wssocket)}};var reconnect=function(error){setTimeout(function(){console.log("[createWS.js] try to reconnect");wssocket=new WebSocket(wsurl);wssocket.onclose=reconnect;wssocket.onmessage=onmessage;wssocket.onopen=onopen},1000)};wssocket.onclose=reconnect;retsocket.receiveSeg=function(obj){if(obj.cid=="start"){retsocket.toReceive=""}retsocket.toReceive+=obj.data;if(obj.cid=="done"){console.log("[receiveSeg] Received AllData:"+retsocket.toReceive);var event={};event.data=retsocket.toReceive;retsocket.toReceive="";handler(event)}};wssocket.onmessage=onmessage;retsocket.isSending=false;retsocket.sendList=[];retsocket.monitor=function(){if(!retsocket.isSending){if(retsocket.sendList.length>0){retsocket.send(retsocket.sendList.pop())}}setTimeout(retsocket.monitor,1000)};retsocket.monitor();retsocket.send=function(str){if(retsocket.isSending){retsocket.sendList.push(str);return}if(str.length>1024){retsocket.isSending=true;retsocket.toSend=str.substr(1024);var obj={};obj.isSegment=true;obj.data=str.substr(0,1024);wssocket.send(JSON.stringify(obj))}else{wssocket.send(str)}};retsocket.sendNextSegment=function(){var str=retsocket.toSend;if(str.length>1024){retsocket.toSend=str.substr(1024);var obj={};obj.isSegment=true;obj.data=str.substr(0,1024);wssocket.send(JSON.stringify(obj))}else{retsocket.toSend="";var obj={};obj.isSegment=false;obj.data=str;wssocket.send(JSON.stringify(obj));retsocket.isSending=false;if(retsocket.sendList.length>0){retsocket.send(retsocket.sendList.pop())}}};retsocket.isOpen=function(){return wssocket.readyState};return retsocket};var aesDecrypt=function(data){data=cryptico.b64to256(data);var encryptedBlocks=cryptico.string2bytes(data);var exkey=global.aesKey.slice(0);aes.ExpandKey(exkey);aes.Decrypt(encryptedBlocks,exkey);return cryptico.bytes2string(encryptedBlocks)};var aesEncrypt=function(data,aesKey){var key=aesKey;var exkey=key.slice(0);aes.ExpandKey(exkey);var blocks=my.string2bytes(data);blocks=my.pad16(blocks);aes.Encrypt(blocks,exkey);ciphertext=cryptico.bytes2string(blocks);ciphertext=cryptico.b256to64(ciphertext);return ciphertext};var rsaEncrypt=function(data,rsaKey){var rsa=new RSAKey();rsa.setPublic(rsaKey.n,rsaKey.e1);var result=rsa.encrypt(data);return result};var loadRSAKey=function(rsaKey){var str=cryptico.b64to256(rsaKey);str=str.split(",");var ret={};ret.n=str[0];ret.e1=str[1];ret.e2=str[2];return ret};var testRSA=function(){pubKey=loadRSAKey(global.privKey);reqContent={};reqContent.action="main";reqContent.arg='[{"score":20},{"score":20}]';reqContent.contractID="abc";eReq=encryptReq(reqContent,pubKey);url="http://localhost:8080/SCIDE/SCManager?action=executeContractEncrypted&contractRequest="+encodeURIComponent(JSON.stringify(eReq))};var encryptReq=function(reqContent,pubKey){var aes={};aes.key=cryptico.generateAESKey();var aesObj=JSON.stringify(aes);var rsa=new RSAKey();rsa.setPrivate(pubKey.n,pubKey.e1,pubKey.e2);var encrypedReq={};encrypedReq.action=rsa.decrypt(aesObj);encrypedReq.contractID=reqContent.contractID;reqContent.contractID=undefined;encrypedReq.arg=JSON.stringify(reqContent);encrypedReq.arg=aesEncrypt(encrypedReq.arg,aes.key);encrypedReq.requester=pubKey.n+","+pubKey.e1+","+"0";encrypedReq.requester=cryptico.b256to64(encrypedReq.requester);return encrypedReq};
 | 
			
		||||
							
								
								
									
										3560
									
								
								src/js/cryptico.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										139
									
								
								src/js/dashboard.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,139 @@
 | 
			
		||||
var loadDashBoard = function() {
 | 
			
		||||
	setTimeout(
 | 
			
		||||
			function() {
 | 
			
		||||
				var arg1 = {};
 | 
			
		||||
				arg1.action = "queryUserStat";
 | 
			
		||||
				global.wssocket.send(JSON.stringify(arg1));
 | 
			
		||||
				changeLineContractUseTime($("#lineContractUse")[0].value);
 | 
			
		||||
				listNodes();
 | 
			
		||||
			}, 500);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var changeLineContractUseTime = function(data){
 | 
			
		||||
	var time = data.split("天")[0];
 | 
			
		||||
	console.log(time);
 | 
			
		||||
	global.lineContractUseTime = time;
 | 
			
		||||
	setTimeout(function() {
 | 
			
		||||
		var arg = {};
 | 
			
		||||
		arg.action = "countCMLogByCategory";
 | 
			
		||||
		arg.category="setNodeID,updateContract,queryRouteInfo"
 | 
			
		||||
		arg.start = getDateDaysBefore(global.lineContractUseTime);
 | 
			
		||||
		arg.interval = 24*3600*1000;
 | 
			
		||||
		arg.requestID = "changeLineContractUseTime_"+new Date().getTime()+"_"+Math.floor(Math.random()*1000000);
 | 
			
		||||
		global.wscallbacks[arg.requestID]=onChangeLineContractUseTime;
 | 
			
		||||
		global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
	}, 300);
 | 
			
		||||
};
 | 
			
		||||
var onChangeLineContractUseTime = function(obj){
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
    var data = {};
 | 
			
		||||
    var  start = getDateDaysBefore(global.lineContractUseTime);
 | 
			
		||||
 | 
			
		||||
    data.xAxis =[];
 | 
			
		||||
    for (var i=0;i<obj.data.setNodeID.length;i++){
 | 
			
		||||
        var date = new Date(start);
 | 
			
		||||
        data.xAxis.push(date.getMonth()+1+"/"+date.getDate());
 | 
			
		||||
        start+=24*3600*1000;
 | 
			
		||||
    }
 | 
			
		||||
    data.yAxis1 = obj.data.setNodeID;
 | 
			
		||||
    data.yAxis2 = obj.data.updateContract;
 | 
			
		||||
    data.yAxis3 = obj.data.queryRouteInfo;
 | 
			
		||||
    drawDashBoardCMLog(data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var drawDashBoardCMLog = function(data) {
 | 
			
		||||
	global.lastData = data;
 | 
			
		||||
	console.log("drawDashBoardCMLog");
 | 
			
		||||
	$("#dashboardContractExeDiv")
 | 
			
		||||
			.html(
 | 
			
		||||
					"<div class='col-12' id='dashboardContractExeCanv' style='min-height: 200px; padding: 0px'></div>");
 | 
			
		||||
	var xAxisData = data.xAxis;
 | 
			
		||||
	var pubEventData = data.yAxis1;
 | 
			
		||||
	var trustData = data.yAxis2;
 | 
			
		||||
	var wsExecute = data.yAxis3;
 | 
			
		||||
 | 
			
		||||
	var myChart = echarts.init($("#dashboardContractExeCanv")[0], 'walden');
 | 
			
		||||
	var option = {
 | 
			
		||||
		title : {
 | 
			
		||||
			subtext : '次数'
 | 
			
		||||
		},
 | 
			
		||||
		tooltip : {
 | 
			
		||||
			trigger : 'axis'
 | 
			
		||||
		},
 | 
			
		||||
		legend : {
 | 
			
		||||
			data : [ '节点上线次数', '更新合约次数', '合约路由次数' ],
 | 
			
		||||
			y : 'bottom',
 | 
			
		||||
		},
 | 
			
		||||
		toolbox : {
 | 
			
		||||
			show : true,
 | 
			
		||||
			feature : {
 | 
			
		||||
				dataZoom : {
 | 
			
		||||
					yAxisIndex : 'none'
 | 
			
		||||
				},
 | 
			
		||||
				dataView : {
 | 
			
		||||
					readOnly : false
 | 
			
		||||
				},
 | 
			
		||||
				magicType : {
 | 
			
		||||
					type : [ 'line', 'bar' ]
 | 
			
		||||
				},
 | 
			
		||||
				restore : {},
 | 
			
		||||
				saveAsImage : {}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		xAxis : {
 | 
			
		||||
			type : 'category',
 | 
			
		||||
			boundaryGap : false,
 | 
			
		||||
			data : xAxisData
 | 
			
		||||
		},
 | 
			
		||||
		yAxis : {
 | 
			
		||||
			type : 'value',
 | 
			
		||||
			axisLabel : {
 | 
			
		||||
				formatter : '{value}次'
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		series : [ {
 | 
			
		||||
			name : '节点上线次数',
 | 
			
		||||
			type : 'line',
 | 
			
		||||
			data : pubEventData,
 | 
			
		||||
			markPoint : {
 | 
			
		||||
				data : [ {
 | 
			
		||||
					type : 'max',
 | 
			
		||||
					name : '最大值'
 | 
			
		||||
				}, {
 | 
			
		||||
					type : 'min',
 | 
			
		||||
					name : '最小值'
 | 
			
		||||
				} ]
 | 
			
		||||
			},
 | 
			
		||||
 | 
			
		||||
		}, {
 | 
			
		||||
			name : '更新合约次数',
 | 
			
		||||
			type : 'line',
 | 
			
		||||
			data : trustData,
 | 
			
		||||
 | 
			
		||||
			markPoint : {
 | 
			
		||||
				data : [ {
 | 
			
		||||
					type : 'max',
 | 
			
		||||
					name : '最大值'
 | 
			
		||||
				}, {
 | 
			
		||||
					type : 'min',
 | 
			
		||||
					name : '最小值'
 | 
			
		||||
				} ]
 | 
			
		||||
			}
 | 
			
		||||
		}, {
 | 
			
		||||
			name : '合约路由次数',
 | 
			
		||||
			type : 'line',
 | 
			
		||||
			data : wsExecute,
 | 
			
		||||
 | 
			
		||||
			markPoint : {
 | 
			
		||||
				data : [ {
 | 
			
		||||
					type : 'max',
 | 
			
		||||
					name : '最大值'
 | 
			
		||||
				}, {
 | 
			
		||||
					type : 'min',
 | 
			
		||||
					name : '最小值'
 | 
			
		||||
				} ]
 | 
			
		||||
			}
 | 
			
		||||
		} ]
 | 
			
		||||
	};
 | 
			
		||||
	myChart.setOption(option);
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										1
									
								
								src/js/echarts-gl.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										22
									
								
								src/js/echarts.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										481
									
								
								src/js/echartsTheme.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,481 @@
 | 
			
		||||
(function(root, factory) {
 | 
			
		||||
	if (typeof define === 'function' && define.amd) {
 | 
			
		||||
		// AMD. Register as an anonymous module.
 | 
			
		||||
		define([ 'exports', 'echarts' ], factory);
 | 
			
		||||
	} else if (typeof exports === 'object'
 | 
			
		||||
			&& typeof exports.nodeName !== 'string') {
 | 
			
		||||
		// CommonJS
 | 
			
		||||
		factory(exports, require('echarts'));
 | 
			
		||||
	} else {
 | 
			
		||||
		// Browser globals
 | 
			
		||||
		factory({}, root.echarts);
 | 
			
		||||
	}
 | 
			
		||||
}(this, function(exports, echarts) {
 | 
			
		||||
	var log = function(msg) {
 | 
			
		||||
		if (typeof console !== 'undefined') {
 | 
			
		||||
			console && console.error && console.error(msg);
 | 
			
		||||
		}
 | 
			
		||||
	};
 | 
			
		||||
	if (!echarts) {
 | 
			
		||||
		log('ECharts is not Loaded');
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	echarts.registerTheme('walden', {
 | 
			
		||||
		"color" : [ "#3fb1e3", "#6be6c1", "#626c91", "#a0a7e6", "#c4ebad",
 | 
			
		||||
				"#96dee8" ],
 | 
			
		||||
		"backgroundColor" : "rgba(252,252,252,0)",
 | 
			
		||||
		"textStyle" : {},
 | 
			
		||||
		"title" : {
 | 
			
		||||
			"textStyle" : {
 | 
			
		||||
				"color" : "#666666"
 | 
			
		||||
			},
 | 
			
		||||
			"subtextStyle" : {
 | 
			
		||||
				"color" : "#999999"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"line" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderWidth" : "2"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"lineStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"width" : "3"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"symbolSize" : "8",
 | 
			
		||||
			"symbol" : "emptyCircle",
 | 
			
		||||
			"smooth" : false
 | 
			
		||||
		},
 | 
			
		||||
		"radar" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderWidth" : "2"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"lineStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"width" : "3"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"symbolSize" : "8",
 | 
			
		||||
			"symbol" : "emptyCircle",
 | 
			
		||||
			"smooth" : false
 | 
			
		||||
		},
 | 
			
		||||
		"bar" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"barBorderWidth" : 0,
 | 
			
		||||
					"barBorderColor" : "#ccc"
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"barBorderWidth" : 0,
 | 
			
		||||
					"barBorderColor" : "#ccc"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"pie" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"scatter" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"boxplot" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"parallel" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"sankey" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"funnel" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"gauge" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"candlestick" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"color" : "#e6a0d2",
 | 
			
		||||
					"color0" : "transparent",
 | 
			
		||||
					"borderColor" : "#e6a0d2",
 | 
			
		||||
					"borderColor0" : "#3fb1e3",
 | 
			
		||||
					"borderWidth" : "2"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"graph" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderWidth" : 0,
 | 
			
		||||
					"borderColor" : "#ccc"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"lineStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"width" : "1",
 | 
			
		||||
					"color" : "#cccccc"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"symbolSize" : "8",
 | 
			
		||||
			"symbol" : "emptyCircle",
 | 
			
		||||
			"smooth" : false,
 | 
			
		||||
			"color" : [ "#3fb1e3", "#6be6c1", "#626c91", "#a0a7e6", "#c4ebad",
 | 
			
		||||
					"#96dee8" ],
 | 
			
		||||
			"label" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"textStyle" : {
 | 
			
		||||
						"color" : "#ffffff"
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"map" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"areaColor" : "#eeeeee",
 | 
			
		||||
					"borderColor" : "#aaaaaa",
 | 
			
		||||
					"borderWidth" : 0.5
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"areaColor" : "rgba(63,177,227,0.25)",
 | 
			
		||||
					"borderColor" : "#3fb1e3",
 | 
			
		||||
					"borderWidth" : 1
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"label" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"textStyle" : {
 | 
			
		||||
						"color" : "#ffffff"
 | 
			
		||||
					}
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"textStyle" : {
 | 
			
		||||
						"color" : "rgb(63,177,227)"
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"geo" : {
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"areaColor" : "#eeeeee",
 | 
			
		||||
					"borderColor" : "#aaaaaa",
 | 
			
		||||
					"borderWidth" : 0.5
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"areaColor" : "rgba(63,177,227,0.25)",
 | 
			
		||||
					"borderColor" : "#3fb1e3",
 | 
			
		||||
					"borderWidth" : 1
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"label" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"textStyle" : {
 | 
			
		||||
						"color" : "#ffffff"
 | 
			
		||||
					}
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"textStyle" : {
 | 
			
		||||
						"color" : "rgb(63,177,227)"
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"categoryAxis" : {
 | 
			
		||||
			"axisLine" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : "#cccccc"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"axisTick" : {
 | 
			
		||||
				"show" : false,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : "#333"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"axisLabel" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"textStyle" : {
 | 
			
		||||
					"color" : "#999999"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"splitLine" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : [ "#eeeeee" ]
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"splitArea" : {
 | 
			
		||||
				"show" : false,
 | 
			
		||||
				"areaStyle" : {
 | 
			
		||||
					"color" : [ "rgba(250,250,250,0.05)",
 | 
			
		||||
							"rgba(200,200,200,0.02)" ]
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"valueAxis" : {
 | 
			
		||||
			"axisLine" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : "#cccccc"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"axisTick" : {
 | 
			
		||||
				"show" : false,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : "#333"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"axisLabel" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"textStyle" : {
 | 
			
		||||
					"color" : "#999999"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"splitLine" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : [ "#eeeeee" ]
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"splitArea" : {
 | 
			
		||||
				"show" : false,
 | 
			
		||||
				"areaStyle" : {
 | 
			
		||||
					"color" : [ "rgba(250,250,250,0.05)",
 | 
			
		||||
							"rgba(200,200,200,0.02)" ]
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"logAxis" : {
 | 
			
		||||
			"axisLine" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : "#cccccc"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"axisTick" : {
 | 
			
		||||
				"show" : false,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : "#333"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"axisLabel" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"textStyle" : {
 | 
			
		||||
					"color" : "#999999"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"splitLine" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : [ "#eeeeee" ]
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"splitArea" : {
 | 
			
		||||
				"show" : false,
 | 
			
		||||
				"areaStyle" : {
 | 
			
		||||
					"color" : [ "rgba(250,250,250,0.05)",
 | 
			
		||||
							"rgba(200,200,200,0.02)" ]
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"timeAxis" : {
 | 
			
		||||
			"axisLine" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : "#cccccc"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"axisTick" : {
 | 
			
		||||
				"show" : false,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : "#333"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"axisLabel" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"textStyle" : {
 | 
			
		||||
					"color" : "#999999"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"splitLine" : {
 | 
			
		||||
				"show" : true,
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : [ "#eeeeee" ]
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"splitArea" : {
 | 
			
		||||
				"show" : false,
 | 
			
		||||
				"areaStyle" : {
 | 
			
		||||
					"color" : [ "rgba(250,250,250,0.05)",
 | 
			
		||||
							"rgba(200,200,200,0.02)" ]
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"toolbox" : {
 | 
			
		||||
			"iconStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"borderColor" : "#999999"
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"borderColor" : "#666666"
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"legend" : {
 | 
			
		||||
			"textStyle" : {
 | 
			
		||||
				"color" : "#999999"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"tooltip" : {
 | 
			
		||||
			"axisPointer" : {
 | 
			
		||||
				"lineStyle" : {
 | 
			
		||||
					"color" : "#cccccc",
 | 
			
		||||
					"width" : 1
 | 
			
		||||
				},
 | 
			
		||||
				"crossStyle" : {
 | 
			
		||||
					"color" : "#cccccc",
 | 
			
		||||
					"width" : 1
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"timeline" : {
 | 
			
		||||
			"lineStyle" : {
 | 
			
		||||
				"color" : "#626c91",
 | 
			
		||||
				"width" : 1
 | 
			
		||||
			},
 | 
			
		||||
			"itemStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"color" : "#626c91",
 | 
			
		||||
					"borderWidth" : 1
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"color" : "#626c91"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"controlStyle" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"color" : "#626c91",
 | 
			
		||||
					"borderColor" : "#626c91",
 | 
			
		||||
					"borderWidth" : 0.5
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"color" : "#626c91",
 | 
			
		||||
					"borderColor" : "#626c91",
 | 
			
		||||
					"borderWidth" : 0.5
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"checkpointStyle" : {
 | 
			
		||||
				"color" : "#3fb1e3",
 | 
			
		||||
				"borderColor" : "rgba(63,177,227,0.15)"
 | 
			
		||||
			},
 | 
			
		||||
			"label" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"textStyle" : {
 | 
			
		||||
						"color" : "#626c91"
 | 
			
		||||
					}
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"textStyle" : {
 | 
			
		||||
						"color" : "#626c91"
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"visualMap" : {
 | 
			
		||||
			"color" : [ "#2a99c9", "#afe8ff" ]
 | 
			
		||||
		},
 | 
			
		||||
		"dataZoom" : {
 | 
			
		||||
			"backgroundColor" : "rgba(255,255,255,0)",
 | 
			
		||||
			"dataBackgroundColor" : "rgba(222,222,222,1)",
 | 
			
		||||
			"fillerColor" : "rgba(114,230,212,0.25)",
 | 
			
		||||
			"handleColor" : "#cccccc",
 | 
			
		||||
			"handleSize" : "100%",
 | 
			
		||||
			"textStyle" : {
 | 
			
		||||
				"color" : "#999999"
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		"markPoint" : {
 | 
			
		||||
			"label" : {
 | 
			
		||||
				"normal" : {
 | 
			
		||||
					"textStyle" : {
 | 
			
		||||
						"color" : "#ffffff"
 | 
			
		||||
					}
 | 
			
		||||
				},
 | 
			
		||||
				"emphasis" : {
 | 
			
		||||
					"textStyle" : {
 | 
			
		||||
						"color" : "#ffffff"
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	});
 | 
			
		||||
}));
 | 
			
		||||
							
								
								
									
										146
									
								
								src/js/locallhs/behaviour.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,146 @@
 | 
			
		||||
var getUrl = function () {
 | 
			
		||||
    if(global.target == undefined || global.target == ""){
 | 
			
		||||
        var ss = window.location.href;
 | 
			
		||||
        var s = ss.split(":");
 | 
			
		||||
        console.log(s);
 | 
			
		||||
        var p = s[2].split("/")[0];
 | 
			
		||||
        var port = parseInt(p);
 | 
			
		||||
        port = port + 2;
 | 
			
		||||
        var url = s[0] + ":" + s[1] + ":" + port;
 | 
			
		||||
        global.target = url;
 | 
			
		||||
    }
 | 
			
		||||
    return global.target;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var changeBehaviourTime = function (data) {
 | 
			
		||||
    var time = data.split("天")[0];
 | 
			
		||||
    console.log(time);
 | 
			
		||||
    global.behaviorTime = time;
 | 
			
		||||
 | 
			
		||||
    console.log("changeBehaviourTime");
 | 
			
		||||
    var str = getUrl() + "/view?action=statistics&day=" + time;
 | 
			
		||||
    console.log(str);
 | 
			
		||||
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url : str,
 | 
			
		||||
        type: "GET",
 | 
			
		||||
        dataType : "json"
 | 
			
		||||
    }).done(function(result) {
 | 
			
		||||
        showBehaviour(result);
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var showBehaviour = function(data){
 | 
			
		||||
    console.log(data);
 | 
			
		||||
 | 
			
		||||
    $("#behaviourGraphDiv")
 | 
			
		||||
        .html(
 | 
			
		||||
            "<div class='col-12' id='behaviourGraph' style='min-height: 250px; padding: 0px'></div>");
 | 
			
		||||
    if(global.behaviorTime == undefined || global.behaviorTime == ""){
 | 
			
		||||
        console.log("draw behaviour picture error!");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var resolveAna = (data.resolve);
 | 
			
		||||
    var deleteAna = data.delete;
 | 
			
		||||
    var registerAna = data.register;
 | 
			
		||||
 | 
			
		||||
    var lastTime = Date.parse(new Date() ).toString();//获取到毫秒的时间戳,精确到毫秒
 | 
			
		||||
    //lastTime = lastTime.substr(0,10);//精确到秒
 | 
			
		||||
    var startTime = lastTime - 1000*24*60*60*global.behaviorTime;
 | 
			
		||||
    var interval = 24*60*60*1000;  //一天
 | 
			
		||||
 | 
			
		||||
    var xAxisData = [];
 | 
			
		||||
    for (var i=0;i<global.behaviorTime;i++){
 | 
			
		||||
        var tmp = new Date(startTime).toISOString().substring(0, 10);
 | 
			
		||||
        xAxisData.push(tmp);
 | 
			
		||||
        startTime+=interval;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var myChart = echarts.init($("#behaviourGraph")[0], 'walden');
 | 
			
		||||
    var option = {
 | 
			
		||||
        title : {
 | 
			
		||||
            subtext : '次数'
 | 
			
		||||
        },
 | 
			
		||||
        tooltip : {
 | 
			
		||||
            trigger : 'axis'
 | 
			
		||||
        },
 | 
			
		||||
        legend : {
 | 
			
		||||
            data : [ '解析', '注册', '删除' ],
 | 
			
		||||
            y : 'bottom',
 | 
			
		||||
        },
 | 
			
		||||
        toolbox : {
 | 
			
		||||
            show : true,
 | 
			
		||||
            feature : {
 | 
			
		||||
                dataZoom : {
 | 
			
		||||
                    yAxisIndex : 'none'
 | 
			
		||||
                },
 | 
			
		||||
                dataView : {
 | 
			
		||||
                    readOnly : false
 | 
			
		||||
                },
 | 
			
		||||
                magicType : {
 | 
			
		||||
                    type : [ 'line', 'bar' ]
 | 
			
		||||
                },
 | 
			
		||||
                restore : {},
 | 
			
		||||
                saveAsImage : {}
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        xAxis : {
 | 
			
		||||
            type : 'category',
 | 
			
		||||
            boundaryGap : false,
 | 
			
		||||
            data : xAxisData
 | 
			
		||||
        },
 | 
			
		||||
        yAxis : {
 | 
			
		||||
            type : 'value',
 | 
			
		||||
            axisLabel : {
 | 
			
		||||
                formatter : '{value}次'
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        series : [ {
 | 
			
		||||
            name : '解析',
 | 
			
		||||
            type : 'line',
 | 
			
		||||
            data : resolveAna,
 | 
			
		||||
            markPoint : {
 | 
			
		||||
                data : [ {
 | 
			
		||||
                    type : 'max',
 | 
			
		||||
                    name : '最大值'
 | 
			
		||||
                }, {
 | 
			
		||||
                    type : 'min',
 | 
			
		||||
                    name : '最小值'
 | 
			
		||||
                } ]
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
        }, {
 | 
			
		||||
            name : '注册',
 | 
			
		||||
            type : 'line',
 | 
			
		||||
            data : registerAna,
 | 
			
		||||
            markPoint : {
 | 
			
		||||
                data : [ {
 | 
			
		||||
                    type : 'max',
 | 
			
		||||
                    name : '最大值'
 | 
			
		||||
                }, {
 | 
			
		||||
                    type : 'min',
 | 
			
		||||
                    name : '最小值'
 | 
			
		||||
                } ]
 | 
			
		||||
            }
 | 
			
		||||
        }, {
 | 
			
		||||
            name : '删除',
 | 
			
		||||
            type : 'line',
 | 
			
		||||
            data : deleteAna,
 | 
			
		||||
            markPoint : {
 | 
			
		||||
                data : [ {
 | 
			
		||||
                    type : 'max',
 | 
			
		||||
                    name : '最大值'
 | 
			
		||||
                }, {
 | 
			
		||||
                    type : 'min',
 | 
			
		||||
                    name : '最小值'
 | 
			
		||||
                } ]
 | 
			
		||||
            }
 | 
			
		||||
        } ]
 | 
			
		||||
    };
 | 
			
		||||
    myChart.setOption(option);
 | 
			
		||||
 | 
			
		||||
    console.log(resolveAna);
 | 
			
		||||
    console.log(deleteAna);
 | 
			
		||||
    console.log(registerAna);
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										140
									
								
								src/js/locallhs/doAndRepoCount.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,140 @@
 | 
			
		||||
var dtLang = {
 | 
			
		||||
    "sProcessing" : "处理中...",
 | 
			
		||||
    "lengthMenu" : '显示 <select>' + '<option value="5">5</option>'
 | 
			
		||||
        + '<option value="20">20</option>'
 | 
			
		||||
        + '<option value="100">100</option>'
 | 
			
		||||
        + '<option value="-1">全部</option>' + '</select> 项结果',
 | 
			
		||||
    "sZeroRecords" : "没有匹配结果",
 | 
			
		||||
    "sInfo" : "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
 | 
			
		||||
    "sInfoEmpty" : "显示第 0 至 0 项结果,共 0 项",
 | 
			
		||||
    "sInfoFiltered" : "(由 _MAX_ 项结果过滤)",
 | 
			
		||||
    "sInfoPostFix" : "",
 | 
			
		||||
    "sSearch" : "搜索:",
 | 
			
		||||
    "sUrl" : "",
 | 
			
		||||
    "sEmptyTable" : "表中数据为空",
 | 
			
		||||
    "sLoadingRecords" : "载入中...",
 | 
			
		||||
    "sInfoThousands" : ",",
 | 
			
		||||
    "oPaginate" : {
 | 
			
		||||
        "sFirst" : "首页",
 | 
			
		||||
        "sPrevious" : "上页",
 | 
			
		||||
        "sNext" : "下页",
 | 
			
		||||
        "sLast" : "末页"
 | 
			
		||||
    },
 | 
			
		||||
    "oAria" : {
 | 
			
		||||
        "sSortAscending" : ": 以升序排列此列",
 | 
			
		||||
        "sSortDescending" : ": 以降序排列此列"
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var initDoAndRepoCount = function(){
 | 
			
		||||
    console.log("initDoAndRepoCount");
 | 
			
		||||
    var str = getUrl() + "/view?action=count";
 | 
			
		||||
    console.log(str);
 | 
			
		||||
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url : str,
 | 
			
		||||
        type: "GET",
 | 
			
		||||
        dataType : "json"
 | 
			
		||||
    }).done(function(result) {
 | 
			
		||||
        showDoAndRepoCount(result);
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var showDoAndRepoCount = function(data){
 | 
			
		||||
    console.log(data);
 | 
			
		||||
    document.getElementById("DOCount").value = data.doCount;
 | 
			
		||||
    document.getElementById("RepoCount").value = data.repoCount;
 | 
			
		||||
 | 
			
		||||
    console.log("showDoAndRepoCount");
 | 
			
		||||
 | 
			
		||||
    //DO
 | 
			
		||||
    var tableHead = "<table id='DODivTab' class='table display row-border'><thead><tr><th>序号</th><th>条目</th></tr></thead><tbody>";
 | 
			
		||||
    var tableTail = "</tbody></table>";
 | 
			
		||||
    var html = tableHead;
 | 
			
		||||
    for (var i = 0; i < data.doIDList.length; i++) {
 | 
			
		||||
        html += "<tr><td>";
 | 
			
		||||
        html += (i + 1);
 | 
			
		||||
        html += ("</td><td>");
 | 
			
		||||
        html += data.doIDList[i];
 | 
			
		||||
        html += "</td></tr>";
 | 
			
		||||
    }
 | 
			
		||||
    html += tableTail;
 | 
			
		||||
    $("#DODiv").html(html);
 | 
			
		||||
    $("#DODivTab").DataTable(
 | 
			
		||||
        {
 | 
			
		||||
            "language" : dtLang,
 | 
			
		||||
            "rowCallback" : function(row, data, displayNum, displayIndex,
 | 
			
		||||
                                     dataIndex) {
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            "headerCallback" : function(thead, data, start, end, display) {
 | 
			
		||||
                $(thead).css("background", primaryColor);
 | 
			
		||||
                $(thead).css("color", "white");
 | 
			
		||||
                $(thead).children().css("background", primaryColor);
 | 
			
		||||
                $(thead).children().css("color", "white");
 | 
			
		||||
            },
 | 
			
		||||
            scrollCollapse : false,
 | 
			
		||||
            paging : true,
 | 
			
		||||
            pageLength : 5,
 | 
			
		||||
            order : [ [ 0, 'desc' ] ],
 | 
			
		||||
            "columnDefs" : [
 | 
			
		||||
                {
 | 
			
		||||
                    "targets" : 1,
 | 
			
		||||
                    "render" : function(data, type, row, meta) {
 | 
			
		||||
                        if (data.length > 35)
 | 
			
		||||
                            return "<span title='" + data + "'>"
 | 
			
		||||
                                + data.substring(0, 35)
 | 
			
		||||
                                + "  ...</span>";
 | 
			
		||||
                        else
 | 
			
		||||
                            return data;
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
            ]
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
    //Repo
 | 
			
		||||
    var tableHeadRepo = "<table id='RepoDivTab' class='table display row-border'><thead><tr><th>序号</th><th>条目</th></tr></thead><tbody>";
 | 
			
		||||
    var tableTailRepo = "</tbody></table>";
 | 
			
		||||
    var htmlRepo = tableHeadRepo;
 | 
			
		||||
    for (var i = 0; i < data.repoIDList.length; i++) {
 | 
			
		||||
        htmlRepo += "<tr><td>";
 | 
			
		||||
        htmlRepo += (i + 1);
 | 
			
		||||
        htmlRepo += ("</td><td>");
 | 
			
		||||
        htmlRepo += data.repoIDList[i];
 | 
			
		||||
        htmlRepo += "</td></tr>";
 | 
			
		||||
    }
 | 
			
		||||
    htmlRepo += tableTailRepo;
 | 
			
		||||
    $("#RepoDiv").html(htmlRepo);
 | 
			
		||||
    $("#RepoDivTab").DataTable(
 | 
			
		||||
        {
 | 
			
		||||
            "language" : dtLang,
 | 
			
		||||
            "rowCallback" : function(row, data, displayNum, displayIndex,
 | 
			
		||||
                                     dataIndex) {
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            "headerCallback" : function(thead, data, start, end, display) {
 | 
			
		||||
                $(thead).css("background", primaryColor);
 | 
			
		||||
                $(thead).css("color", "white");
 | 
			
		||||
                $(thead).children().css("background", primaryColor);
 | 
			
		||||
                $(thead).children().css("color", "white");
 | 
			
		||||
            },
 | 
			
		||||
            scrollCollapse : false,
 | 
			
		||||
            paging : true,
 | 
			
		||||
            pageLength : 5,
 | 
			
		||||
            order : [ [ 0, 'desc' ] ],
 | 
			
		||||
            "columnDefs" : [
 | 
			
		||||
                {
 | 
			
		||||
                    "targets" : 1,
 | 
			
		||||
                    "render" : function(data, type, row, meta) {
 | 
			
		||||
                        if (data.length > 35)
 | 
			
		||||
                            return "<span title='" + data + "'>"
 | 
			
		||||
                                + data.substring(0, 35)
 | 
			
		||||
                                + "  ...</span>";
 | 
			
		||||
                        else
 | 
			
		||||
                            return data;
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
            ]
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										180
									
								
								src/js/locallhs/initLocalLHS.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,180 @@
 | 
			
		||||
var initLoad = function(){
 | 
			
		||||
	window.global = {};
 | 
			
		||||
	initVUE();
 | 
			
		||||
	changeBehaviourTime($("#behaviourTimeSelect")[0].value);
 | 
			
		||||
	initDoAndRepoCount();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var initVUE = function () {
 | 
			
		||||
	toastVue = new Vue({
 | 
			
		||||
		el: "#alertDiv",
 | 
			
		||||
		data: {
 | 
			
		||||
			toastTitle: "提示",
 | 
			
		||||
			toastMessage: "消息"
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var myToast = function (title, msg) {
 | 
			
		||||
	toastVue.toastTitle = title;
 | 
			
		||||
	toastVue.toastMessage = msg;
 | 
			
		||||
	$("#alertDiv").toast("show");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var jumpToQuery = function(){
 | 
			
		||||
	var ss = window.location.href;
 | 
			
		||||
	var s = ss.split(":");
 | 
			
		||||
	console.log(s);
 | 
			
		||||
	var p = s[2].split("/")[0];
 | 
			
		||||
	var port = parseInt(p);
 | 
			
		||||
	var url = s[0] + ":" + s[1] + ":" + port + "/queryIdentifier.html";
 | 
			
		||||
	window.open(url);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var queryIdentifierInit = function () {
 | 
			
		||||
	window.global = {};
 | 
			
		||||
	initVUE();
 | 
			
		||||
	analysis();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var analysisInit = function(){
 | 
			
		||||
	console.log("analysisInit");
 | 
			
		||||
	var str = "";
 | 
			
		||||
	if($("#analysisInput")[0].value == undefined || $("#analysisInput")[0].value == ""){
 | 
			
		||||
		myToast("注意","请输入标识解析!");
 | 
			
		||||
	}else {
 | 
			
		||||
		str = $("#analysisInput")[0].value;
 | 
			
		||||
		var ss = window.location.href;
 | 
			
		||||
		var s = ss.split(":");
 | 
			
		||||
		console.log(s);
 | 
			
		||||
		var p = s[2].split("/")[0];
 | 
			
		||||
		var port = parseInt(p);
 | 
			
		||||
		var url = s[0] + ":" + s[1] + ":" + port + "/queryIdentifier.html?id=" + str;
 | 
			
		||||
		window.location.href = url;
 | 
			
		||||
		window.open(url);
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var analysis = function(){
 | 
			
		||||
	console.log("analysis");
 | 
			
		||||
	var ss = window.location.href;
 | 
			
		||||
	var s = ss.split("?");
 | 
			
		||||
	var s2 = s[s.length - 1].split("=");
 | 
			
		||||
	var identifier = s2[1];
 | 
			
		||||
	global.identifier = identifier;
 | 
			
		||||
	var str = getUrl() + "/resolve?identifier=" + identifier;
 | 
			
		||||
	console.log(str);
 | 
			
		||||
 | 
			
		||||
	$.ajax({
 | 
			
		||||
		url : str,
 | 
			
		||||
		type: "GET",
 | 
			
		||||
		dataType : "json"
 | 
			
		||||
	}).done(function(result) {
 | 
			
		||||
		showAnalysisResult(result);
 | 
			
		||||
	});
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var dtLangHandleRecord = {
 | 
			
		||||
	"sProcessing" : "处理中...",
 | 
			
		||||
	"lengthMenu" : '显示 <select>' + '<option value="10">10</option>'
 | 
			
		||||
		+ '<option value="20">20</option>'
 | 
			
		||||
		+ '<option value="100">50</option>'
 | 
			
		||||
		+ '<option value="-1">全部</option>' + '</select> 项结果',
 | 
			
		||||
	"sZeroRecords" : "没有匹配结果",
 | 
			
		||||
	"sInfo" : "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
 | 
			
		||||
	"sInfoEmpty" : "显示第 0 至 0 项结果,共 0 项",
 | 
			
		||||
	"sInfoFiltered" : "(由 _MAX_ 项结果过滤)",
 | 
			
		||||
	"sInfoPostFix" : "",
 | 
			
		||||
	"sSearch" : "搜索:",
 | 
			
		||||
	"sUrl" : "",
 | 
			
		||||
	"sEmptyTable" : "表中数据为空",
 | 
			
		||||
	"sLoadingRecords" : "载入中...",
 | 
			
		||||
	"sInfoThousands" : ",",
 | 
			
		||||
	"oPaginate" : {
 | 
			
		||||
		"sFirst" : "首页",
 | 
			
		||||
		"sPrevious" : "上页",
 | 
			
		||||
		"sNext" : "下页",
 | 
			
		||||
		"sLast" : "末页"
 | 
			
		||||
	},
 | 
			
		||||
	"oAria" : {
 | 
			
		||||
		"sSortAscending" : ": 以升序排列此列",
 | 
			
		||||
		"sSortDescending" : ": 以降序排列此列"
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var showAnalysisResult = function(result){
 | 
			
		||||
	console.log(result);
 | 
			
		||||
 | 
			
		||||
	if(result.hasOwnProperty("response") && result["response"] == "not exist"){
 | 
			
		||||
		var content = "未查询到标识 " + global.identifier + " !";
 | 
			
		||||
		var html1 = "<div class=\"card-title\" style=\"margin-bottom: 30px\">\n" +
 | 
			
		||||
			"<h5 class=\"card-title\" style=\"float:left\">解析结果</h5>\n" +
 | 
			
		||||
			"</div>\n" +
 | 
			
		||||
			"<div class=\"card-body\">\n" +
 | 
			
		||||
			"<div class=\"d-flex justify-content-center\">\n" +
 | 
			
		||||
			"<h6 class=\"card-title\" style=\"float:left;font-weight: bold\">" + content + "</h6>\n" +
 | 
			
		||||
			"</div>\n" +
 | 
			
		||||
			"</div>";
 | 
			
		||||
		$("#handleRecordBody").html(html1);
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var html1 = "<div class=\"card-title\" style=\"margin-bottom: 30px\">\n" +
 | 
			
		||||
		"<h5 class=\"card-title\" style=\"float:left\">解析结果</h5>\n" +
 | 
			
		||||
		"</div>\n" +
 | 
			
		||||
		"<div class=\"card-body\" id=\"HandleRecordDiv\">\n" +
 | 
			
		||||
		"<div class=\"d-flex justify-content-center\">\n" +
 | 
			
		||||
		"<div class=\"spinner-border text-primary\"\n" +
 | 
			
		||||
		"style=\"width: 4rem; height: 4rem;\" role=\"status\">\n" +
 | 
			
		||||
		"<span class=\"sr-only\">Loading...</span>\n" +
 | 
			
		||||
		"</div>\n" +
 | 
			
		||||
		"</div>\n" +
 | 
			
		||||
		"</div>";
 | 
			
		||||
 | 
			
		||||
	//record 结果
 | 
			
		||||
	var tableHead = "<table id='HandleRecordDivTab' class='table display row-border'><thead><tr><th>Key</th><th>Value</th></tr></thead><tbody>";
 | 
			
		||||
	var tableTail = "</tbody></table>";
 | 
			
		||||
	var html = tableHead;
 | 
			
		||||
	for(var k in result){
 | 
			
		||||
		html += "<tr><td>";
 | 
			
		||||
		html += k;
 | 
			
		||||
		html += ("</td><td>");
 | 
			
		||||
		html += result[k];
 | 
			
		||||
		html += "</td></tr>";
 | 
			
		||||
	}
 | 
			
		||||
	html += tableTail;
 | 
			
		||||
 | 
			
		||||
	$("#handleRecordBody").html(html1);
 | 
			
		||||
	$("#HandleRecordDiv").html(html);
 | 
			
		||||
	$("#HandleRecordDivTab").DataTable(
 | 
			
		||||
		{
 | 
			
		||||
			"language" : dtLangHandleRecord,
 | 
			
		||||
			"rowCallback" : function(row, data, displayNum, displayIndex,
 | 
			
		||||
									 dataIndex) {
 | 
			
		||||
 | 
			
		||||
			},
 | 
			
		||||
			"headerCallback" : function(thead, data, start, end, display) {
 | 
			
		||||
				$(thead).css("background", primaryColor);
 | 
			
		||||
				$(thead).css("color", "white");
 | 
			
		||||
				$(thead).children().css("background", primaryColor);
 | 
			
		||||
				$(thead).children().css("color", "white");
 | 
			
		||||
			},
 | 
			
		||||
			scrollCollapse : false,
 | 
			
		||||
			paging : true,
 | 
			
		||||
			pageLength : 10,
 | 
			
		||||
			order : [ [ 0, 'desc' ] ],
 | 
			
		||||
			"columnDefs" : [
 | 
			
		||||
				{
 | 
			
		||||
					"targets" : 1,
 | 
			
		||||
					"render" : function(data, type, row, meta) {
 | 
			
		||||
						if (data.length > 35)
 | 
			
		||||
							return "<span title='" + data + "'>"
 | 
			
		||||
								+ data.substring(0, 35)
 | 
			
		||||
								+ "  ...</span>";
 | 
			
		||||
						else
 | 
			
		||||
							return data;
 | 
			
		||||
					}
 | 
			
		||||
				},
 | 
			
		||||
			]
 | 
			
		||||
		});
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										39
									
								
								src/js/ncconfig.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,39 @@
 | 
			
		||||
var loadConfig = function() {
 | 
			
		||||
	listLicence();
 | 
			
		||||
	getOtherNC();
 | 
			
		||||
	getNCFile();
 | 
			
		||||
};
 | 
			
		||||
var listLicence = function() {
 | 
			
		||||
	var arg = {};
 | 
			
		||||
	arg.action = "listLicence";
 | 
			
		||||
	global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
};
 | 
			
		||||
var onListLicence = function(obj) {
 | 
			
		||||
	mainVue.licenceNodes = obj.nodeCount;
 | 
			
		||||
	mainVue.licenceDueDate = obj.dueDate;
 | 
			
		||||
};
 | 
			
		||||
var downloadUUID = function() {
 | 
			
		||||
	var nonce = global.session;
 | 
			
		||||
	var pubKey = global.sm2Key.publicKey;
 | 
			
		||||
	var signature = sm2.doSignature(global.session, global.sm2Key.privateKey);
 | 
			
		||||
	window.open("./NodeCenter?action=downloadUUID&sign=" + signature
 | 
			
		||||
			+ "&pubKey=" + pubKey + "&nonce=" + nonce);
 | 
			
		||||
};
 | 
			
		||||
var updateLicence = function() {
 | 
			
		||||
	var req = {};
 | 
			
		||||
	req.action = "updateLicence";
 | 
			
		||||
	try {
 | 
			
		||||
		var content = mainVue.offlineLicence;
 | 
			
		||||
		var contents = content.split("|");
 | 
			
		||||
		req.sign = contents[1];
 | 
			
		||||
		req.content = contents[0];
 | 
			
		||||
		if (req.sign == undefined || req.content == undefined) {
 | 
			
		||||
			myToast("手动提交Licence", "失败,Licence格式错误");
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	} catch (e) {
 | 
			
		||||
		myToast("手动提交Licence", "失败,Licence格式错误");
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	global.wssocket.send(JSON.stringify(req));
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										6
									
								
								src/js/nodeman.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,6 @@
 | 
			
		||||
var loadNodeMan = function(){
 | 
			
		||||
	console.log("loadNodeMan");
 | 
			
		||||
	var arg = {};
 | 
			
		||||
	arg.action = "listNodes";
 | 
			
		||||
	global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										558
									
								
								src/js/nodeslistman.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,558 @@
 | 
			
		||||
var loadNodesListMan = function (event) {
 | 
			
		||||
    console.log("loadNodesListMan");
 | 
			
		||||
    listNodes();
 | 
			
		||||
    listTrustUnits();
 | 
			
		||||
    listMultiCP();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var listMultiCP = function () {
 | 
			
		||||
    setTimeout(function () {
 | 
			
		||||
        var listMPContractProcess = {};
 | 
			
		||||
        listMPContractProcess.action = "listMultiPointContractProcess";
 | 
			
		||||
        global.wssocket.send(JSON.stringify(listMPContractProcess));
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var listNodes = function (event) {
 | 
			
		||||
    console.log("listNodes");
 | 
			
		||||
    setTimeout(function () {
 | 
			
		||||
        var param = {};
 | 
			
		||||
        param.action = "listNodes";
 | 
			
		||||
        param.pubKey = global.sm2Key.publicKey;
 | 
			
		||||
        global.wssocket.send(JSON.stringify(param));
 | 
			
		||||
    }, 300);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var listTrustUnits = function (event) {
 | 
			
		||||
    console.log("listTrustUnits");
 | 
			
		||||
    setTimeout(function () {
 | 
			
		||||
        var param = {};
 | 
			
		||||
        param.action = "listTrustUnits";
 | 
			
		||||
        param.pubKey = global.sm2Key.publicKey;
 | 
			
		||||
        global.wssocket.send(JSON.stringify(param));
 | 
			
		||||
    }, 300);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function queryNodeByName(name) {
 | 
			
		||||
    for (const i = 0; i < global.nodeInfo.online.length; i++) {
 | 
			
		||||
        const node = global.nodeInfo.online[i];
 | 
			
		||||
        if (node.nodeName === name)
 | 
			
		||||
            return node;
 | 
			
		||||
    }
 | 
			
		||||
    return undefined;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var submitTrustUnitNodes = function (event) {
 | 
			
		||||
    const options = document.querySelector('#selectTrustUnitNodes').options;
 | 
			
		||||
    var list = [];
 | 
			
		||||
    for (let i = 0; i < options.length; i++) {
 | 
			
		||||
        // 如果该option被选中,则将它的value存入数组
 | 
			
		||||
        if (options[i].selected) {
 | 
			
		||||
            const node = queryNodeByName(options[i].text);
 | 
			
		||||
            if (!node) {
 | 
			
		||||
                console.log("Error, can't find node:" + option.text);
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            // item.masterAddress = node.masterAddress;
 | 
			
		||||
            // item.peerID = node.peerID;
 | 
			
		||||
            // item.udpID = node.udpID;
 | 
			
		||||
            // item.ipPort = node.ipPort;
 | 
			
		||||
            list.push({
 | 
			
		||||
                nodeName: node.nodeName,
 | 
			
		||||
                // masterAddress: node.masterAddress,
 | 
			
		||||
                // peerID: node.peerID,
 | 
			
		||||
                // udpID: node.udpID,
 | 
			
		||||
                // ipPort: node.ipPort,
 | 
			
		||||
                pubKey: node.pubKey
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    const param = {
 | 
			
		||||
        action: 'createTrustUnit',
 | 
			
		||||
    };
 | 
			
		||||
    param.action = "createTrustUnit";
 | 
			
		||||
    param.data = list;
 | 
			
		||||
    const name = $("#newUnitName")[0].value;
 | 
			
		||||
    if (!name) {
 | 
			
		||||
        myToast("失败", "请输入集群名称");
 | 
			
		||||
    }
 | 
			
		||||
    param.msg = name;
 | 
			
		||||
    global.wssocket.send(JSON.stringify(param));
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onCreateTrustUnit = function (event) {
 | 
			
		||||
    myToast("Success", "创建可信集群成功")
 | 
			
		||||
    listTrustUnits();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// if ($("#nodesStatusPieDiv").css("height") == "0px") {
 | 
			
		||||
var drawNodesStatusPie = function (id, obj) {
 | 
			
		||||
    // if ($("#nodesStatusPieDiv").css("height") == "0px") {
 | 
			
		||||
    if ($("#" + id).css("height") == "0px") {
 | 
			
		||||
        console.log("drawNodesStatusPie: ignore");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    $("#" + id)
 | 
			
		||||
        .html(
 | 
			
		||||
            "<div class='col-12' id='"
 | 
			
		||||
            + id
 | 
			
		||||
            + "Canv' style='width:100%; min-height: 150px; padding: 0px'></div>");
 | 
			
		||||
    var result = {};
 | 
			
		||||
    if (obj.offline.length > obj.online.length) {
 | 
			
		||||
        result["Offline"] = obj.offline.length - obj.online.length;
 | 
			
		||||
        result["Online"] = obj.online.length;
 | 
			
		||||
    } else {
 | 
			
		||||
        result["Offline"] = 0;
 | 
			
		||||
        result["Online"] = obj.online.length;
 | 
			
		||||
    }
 | 
			
		||||
    global.result = result;
 | 
			
		||||
    var dataList = [];
 | 
			
		||||
    var valDataList = [];
 | 
			
		||||
    for (var key in result) {
 | 
			
		||||
        dataList.push(key);
 | 
			
		||||
        var l = {};
 | 
			
		||||
        l.name = key
 | 
			
		||||
        l.value = result[key];
 | 
			
		||||
        valDataList.push(l);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    var myChart = echarts.init($("#" + id + "Canv")[0], 'walden');
 | 
			
		||||
    var option222 = {
 | 
			
		||||
        tooltip: {
 | 
			
		||||
            trigger: 'item',
 | 
			
		||||
            formatter: '{a} <br/>{b}: {c} ({d}%)'
 | 
			
		||||
        },
 | 
			
		||||
        legend: {
 | 
			
		||||
            orient: 'vertical',
 | 
			
		||||
            left: 10,
 | 
			
		||||
            data: dataList
 | 
			
		||||
        },
 | 
			
		||||
        series: [{
 | 
			
		||||
            name: '节点数目',
 | 
			
		||||
            type: 'pie',
 | 
			
		||||
            radius: ['50%', '70%'],
 | 
			
		||||
            avoidLabelOverlap: false,
 | 
			
		||||
            label: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                    show: false,
 | 
			
		||||
                    position: 'center'
 | 
			
		||||
                },
 | 
			
		||||
                emphasis: {
 | 
			
		||||
                    show: true,
 | 
			
		||||
                    textStyle: {
 | 
			
		||||
                        fontSize: '15',
 | 
			
		||||
                        fontWeight: 'bold'
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            labelLine: {
 | 
			
		||||
                normal: {
 | 
			
		||||
                    show: false
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            data: valDataList
 | 
			
		||||
        }]
 | 
			
		||||
    };
 | 
			
		||||
    myChart.setOption(option222);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onListNodes = function (obj) {
 | 
			
		||||
    // mainVue
 | 
			
		||||
    console.log("onListNodes");
 | 
			
		||||
    console.log(obj);
 | 
			
		||||
    global.nodeInfo = obj;
 | 
			
		||||
    var len = 0;
 | 
			
		||||
    if (obj.offline) {
 | 
			
		||||
        len += obj.offline.length;
 | 
			
		||||
    }
 | 
			
		||||
    if (obj.online) {
 | 
			
		||||
        len += obj.online.length;
 | 
			
		||||
    }
 | 
			
		||||
    mainVue.nodeCount = len;
 | 
			
		||||
    var count = 0;
 | 
			
		||||
    let i;
 | 
			
		||||
    if (obj.online) {
 | 
			
		||||
        for (i = 0; i < obj.online.length; i++) {
 | 
			
		||||
            count += obj.online[i].contracts.length;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    mainVue.contractCount = count;
 | 
			
		||||
    // nodesStatusPieDiv
 | 
			
		||||
    // dashNodesStatusPieDiv
 | 
			
		||||
    drawNodesStatusPie("nodesStatusPieDiv", obj);
 | 
			
		||||
    drawNodesStatusPie("dashNodesStatusPieDiv", obj);
 | 
			
		||||
 | 
			
		||||
    if ($("#nodesTabDiv").css("height") === "0px") {
 | 
			
		||||
        console.log("nodesTabDiv: ignore");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    var dtLang = {
 | 
			
		||||
        "sProcessing": "处理中...",
 | 
			
		||||
        "lengthMenu": '显示 <select>' + '<option value="10">10</option>'
 | 
			
		||||
            + '<option value="50">50</option>'
 | 
			
		||||
            + '<option value="100">100</option>'
 | 
			
		||||
            + '<option value="-1">全部</option>' + '</select> 项结果',
 | 
			
		||||
        "sZeroRecords": "没有匹配结果",
 | 
			
		||||
        "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
 | 
			
		||||
        "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
 | 
			
		||||
        "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
 | 
			
		||||
        "sInfoPostFix": "",
 | 
			
		||||
        "sSearch": "搜索:",
 | 
			
		||||
        "sUrl": "",
 | 
			
		||||
        "sEmptyTable": "表中数据为空",
 | 
			
		||||
        "sLoadingRecords": "载入中...",
 | 
			
		||||
        "sInfoThousands": ",",
 | 
			
		||||
        "oPaginate": {
 | 
			
		||||
            "sFirst": "首页",
 | 
			
		||||
            "sPrevious": "上页",
 | 
			
		||||
            "sNext": "下页",
 | 
			
		||||
            "sLast": "末页"
 | 
			
		||||
        },
 | 
			
		||||
        "oAria": {
 | 
			
		||||
            "sSortAscending": ": 以升序排列此列",
 | 
			
		||||
            "sSortDescending": ": 以降序排列此列"
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    let html = "<table class='table display row-border' id='nodesTabDivTab'>" +
 | 
			
		||||
        "<thead>" +
 | 
			
		||||
        "<tr><th>序号</th>" +
 | 
			
		||||
        "<th>Name</th>" +
 | 
			
		||||
        "<th>状态</th>" +
 | 
			
		||||
        "<th>合约数目</th>" +
 | 
			
		||||
        "<th>事件数目</th>" +
 | 
			
		||||
        // "<th>PeerID</th>" +
 | 
			
		||||
        // "<th>UDPID</th>" +
 | 
			
		||||
        "<th>TCP地址</th>" +
 | 
			
		||||
        "<th>公钥</th></tr>" +
 | 
			
		||||
        "</thead>" +
 | 
			
		||||
        "<tbody>";
 | 
			
		||||
    var tableTail = "</tbody></table>";
 | 
			
		||||
    var contractCount = 0;
 | 
			
		||||
    var eventCount = 0;
 | 
			
		||||
    $("#selectTrustUnitNodes").html("");
 | 
			
		||||
    var x = document.getElementById("selectTrustUnitNodes");
 | 
			
		||||
    x.options.length = 0;
 | 
			
		||||
    for (i = 0; i < obj.online.length; i++) {
 | 
			
		||||
        let node = obj.online[i];
 | 
			
		||||
        let nodeEventCount = node.events | '-';
 | 
			
		||||
        let nameHtml = ''
 | 
			
		||||
        if (node.masterAddress) {
 | 
			
		||||
            const ipPort = node.masterAddress.split(":")
 | 
			
		||||
            nameHtml =
 | 
			
		||||
                `<a href="http://${ipPort[0]}:${Number(ipPort[1]) - 1}/NodePortal.html" target="_blank">` +
 | 
			
		||||
                `${node.nodeName}</a>`
 | 
			
		||||
        } else {
 | 
			
		||||
            nameHtml = node.nodeName;
 | 
			
		||||
        }
 | 
			
		||||
        html += `<tr><td>${i + 1}</td>
 | 
			
		||||
            <td>${nameHtml}</td>
 | 
			
		||||
            <td>Online</td>
 | 
			
		||||
            <td>${node.contracts ? node.contracts.length : 0}</td>
 | 
			
		||||
            <td>${nodeEventCount}</td>
 | 
			
		||||
<!--            <td>${node.peerID}</td>-->
 | 
			
		||||
<!--            <td>${node.udpID ? node.udpID : ''}</td>-->
 | 
			
		||||
            <td>${node.masterAddress}</td>
 | 
			
		||||
            <td>${node.pubKey}</td>
 | 
			
		||||
            </tr>`
 | 
			
		||||
        if (node.contracts && node.contracts.length) {
 | 
			
		||||
            contractCount += node.contracts.length;
 | 
			
		||||
        }
 | 
			
		||||
        eventCount += nodeEventCount;
 | 
			
		||||
 | 
			
		||||
        var option = document.createElement("option");
 | 
			
		||||
        option.text = node.nodeName;
 | 
			
		||||
        option.value = node.peerID;
 | 
			
		||||
        x.add(option);// new
 | 
			
		||||
        // Option(obj.online[i].pubKey,obj.online[i].pubKey),0);
 | 
			
		||||
        // option += '<option value="' + obj.online[i].pubKey + '">' +
 | 
			
		||||
        // obj.online[i].pubKey.substring(0,15) + '</option>';
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    console.log("offline: ", obj.offline.length);
 | 
			
		||||
    for (var j = 0; j < obj.offline.length; j++) {
 | 
			
		||||
        html += `<tr>
 | 
			
		||||
            <td>${i + j + 1}</td>
 | 
			
		||||
            <td>${obj.offline[j]}</td>
 | 
			
		||||
            <td>Offline</td>
 | 
			
		||||
            <td>-</td>
 | 
			
		||||
            <td>-</td>
 | 
			
		||||
<!--            <td>-</td>-->
 | 
			
		||||
<!--            <td>-</td>-->
 | 
			
		||||
            <td>-</td>
 | 
			
		||||
            <td>${obj.offline[j]}</td>
 | 
			
		||||
            </tr>`
 | 
			
		||||
    }
 | 
			
		||||
    $("#selectTrustUnitNodes").selectpicker('refresh');
 | 
			
		||||
    mainVue.contractCount = contractCount;
 | 
			
		||||
    mainVue.eventCount = eventCount;
 | 
			
		||||
    html += tableTail;
 | 
			
		||||
    $("#nodesTabDiv").html(html);
 | 
			
		||||
 | 
			
		||||
    function abbrRender(data, type, row, meta) {
 | 
			
		||||
        if (data.length > 8)
 | 
			
		||||
            return "<span title='" + data + "'>"
 | 
			
		||||
                + data.substring(0, 8)
 | 
			
		||||
                + "  ...</span>";
 | 
			
		||||
        else
 | 
			
		||||
            return data;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $("#nodesTabDivTab").DataTable(
 | 
			
		||||
        {
 | 
			
		||||
            "language": dtLang,
 | 
			
		||||
            "rowCallback": function (row, data, displayNum, displayIndex,
 | 
			
		||||
                                     dataIndex) {
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            "headerCallback": function (thead, data, start, end, display) {
 | 
			
		||||
                $(thead).css("background", primaryColor);
 | 
			
		||||
                $(thead).css("color", "white");
 | 
			
		||||
                $(thead).children().css("background", primaryColor);
 | 
			
		||||
                $(thead).children().css("color", "white");
 | 
			
		||||
            },
 | 
			
		||||
            scrollCollapse: false,
 | 
			
		||||
            paging: true,
 | 
			
		||||
            pageLength: 10,
 | 
			
		||||
            order: [[0, 'desc']],
 | 
			
		||||
            "columnDefs": [
 | 
			
		||||
                {
 | 
			
		||||
                    "targets": 1,
 | 
			
		||||
                    "render": function (data, type, row, meta) {
 | 
			
		||||
                        const firstBg = data.indexOf(">");
 | 
			
		||||
                        const secondSl = data.substring(1).indexOf("<");
 | 
			
		||||
                        const aTag = data.substring(0, firstBg + 1)
 | 
			
		||||
                        const aTagTail = data.substring(secondSl + 1)
 | 
			
		||||
                        const name = data.substring(firstBg + 1, secondSl + 1)
 | 
			
		||||
                        let html = name.length > 15 ?
 | 
			
		||||
                            `<span title='${name}'>${name.substring(0, 15)}  ...</span>` :
 | 
			
		||||
                            name;
 | 
			
		||||
                        return aTag + html + aTagTail;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                },
 | 
			
		||||
                // { // for PeerID
 | 
			
		||||
                //     "targets": 5,
 | 
			
		||||
                //     "render": abbrRender
 | 
			
		||||
                // },
 | 
			
		||||
                {
 | 
			
		||||
                    "targets": 6,
 | 
			
		||||
                    "render": abbrRender
 | 
			
		||||
                }]
 | 
			
		||||
 | 
			
		||||
        });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onListTrustUnits = function (obj) {
 | 
			
		||||
    // mainVue
 | 
			
		||||
    mainVue.unitCount = obj.data.length;
 | 
			
		||||
    if ($("#trustNodesUnitTabDiv").css("height") == "0px") {
 | 
			
		||||
        console.log("trustNodesUnitTabDiv: ignore");
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    var dtLang = {
 | 
			
		||||
        "sProcessing": "处理中...",
 | 
			
		||||
        "lengthMenu": '显示 <select>' + '<option value="10">10</option>'
 | 
			
		||||
            + '<option value="50">50</option>'
 | 
			
		||||
            + '<option value="100">100</option>'
 | 
			
		||||
            + '<option value="-1">全部</option>' + '</select> 项结果',
 | 
			
		||||
        "sZeroRecords": "没有匹配结果",
 | 
			
		||||
        "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
 | 
			
		||||
        "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
 | 
			
		||||
        "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
 | 
			
		||||
        "sInfoPostFix": "",
 | 
			
		||||
        "sSearch": "搜索:",
 | 
			
		||||
        "sUrl": "",
 | 
			
		||||
        "sEmptyTable": "表中数据为空",
 | 
			
		||||
        "sLoadingRecords": "载入中...",
 | 
			
		||||
        "sInfoThousands": ",",
 | 
			
		||||
        "oPaginate": {
 | 
			
		||||
            "sFirst": "首页",
 | 
			
		||||
            "sPrevious": "上页",
 | 
			
		||||
            "sNext": "下页",
 | 
			
		||||
            "sLast": "末页"
 | 
			
		||||
        },
 | 
			
		||||
        "oAria": {
 | 
			
		||||
            "sSortAscending": ": 以升序排列此列",
 | 
			
		||||
            "sSortDescending": ": 以降序排列此列"
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    var tableHead = `<table id='trustNodesUnitTabDivTab' class='table display row-border'><thead><tr>
 | 
			
		||||
        <th>序号</th>
 | 
			
		||||
        <th>ID</th>
 | 
			
		||||
        <th>创建者</th>
 | 
			
		||||
        <th>节点数目</th>
 | 
			
		||||
        <th>节点列表</th>
 | 
			
		||||
        <th></th></tr></thead><tbody>`;
 | 
			
		||||
    var tableTail = "</tbody></table>";
 | 
			
		||||
    var html = tableHead;
 | 
			
		||||
    for (var i = 0; i < obj.data.length; i++) {
 | 
			
		||||
        var at_ = obj.data[i].key.indexOf("_");
 | 
			
		||||
        var nodes = JSON.parse(obj.data[i].value);
 | 
			
		||||
        html += `<tr><td>${i + 1}</td>
 | 
			
		||||
            <td>${obj.data[i].key.substring(at_ + 1)}</td>
 | 
			
		||||
            <td>${obj.data[i].key.substring(0, at_ - 1)}</td>
 | 
			
		||||
            <td>${nodes.length}</td>
 | 
			
		||||
            <td>${nodes.map(x => x.nodeName).sort().join(",")}</td>
 | 
			
		||||
            <td style="padding: 2px 12px;">
 | 
			
		||||
                <button class="btn btn-outline-danger" onclick="deleteTrustUnit('${obj.data[i].key}')">删除</button>
 | 
			
		||||
            </td></tr>`
 | 
			
		||||
    }
 | 
			
		||||
    html += tableTail;
 | 
			
		||||
    $("#trustNodesUnitTabDiv").html(html);
 | 
			
		||||
    $("#trustNodesUnitTabDivTab").DataTable(
 | 
			
		||||
        {
 | 
			
		||||
            "language": dtLang,
 | 
			
		||||
            "rowCallback": function (row, data, displayNum, displayIndex,
 | 
			
		||||
                                     dataIndex) {
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            "headerCallback": function (thead, data, start, end, display) {
 | 
			
		||||
                $(thead).css("background", primaryColor);
 | 
			
		||||
                $(thead).css("color", "white");
 | 
			
		||||
                $(thead).children().css("background", primaryColor);
 | 
			
		||||
                $(thead).children().css("color", "white");
 | 
			
		||||
            },
 | 
			
		||||
            scrollCollapse: false,
 | 
			
		||||
            paging: true,
 | 
			
		||||
            pageLength: 10,
 | 
			
		||||
            order: [[0, 'desc']],
 | 
			
		||||
            "columnDefs": [
 | 
			
		||||
                {
 | 
			
		||||
                    "targets": 2,
 | 
			
		||||
                    "render": function (data, type, row, meta) {
 | 
			
		||||
                        if (data.length > 15)
 | 
			
		||||
                            return "<span title='" + data + "'>"
 | 
			
		||||
                                + data.substring(0, 15)
 | 
			
		||||
                                + "  ...</span>";
 | 
			
		||||
                        else
 | 
			
		||||
                            return data;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    "targets": 4,
 | 
			
		||||
                    "render": function (data, type, row, meta) {
 | 
			
		||||
                        let arr = data.split(',')
 | 
			
		||||
                        if (arr.length > 2) {
 | 
			
		||||
                            arr = [arr[0], arr[1], '...']
 | 
			
		||||
                        }
 | 
			
		||||
                        for (let i = 0; i < arr.length; ++i) {
 | 
			
		||||
                            if (arr[i].length > 20) {
 | 
			
		||||
                                arr[i] = arr[i].substring(0, 20) + '  ...';
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                        return arr.join(',<br>')
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }]
 | 
			
		||||
        });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var deleteTrustUnit = function (data) {
 | 
			
		||||
    var param = {};
 | 
			
		||||
    param.action = "deleteTrustUnit";
 | 
			
		||||
    param.data = data;
 | 
			
		||||
    global.wssocket.send(JSON.stringify(param));
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onDeleteTrustUnit = function (event) {
 | 
			
		||||
    myToast("Success", "删除可信集群成功")
 | 
			
		||||
    listTrustUnits();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var onListMultiPointContractProcess = function (data) {
 | 
			
		||||
    var dtLang = {
 | 
			
		||||
        "sProcessing": "处理中...",
 | 
			
		||||
        "lengthMenu": '显示 <select>' + '<option value="10">10</option>'
 | 
			
		||||
            + '<option value="50">50</option>'
 | 
			
		||||
            + '<option value="100">100</option>'
 | 
			
		||||
            + '<option value="-1">全部</option>' + '</select> 项结果',
 | 
			
		||||
        "sZeroRecords": "没有匹配结果",
 | 
			
		||||
        "sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
 | 
			
		||||
        "sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
 | 
			
		||||
        "sInfoFiltered": "(由 _MAX_ 项结果过滤)",
 | 
			
		||||
        "sInfoPostFix": "",
 | 
			
		||||
        "sSearch": "搜索:",
 | 
			
		||||
        "sUrl": "",
 | 
			
		||||
        "sEmptyTable": "表中数据为空",
 | 
			
		||||
        "sLoadingRecords": "载入中...",
 | 
			
		||||
        "sInfoThousands": ",",
 | 
			
		||||
        "oPaginate": {
 | 
			
		||||
            "sFirst": "首页",
 | 
			
		||||
            "sPrevious": "上页",
 | 
			
		||||
            "sNext": "下页",
 | 
			
		||||
            "sLast": "末页"
 | 
			
		||||
        },
 | 
			
		||||
        "oAria": {
 | 
			
		||||
            "sSortAscending": ": 以升序排列此列",
 | 
			
		||||
            "sSortDescending": ": 以降序排列此列"
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    var tableHead = "<table id='MPContractTabDivTab' class='table display row-border'><thead><tr><th>序号</th><th>合约名称</th><th>合约ID</th><th>管理</th></tr></thead><tbody>";
 | 
			
		||||
    var tableTail = "</tbody></table>";
 | 
			
		||||
    var html = tableHead;
 | 
			
		||||
    var list = JSON.parse(data.data);
 | 
			
		||||
    for (var i = 0; i < list.length; i++) {
 | 
			
		||||
        var nodes = list[i];
 | 
			
		||||
        html += "<tr><td>";
 | 
			
		||||
        html += (i + 1);
 | 
			
		||||
        html += "</td> <td><a style='cursor:pointer' onclick='openclient(\"" + nodes.contractID + "\")'>";
 | 
			
		||||
        html += nodes.contractName;
 | 
			
		||||
        html += "</a></td> <td>";
 | 
			
		||||
        html += nodes.contractID;
 | 
			
		||||
        html += "</td> <td style='padding:2px 12px'>";
 | 
			
		||||
        html += "<button class='btn btn-outline-danger' onclick='stopMultiPointCP(\"" + nodes.contractID
 | 
			
		||||
            + "\")'>停止</button>";
 | 
			
		||||
        html += "</td> </tr>";
 | 
			
		||||
    }
 | 
			
		||||
    html += tableTail;
 | 
			
		||||
    $("#MPContractTabDiv").html(html);
 | 
			
		||||
    $("#MPContractTabDivTab").DataTable(
 | 
			
		||||
        {
 | 
			
		||||
            "language": dtLang,
 | 
			
		||||
            "rowCallback": function (row, data, displayNum, displayIndex,
 | 
			
		||||
                                     dataIndex) {
 | 
			
		||||
 | 
			
		||||
            },
 | 
			
		||||
            "headerCallback": function (thead, data, start, end, display) {
 | 
			
		||||
                $(thead).css("background", primaryColor);
 | 
			
		||||
                $(thead).css("color", "white");
 | 
			
		||||
                $(thead).children().css("background", primaryColor);
 | 
			
		||||
                $(thead).children().css("color", "white");
 | 
			
		||||
            },
 | 
			
		||||
            scrollCollapse: false,
 | 
			
		||||
            paging: true,
 | 
			
		||||
            pageLength: 10,
 | 
			
		||||
            order: [[0, 'desc']],
 | 
			
		||||
            "columnDefs": [
 | 
			
		||||
                {
 | 
			
		||||
                    "targets": 2,
 | 
			
		||||
                    "render": function (data, type, row, meta) {
 | 
			
		||||
                        if (data.length > 15)
 | 
			
		||||
                            return "<span title='" + data + "'>"
 | 
			
		||||
                                + data.substring(0, 15)
 | 
			
		||||
                                + "  ...</span>";
 | 
			
		||||
                        else
 | 
			
		||||
                            return data;
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                }]
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var openclient = function (contractID) {
 | 
			
		||||
    var path = document.location.origin;
 | 
			
		||||
    var url = path + "/client/bdwareclient.html?self=true&contract="
 | 
			
		||||
        + contractID + "&withNodeCenterWS=true";
 | 
			
		||||
    window.open(url);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
var stopMultiPointCP = function (contractID) {
 | 
			
		||||
    var arg = {};
 | 
			
		||||
    arg.action = "stopMultiPointContractProcess";
 | 
			
		||||
    arg.contractID = contractID;
 | 
			
		||||
    global.wssocket.send(JSON.stringify(arg));
 | 
			
		||||
};
 | 
			
		||||