修改 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();
}
}
});

View File

@@ -2,24 +2,28 @@ var require = {
// RequireJS 通过一个相对的路径 baseUrl来加载所有代码。baseUrl通常被设置成data-main属性指定脚本的同级目录。
baseUrl: "/static/js/",
paths: {
//百度webuploader
webuploader: "lib/webuploader/webuploader",
jquery: "lib/jquery/jquery",
avalon: "lib/avalon/avalon",
editor: "utils/editor",
uploader: "utils/uploader",
validation: "utils/validation",
code_mirror: "utils/code_mirror",
bs_alert: "utils/bs_alert",
formValidation: "utils/formValidation",
codeMirror: "utils/codeMirror",
bsAlert: "utils/bsAlert",
problem: "app/oj/problem/problem",
contest: "app/admin/contest/contest",
csrf: "utils/csrf",
csrfToken: "utils/csrfToken",
admin: "app/admin/admin",
chart: "lib/chart/Chart",
tagEditor: "lib/tagEditor/jquery.tag-editor.min",
jqueryUI: "lib/jqueryUI/jquery-ui",
//formValidation 不要在代码中单独使用而是使用和修改utils/validation
bootstrap: "lib/bootstrap/bootstrap",
datetimePicker: "lib/datetime_picker/bootstrap-datetimepicker.zh-CN",
// ------ 下面写的都不要直接用,而是使用上面的封装版本 ------
//formValidation -> utils/validation
base: "lib/formValidation/base",
helper: "lib/formValidation/helper",
"language/zh_CN": "lib/formValidation/language/zh_CN",
@@ -32,26 +36,25 @@ var require = {
"validator/confirm":"lib/formValidation/validator/confirm",
"validator/remote":"lib/formValidation/validator/remote",
"validator/emailAddress":"lib/formValidation/validator/emailAddress",
//富文本编辑器 不要直接使用而是使用上面的editor
//富文本编辑器simditor -> editor
simditor: "lib/simditor/simditor",
"simple-module": "lib/simditor/module",
"simple-hotkeys": "lib/simditor/hotkeys",
"simple-uploader": "lib/simditor/uploader",
//code mirroe 代码编辑器
_code_mirror: "lib/codeMirror/codemirror",
code_mirror_clang: "lib/codeMirror/language/clike",
//code mirror 代码编辑器 ->codeMirror
_codeMirror: "lib/codeMirror/codemirror",
codeMirrorClang: "lib/codeMirror/language/clike",
//bootstrap
bootstrap: "lib/bootstrap/bootstrap",
//百度webuploader -> uploader
webUploader: "lib/webuploader/webuploader",
//
"_datetimepicker": "lib/datetime_picker/bootstrap-datetimepicker",
"datetimepicker": "lib/datetime_picker/bootstrap-datetimepicker.zh-CN"
"_datetimePicker": "lib/datetime_picker/bootstrap-datetimepicker"
},
shim: {
"bootstrap": {"deps": ['jquery']},
"_datetimepicker": {"deps": ["jquery"]},
"datetimepicker": {"deps": ["_datetimepicker"]}
bootstrap: {deps: ["jquery"]},
_datetimePicker: {dep: ["jquery"]},
datetimePicker: {deps: ["_datetimePicker"]}
}
};

View File

@@ -5,7 +5,7 @@
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["_code_mirror"], mod);
define(["_codeMirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {

View File

@@ -7,12 +7,12 @@
// AMD module is defined
if (typeof define === "function" && define.amd) {
define("validator/remote", ["jquery", "base", "csrf"], factory);
define("validator/remote", ["jquery", "base", "csrfToken"], factory);
} else {
// planted over the root!
factory(root.jQuery, root.FormValidation);
}
}(this, function ($, FormValidation, csrfHeader) {
}(this, function ($, FormValidation, csrfTokenHeader) {
FormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {
'en_US': {
remote: {
@@ -28,7 +28,7 @@
return true;
var url = options.url;
var xhr = $.ajax({
beforeSend: csrfHeader,
beforeSend: csrfTokenHeader,
url: url,
dataType: 'json',
data: ajaxData,

View File

@@ -1,5 +1,5 @@
define("bs_alert", ["jquery", "bootstrap"], function($){
function bs_alert(content){
define("bsAlert", ["jquery", "bootstrap"], function($){
function bsAlert(content){
if(!$("#alert-modal").length) {
var html = '<div class="modal fade" id="alert-modal" tabindex="-1" role="dialog"> ' +
'<div class="modal-dialog modal-sm"> <div class="modal-content"> <div class="modal-header"> ' +
@@ -13,5 +13,5 @@ define("bs_alert", ["jquery", "bootstrap"], function($){
$("#modal-text").html(content);
$("#alert-modal").modal();
}
return bs_alert;
return bsAlert;
});

View File

@@ -1,5 +1,5 @@
define("code_mirror", ["_code_mirror", "code_mirror_clang"], function(CodeMirror){
function code_mirror(selector, language){
define("codeMirror", ["_codeMirror", "codeMirrorClang"], function(CodeMirror){
function codeMirror(selector, language){
return CodeMirror.fromTextArea(selector,
{
indentUnit: 4,
@@ -8,5 +8,5 @@ define("code_mirror", ["_code_mirror", "code_mirror_clang"], function(CodeMirror
mode: language
});
}
return code_mirror;
return codeMirror;
});

View File

@@ -1,5 +1,5 @@
define("csrf",function(){
function get_cookie(cookie_name) {
define("csrfToken",function(){
function getCookie(cookie_name) {
var name = cookie_name + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
@@ -9,15 +9,15 @@ define("csrf",function(){
}
return "";
}
function csrfHeader(){
function csrfTokenHeader(){
// jquery的请求
if(arguments.length == 2) {
arguments[0].setRequestHeader("X-CSRFToken", get_cookie("csrftoken"));
arguments[0].setRequestHeader("X-CSRFToken", getCookie("csrftoken"));
}
// 百度webuploader 的请求
else if(arguments.length == 3){
arguments[2]["X-CSRFToken"] = get_cookie("csrftoken");
arguments[2]["X-CSRFToken"] = getCookie("csrftoken");
}
}
return csrfHeader;
return csrfTokenHeader;
});

View File

@@ -1,4 +1,4 @@
define("validation",
define("formValidation",
[ 'base',
'helper',
'framework/bootstrap',

View File

@@ -1,4 +0,0 @@
/**
* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);

View File

@@ -1,24 +0,0 @@
function _notify(notify_type, title, content){
$.notify({
title: title,
message: content
}, {
type: notify_type,
placement: {
from: "top",
align: "center"
},
offset: {
y: 50
},
delay: 3000,
timer: 1000
});
}
function show_info(title, content) {
_notify("info", title, content);
}
function show_warning(title, content) {
_notify("warning", title, content);
}

View File

@@ -1,5 +0,0 @@
/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
* Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
* */
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);

View File

@@ -1,4 +1,4 @@
define("uploader", ["webuploader", "csrf"], function(webuploader,csrf){
define("uploader", ["webUploader", "csrfToken"], function(webuploader,csrfTokenHeader){
function uploader(selector, server, onSuccess, beforeUpload) {
var Webuploader= webuploader.create({
auto: true,
@@ -11,9 +11,9 @@ define("uploader", ["webuploader", "csrf"], function(webuploader,csrf){
pick: selector,
// 不压缩image, 默认如果是jpeg文件上传前会压缩一把再上传
resize: false,
uploadBeforeSend : csrf
uploadBeforeSend : csrfTokenHeader
});
Webuploader.on("uploadBeforeSend",csrf);
Webuploader.on("uploadBeforeSend",csrfTokenHeader);
Webuploader.on("uploadSuccess", onSuccess);
Webuploader.on("beforeFileQueued", beforeUpload);
return Webuploader;