Authored by FengRuwei

Merge branch 'master' of http://git.yoho.cn/ops/monitor-ui

# Conflicts:
#	monitor-ui-web/src/main/webapp/jsp/table.jsp
... ... @@ -8,6 +8,8 @@ public class HttpUriContants {
/*** 机组信息 ****/
public static final String HOST_GROUP_GETALL = "/hostGroup/getHostGroups";
public static final String HOST_ALL_GROUPS = "/hostGroup/getAllGroups";
/*** 机组信息 ****/
//类型信息
... ...
package com.ui.model.domain;
import lombok.Data;
/**
* Created by yoho on 2016/6/16.
*/
@Data
public class MObjectModel {
private int moId;
private String moName;
private String moHostIp;
private String moTypeName;
private String moStatus;
private int moHostId;
private int moTypeId;
private String moTags;
private String moUrl;
}
... ...
... ... @@ -8,6 +8,8 @@ import lombok.Data;
@Data
public class HostInfoReq extends PageRequest {
private int id;
private String alias;
private String hostIp;
... ...
package com.ui.model.req;
import lombok.Data;
/**
* Created by yoho on 2016/6/16.
*/
@Data
public class MObjectInfoReq extends PageRequest {
String typeIds = "0";
String hostIds = "0";
int isType = 1;
}
... ...
... ... @@ -36,5 +36,20 @@ public class HostGroupCtrl {
}
@RequestMapping("/getAllGroups")
@ResponseBody
public BaseResponse getAllGroups() {
try{
BaseResponse response=httpRestClient.defaultPost(HttpUriContants.HOST_ALL_GROUPS, null, BaseResponse.class);
return response;
}catch (Exception e){
log.error("getAllGroups error",e);
return null;
}
}
}
... ...
package com.ui.ctrl;
import com.alibaba.fastjson.JSON;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.req.HostInfoReq;
... ... @@ -30,7 +29,29 @@ public class HostInfoCtrl {
@ResponseBody
public BaseResponse getHostInfos(HostInfoReq req) throws Exception {
BaseResponse response=httpRestClient.defaultPost("/hostInfo/getHostInfos", req, BaseResponse.class);
System.out.println("*****************************"+ JSON.toJSON(response));
return response;
}
@RequestMapping("/saveHostInfo")
@ResponseBody
public BaseResponse saveHostInfo(HostInfoReq req) throws Exception {
BaseResponse response=httpRestClient.defaultPost("/hostInfo/saveHostInfo", req, BaseResponse.class);
return response;
}
@RequestMapping("/delHostInfo")
@ResponseBody
public BaseResponse<Integer> delHostInfo(int id ) throws Exception {
BaseResponse response=httpRestClient.defaultGet("/hostInfo/delHostInfo?id=" + id, BaseResponse.class);
return response;
}
@RequestMapping("/getHostInfoById")
@ResponseBody
public BaseResponse getHostInfoById(int id) throws Exception {
BaseResponse response=httpRestClient.defaultGet("/hostInfo/getHostInfoById?id="+id, BaseResponse.class);
return response;
}
... ...
package com.ui.ctrl;
import com.ui.http.HttpRestClient;
import com.ui.model.BaseResponse;
import com.ui.model.req.MObjectInfoReq;
import com.ui.model.req.PageRequest;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* Created by yoho on 2016/6/16.
*/
@RestController
@RequestMapping(value = "/mobject")
public class MObjectInfoCtrl {
@Autowired
HttpRestClient httpRestClient;
@RequestMapping(value = "/query", method = RequestMethod.POST)
public BaseResponse queryAllMObjectInfo(MObjectInfoReq request) {
BaseResponse response = httpRestClient.defaultPost("/mobject/query", request, BaseResponse.class);
return response;
}
}
... ...
... ... @@ -60,7 +60,7 @@
</appender>
<!-- root级别 DEBUG -->
<root level="DEBUG">
<root level="INFO">
<!-- 控制台输出 -->
<appender-ref ref="STDOUT" />
<!-- 文件输出 -->
... ...
... ... @@ -48,7 +48,7 @@
console.log(state)
console.log(data);
var jsonData = JSON.parse(data);
treeData.removeAll(); //重置
treeData=[]; //重置
$.each(jsonData, function (n, val) {
var treeNode = {};
treeNode.id = "" + val.typeId;
... ...
... ... @@ -27,11 +27,13 @@
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.pagination.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.table.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.dialog.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.panel.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.alerts.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.accordion.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.breadcrumb.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.validate.js" charset="UTF-8" type="text/javascript"></script>
<script src="<%=basePath %>js/bootstrap-plugin/bootstrap.form.js" charset="UTF-8" type="text/javascript"></script>
<link rel="stylesheet" href="./js/jstree/themes/default/style.min.css"/>
<script src="./js/jstree/jstree.min.js"></script>
<script>
... ... @@ -51,11 +53,10 @@
<div id="sidebar">
<ul>
<li class=""><a href="#"><i class="icon icon-home"></i> <span>Dashboard</span></a></li>
<li class="" id="jsptablejsp" onclick="clickMenuToPage('/jsp/table.jsp')"><a href="#" ><i class="icon icon-th"></i> <span>Tables</span></a></li>
<li class="" id="jsptablejsp" onclick="clickMenuToPage('/jsp/table.jsp')"><a href="#" ><i class="icon icon-th"></i> <span>test</span></a></li>
<li class="" id="jspmobjectmobjectInfojsp" onclick="clickMenuToPage('/jsp/mobject/mobjectInfo.jsp')"><a href="#" ><i class="icon icon-th"></i> <span>Tables</span></a></li>
<li class="" id="jsphosthostGroupListjsp" onclick="clickMenuToPage('jsp/host/hostGroupList.jsp')" ><a href="#" ><i class="icon icon-th"></i> <span>主机组</span></a></li>
<li class="" id="jsphosthostInfoListjsp" onclick="clickMenuToPage('jsp/host/hostInfoList.jsp')" ><a href="#" ><i class="icon icon-th"></i> <span>主机信息</span></a></li>
</ul>
</div>
<!-- 右侧具体内容 -->
... ...
<%@page language="java" contentType="text/html;charset=utf-8" %>
<form method="post" class="form-horizontal" id="smsTemplateForm" name="smsTemplateForm">
<form method="post" class="form-horizontal" id="hostInfoForm" name="hostInfoForm">
<div>
<label> <span style="color:red">*</span>主机别名:</label>
<input type="text" class="form-control" id="alias" name="alias" placeholder="输入主机别名" maxlength="30" size="40"/>
<div class="form-group" >
<label class="col-sm-2 control-label"> <span style="color:red">*</span>主机别名:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="alias" name="alias" placeholder="输入主机别名" maxlength="30" size="40"/>
</div>
</div>
<div>
<label> <span style="color:red">*</span>主机IP:label>
<input type="text" class="form-control" id="hostIP" name="hostIP" placeholder="输入IP地址" maxlength="30" size="40"/>
<div class="form-group" >
<label class="col-sm-2 control-label"> <span style="color:red">*</span>主机IP:</label>
<div class="col-sm-8">
<input type="text" class="form-control" id="hostIp" name="hostIp" placeholder="输入IP地址" maxlength="30" size="40"/>
</div>
</div>
<div>
<label> <span style="color:red">*</span>云类型:</label>
<input type="text" class="form-control" id="smsTemplateTitle" name="smsTemplateTitle" placeholder="最多30个汉字" maxlength="30" size="40"/>
<div class="form-group" >
<label class="col-sm-2 control-label"> <span style="color:red">*</span>云类型:</label>
<div class="col-sm-8">
<select id="cloudType" name="cloudType" class="form-control">
<option value="1">AWS</option>
<option value="2">腾讯云</option>
<option value="3">其他</option>
</select>
</div>
</div>
<br/>
<div class="form-group">
<input type="button" class="btn btn-primary" style="margin-left:100px" id="saveSmsTemplateBtn" value="保存" />
<div class="form-group" >
<label class="col-sm-2 control-label"> <span style="color:red">*</span>主机组:</label>
<div class="col-sm-8">
<select id="groupId" name="groupId" class="form-control">
<option value="1">AWS</option>
<option value="2">腾讯云</option>
<option value="3">其他</option>
</select>
</div>
</div>
<div class="form-group" >
<label class="col-sm-2 control-label"> <span style="color:red">*</span>安装软件:</label>
<div class="col-sm-8">
<input type="checkbox" name="appName" value="JAVA"> JAVA <input type="checkbox" name="appName" value="Redis" > Redis
</div>
</div>
</form>
<script>
var TextCount = (function () {
var _bind = function (that) {
that.input.on('keyup', function () {
that.render();
});
}
var _getNum = function (that) {
return that.input.val().length;
}
var TextCountFun = function (config) {
this.id = config.id;
}
TextCountFun.prototype.init = function () {
this.input = $(this.id);
this.render();
_bind(this);
};
TextCountFun.prototype.render = function () {
var num = _getNum(this);
if ($('#_test_count').length == 0) {
$('#countDiv').append('<span id="_test_count"></span>');
};
if (num < 71) {
$('#_test_count').html(num + '/990');
} else if (num <= 990) {
var message = "共" + num + "字符,含短信签名,将被做" + Math.ceil(num / 70) + "条短信计价。每条短信最多70个字符";
$('#_test_count').html(num + '/990' + '&nbsp;&nbsp;<span style="color: red">' + message + '</span>');
} else {
$('#_test_count').html('990/990');
}
};
return TextCountFun;
})();
$(function () {
$("#smsTemplateForm #smsTemplateTitle").validate({
required: true,
validateOnBlur : false
});
$("form #smsTemplateContent").validate({
required: true,
validateOnBlur : false
});
if(paramObj.hoseInfoId > 0){
//保存
$("#saveSmsTemplateBtn").click(function(){
var smsTemplateId = $("#smsTemplateId").val();
var btn = $(this);
btn.prop("disabled", true);
$("#smsTemplateForm").form("submit", {
submitUrl : contextPath + "/SmsTemplateController/saveSmsTemplate.do",
submitData : {
smsTemplateId : paramObj.smsTemplateId
//加载form
$("#hostInfoForm").form({
loadUrl : contextPath + "/hostInfo/getHostInfoById.do",
loadParams : {
id : paramObj.hoseInfoId
},
loadFilter : function(data) {
return defaultLoadFilter(data);
},
onBeforeSubmit : function() {
if (!$("#smsTemplateForm").form("validate")) {
btn.removeAttr("disabled");
onBeforeLoad : function(loadParams) {
if (loadParams.hoseInfoId == 0) {
return false;
}
},
onLoadSuccess : function(data) {
success : function(data) {
btn.removeAttr("disabled");
if (!data || data.code != 200) {
$.messageAlert("错误", data.message);
return;
}else{
$("#body").load(contextPath + "/html/chatChannel/smsTemplate/smsTemplateList.html")
}
}
});
});
}
//加载form
$("#smsTemplateForm").form({
loadUrl : contextPath + "/SmsTemplateController/getTemplateById.do",
loadParams : {
smsTemplateId : paramObj.smsTemplateId
$("#groupId").select({
firstText : "请选择分组类型",
firstValue : 0,
className : "form-control",
url : contextPath + "/NoFilterController.do?method=getEnumForSelect",
queryParams : {
className : "GroupTypeEnum"
},
loadFilter : function(data) {
return defaultLoadFilter(data);
},
onBeforeLoad : function(loadParams) {
if (loadParams.smsTemplateId == 0) {
return false;
}
},
onLoadSuccess : function(data) {
new TextCount({id: '#smsTemplateContent'}).init();
}
value : 0
});
new TextCount({id: '#smsTemplateContent'}).init();
});
</script>
\ No newline at end of file
... ...
... ... @@ -2,7 +2,7 @@
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><i
class="icon-home"></i> Home</a> <a href="#" class="current">Tables</a>
class="icon-home"></i> 主机组</a> <a href="#" class="current">主机信息</a>
</div>
<div class="container-fluid">
... ... @@ -26,17 +26,21 @@
<input type="text" id="hostIp" name="hostIp" class="form-control" placeholder=""/>
</div>
<div class="input-group" style="float: left;">
<span class="input-group-addon">安装软件:</span>
<input type="text" id="tags" name="tags" class="form-control" placeholder=""/>
</div>
<div class="input-group" style="float: left;">
<span class="input-group-addon">云类型:</span>
<select id="cloudType" name="cloudType" class="form-control">
<option value="">全部</option>
<option value="0">全部</option>
<option value="1">AWS</option>
<option value="2">腾讯云</option>
<option value="2">其他</option>
<option value="3">其他</option>
</select>
</div>
<button id="searchHostInfoBtn" class="btn btn-default">搜索</button>
</div>
<button id="addHostInfoBtn" class="btn btn-primary" style="margin-top: 12px;margin-left: 900px;">新增</button>
<button id="addHostInfoBtn" class="btn btn-primary" style="margin-top: 12px;margin-left: 100px;">新增</button>
</div>
</div>
<div id="hostInfoTable">
... ... @@ -90,9 +94,77 @@
}
},
width : "12%"
}, {
title : "安装软件",
field : "tags",
formatter : function(value, rowData, rowIndex) {
if(value != null && value != ""){
return value.substr(0,value.length-1);
}
},
width : "12%"
}, {
title : "操作",
field : "op",
formatter : function(value, rowData, rowIndex) {
var div = $("<div>");
var editBtn = $("<button>").addClass("btn btn-xs btn-success").html("修改").appendTo(div);
editBtn.click(function() {
editHostInfo(rowData.id);
});
div.append("&nbsp;");
var delBtn = $("<button>").addClass("btn btn-xs btn-danger").html("删除").appendTo(div);
delBtn.click(function() {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title : "你确定删除吗",
backdrop : "static",
content : "你确定要删除该主机信息吗?",
buttons : [{
text : "否",
className : "btn-danger",
onclick : function() {
$(dialog).dialog("hide");
}
}, {
text : "是",
className : "btn-success",
onclick : function() {
$(dialog).dialog("hide");
$.ajax({
url : contextPath +"/hostInfo/delHostInfo.do",
type : 'post',
async : false,
data : {
id : rowData.id
},
dataType : "json",
success : function(data) {
if (!data || data.code != 200) {
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
title : "删除失败",
backdrop : "static",
content : data.message,
buttons : [{
text : "确定",
className : "btn-danger",
onclick : function() {
$(dialog).dialog("hide");
}
}]
});
}
$("#smsListTable").table("load");
}
});
}
}]
});
});
return div;
},
width : "15%"
}]
});
... ... @@ -107,17 +179,18 @@
var alias = $("#alias").val();
var hostIp = $("#hostIp").val();
var cloudType = $("#cloudType").val();
var tags=$("#tags").val();
$("#hostInfoTable").table("load", {
'alias': alias,
'hostIp': hostIp,
'cloudType': cloudType
'cloudType': cloudType,
'tags':tags
});
});
//打开新增或修改页面
function editHostInfo(hoseInfoId) {
alert(1);
paramObj.hoseInfoId = hoseInfoId;
var dialog = $("<div>").appendTo($("body"));
dialog.dialog({
... ... @@ -137,10 +210,15 @@
onclick : function() {
var btn = $(this);
this.prop("disabled", "disabled");
$("#smsTmplateEditForm").form("submit", {
var tags="";
$("input[name='appName']:checked").each(function(){
tags += $(this).attr('value')+',';
});
$("#hostInfoForm").form("submit", {
submitUrl : contextPath + "/hostInfo/saveHostInfo.do",
submitData : {
smTemplateId : hoseInfoId
id : hoseInfoId,
tags:tags
},
onBeforeSubmit : function() {
if (!$(this).form("validate")) {
... ... @@ -151,13 +229,13 @@
success : function(data) {
if (!data || data.code != 200) {
btn.removeAttr("disabled");
$("#smsTmplateEditForm #messageAlert").alerts({
$("#hostInfoForm #messageAlert").alerts({
content : data.message,
type : "danger"
});
return;
}
$("#smsListTable").table("load");
$("#hostInfoTable").table("load");
$(dialog).dialog("hide");
}
});
... ...
<%@page language="java" contentType="text/html;charset=utf-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<div id="breadcrumb">
<a href="#" title="Go to Home" class="tip-bottom"><i
class="icon-home"></i> Home</a> <a href="#" class="current">Tables</a>
</div>
<div class="container-fluid">
<div class="widget-box">
<div class="widget-title">
<h5>Dynamic table</h5>
</div>
<!-- 树 -->
<div style="margin-top: 45px; float: left;margin-top: 54px;border: dashed;width: 300px;color: #D3D3D3;height: 580px;">
<div class="widget-title">
<h5>Tree Title</h5>
</div>
<ul class="ui-widget ui-helper-clearfix" id="icons" style="float: left;margin-left: 165px;">
<li title=".ui-icon-plusthick" class="ui-state-default ui-corner-all" onclick="deletebtn()"><span
class="ui-icon ui-icon-plusthick"></span></li>
</ul>
<ul class="ui-widget ui-helper-clearfix" id="icons" style="margin-right: 12px;">
<li title=".ui-icon-minusthick" class="ui-state-default ui-corner-all" onclick="editbtn()"><span
class="ui-icon ui-icon-minusthick"></span></li>
</ul>
<div id="continer"></div>
</div>
<!-- 列表 -->
<div class="widget-content nopadding" style="margin-left: 300px;">
<div class="widget-title" style="height: 53px;">
<div>
<div class="form-inline" role="form" id="inBoxQueryDiv"
style=" margin-top: 12px;margin-left: 25px;float: left;">
<div class="input-group" style="float: left;">
<span class="input-group-addon">IP:</span>
<input type="text" id="" class="form-control" placeholder=""/>
</div>
<div class="input-group" style="float: left;">
<span class="input-group-addon">IP:</span>
<input type="text" id="" class="form-control" placeholder=""/>
</div>
<button id="submit" class="btn btn-default">搜索</button>
</div>
<button id="addBtn" class="btn btn-primary" style="margin-top: 12px;margin-left: 500px;" data-target="#myModal" data-toggle="modal">新增</button>
</div>
</div>
<div id="table"></div>
</div>
</div>
</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel">新增</h4>
</div>
<div class="modal-body">
<div class="row-fluid">
<div class="span12">
<div class="widget-content nopadding">
<form action="/mobject/add" method="post" class="form-horizontal">
<div class="control-group">
<label class="control-label" style="float: left;">名称</label>
<div class="controls">
<input type="text" />
</div>
</div>
<div class="control-group">
<label class="control-label" style="float: left;">所属主机</label>
<div class="controls">
<input type="text" placeholder="请填写主机IP" />
</div>
</div>
<div class="control-group">
<label class="control-label" style="float: left;">类型</label>
<div class="controls">
<input type="text" value="" readonly="readonly" />
</div>
</div>
<div class="control-group">
<label class="control-label" style="float: left;">标签</label>
<div class="controls">
<input type="text" />
</div>
</div>
<div class="control-group">
<label class="control-label" style="float: left;">域名</label>
<div class="controls">
<input type="text" />
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭
</button>
<button type="submit" class="btn btn-primary" value="Validate">提交</button>
</div>
</div>
<!-- /.modal-content -->
</div>
<!-- /.modal -->
</div>
</div>
<script>
$(function () {
$("#table").table({
url: contextPath + "/mobject/query",
striped: true,
panelClass: "panel-success",
pagination: true,
pageSize: 10,
loadFilter: function (data) {
return defaultLoadFilter(data);
},
columns: [{
title: "名称",
field: "moName"
}, {
title: "所属主机",
field: "moHostIp"
}, {
title: "类型",
field: "moTypeName"
}, {
title: "状态",
field: "moStatus"
}, {
title: "标签",
field: "moTags"
}, {
title: "操作",
formatter: function (value, rowData, rowIndex) {
var div = $("<div>");
var editBtn = $("<button data-target='#myModal' data-toggle='modal'>").addClass("btn btn-inverse btn-mini").html("修改").appendTo(div);
//修改
editBtn.click(function () {
});
div.append("&nbsp;");
var delBtn = $("<button>").addClass("btn btn-danger btn-mini").html("删除").appendTo(div);
delBtn.click(function () {
});
return div;
}
}],
/* data: data*/
});
});
//模拟数据
var jsonData = [
{"id": "1", "name": "父节点1", "url": "www.baidu.com", "pid": "0"},
{"id": "4", "name": "父节点11", "url": "", "pid": "1"},
{"id": "14", "name": "父节点112", "url": "", "pid": "4"},
{"id": "5", "name": "父节点12", "url": "", "pid": "1"},
{"id": "6", "name": "父节点13", "url": "", "pid": "1"},
{"id": "2", "name": "父节点4", "url": "", "pid": "0"},
{"id": "7", "name": "父节点41", "url": "", "pid": "2"},
{"id": "8", "name": "父节点42", "url": "", "pid": "2"},
{"id": "9", "name": "父节点43", "url": "", "pid": "2"},
{"id": "3", "name": "父节点5", "url": "", "pid": "0"},
{"id": "10", "name": "父节点51", "url": "", "pid": "3"},
{"id": "13", "name": "父节点111", "url": "", "pid": "4"},
{"id": "11", "name": "父节点52", "url": "", "pid": "3"},
{"id": "12", "name": "父节点53", "url": "", "pid": "3"}
];
//主方法,运用递归实现
function createTree(jsons, pid) {
if (jsons != null) {
var ul = '<ul class="" style="width: 120px;" >';
for (var i = 0; i < jsons.length; i++) {
if (jsons[i].pid == pid) {
ul += '<input type="checkbox" name="checkBox" value=' + jsons[i].id + ' style="float: left;margin-top: 6px;width:10px;height:10px;"><li class="tree" value=' + jsons[i].id + '><a href="#">' + jsons[i].name + "</a></li>";
ul += createTree(jsons, jsons[i].id);
}
}
ul += "</ul>";
}
return ul;
}
$(function () {
var ul = createTree(jsonData, 0);
$("#continer").append(ul);
//控制菜单的隐藏显示
$("ul[class] li").each(function () {
$(this).click(function () {
$(this).next().toggle();
});
});
});
var dom = document.getElementById("icons");
var str = dom.getAttribute("style");
str = str.replace(/height\b\s*\:\s*\d+\px;?/ig, "");
dom.setAttribute("style", str);
function deletebtn() {
alert(1);
}
function editbtn() {
alert(2);
}
</script>
<script src="js/jquery.min.js"></script>
<script src="js/jquery.ui.custom.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/jquery.uniform.js"></script>
<script src="js/select2.min.js"></script>
<script src="js/jquery.validate.js"></script>
<script src="js/unicorn.js"></script>
<script src="js/unicorn.form_validation.js"></script>
\ No newline at end of file
... ...