-
Anton authoredf3c27c0a
Forked from
it-lab / grade
Source project has a limited visibility.
edit.js 14.88 KiB
var $ = jQuery;
$(function() {
var URL = (window.location.href).split('/');
var DisciplineID = URL[URL.length - 1]
// Шаблон мероприятия
function GetSubModuleTmp(){
return '\
<div class="subModule">\
<div class="name">\
<input type="text" class="inputName SubmoduleName" value="Наименование мероприятия">\
</div>\
<div class="currentControl"><input type="text" class="inputCredit inputCurrentControl" value="0"></div>\
<div class="landmarkControl"><input type="text" class="inputCredit inputLandmarkControl" value="0"></div>\
<div class="actions">\
<div class="deleteSubModule icon delete"></div>\
<div class="downSubModule icon down"></div>\
<div class="upSubModule icon up"></div>\
</div>\
</div>\
';
}
// Шаблон модуля
function GetModuleTmp() {
return '\
<div class="moduleGroup">\
<div class="moduleHead">\
<div class="name">\
<input type="text" class="inputName ModuleName" value="Наименование модуля">\
</div>\
<div class="currentControl">0</div>\
<div class="landmarkControl">0</div>\
<div class="actions">\
<div class="deleteModule icon delete"></div>\
<div class="downModule icon down"></div>\
<div class="upModule icon up"></div>\
<div class="addSubModule icon add"></div>\
</div>\
</div>\
<div class="subModules">\
'+GetSubModuleTmp()+'\
</div>\
</div>'
};
// Подсчет текущего контроля
function CountCurrentControl(subModulesDiv){
var maxCredits = 0;
$('.inputCurrentControl', subModulesDiv).each(function(){
var credit = parseInt($(this).val());
maxCredits = maxCredits + ((isNum(credit)) ? credit : 0);
});
subModulesDiv.prev().children('.currentControl').text(maxCredits);
}
// Подсчет рубежного контроля
function CountLandmarkControl(subModulesDiv){
var maxCredits = 0;
$('.inputLandmarkControl', subModulesDiv).each(function(){
var credit = parseInt($(this).val());
maxCredits = maxCredits + ((isNum(credit)) ? credit : 0);
});
subModulesDiv.prev().children('.landmarkControl').text(maxCredits);
}
// Изменение типа подмодуля
function ChangeSubmoduleControlType(ID, ControlType){
$.post(
'/~dev_rating/handler/map/ChangeSubmoduleControlType',
{
'SubmoduleID': ID,
'ControlType': ControlType
},
function(data){
data = $.parseJSON(data);
if(data.success === true)
alert('Ок, ChangeSubmoduleControlType');
else alert('Error, ChangeSubmoduleControlType');
}
);
}
// Изменение макс. балла подмодуля
function ChangeSubmoduleMaxRate(ID, NewMaxRate) {
$.post(
'/~dev_rating/handler/map/ChangeSubmoduleMaxRate',
{
'SubmoduleID': ID,
'MaxRate': NewMaxRate
},
function(data){
data = $.parseJSON(data);
if(data.success === true)
alert('Ок, ChangeSubmoduleMaxRate');
else alert('Error, ChangeSubmoduleMaxRate');
}
);
}
// Установить новый max балл
function SetNewRateAndControl(thisObj, OldMaxRate) {
// DIV с мероприятиями для данного модуля
var subModulesDiv = thisObj.parent().parent().parent();
// ID мероприятия
var ID = thisObj.parent('div').parent('div').attr('id');
var NewMaxRate = 0;
if (thisObj.val() != '')
NewMaxRate = thisObj.val();
// Меняем max балл
if (NewMaxRate != OldMaxRate)
ChangeSubmoduleMaxRate(ID, NewMaxRate);
// Меняем тип
ControlType = 'CurrentControl'; // По-умолчанию
if ((thisObj.parent().attr('class')).indexOf('landmarkControl') + 1 > 0)
ControlType = 'LandmarkControl';
if (NewMaxRate > 0)
ChangeSubmoduleControlType(ID, ControlType);
if (ControlType == 'CurrentControl')
thisObj.parent().parent().find('.landmarkControl').children('.inputLandmarkControl').val('0');
if (ControlType == 'LandmarkControl')
thisObj.parent().parent().find('.currentControl').children('.inputCurrentControl').val('0');
// Подсчет текущего и рубежного контроля после изменений
CountCurrentControl(subModulesDiv);
CountLandmarkControl(subModulesDiv);
}
// Поменять местами два модуля
function SwapModuleOrder(ModuleID1, ModuleID2) {
$.post(
'/~dev_rating/handler/map/SwapModuleOrder',
{
'ModuleID1': ModuleID1,
'ModuleID2': ModuleID2
},
function(data){
data = $.parseJSON(data);
if(data.success === true) {
alert('Ок, SwapModuleOrder');
} else alert('Error, SwapModuleOrder');
}
);
}
// Поменять местами два мероприятия
function SwapSubmoduleOrder(SubmoduleID1, SubmoduleID2) {
$.post(
'/~dev_rating/handler/map/SwapSubmoduleOrder',
{
'SubmoduleID1': SubmoduleID1,
'SubmoduleID2': SubmoduleID2
},
function(data){
data = $.parseJSON(data);
if(data.success === true) {
alert('Ок, SwapModuleOrder');
} else alert('Error, SwapModuleOrder');
}
);
}
//-------------------------------------------------------------------------------------------------------------------------------------------------
// Изменения базовых параметров дисциплины
$(".ChangeDiscipline").click(function(){
$.post(
'/~dev_rating/handler/map/ChangeDiscipline',
{
'DisciplineID': DisciplineID,
'Grade': $('.SelectGrade').val(),
'SubjectID': $('.SelectSubject').val(),
'ExamType': $('input:radio[name=ExamType]:checked').val(),
'LectionCount': $('.InputLectionCount').val(),
'PracticeCount': $('.InputPracticeCount').val(),
'DepartmentID': $('.SelectDepartment').val()
},
function(data){
data = $.parseJSON(data);
if(data.success === true) {
alert('Ок, ChangeDiscipline');
} else alert('Error, ChangeDiscipline');
}
);
return false
});
// Переместить вверх МОДУЛЬ
$(".moduleList").on('click', '.upModule', function(){
var parentDIV = $(this).parent('div').parent('div').parent('div');
parentDIV.insertBefore(parentDIV.prev());
var ModuleID = parentDIV.attr('id');
// Для того, который СТАЛ находится ниже
var nextModuleID = parentDIV.next('div').attr('id');
SwapModuleOrder(ModuleID, nextModuleID);
return false
});
// Переместить вниз МОДУЛЬ
$(".moduleList").on('click', '.downModule', function(){
var parentDIV = $(this).parent('div').parent('div').parent('div');
parentDIV.insertAfter(parentDIV.next());
var ModuleID = parentDIV.attr('id');
// Для того, который СТАЛ находится выше
var prevModuleID = parentDIV.prev('div').attr('id');
SwapModuleOrder(ModuleID, prevModuleID);
return false
});
// Переместить вверх мероприятие
$(".moduleList").on('click', '.upSubModule', function(){
var parentDIV = $(this).parent('div').parent('div');
parentDIV.insertBefore(parentDIV.prev());
var SubmoduleID = parentDIV.attr('id');
var nextSubmoduleID = parentDIV.next('div').attr('id');
SwapSubmoduleOrder(SubmoduleID, nextSubmoduleID);
return false
});
// Переместить вниз мероприятие
$(".moduleList").on('click', '.downSubModule', function(){
var parentDIV = $(this).parent('div').parent('div');
parentDIV.insertAfter(parentDIV.next());
var SubmoduleID = parentDIV.attr('id');
var prevSubmoduleID = parentDIV.prev('div').attr('id');
SwapSubmoduleOrder(SubmoduleID, prevSubmoduleID);
return false
});
// Добавить модуль
$('.addModule').click(function(){
$('.moduleList').append(GetModuleTmp());
var OrderNum = $('.moduleGroup', '.moduleList').last().index('.moduleGroup') + 1;
$.post(
'/~dev_rating/handler/map/AddModule',
{
'DisciplineID': DisciplineID,
'OrderNum': OrderNum
},
function(data){
data = $.parseJSON(data);
if(data.success === true) {
// К добавленному модулю добавляем ID
var thisModuleDIV = $('.moduleGroup').eq(OrderNum - 1);
thisModuleDIV.attr('id', data.ModuleID);
// К добавленному в модуль мероприятию добавляем ID
thisModuleDIV.children('.subModules').children('.subModule').eq(0).attr('id', data.SubmoduleID);
alert('Ок, AddModule');
} else alert('Error, AddModule');
}
);
if ($('.empty').css('display') == 'block')
$('.empty').css('display', 'none');
});
// Добавить мероприятие
$('.moduleList').on('click', '.addSubModule', function(){
$(this).parent().parent().next().append(GetSubModuleTmp());
var ModuleID = $(this).parent('div').parent('div').parent('div').attr('id');
var SubmodulesDIV = $(this).parent().parent().next('.subModules');
var OrderNum = SubmodulesDIV.children('.subModule').last().index() + 1;
$.post(
'/~dev_rating/handler/map/AddSubmodule',
{
'ModuleID': ModuleID,
'OrderNum': OrderNum
},
function(data){
data = $.parseJSON(data);
if(data.success === true) {
// К добавленному мероприятию добавляем ID
SubmodulesDIV.children('.subModule').eq(OrderNum - 1).attr('id', data.SubmoduleID);
alert('Ок, AddSubmodule');
} else alert('Error, AddSubmodule');
}
);
});
// Удалить модуль
$('.moduleList').on('click', '.deleteModule', function(){
$(this).parent().css('display', 'none');
$(this).parent().parent().append('<div class="confirmDeleteDiv">Уверены? <span class="confirmDeleteModule">Да</span> <span class="cancel">Нет</span></div>');
});
// Подтверждение при удаление модуля
$('.moduleList').on('click', '.confirmDeleteModule', function(){
var subModulesDIV = $(this).parent('div').parent('div').next('.subModules');
var CurrentModuleOrder = $(this).parent().parent().parent().index() + 1;
// Собираем в JSON строку ID мероприятий
var JSONSubmodules = '[';
$('.subModule', subModulesDIV).each(function(){
JSONSubmodules += $(this).attr('id') + ',';
});
JSONSubmodules = JSONSubmodules.substr(0, JSONSubmodules.length - 1);
JSONSubmodules += ']';
//
// Собираем ID модулей, которые ниже для того, чтоб сменить их порадок на +1
var AttrID = $(this).parent().parent().parent().nextAll().map(function(indx, element){
return $(element).attr("id");
});
var ChangeOrderModulesID = '[' + AttrID.get() + ']';
//
$.post(
'/~dev_rating/handler/map/DeleteModule',
{
'ModuleID': $(this).parent('div').parent('div').parent('div').attr('id'),
'SubmodulesID': JSONSubmodules,
'CurrentModuleOrder': CurrentModuleOrder,
'ChangeOrderModulesID': ChangeOrderModulesID
},
function(data){
data = $.parseJSON(data);
if(data.success === true)
alert('Ок, DeleteModule');
else alert('Error, DeleteModule');
}
);
$(this).parent('div').parent('div').parent('div').remove();
});
// Удалить мероприятие
$('.moduleList').on('click', '.deleteSubModule ', function(){
$(this).parent().css('display', 'none');
$(this).parent().parent().append('<div class="confirmDeleteDiv">Уверены? <span class="confirmDeleteSubModule">Да</span> <span class="cancel">Нет</span></div>');
});
// Подтверждение при удаление мероприятия
$('.moduleList').on('click', '.confirmDeleteSubModule ', function(){
var subModulesDiv = $(this).parent().parent().parent();
var CurrentSubmoduleOrder = $(this).parent().parent().index() + 1;
CountCurrentControl(subModulesDiv);
CountLandmarkControl(subModulesDiv);
// Собираем ID мероприятий, которые ниже для того, чтоб сменить их порадок на +1
var AttrID = $(this).parent().parent().nextAll().map(function(indx, element){
return $(element).attr("id");
});
var ChangeOrderSubmodulesID = '[' + AttrID.get() + ']';
//
$.post(
'/~dev_rating/handler/map/DeleteSubmodule',
{
'SubmoduleID': $(this).parent('div').parent('div').attr('id'),
'CurrentSubmoduleOrder': CurrentSubmoduleOrder,
'ChangeOrderSubmodulesID': ChangeOrderSubmodulesID
},
function(data){
data = $.parseJSON(data);
if(data.success === true)
alert('Ок, DeleteSubmodule');
else alert('Error, DeleteSubmodule');
}
);
$(this).parent('div').parent('div').remove();
});
// Отмена удаления модулей/мероприятий
$('.moduleList').on('click', '.cancel ', function(){
$(this).parent().parent().children('.actions').css('display', 'block');
$(this).parent().remove();
});
// Поменять название модуля
var ModuleName;
$('.moduleList').on('focusin', '.ModuleName', function(){
ModuleName = $(this).val();
});
$('.moduleList').on('focusout', '.ModuleName', function(){
var NewModuleName = $(this).val();
if (NewModuleName != '' && ModuleName != NewModuleName) {
var ID = $(this).parent('div').parent('div').parent('div').attr('id');
$.post(
'/~dev_rating/handler/map/ChangeModuleName',
{
'ModuleID': ID,
'ModuleName': NewModuleName
},
function(data){
alert(data);
}
);
}
});
// Поменять название мероприятие
var SubmoduleName;
$('.moduleList').on('focusin', '.SubmoduleName', function(){
SubmoduleName = $(this).val();
});
$('.moduleList').on('focusout', '.SubmoduleName', function(){
var NewSubmoduleName = $(this).val();
if (NewSubmoduleName != '' && SubmoduleName != NewSubmoduleName) {
var ID = $(this).parent('div').parent('div').attr('id');
$.post(
'/~dev_rating/handler/map/ChangeSubmoduleName',
{
'SubmoduleID': ID,
'SubmoduleName': NewSubmoduleName
},
function(data){
alert(data);
}
);
}
});
// При записи в input текущий контроль
// При фокусе
var OldMaxRate = 0;
$('.moduleList').on('focusin', '.inputCurrentControl', function(){
OldMaxRate = $(this).val();
});
// При потери фокуса
$('.moduleList').on('focusout', '.inputCurrentControl', function(){
SetNewRateAndControl($(this), OldMaxRate);
});
// При записи в input рубежный контроль
// При фокусе
var OldMaxRate = 0;
$('.moduleList').on('focusin', '.inputLandmarkControl', function(){
OldMaxRate = $(this).val();
});
// При потери фокуса
$('.moduleList').on('focusout', '.inputLandmarkControl', function(){
SetNewRateAndControl($(this), OldMaxRate);
});
// В inputCredit (где баллы вводить) разрешаем вводить только цифры
$(".moduleList").on('keydown', '.inputCredit', function(event) {
KeyDownOnlyNumber(event);
});
});