修改 js 的命名风格

This commit is contained in:
virusdefender
2015-08-15 13:54:30 +08:00
parent d031f14a68
commit 025335b40a
50 changed files with 1403 additions and 896 deletions

View File

@@ -24,17 +24,23 @@ define("admin", ["jquery", "avalon"], function ($, avalon) {
var vm = avalon.define({
$id: "admin",
template_url: "template/" + hash + ".html",
group_id: -1,
groupId: -1,
problemId: -1,
hide_loading: function () {
$("#loading-gif").hide();
}
});
vm.$watch("showGroupDetailPage", function(group_id){
vm.group_id = group_id;
vm.$watch("showGroupDetailPage", function(groupId){
vm.groupId = groupId;
vm.template_url = "template/group/group_detail.html";
});
vm.$watch("showEditProblemPage", function(problemId){
vm.problemId = problemId;
vm.template_url = "template/problem/edit_problem.html";
});
avalon.scan();
li_active("#li-" + hash.replace("/", "-"));

View File

@@ -1,171 +1,166 @@
require(["jquery", "avalon", "csrf", "bs_alert", "editor", "validation"], function ($, avalon, csrfHeader, bs_alert, editor) {
require(["jquery", "avalon", "csrfToken", "bsAlert", "editor", "formValidation"],
function ($, avalon, csrfTokenHeader, bsAlert, editor) {
avalon.vmodels.announcement = null;
// avalon:定义模式 announcement
avalon.ready(function () {
var announcementEditor = editor("#editor"); //创建新建公告的内容编辑器
var editAnnouncementEditor = editor("#editAnnouncementEditor");
avalon.ready(function () {
avalon.vmodels.announcement = null;
var vm = avalon.define({
$id: "announcement",
//通用变量
announcement: [], // 公告列表数据项
previous_page: 0, // 之前的页数
next_page: 0, // 之后的页数
page: 1, // 当前页数
isEditing: 0, // 正在编辑的公告的ID 为零说明未在编辑
page_count: 1, // 总页数
visableOnly: false, //仅显示可见公告
// 编辑
announcementVisible: 0,
getState: function (el) { //获取公告当前状态,显示
if (el.visible)
return "可见";
else
return "隐藏";
},
getNext: function () {
if (!vm.next_page)
return;
getPageData(vm.page + 1);
},
getPrevious: function () {
if (!vm.previous_page)
return;
getPageData(vm.page - 1);
},
getBtnClass: function (btn) { //上一页/下一页按钮启用禁用逻辑
if (btn) {
return vm.next_page ? "btn btn-primary" : "btn btn-primary disabled";
}
else {
return vm.previous_page ? "btn btn-primary" : "btn btn-primary disabled";
}
var createAnnouncementEditor = editor("#create-announcement-editor");
var editAnnouncementEditor = editor("#edit-announcement-editor");
},
enEdit: function (el) { //点击编辑按钮的事件,显示/隐藏编辑区
$("#newTitle").val(el.title);
editAnnouncementEditor.setValue(el.content);
vm.announcementVisible = el.visible;
if (vm.isEditing == el.id)
vm.isEditing = 0;
else
vm.isEditing = el.id;
editAnnouncementEditor.focus();
},
disEdit: function () { //收起编辑框
vm.isEditing = 0;
},
submitChange: function () { // 处理编辑公告提交事件,顺便验证字段为空
var title = $("#newTitle").val(), content = editAnnouncementEditor.getValue();
if (title != "") {
if (content != "") {
$.ajax({ //发送修改公告请求
beforeSend: csrfHeader,
var vm = avalon.define({
$id: "announcement",
//通用变量
announcementList: [], // 公告列表数据项
previousPage: 0, // 之前的页数
nextPage: 0, // 之后的页数
page: 1, // 当前页数
editingAnnouncementId: 0, // 正在编辑的公告的ID 为零说明未在编辑
totalPage: 1, // 总页数
showVisibleOnly: false, //仅显示可见公告
// 编辑
announcementVisible: 0,
getState: function (el) { //获取公告当前状态,显示
if (el.visible)
return "可见";
else
return "隐藏";
},
getNext: function () {
if (!vm.nextPage)
return;
getPageData(vm.page + 1);
},
getPrevious: function () {
if (!vm.previousPage)
return;
getPageData(vm.page - 1);
},
getBtnClass: function (btnType) {
if (btnType == "next") {
return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled";
}
else {
return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled";
}
},
editAnnouncement: function (announcement) {
$("#newTitle").val(announcement.title);
editAnnouncementEditor.setValue(announcement.content);
vm.announcementVisible = announcement.visible;
if (vm.editingAnnouncementId == announcement.id)
vm.editingAnnouncementId = 0;
else
vm.editingAnnouncementId = announcement.id;
editAnnouncementEditor.focus();
},
cancelEdit: function () {
vm.editingAnnouncementId = 0;
},
submitChange: function () {
var title = $("#newTitle").val();
var content = editAnnouncementEditor.getValue();
if (content && title) {
$.ajax({
beforeSend: csrfTokenHeader,
url: "/api/admin/announcement/",
dataType: "json",
method: "put",
data: {
id: vm.isEditing,
id: vm.editingAnnouncementId,
title: title,
content: content,
visible: vm.announcementVisible
},
success: function (data) {
if (!data.code) {
bs_alert("修改成功");
vm.isEditing = 0;
bsAlert("修改成功");
vm.editingAnnouncementId = 0;
getPageData(1);
}
else {
bs_alert(data.data);
bsAlert(data.data);
}
}
});
}
else
bs_alert("公告内容不得为空");
}
else
bs_alert("公告标题不能为空");
}
});
vm.$watch("visableOnly", function () {
getPageData(1);
});
avalon.scan();
getPageData(1); //公告列表初始化
//Ajax get数据
function getPageData(page) {
var visible = '';
if (vm.visableOnly == true)
visible = "&visible=true";
$.ajax({
beforeSend: csrfHeader,
url: "/api/announcements/?paging=true&page=" + page + "&page_size=10" + visible,
dataType: "json",
method: "get",
success: function (data) {
if (!data.code) {
vm.announcement = data.data.results;
vm.page_count = data.data.total_page;
vm.previous_page = data.data.previous_page;
vm.next_page = data.data.next_page;
vm.page = page;
}
else {
bs_alert(data.data);
bsAlert("标题和公告内容不得为空");
}
}
});
}
vm.$watch("showVisibleOnly", function () {
getPageData(1);
});
//新建公告表单验证与数据提交
$("#announcement-form")
.formValidation({
framework: "bootstrap",
fields: {
title: {
validators: {
notEmpty: {
message: "请填写公告标题"
getPageData(1);
function getPageData(page) {
var url = "/api/announcements/?paging=true&page=" + page + "&page_size=10";
if (vm.showVisibleOnly)
url += "&visible=true";
$.ajax({
url: url,
dataType: "json",
method: "get",
success: function (data) {
if (!data.code) {
vm.announcementList = data.data.results;
vm.totalPage = data.data.total_page;
vm.previousPage = data.data.previous_page;
vm.nextPage = data.data.next_page;
vm.page = page;
}
else {
bs_alert(data.data);
}
}
});
}
//新建公告表单验证与数据提交
$("#announcement-form")
.formValidation({
framework: "bootstrap",
fields: {
title: {
validators: {
notEmpty: {
message: "请填写公告标题"
}
}
}
}
}
}
).on('success.form.fv', function (e) {
e.preventDefault();
var title = $("#title").val();
var content = announcementEditor.getValue();
if (content == "") {
bs_alert("请填写公告内容");
return;
}
$.ajax({
beforeSend: csrfHeader,
url: "/api/admin/announcement/",
data: {title: title, content: content},
dataType: "json",
method: "post",
success: function (data) {
if (!data.code) {
bs_alert("提交成功!");
$("#title").val("");
announcementEditor.setValue("");
getPageData(1);
} else {
bs_alert(data.data);
}
).on('success.form.fv', function (e) {
e.preventDefault();
var title = $("#title").val();
var content = createAnnouncementEditor.getValue();
if (content == "") {
bsAlert("请填写公告内容");
return;
}
})
});
});
});
$.ajax({
beforeSend: csrfTokenHeader,
url: "/api/admin/announcement/",
data: {title: title, content: content},
dataType: "json",
method: "post",
success: function (data) {
if (!data.code) {
bsAlert("提交成功!");
$("#title").val("");
createAnnouncementEditor.setValue("");
getPageData(1);
} else {
bs_alert(data.data);
}
}
})
});
});
avalon.scan();
});

View File

@@ -1,73 +1,74 @@
require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, avalon, csrfHeader, bs_alert) {
avalon.vmodels.group = null;
require(["jquery", "avalon", "csrfToken", "bsAlert", "formValidation"], function ($, avalon, csrfTokenHeader, bsAlert) {
// avalon:定义模式 group_list
avalon.ready(function () {
avalon.vmodels.group = null;
var vm = avalon.define({
$id: "group",
//通用变量
group_list: [], // 用户列表数据项
previous_page: 0, // 之前的页数
next_page: 0, // 之后的页数
groupList: [], // 用户列表数据项
previousPage: 0, // 之前的页数
nextPage: 0, // 之后的页数
page: 1, // 当前页数
page_count: 1, // 总页数
totalPage: 1, // 总页数
keyword: "",
getNext: function () {
if (!vm.next_page)
if (!vm.nextPage)
return;
getPageData(vm.page + 1);
},
getPrevious: function () {
if (!vm.previous_page)
if (!vm.previousPage)
return;
getPageData(vm.page - 1);
},
getBtnClass: function (btn) { //上一页/下一页按钮启用禁用逻辑
if (btn) {
return vm.next_page ? "btn btn-primary" : "btn btn-primary disabled";
getBtnClass: function (btnType) {
if (btnType == "next") {
return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled";
}
else {
return vm.previous_page ? "btn btn-primary" : "btn btn-primary disabled";
return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled";
}
},
getPage: function (page_index) {
getPageData(page_index);
search: function(){
getPageData(1);
},
getGroupSettingString: function(setting){
getGroupSettingString: function (setting) {
return {0: "允许任何人加入", 1: "提交请求后管理员审核", 2: "不允许任何人加入"}[setting]
},
showGroupDetailPage: function(group_id){
vm.$fire("up!showGroupDetailPage", group_id);
showGroupDetailPage: function (groupId) {
vm.$fire("up!showGroupDetailPage", groupId);
}
});
getPageData(1);
avalon.scan();
getPageData(1); //用户列表初始化
//Ajax get数据
function getPageData(page) {
var url = "/api/admin/group/?paging=true&page=" + page + "&page_size=10";
if (vm.keyword != "")
if (vm.keyword)
url += "&keyword=" + vm.keyword;
$.ajax({
beforeSend: csrfHeader,
url: url,
dataType: "json",
method: "get",
success: function (data) {
if (!data.code) {
vm.group_list = data.data.results;
vm.page_count = data.data.total_page;
vm.previous_page = data.data.previous_page;
vm.next_page = data.data.next_page;
vm.groupList = data.data.results;
vm.totalPage = data.data.total_page;
vm.previousPage = data.data.previous_page;
vm.nextPage = data.data.next_page;
vm.page = page;
}
else {
bs_alert(data.data);
bsAlert(data.data);
}
}
});
}
});
avalon.scan();
});

View File

@@ -1,51 +1,50 @@
require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, avalon, csrfHeader, bs_alert) {
avalon.vmodels.group_detail = null;
require(["jquery", "avalon", "csrfToken", "bsAlert", "formValidation"], function ($, avalon, csrfTokenHeader, bsAlert) {
// avalon:定义模式 group_list
avalon.ready(function () {
avalon.vmodels.groupDetail = null;
var vm = avalon.define({
$id: "group_detail",
$id: "groupDetail",
//通用变量
member_list: [],
previous_page: 0,
next_page: 0,
memberList: [],
previousPage: 0,
nextPage: 0,
page: 1,
page_count: 1,
totalPage: 1,
name: "",
description: "",
checked_setting: "0",
checkedSetting: "0",
getNext: function () {
if (!vm.next_page)
if (!vm.nextPage)
return;
getPageData(vm.page + 1);
},
getPrevious: function () {
if (!vm.previous_page)
if (!vm.previousPage)
return;
getPageData(vm.page - 1);
},
getBtnClass: function (btn) {
if (btn) {
return vm.next_page ? "btn btn-primary" : "btn btn-primary disabled";
if (btn == "next") {
return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled";
}
else {
return vm.previous_page ? "btn btn-primary" : "btn btn-primary disabled";
return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled";
}
},
getPage: function (page_index) {
getPageData(page_index);
},
removeMember: function (relation) {
$.ajax({
beforeSend: csrfHeader,
beforeSend: csrfTokenHeader,
url: "/api/admin/group_member/",
method: "put",
data: JSON.stringify({group_id: relation.group, members: [relation.user.id]}),
contentType: "application/json",
success: function (data) {
vm.member_list.remove(relation);
bs_alert(data.data);
vm.memberList.remove(relation);
bsAlert(data.data);
}
})
}
@@ -55,90 +54,90 @@ require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, ava
getPageData(1);
function getPageData(page) {
var url = "/api/admin/group_member/?paging=true&page=" + page +
"&page_size=10&group_id=" + avalon.vmodels.admin.group_id;
"&page_size=10&group_id=" + avalon.vmodels.admin.groupId;
$.ajax({
url: url,
dataType: "json",
method: "get",
success: function (data) {
if (!data.code) {
vm.member_list = data.data.results;
vm.page_count = data.data.total_page;
vm.previous_page = data.data.previous_page;
vm.next_page = data.data.next_page;
vm.memberList = data.data.results;
vm.totalPage = data.data.total_page;
vm.previousPage = data.data.previous_page;
vm.nextPage = data.data.next_page;
vm.page = page;
}
else {
bs_alert(data.data);
bsAlert(data.data);
}
}
});
}
$.ajax({
url: "/api/admin/group/?group_id=" + avalon.vmodels.admin.group_id,
url: "/api/admin/group/?group_id=" + avalon.vmodels.admin.groupId,
method: "get",
dataType: "json",
success: function (data) {
if (!data.code) {
vm.name = data.data.name;
vm.description = data.data.description;
vm.checked_setting = data.data.join_group_setting.toString();
vm.checkedSetting = data.data.join_group_setting.toString();
}
else {
bs_alert(data.data);
bsAlert(data.data);
}
}
})
});
$("#edit_group_form")
.formValidation({
framework: "bootstrap",
fields: {
name: {
validators: {
notEmpty: {
message: "请填写小组名"
},
stringLength: {
max: 20,
message: '小组名长度必须在20位之内'
}
.formValidation({
framework: "bootstrap",
fields: {
name: {
validators: {
notEmpty: {
message: "请填写小组名"
},
stringLength: {
max: 20,
message: '小组名长度必须在20位之内'
}
},
description: {
validators: {
notEmpty: {
message: "请填写描述"
},
stringLength: {
max: 300,
message: '描述长度必须在300位之内'
}
}
},
description: {
validators: {
notEmpty: {
message: "请填写描述"
},
stringLength: {
max: 300,
message: '描述长度必须在300位之内'
}
}
}
}
).on('success.form.fv', function (e) {
}
).on('success.form.fv', function (e) {
e.preventDefault();
var data = {
group_id: avalon.vmodels.admin.group_id,
group_id: avalon.vmodels.admin.groupId,
name: vm.name,
description: vm.description,
join_group_setting: vm.checked_setting
join_group_setting: vm.checkedSetting
};
$.ajax({
beforeSend: csrfHeader,
beforeSend: csrfTokenHeader,
url: "/api/admin/group/",
method: "put",
data: data,
dataType: "json",
success: function (data) {
if (!data.code) {
bs_alert("修改成功");
bsAlert("修改成功");
}
else {
bs_alert(data.data);
bsAlert(data.data);
}
}
})

View File

@@ -1,46 +1,47 @@
require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, avalon, csrfHeader, bs_alert) {
avalon.vmodels.request_list = null;
require(["jquery", "avalon", "csrfToken", "bsAlert", "formValidation"], function ($, avalon, csrfTokenHeader, bsAlert) {
// avalon:定义模式 group_list
avalon.ready(function () {
avalon.vmodels.requestList = null;
var vm = avalon.define({
$id: "request_list",
$id: "requestList",
//通用变量
request_list: [], // 列表数据项
previous_page: 0, // 之前的页数
next_page: 0, // 之后的页数
requestList: [], // 列表数据项
previousPage: 0, // 之前的页数
nextPage: 0, // 之后的页数
page: 1, // 当前页数
page_count: 1, // 总页数
totalPage: 1, // 总页数
getNext: function () {
if (!vm.next_page)
if (!vm.nextPage)
return;
getPageData(vm.page + 1);
},
getPrevious: function () {
if (!vm.previous_page)
if (!vm.previousPage)
return;
getPageData(vm.page - 1);
},
getBtnClass: function (btn) { //上一页/下一页按钮启用禁用逻辑
if (btn) {
return vm.next_page ? "btn btn-primary" : "btn btn-primary disabled";
if (btn == "next") {
return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled";
}
else {
return vm.previous_page ? "btn btn-primary" : "btn btn-primary disabled";
return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled";
}
},
getPage: function (page_index) {
getPageData(page_index);
},
processRequest: function(request_id, status){
processRequest: function(request, status){
$.ajax({
beforeSend: csrfHeader,
beforeSend: csrfTokenHeader,
url: "/api/admin/join_group_request/",
method: "put",
data: {request_id: request_id, status: status},
data: {request_id: request.id, status: status},
success: function(data){
bs_alert(data.data);
vm.requestList.remove(request);
bsAlert(data.data);
}
})
}
@@ -52,20 +53,20 @@ require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, ava
function getPageData(page) {
var url = "/api/admin/join_group_request/?paging=true&page=" + page + "&page_size=10";
$.ajax({
beforeSend: csrfHeader,
beforeSend: csrfTokenHeader,
url: url,
dataType: "json",
method: "get",
success: function (data) {
if (!data.code) {
vm.request_list = data.data.results;
vm.page_count = data.data.total_page;
vm.previous_page = data.data.previous_page;
vm.next_page = data.data.next_page;
vm.requestList = data.data.results;
vm.totalPage = data.data.total_page;
vm.previousPage = data.data.previous_page;
vm.nextPage = data.data.next_page;
vm.page = page;
}
else {
bs_alert(data.data);
bsAlert(data.data);
}
}
});
@@ -134,11 +135,11 @@ require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, ava
method: "put",
success: function (data) {
if (!data.code) {
bs_alert("提交成功!");
bsAlert("提交成功!");
getPageData(1);
$("#password").val("");
} else {
bs_alert(data.data);
bsAlert(data.data);
}
}
})

View File

@@ -1,219 +1,218 @@
require(["jquery", "avalon", "editor", "uploader", "bs_alert", "csrf", "tagEditor", "validation", "jqueryUI"],
function ($, avalon, editor, uploader, bs_alert, csrfHeader) {
avalon.vmodels.add_problem = null;
$("#add-problem-form")
.formValidation({
framework: "bootstrap",
fields: {
title: {
validators: {
notEmpty: {
message: "请填写题目名称"
},
stringLength: {
min: 1,
max: 30,
message: "名称不能超过30个字"
require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagEditor", "formValidation", "jqueryUI"],
function ($, avalon, editor, uploader, bsAlert, csrfTokenHeader) {
avalon.ready(function () {
avalon.vmodels.addProblem = null;
$("#add-problem-form")
.formValidation({
framework: "bootstrap",
fields: {
title: {
validators: {
notEmpty: {
message: "请填写题目名称"
},
stringLength: {
min: 1,
max: 30,
message: "名称不能超过30个字"
}
}
}
},
cpu: {
validators: {
notEmpty: {
message: "请输入时间限制"
},
integer: {
message: "请输入一个合法的数字"
},
between: {
inclusive: true,
min: 1,
max: 5000,
message: "只能在1-5000之间"
},
cpu: {
validators: {
notEmpty: {
message: "请输入时间限制"
},
integer: {
message: "请输入一个合法的数字"
},
between: {
inclusive: true,
min: 1,
max: 5000,
message: "只能在1-5000之间"
}
}
}
},
memory: {
validators: {
notEmpty: {
message: "请输入内存限制"
},
integer: {
message: "请输入一个合法的数字"
},
memory: {
validators: {
notEmpty: {
message: "请输入内存限制"
},
integer: {
message: "请输入一个合法的数字"
}
}
}
},
difficulty: {
validators: {
notEmpty: {
message: "请输入难度"
},
integer: {
message: "难度用一个整数表示"
},
difficulty: {
validators: {
notEmpty: {
message: "请输入难度"
},
integer: {
message: "难度用一个整数表示"
}
}
}
},
input_description: {
validators: {
notEmpty: {
message: "请填写输入描述"
},
input_description: {
validators: {
notEmpty: {
message: "请填写输入描述"
}
}
}
},
output_description: {
validators: {
notEmpty: {
message: "请填写输出描述"
},
output_description: {
validators: {
notEmpty: {
message: "请填写输出描述"
}
}
}
}
}
})
.on("success.form.fv", function (e) {
e.preventDefault();
if (vm.test_case_id == '') {
bs_alert("你还没有上传测试数据!");
return;
}
if (vm.description == '') {
bs_alert("题目描述不能为空!");
return;
}
var ajaxData = {
title: vm.title,
description: vm.description,
time_limit: vm.cpu,
memory_limit: vm.memory,
samples: [],
test_case_id: vm.test_case_id,
hint: vm.hint,
source: vm.source,
tags: $("#tags").tagEditor("getTags")[0].tags,
input_description: vm.input_description,
output_description: vm.output_description,
difficulty: vm.difficulty
};
if (vm.samples.length == 0) {
bs_alert("请至少添加一组样例!");
return;
}
for(var i = 0; i < vm.samples.length; i++){
if (vm.samples[i].input == "" || vm.samples[i].output == ""){
bs_alert("样例输入与样例输出不能为空!");
return;
}
}
if (tags.length == 0) {
bs_alert("请至少添加一个标签,这将有利于用户发现你的题目!");
return;
}
for (var i = 0; i < vm.samples.$model.length; i++) {
ajaxData.samples.push({input: vm.samples.$model[i].input, output: vm.samples.$model[i].output});
}
$.ajax({
beforeSend: csrfHeader,
url: "/api/admin/problem/",
dataType: "json",
data: JSON.stringify(ajaxData),
method: "post",
contentType: "application/json",
success: function (data) {
if (!data.code) {
bs_alert("successful!");
console.log(data);
}
else {
bs_alert(data.data);
}
}
})
});
var problemDiscription = editor("#problemDescription");
var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/", function (file, respond) {
if (respond.code)
bs_alert(respond.data);
else {
vm.test_case_id = respond.data.test_case_id;
vm.uploadSuccess = true;
vm.testCaseList = [];
for (var i = 0; i < respond.data.file_list.input.length; i++) {
vm.testCaseList.push({
input: respond.data.file_list.input[i],
output: respond.data.file_list.output[i]
});
}
bs_alert("测试数据添加成功!共添加"+vm.testCaseList.length +"组测试数据");
}
});
var hinteditor = editor("#hint");
var tagList = [], completeList = [];
var vm = avalon.define({
$id: "add_problem",
title: "",
description: "",
cpu: 1000,
memory: 256,
samples: [{input: "", output: "", "visible": true}],
hint: "",
visible: true,
difficulty: 0,
tags: [],
tag: "",
input_description: "",
output_description: "",
test_case_id: "",
testCaseList: [],
uploadSuccess: false,
source: "",
add_sample: function () {
vm.samples.push({input: "", output: "", "visible": true});
},
del_sample: function (sample) {
if (confirm("你确定要删除么?")) {
vm.samples.remove(sample);
}
},
toggle_sample: function (sample) {
sample.visible = !sample.visible;
},
getBtnContent: function (item) {
if (item.visible)
return "折叠";
return "展开";
}
});
$.ajax({
beforeSend: csrfHeader,
url: "/api/admin/tag/",
dataType: "json",
method: "get",
success: function (data) {
if (!data.code) {
tagList = data.data;
completeList = [];
for (var i = 0; i < tagList.length; i++) {
completeList.push(tagList[i].name);
.on("success.form.fv", function (e) {
e.preventDefault();
if (vm.testCaseId == "") {
bsAlert("你还没有上传测试数据!");
return;
}
$("#tags").tagEditor({
autocomplete: {
delay: 0, // show suggestions immediately
position: {collision: 'flip'}, // automatic menu position up/down
source: completeList
if (vm.description == "") {
bsAlert("题目描述不能为空!");
return;
}
if (vm.samples.length == 0) {
bsAlert("请至少添加一组样例!");
return;
}
for (var i = 0; i < vm.samples.length; i++) {
if (vm.samples[i].input == "" || vm.samples[i].output == "") {
bsAlert("样例输入与样例输出不能为空!");
return;
}
});
}
else {
bs_alert(data.data);
}
}
}
if (tags.length == 0) {
bsAlert("请至少添加一个标签,这将有利于用户发现你的题目!");
return;
}
var ajaxData = {
title: vm.title,
description: vm.description,
time_limit: vm.timeLimit,
memory_limit: vm.memoryLimit,
samples: [],
test_case_id: vm.testCaseId,
hint: vm.hint,
source: vm.source,
tags: $("#tags").tagEditor("getTags")[0].tags,
input_description: vm.inputDescription,
output_description: vm.outputDescription,
difficulty: vm.difficulty
};
for (var i = 0; i < vm.samples.$model.length; i++) {
ajaxData.samples.push({input: vm.samples.$model[i].input, output: vm.samples.$model[i].output});
}
$.ajax({
beforeSend: csrfTokenHeader,
url: "/api/admin/problem/",
dataType: "json",
data: JSON.stringify(ajaxData),
method: "post",
contentType: "application/json",
success: function (data) {
if (!data.code) {
bsAlert("题目添加成功!");
}
else {
bsAlert(data.data);
}
}
})
});
var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/", function (file, response) {
if (response.code)
bsAlert(response.data);
else {
vm.testCaseId = response.data.test_case_id;
vm.uploadSuccess = true;
vm.testCaseList = [];
for (var i = 0; i < response.data.file_list.input.length; i++) {
vm.testCaseList.push({
input: response.data.file_list.input[i],
output: response.data.file_list.output[i]
});
}
bsAlert("测试数据添加成功!共添加" + vm.testCaseList.length + "组测试数据");
}
});
var hintEditor = editor("#hint");
var problemDescription = editor("#problemDescription");
var vm = avalon.define({
$id: "addProblem",
title: "",
description: "",
cpu: 1000,
memory: 256,
samples: [{input: "", output: "", "visible": true}],
hint: "",
visible: true,
difficulty: 0,
tags: [],
inputDescription: "",
outputDescription: "",
testCaseId: "",
testCaseList: [],
uploadSuccess: false,
source: "",
addSample: function () {
vm.samples.push({input: "", output: "", "visible": true});
},
delSample: function (sample) {
if (confirm("你确定要删除么?")) {
vm.samples.remove(sample);
}
},
toggleSample: function (sample) {
sample.visible = !sample.visible;
},
getBtnContent: function (item) {
if (item.visible)
return "折叠";
return "展开";
}
});
var tagAutoCompleteList = [];
$.ajax({
beforeSend: csrfTokenHeader,
url: "/api/admin/tag/",
dataType: "json",
method: "get",
success: function (data) {
if (!data.code) {
for (var i = 0; i < data.data.length; i++) {
tagAutoCompleteList.push(data.data[i].name);
}
$("#tags").tagEditor({
autocomplete: {
delay: 0, // show suggestions immediately
position: {collision: 'flip'}, // automatic menu position up/down
source: tagAutoCompleteList
}
});
}
else {
bsAlert(data.data);
}
}
});
});
avalon.scan();
});

View File

@@ -0,0 +1,257 @@
require(["jquery", "avalon", "editor", "uploader", "bsAlert", "csrfToken", "tagEditor", "formValidation", "jqueryUI"],
function ($, avalon, editor, uploader, bsAlert, csrfTokenHeader) {
avalon.ready(function () {
avalon.vmodels.editProblem = null;
$("#edit-problem-form")
.formValidation({
framework: "bootstrap",
fields: {
title: {
validators: {
notEmpty: {
message: "请填写题目名称"
},
stringLength: {
min: 1,
max: 30,
message: "名称不能超过30个字"
}
}
},
cpu: {
validators: {
notEmpty: {
message: "请输入时间限制"
},
integer: {
message: "请输入一个合法的数字"
},
between: {
inclusive: true,
min: 1,
max: 5000,
message: "只能在1-5000之间"
}
}
},
memory: {
validators: {
notEmpty: {
message: "请输入内存限制"
},
integer: {
message: "请输入一个合法的数字"
}
}
},
difficulty: {
validators: {
notEmpty: {
message: "请输入难度"
},
integer: {
message: "难度用一个整数表示"
}
}
},
input_description: {
validators: {
notEmpty: {
message: "请填写输入描述"
}
}
},
output_description: {
validators: {
notEmpty: {
message: "请填写输出描述"
}
}
}
}
})
.on("success.form.fv", function (e) {
e.preventDefault();
if (vm.testCaseId == "") {
bsAlert("你还没有上传测试数据!");
return;
}
if (vm.description == "") {
bsAlert("题目描述不能为空!");
return;
}
if (vm.samples.length == 0) {
bsAlert("请至少添加一组样例!");
return;
}
for (var i = 0; i < vm.samples.length; i++) {
if (vm.samples[i].input == "" || vm.samples[i].output == "") {
bsAlert("样例输入与样例输出不能为空!");
return;
}
}
if (tags.length == 0) {
bsAlert("请至少添加一个标签,这将有利于用户发现你的题目!");
return;
}
var ajaxData = {
id: avalon.vmodels.admin.problemId,
title: vm.title,
description: vm.description,
time_limit: vm.timeLimit,
memory_limit: vm.memoryLimit,
samples: [],
test_case_id: vm.testCaseId,
hint: vm.hint,
source: vm.source,
visible: vm.visible,
tags: $("#tags").tagEditor("getTags")[0].tags,
input_description: vm.inputDescription,
output_description: vm.outputDescription,
difficulty: vm.difficulty
};
for (var i = 0; i < vm.samples.$model.length; i++) {
ajaxData.samples.push({input: vm.samples.$model[i].input, output: vm.samples.$model[i].output});
}
$.ajax({
beforeSend: csrfTokenHeader,
url: "/api/admin/problem/",
dataType: "json",
data: JSON.stringify(ajaxData),
method: "put",
contentType: "application/json",
success: function (data) {
if (!data.code) {
bsAlert("题目编辑成功!");
}
else {
bsAlert(data.data);
}
}
})
});
var vm = avalon.define({
$id: "editProblem",
title: "",
description: "",
timeLimit: -1,
memoryLimit: -1,
samples: [],
hint: "",
visible: true,
difficulty: 0,
inputDescription: "",
outputDescription: "",
testCaseIdd: "",
uploadSuccess: false,
source: "",
testCaseList: [],
addSample: function () {
vm.samples.push({input: "", output: "", "visible": true});
},
delSample: function (sample) {
if (confirm("你确定要删除么?")) {
vm.samples.remove(sample);
}
},
toggleSample: function (sample) {
sample.visible = !sample.visible;
},
getBtnContent: function (item) {
if (item.visible)
return "折叠";
return "展开";
}
});
var hintEditor = editor("#hint");
var descriptionEditor = editor("#problemDescription");
var testCaseUploader = uploader("#testCaseFile", "/api/admin/test_case_upload/", function (file, response) {
if (response.code)
bsAlert(response.data);
else {
vm.testCaseId = response.data.test_case_id;
vm.uploadSuccess = true;
vm.testCaseList = [];
for (var i = 0; i < response.data.file_list.input.length; i++) {
vm.testCaseList.push({
input: response.data.file_list.input[i],
output: response.data.file_list.output[i]
});
}
bsAlert("测试数据添加成功!共添加" + vm.testCaseList.length + "组测试数据");
}
});
$.ajax({
url: "/api/admin/problem/?problem_id=" + avalon.vmodels.admin.problemId,
method: "get",
dataType: "json",
success: function (data) {
if (data.code) {
bsAlert(data.data);
}
else {
var problem = data.data;
console.log(problem);
vm.title = problem.title;
vm.description = problem.description;
vm.timeLimit = problem.time_limit;
vm.memoryLimit = problem.memory_limit;
for (var i = 0; i < problem.samples.length; i++) {
vm.samples.push({
input: problem.samples[i].input,
output: problem.samples[i].output,
visible: false
})
}
vm.hint = problem.hint;
vm.visible = problem.visible;
vm.difficulty = problem.difficulty;
vm.inputDescription = problem.input_description;
vm.outputDescription = problem.output_description;
vm.testCaseId = problem.test_case_id;
vm.source = problem.source;
var problemTags = problem.tags;
hintEditor.setValue(vm.hint);
descriptionEditor.setValue(vm.description);
$.ajax({
url: "/api/admin/tag/",
dataType: "json",
method: "get",
success: function (data) {
if (!data.code) {
var tagAutoCompleteList = [], tags = [];
for (var i = 0; i < data.data.length; i++) {
tagAutoCompleteList.push(data.data[i].name);
}
for (var j = 0; j < problem.tags.length; j++) {
tags.push(problemTags[j].name);
}
$("#tags").tagEditor({
initialTags: tags,
autocomplete: {
delay: 0,
position: {collision: 'flip'},
source: tagAutoCompleteList
}
});
}
else {
bsAlert(data.data);
}
}
});
}
}
});
});
avalon.scan();
});

View File

@@ -0,0 +1,65 @@
require(["jquery", "avalon", "csrfToken", "bsAlert", "formValidation"], function ($, avalon, csrfTokenHeader, bsAlert) {
avalon.ready(function () {
avalon.vmodels.problemList = null;
var vm = avalon.define({
$id: "problemList",
problemList: [],
previousPage: 0,
nextPage: 0,
page: 1,
totalPage: 1,
keyword: "",
getNext: function () {
if (!vm.nextPage)
return;
getPageData(vm.page + 1);
},
getPrevious: function () {
if (!vm.previousPage)
return;
getPageData(vm.page - 1);
},
getBtnClass: function (btn) {
if (btn == "next") {
return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled";
}
else {
return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled";
}
},
getPage: function (page_index) {
getPageData(page_index);
},
showEditProblemPage: function (problem_id) {
vm.$fire("up!showEditProblemPage", problem_id);
}
});
function getPageData(page) {
var url = "/api/admin/problem/?paging=true&page=" + page + "&page_size=10";
if (vm.keyword != "")
url += "&keyword=" + vm.keyword;
$.ajax({
url: url,
dataType: "json",
method: "get",
success: function (data) {
if (!data.code) {
vm.problemList = data.data.results;
vm.totalPage = data.data.total_page;
vm.previousPage = data.data.previous_page;
vm.nextPage = data.data.next_page;
vm.page = page;
}
else {
bsAlert(data.data);
}
}
});
}
getPageData(1);
});
avalon.scan();
});

View File

@@ -1,59 +1,58 @@
require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, avalon, csrfHeader, bs_alert) {
avalon.vmodels.user_list = null;
require(["jquery", "avalon", "csrfToken", "bsAlert", "formValidation"], function ($, avalon, csrfTokenHeader, bsAlert) {
// avalon:定义模式 user_list
// avalon:定义模式 userList
avalon.ready(function () {
avalon.vmodels.userList = null;
var vm = avalon.define({
$id: "user_list",
$id: "userList",
//通用变量
user_list: [], // 用户列表数据项
previous_page: 0, // 之前的页数
next_page: 0, // 之后的页数
page: 1, // 当前页数
isEditing: 0, // 正在编辑的公告的ID 为零说明未在编辑
page_count: 1, // 总页数
user_type: ["一般用户", "管理员", "超级管理员"],
key_word: "",
userList: [],
previousPage: 0,
nextPage: 0,
page: 1,
editingUserId: 0,
totalPage: 1,
userType: ["一般用户", "管理员", "超级管理员"],
keyword: "",
showAdminOnly: false,
//编辑区域同步变量
username: "",
real_name: "",
realName: "",
email: "",
admin_type: 0,
adminType: 0,
id: 0,
last_login: "",
create_time: "",
getNext: function () {
if (!vm.next_page)
if (!vm.nextPage)
return;
getPageData(vm.page + 1);
},
getPrevious: function () {
if (!vm.previous_page)
if (!vm.previousPage)
return;
getPageData(vm.page - 1);
},
getBtnClass: function (btn) { //上一页/下一页按钮启用禁用逻辑
if (btn) {
return vm.next_page ? "btn btn-primary" : "btn btn-primary disabled";
return vm.nextPage ? "btn btn-primary" : "btn btn-primary disabled";
}
else {
return vm.previous_page ? "btn btn-primary" : "btn btn-primary disabled";
return vm.previousPage ? "btn btn-primary" : "btn btn-primary disabled";
}
},
enEdit: function (el) { //点击编辑按钮的事件,显示/隐藏编辑区
vm.username = el.username;
vm.real_name = el.real_name;
vm.admin_type = el.admin_type;
vm.email = el.email;
vm.id = el.id;
if (vm.isEditing == el.id)
vm.isEditing = 0;
editUser: function (user) { //点击编辑按钮的事件,显示/隐藏编辑区
vm.username = user.username;
vm.realName = user.real_name;
vm.adminType = user.admin_type;
vm.email = user.email;
vm.id = user.id;
if (vm.editingUserId == user.id)
vm.editingUserId = 0;
else
vm.isEditing = el.id;
vm.editingUserId = user.id;
},
getPage: function (page_index) {
getPageData(page_index);
search: function () {
getPageData(1);
}
});
vm.$watch("showAdminOnly", function () {
@@ -66,23 +65,23 @@ require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, ava
var url = "/api/admin/user/?paging=true&page=" + page + "&page_size=10";
if (vm.showAdminOnly == true)
url += "&admin_type=1";
if (vm.key_word != "")
url += "&keyword=" + vm.key_word;
if (vm.keyword != "")
url += "&keyword=" + vm.keyword;
$.ajax({
beforeSend: csrfHeader,
beforeSend: csrfTokenHeader,
url: url,
dataType: "json",
method: "get",
success: function (data) {
if (!data.code) {
vm.user_list = data.data.results;
vm.page_count = data.data.total_page;
vm.previous_page = data.data.previous_page;
vm.next_page = data.data.next_page;
vm.userList = data.data.results;
vm.totalPage = data.data.total_page;
vm.previousPage = data.data.previous_page;
vm.nextPage = data.data.next_page;
vm.page = page;
}
else {
bs_alert(data.data);
bsAlert(data.data);
}
}
});
@@ -136,26 +135,26 @@ require(["jquery", "avalon", "csrf", "bs_alert", "validation"], function ($, ava
e.preventDefault();
var data = {
username: vm.username,
real_name: vm.real_name,
real_name: vm.realName,
email: vm.email,
id: vm.id,
admin_type: vm.admin_type
admin_type: vm.adminType
};
if ($("#password").val() !== "")
data.password = $("#password").val();
$.ajax({
beforeSend: csrfHeader,
beforeSend: csrfTokenHeader,
url: "/api/admin/user/",
data: data,
dataType: "json",
method: "put",
success: function (data) {
if (!data.code) {
bs_alert("提交成功!");
bsAlert("提交成功!");
getPageData(1);
$("#password").val("");
} else {
bs_alert(data.data);
bsAlert(data.data);
}
}
})

View File

@@ -1,4 +1,4 @@
require(["jquery", "bs_alert", "csrf", "validation"], function ($, bs_alert, csrfHeader) {
require(["jquery", "bsAlert", "csrfToken", "formValidation"], function ($, bsAlert, csrfTokenHeader) {
$("#change_password-form").formValidation({
framework: "bootstrap",
fields: {
@@ -47,21 +47,20 @@ require(["jquery", "bs_alert", "csrf", "validation"], function ($, bs_alert, csr
).on('success.form.fv', function (e) {
e.preventDefault();
var username = $("#username").val();
var new_password = $("#new_password ").val();
var newPassword = $("#new_password ").val();
var password = $("#password").val();
$.ajax({
beforeSend: csrfHeader,
beforeSend: csrfTokenHeader,
url: "/api/change_password/",
data: {username: username, new_password: new_password, old_password: password},
data: {username: username, new_password: newPassword, old_password: password},
dataType: "json",
method: "post",
success: function (data) {
if (!data.code) {
window.location.href = "/login/";
}
else {
bs_alert(data.data);
bsAlert(data.data);
}
}
})

View File

@@ -1,4 +1,4 @@
require(["jquery", "bs_alert", "csrf", "validation"], function ($, bs_alert, csrfHeader) {
require(["jquery", "bsAlert", "csrfToken", "formValidation"], function ($, bsAlert, csrfTokenHeader) {
$("#login-form")
.formValidation({
framework: "bootstrap",
@@ -24,7 +24,7 @@ require(["jquery", "bs_alert", "csrf", "validation"], function ($, bs_alert, csr
var username = $("#username").val();
var password = $("#password").val();
$.ajax({
beforeSend: csrfHeader,
beforeSend: csrfTokenHeader,
url: "/api/login/",
data: {username: username, password: password},
dataType: "json",
@@ -34,7 +34,7 @@ require(["jquery", "bs_alert", "csrf", "validation"], function ($, bs_alert, csr
window.location.href = "/";
}
else {
bs_alert(data.data);
bsAlert(data.data);
}
}

View File

@@ -1,4 +1,4 @@
require(["jquery", "bs_alert", "csrf", "validation"], function ($, bs_alert, csrfHeader) {
require(["jquery", "bsAlert", "csrfToken", "validation"], function ($, bsAlert, csrfTokenHeader) {
$("#register-form")
.formValidation({
framework: "bootstrap",
@@ -73,13 +73,13 @@ require(["jquery", "bs_alert", "csrf", "validation"], function ($, bs_alert, csr
).on('success.form.fv', function (e) {
e.preventDefault();
var username = $("#username").val();
var real_name = $("#real_name").val();
var realName = $("#real_name").val();
var password = $("#password").val();
var email = $("#email").val();
$.ajax({
beforeSend: csrfHeader,
url: "/api/register/",
data: {username: username, real_name: real_name, password: password, email: email},
data: {username: username, real_name: realName, password: password, email: email},
dataType: "json",
method: "post",
success: function (data) {
@@ -87,7 +87,7 @@ require(["jquery", "bs_alert", "csrf", "validation"], function ($, bs_alert, csr
window.location.href = "/login/";
}
else {
bs_alert(data.data);
bsAlert(data.data);
}
}
})

View File

@@ -1,12 +1,12 @@
require(["jquery", "code_mirror", "csrf", "bs_alert"], function ($, code_mirror, csrfHeader, bs_alert) {
var code_editor = code_mirror($("#code-editor")[0], "text/x-csrc");
require(["jquery", "codeMirror", "csrfToken", "bsAlert"], function ($, codeMirror, csrfTokenHeader, bsAlert) {
var codeEditor = codeMirror($("#code-editor")[0], "text/x-csrc");
var language = $("input[name='language'][checked]").val();
var submission_id;
var submissionId;
$("input[name='language']").change(function () {
language = this.value;
var language_types = {"1": "text/x-csrc", "2": "text/x-c++src", "3": "text/x-java"};
code_editor.setOption("mode", language_types[language]);
var languageTypes = {"1": "text/x-csrc", "2": "text/x-c++src", "3": "text/x-java"};
codeEditor.setOption("mode", languageTypes[language]);
});
$("#show-more-btn").click(function () {
@@ -14,18 +14,17 @@ require(["jquery", "code_mirror", "csrf", "bs_alert"], function ($, code_mirror,
$("#show-more-btn").hide();
});
function show_loading() {
function showLoading() {
$("#submit-code-button").attr("disabled", "disabled");
$("#loading-gif").show();
}
function hide_loading() {
function hideLoading() {
$("#submit-code-button").removeAttr("disabled");
$("#loading-gif").hide();
}
function get_result_html(data) {
function getResultHtml(data) {
// 0 结果正确 1 运行错误 2 超时 3 超内存 4 编译错误
// 5 格式错误 6 结果错误 7 系统错误 8 等待判题
var results = {
@@ -49,14 +48,14 @@ require(["jquery", "code_mirror", "csrf", "bs_alert"], function ($, code_mirror,
if (!data.result) {
html += "CPU time: " + data.accepted_answer_info.time + "ms &nbsp;&nbsp;";
}
html += ('<a href="/my_submission/' + submission_id + '/" target="_blank">查看详情</a></div> </div>');
html += ('<a href="/my_submission/' + submissionId + '/" target="_blank">查看详情</a></div> </div>');
return html;
}
function get_result() {
function getResult() {
$.ajax({
url: "/api/submission/?submission_id=" + submission_id,
url: "/api/submission/?submission_id=" + submissionId,
method: "get",
dataType: "json",
success: function (data) {
@@ -64,54 +63,54 @@ require(["jquery", "code_mirror", "csrf", "bs_alert"], function ($, code_mirror,
// 8是还没有完成判题
if (data.data.result == 8) {
// 1秒之后重新去获取
setTimeout(get_result, 1000);
setTimeout(getResult, 1000);
}
else {
hide_loading();
$("#result").html(get_result_html(data.data));
hideLoading();
$("#result").html(getResultHtml(data.data));
}
}
else {
bs_alert(data.data);
hide_loading();
bsAlert(data.data);
hideLoading();
}
}
})
}
$("#submit-code-button").click(function () {
var problem_id = window.location.pathname.split("/")[2];
var code = code_editor.getValue();
var problemId = window.location.pathname.split("/")[2];
var code = codeEditor.getValue();
show_loading();
showLoading();
if(!code.trim()){
bs_alert("请填写代码!");
hide_loading();
hideLoading();
return false;
}
$("#result").html("");
$.ajax({
beforeSend: csrfHeader,
beforeSend: csrfTokenHeader,
url: "/api/submission/",
method: "post",
data: JSON.stringify({
problem_id: window.location.pathname.split("/")[2],
problem_id: problemId,
language: language,
code: code_editor.getValue()
code: codeEditor.getValue()
}),
contentType: "application/json",
success: function (data) {
if (!data.code) {
submission_id = data.data.submission_id;
submissionId = data.data.submission_id;
// 获取到id 之后2秒去查询一下判题结果
setTimeout(get_result, 2000);
setTimeout(getResult, 2000);
}
else {
bs_alert(data.data);
hide_loading();
hideLoading();
}
}
});