/**
*
*/
require(["solutions/qtAuthor/js/jquery-1.9.1.js", "dojo/domReady!"], function () { });
require(["solutions/qtAuthor/js/jquery-ui-1.10.3.custom.js", "dojo/domReady!"], function () { });
require(["solutions/qtAuthor/js/jquery.countdown.js", "dojo/domReady!"], function () { });
require(["solutions/qtAuthor/js/jquery.countdown-ru.js", "dojo/domReady!"], function () { });
require(["solutions/qtAuthor/js/jquery.ui.touch-punch.min.js", "dojo/domReady!"], function () { });
require(["solutions/authoring/js/MapArea/common.js", "dojo/domReady!"], function () { });
//require(["solutions/qtAuthor/js/jquery.iframe-post-form.js", "dojo/domReady!"], function () { });
var _currentAnswer = undefined;
function goToLink(mainContext, addContext, filterContext) {
window.open(window.location.toString()+addContext, "_blank");
}
function goToTest(mainContext, addContext, filterContext) {
var host = window.location.host;
var pathname = window.location.pathname;
var protocol = window.location.protocol;
window.open(protocol + "//" + host + pathname +"?userdata=qtAuthor"+addContext,'_blank');
}
function prepareClassifDnD() {
// получаем ответы из модели
var model = document.getElementById("4_mainModel");
var instance = model.getInstanceDocument("4_mainInstance");
var answers = instance.getElementsByTagName("answer");
for (var i = 0; i < answers.length; ++i) {
var answer = answers[i]; // Calling myNodeList.item(i) isn't necessary in JavaScript
$('div.answers').append("
" + (answer.text == undefined ? answer.textContent : answer.text) + '
'); // Content
}
var destructors = instance.getElementsByTagName("option");
var showCorrect = instance.getElementsByTagName("showCorrect")[0];
for (var j = 0; j < destructors.length; ++j) {
var destructor = destructors[j];
var answ = destructor.getElementsByTagName("answ")[0];
var opt = destructor.getElementsByTagName("opt")[0];
var answText = answ.textContent != undefined ? answ.textContent : answ.text;
var answDestructorID = answ.attributes.getNamedItem("DestructorID").value;
var optText = opt.textContent != undefined ? opt.textContent : opt.text;
$("#tblQuestion").append('' + destructor.attributes.getNamedItem("letter").value + ' | ' + optText + ' | ' + (answText != '' ? ' ' + answText + ' ' : '') + ' |
');
if (showCorrect.textContent == 'true' || showCorrect.text == 'true'){
var correctAnsw = destructor.getElementsByTagName("correctAnsw")[0]
var correctAnswText = correctAnsw.textContent != undefined ? correctAnsw.textContent : correctAnsw.text;
var correctAnswDestructorID = correctAnsw.attributes.getNamedItem("DestructorID").value;
$("#tblCorrectQuestion").append('' + destructor.attributes.getNamedItem("letter").value + ' | ' + optText + ' | ' + (correctAnswText != '' ? ' ' + correctAnswText + ' ' : '') + ' |
');
}
}
var status = instance.getElementsByTagName("testingStatus")[0];
if (status.textContent == '0' || status.text == '0') {
$('div.answer').on('click', function (arg) {
onDivAnswerClick(arg);
});
$('div.answers').on('click', function (arg) {
if (_currentAnswer != undefined && _currentAnswer != null && _currentAnswer.parentElement.className != "answers ui-droppable") {
_currentAnswer.remove();
_currentAnswer = undefined;
}
});
$('td.acceptAnswers').on('click', function (arg) {
if (_currentAnswer != undefined && _currentAnswer != null) {
$(this).empty();
$(this).append($(_currentAnswer).clone().on('click', function (arg) {
onDivAnswerClick(arg);
}).draggable({
helper: 'clone',
opacity: 0.5
}));
$(_currentAnswer).css('border', '');
_currentAnswer = undefined;
}
});
$('div.answer').draggable({
helper: 'clone',
opacity: 0.5
});
$('td.acceptAnswers').droppable({
tolerance: 'pointer',
accept: 'div.answer',
drop: function (event, ui) {
// $('div.answers').append($(this).children().clone());
$(this).empty();
$(this).append($(ui.draggable).clone().on('click', function (arg) {
onDivAnswerClick(arg);
}).draggable({
helper: 'clone',
opacity: 0.5
}));
}
});
$('div.answers').droppable({
tolerance: 'pointer',
accept: 'div.answer',
drop: function (event, ui) {
// $(this).append(ui.draggable.clone());
if (ui.draggable.parent()[0] != $('div.answers')[0]) {
ui.draggable.remove();
}
}
});
}
}
function saveClassifAnswerToModel() {
var model = document.getElementById("4_mainModel");
var instance = model.getInstanceDocument("4_mainInstance");
var nodeAnswers = instance.getElementsByTagName("result")[0];
nodeAnswers.textContent = '';
$("tr.destructor").each(function (index, tr) {
var variantDestructorID = tr.id.substring(2);
var startId = tr.id.substring(0,2);
if (startId == 'vd')
{
if ($(tr).find('div.answer')[0] != undefined) {
var destructorID = $(tr).find('div.answer')[0].id.substring(1);
var nodeAnswer = nodeAnswers.appendChild(nodeAnswers.ownerDocument.createElement('option2'))
nodeAnswer.setAttribute("VariantDestructorID", variantDestructorID);
nodeAnswer.setAttribute("DestructorID", destructorID);
}
}
});
model.rebuild();
model.recalculate();
model.refresh();
}
function onDivAnswerClick(arg) {
$('div.answer').css('border', '');
if (_currentAnswer != arg.currentTarget) {
$(arg.currentTarget).css('border', '4px solid #00FF00');
_currentAnswer = arg.currentTarget;
arg.stopPropagation();
}
}
function OnPartSelected(partName) {
alert(partName);
_currentPartName = partName;
}
function prepareDnD() {
// получаем ответы из модели
var model = document.getElementById("4_mainModel");
var instance = model.getInstanceDocument("4_mainInstance");
var answers = instance.getElementsByTagName("answer");
for (var i = 0; i < answers.length; ++i) {
var answer = answers[i]; // Calling myNodeList.item(i) isn't necessary in JavaScript
$('div.answers').append("" + (answer.text == undefined ? answer.textContent : answer.text) + '
'); // Content
}
var destructors = instance.getElementsByTagName("option");
var showCorrect = instance.getElementsByTagName("showCorrect")[0];
for (var j = 0; j < destructors.length; ++j) {
var destructor = destructors[j];
var answ = destructor.getElementsByTagName("answ")[0];
var opt = destructor.getElementsByTagName("opt")[0];
var answText = answ.textContent != undefined ? answ.textContent : answ.text;
var answDestructorID = answ.attributes.getNamedItem("DestructorID").value;
var optText = opt.textContent != undefined ? opt.textContent : opt.text;
$("#tblQuestion").append('' + destructor.attributes.getNamedItem("letter").value + ' | ' + optText + ' | ' + (answText != '' ? ' ' + answText + ' ' : '') + ' |
');
if (showCorrect.textContent == 'true' || showCorrect.text == 'true'){
var correctAnsw = destructor.getElementsByTagName("correctAnsw")[0]
var correctAnswText = correctAnsw.textContent != undefined ? correctAnsw.textContent : correctAnsw.text;
var correctAnswDestructorID = correctAnsw.attributes.getNamedItem("DestructorID").value;
$("#tblCorrectQuestion").append('' + destructor.attributes.getNamedItem("letter").value + ' | ' + optText + ' | ' + (correctAnswText != '' ? ' ' + correctAnswText + ' ' : '') + ' |
');
}
}
var status = instance.getElementsByTagName("testingStatus")[0];
if (status.textContent == '0' || status.text == '0') {
$('div.answer').on('click', function (arg) {
$('div.answer').css('border', '');
if (_currentAnswer != arg.currentTarget) {
$(arg.currentTarget).css('border', '4px solid #00FF00');
_currentAnswer = arg.currentTarget;
arg.stopPropagation();
}
});
$('div.answers').on('click', function (arg) {
if (_currentAnswer != undefined) {
$(this).append(_currentAnswer);
$(_currentAnswer).css('border', '');
_currentAnswer = undefined;
}
});
$('td.acceptAnswers').on('click', function (arg) {
$('div.answers').append($(this).children());
if (_currentAnswer != undefined) {
$(this).append(_currentAnswer);
$(_currentAnswer).css('border', '');
_currentAnswer = undefined;
}
});
$('div.answer').draggable({
helper: 'clone',
opacity: 0.5
});
$('td.acceptAnswers').droppable({
tolerance: 'pointer',
accept: 'div.answer',
drop: function (event, ui) {
$('div.answers').append($(this).children());
$(this).append(ui.draggable);
}
});
$('div.answers').droppable({
tolerance: 'pointer',
accept: 'div.answer',
drop: function (event, ui) {
$(this).append(ui.draggable);
}
});
}
}
function prepareSort() {
// получаем ответы из модели
var answer2destructor = {};
var correctAnswerToDestructor = {};
var model = document.getElementById("4_mainModel");
var instance = model.getInstanceDocument("4_mainInstance");
var destructors = instance.getElementsByTagName("option");
var showCorrect = instance.getElementsByTagName("showCorrect")[0];
for (var i = 0; i < destructors.length; ++i) {
var destructor = destructors[i]; // Calling myNodeList.item(i) isn't necessary in
var answ = destructor.getElementsByTagName("answ")[0];
var opt = destructor.getElementsByTagName("opt")[0];
var answText = answ.textContent != undefined ? answ.textContent : answ.text;
var optText = opt.textContent != undefined ? opt.textContent : opt.text;
if (answText == '') {
$('div.answers').append('' + optText + '
');
} else {
answer2destructor[answText] = destructor;
}
if (showCorrect.textContent == 'true' || showCorrect.text == 'true'){
var correctAnswer = destructor.getElementsByTagName("correctAnsw")[0];
var correctText = correctAnswer.textContent != undefined ? correctAnswer.textContent : correctAnswer.text;
correctAnswerToDestructor[correctText] = destructor
}
}
var answers = instance.getElementsByTagName("answer");
for (var j = 0; j < answers.length; ++j) {
var answer = answers[j];
// найти дестрактор с заданным ответом
var answerText = (j + 1).toString();
destructor = answer2destructor[answerText];
$("#tblQuestion").append('' + answerText + ' | ' + (destructor ? ' ' + getTextContent(destructor.getElementsByTagName("opt")[0]) + ' ' : '') + ' |
');
if (showCorrect.textContent == 'true' || showCorrect.text == 'true'){
correctDestructor = correctAnswerToDestructor[answerText];
$("#tblCorrectQuestion").append('' + answerText + ' | ' + (correctDestructor ? ' ' + getTextContent(correctDestructor.getElementsByTagName("opt")[0]) + ' ' : '') + ' |
');
}
}
var status = instance.getElementsByTagName("testingStatus")[0];
if (status.textContent == '0' || status.text == '0') {
$('div.answer').on('click', function (arg) {
$('div.answer').css('border', '');
if (_currentAnswer != arg.currentTarget) {
$(arg.currentTarget).css('border', '4px solid #00FF00');
_currentAnswer = arg.currentTarget;
arg.stopPropagation();
}
});
$('div.answers').on('click', function (arg) {
if (_currentAnswer != undefined) {
$(this).append(_currentAnswer);
$(_currentAnswer).css('border', '');
_currentAnswer = undefined;
}
});
$('td.acceptAnswers').on('click', function (arg) {
$('div.answers').append($(this).children());
if (_currentAnswer != undefined) {
$(this).append(_currentAnswer);
$(_currentAnswer).css('border', '');
_currentAnswer = undefined;
}
});
$('div.answer').draggable({
helper: 'clone',
opacity: 0.5
});
$('td.acceptAnswers').droppable({
tolerance: 'pointer',
accept: 'div.answer',
drop: function (event, ui) {
$('div.answers').append($(this).children());
$(this).append(ui.draggable);
}
});
$('div.answers').droppable({
tolerance: 'pointer',
accept: 'div.answer',
drop: function (event, ui) {
$(this).append(ui.draggable);
}
});
}
}
function getTextContent(obj) {
return obj.textContent != undefined ? obj.textContent : obj.text;
}
// сохранение данных html-формы в xml-объект модели XForm
function saveAnswerToModel() {
var model = document.getElementById("4_mainModel");
var instance = model.getInstanceDocument("4_mainInstance");
var nodeAnswers = instance.getElementsByTagName("result")[0];
nodeAnswers.textContent = '';
$("tr.destructor").each(function (index, tr) {
var variantDestructorID = tr.id.substring(2);
var startId = tr.id.substring(0,2);
if (startId == 'vd')
{
if ($(tr).find('div.answer')[0] != undefined) {
var destructorID = $(tr).find('div.answer')[0].id.substring(1);
var nodeAnswer = nodeAnswers.appendChild(nodeAnswers.ownerDocument.createElement('option2'))
nodeAnswer.setAttribute("VariantDestructorID", variantDestructorID);
nodeAnswer.setAttribute("DestructorID", destructorID);
}
}
});
model.rebuild();
model.recalculate();
model.refresh();
}
// сохранение данных html-формы в xml-объект модели XForm
function saveSortAnswerToModel() {
var model = document.getElementById("4_mainModel");
var instance = model.getInstanceDocument("4_mainInstance");
var nodeAnswers = instance.getElementsByTagName("result")[0];
nodeAnswers.textContent = '';
$("tr.destructor").each(function (index, tr) {
var startId = tr.id.substring(0,1);
if (startId == 'v')
{
if ($(tr).find('div.answer')[0] != undefined) {
var id = $(tr).find('div.answer')[0].id;
var answer = $(tr).find('div.values')[0].innerText;
var nodeAnswer = nodeAnswers.appendChild(nodeAnswers.ownerDocument.createElement('option2'))
nodeAnswer.setAttribute("id", id);
if (nodeAnswer.textContent != null)
nodeAnswer.textContent = answer;
else
nodeAnswer.text = answer;
}
}
});
model.rebuild();
model.recalculate();
model.refresh();
}
function injectCounter(toDate, fromDate) {
if (fromDate && fromDate != undefined) {
$('#timerDiv').countdown({ until: toDate, from: fromDate, format: 'MS' });
} else {
$('#timerDiv').countdown({ until: toDate, format: 'MS' });
}
var model = document.getElementById("4_mainModel");
var instance = model.getInstanceDocument("4_mainInstance");
var nodeAlgo = instance.getElementsByTagName("testingAlgorithm")[0];
if (nodeAlgo.textContent == 'Тестирование для самоконтроля' || nodeAlgo.text == 'Тестирование для самоконтроля') {
$('#showcaseHeaderContainer').css('background', 'white')
$('body').css('background', 'white');
$('.xforms-value').css('background', 'white')
}
}
function clearWordStyles() {
$('.MsoNormal').removeAttr('style');
$('.MsoNormal > *').css('font-size', '12pt');
}
function showcaseShowMessage(mainContext, addContext, filterContext) {
window.alert('Выделена строка: ' + addContext);
}
function showcaseShowAddContext(mainContext, addContext, filterContext) {
window.alert('add_context = ' + addContext);
}
function showcaseShowFilterContext(mainContext, addContext, filterContext) {
window.alert('filter_context = ' + filterContext);
}
function showcaseShowMainContext(mainContext, addContext, filterContext) {
window.alert('main_context = ' + mainContext);
}
function showcaseShowAllContexts(mainContext, addContext, filterContext) {
window.alert('main_context = ' + mainContext + '\n' + 'add_context = ' +
addContext + '\n' + 'filter_context = ' + filterContext);
}
function imageFilePicker(callback, value, meta) {
tinymce.activeEditor.windowManager.open({
title: 'Image Picker',
url: 'fc0001/pictures',
width: 650,
height: 550,
buttons: [{
text: 'Insert',
onclick: function () {
tinymce.activeEditor.windowManager.close();
}
}, {
text: 'Close',
onclick: 'close'
}],
}, {
oninsert: function (url) {
callback(url);
console.log('done');
},
});
}
/* ******* Map Area Draw ******* */
/* ******* @ Serhio Magpie ******* */
/* serdidg@gmail.com */
/* http://screensider.com */
var Painter = new function(){
var that = this,
isCanvas = false,
nodes,
context,
points = [],
areas = [],
answers,
answer,
model,
instance;
var colors = [
{'r':'0', 'g':'172', 'b':'239'},
{'r':'255', 'g':'0', 'b':'0'},
{'r':'255', 'g':'255', 'b':'0'},
{'r':'0', 'g':'255', 'b':'0'},
{'r':'0', 'g':'0', 'b':'255'},
{'r':'251', 'g':'140', 'b':'0'},
{'r':'0', 'g':'137', 'b':'123'},
{'r':'245', 'g':'0', 'b':'100'},
{'r':'142', 'g':'36', 'b':'170'},
{'r':'109', 'g':'76', 'b':'65'},
{'r':'96', 'g':'125', 'b':'139'},
{'r':'0', 'g':'172', 'b':'193'},
{'r':'233', 'g':'30', 'b':'99'},
{'r':'67', 'g':'160', 'b':'71'}
];
that.getHexColor = function(index){
return '#'+colors[index]['r'].toString(16)+colors[index]['g'].toString(16)+colors[index]['b'].toString(16);
}
var checkCanvas = function(){
if(nodes['canvas'].getContext){
isCanvas = true;
nodes['canvas'].width = nodes['draw'].offsetWidth;
nodes['canvas'].height = nodes['draw'].offsetHeight;
context = nodes['canvas'].getContext('2d');
}else{
_.remove(nodes['canvas']);
}
};
var clearAllBtn = function(){
nodes['clear_all'] = nodes['buttons'].appendChild(_.node('input', {'type':'button', 'value':'Очистить всё'}));
nodes['clear_all'].onclick = clearAll;
};
var addBtn = function(){
nodes['add'] = nodes['buttons'].appendChild(_.node('input', {'type':'button', 'value':'Добавить область'}));
nodes['add'].onclick = add;
};
var saveBtn = function(){
nodes['save'] = nodes['buttons'].appendChild(_.node('input', {'type':'button', 'value':'Сохранить область'}));
nodes['save'].onclick = save;
};
var clearAll = function(){
clear();
_.clearNode(nodes['info']);
points = [];
areas = [];
// Clear preview from points or canvas
if(isCanvas){
clearCanvas();
}else{
clearPoints();
}
};
var add = function(){
_.remove(nodes['add']);
_.addClass(nodes['preview'], 'draw');
_.addEvent(nodes['draw'], 'mousedown', addPoint);
// Render buttons
saveBtn();
};
var save = function(){
clear();
areas.push(_.clone(points));
renderAnswer(points);
points = [];
// renderInfo();
};
var clear = function(){
_.remove(nodes['add']);
_.remove(nodes['save']);
_.removeClass(nodes['preview'], 'draw');
_.removeEvent(nodes['draw'], 'mousedown', addPoint);
addBtn();
}
var clearCanvas = function(){
context.clearRect(0, 0, nodes['canvas'].width, nodes['canvas'].height);
};
var clearPoints = function(){
_.clearNode(nodes['points']);
};
var addPoint = function(e){
var e = _.getEvent(e),
offset = _.getOffset(nodes['draw']),
x = e.clientX + _.getDocScrollLeft() - offset[0],
y = e.clientY + _.getDocScrollTop() - offset[1];
// Push point to area array
points.push({'x' : x, 'y' : y});
// Draw point
if(isCanvas){
drawCanvasAll();
}else{
drawHtmlPoint(x,y);
}
// Prevent drag event
e.preventDefault && e.preventDefault();
return false;
};
var drawHtmlPoint = function(x, y){
var node = nodes['points'].appendChild(_.node('div', {'class':'point'}));
node.style.top = y-1+'px';
node.style.left = x-1+'px';
};
var drawCanvasPoints = function(o, areaColorIndex){
// Draw lines
var rgb = ''+colors[areaColorIndex]['r']+','+colors[areaColorIndex]['g']+','+colors[areaColorIndex]['b'];
context.fillStyle = 'rgba('+rgb+',0.2)';
// context.fillStyle = 'rgba(0,172,239,0.2)';
context.lineWidth = 1;
context.strokeStyle = 'rgba('+rgb+',0.8)';
// context.strokeStyle = 'rgba(0,172,239,0.8)';
context.beginPath();
for(var i = 0, l = o.length; i < l; i++){
if(i == 0){
context.moveTo(o[i]['x'], o[i]['y']);
}else{
context.lineTo(o[i]['x'], o[i]['y']);
}
}
context.closePath();
context.fill();
context.stroke();
// Draw points
context.fillStyle = 'rgba('+rgb+',0.8)';
// context.fillStyle = 'rgba(0,139,191,0.8)';
for(var i = 0, l = o.length; i < l; i++){
context.fillRect(o[i]['x']- 2, o[i]['y']- 2, 4, 4);
}
};
var drawCanvasAll = function(){
clearCanvas();
// Draw saved areas
var i = -1;
for(i = 0, l = areas.length; i < l; i++){
drawCanvasPoints(areas[i], i);
}
// Draw current area
if (i==-1) {++i};
drawCanvasPoints(points, i);
};
that.drawAnswerPointsAll = function(){
areas = [];
points = [];
var items = answers.getElementsByTagName('answer');
var item, i=0, j=0, len=0, coords='', coordsText='', a=[], answerColor='';
for (i = 0; i < items.length; ++i) {
item = items[i];
coords = item.getElementsByTagName('destructor')[0];
coordsText = coords.textContent != undefined ? coords.textContent : coords.text;
a = coordsText.split(',');
// console.log(a);
for (j = 0, len = a.length; j < len; j = j+2) {
points.push({'x' : +a[j], 'y' : +a[j+1]});
}
areas.push(_.clone(points));
// console.log(areas.length);
points = [];
answerColor = item.getElementsByTagName('color')[0];
setValue(answerColor, ''+colors[i]['r']+','+colors[i]['g']+','+colors[i]['b']);
// setValue(answerColor, that.getHexColor(i));
}
if (areas.length > 0) {
drawCanvasAll();
refreshXForm();
}
}
var renderInfo = function(){
var text;
_.clearNode(nodes['info']);
nodes['info'].appendChild(_.node('span', ''));
};
var renderAnswer = function(areaPoints){
var coords='';
if (areaPoints.length > 0){
for(var i2 = 0, l2 = areaPoints.length; i2 < l2; i2++){
if(i2 > 0){
coords += ',';
}
coords += areaPoints[i2]['x'] + ',' + areaPoints[i2]['y'];
}
}
// console.log(coords);
if (coords != '') {
var answerItem = answers.appendChild(answer.cloneNode(true));
var coordsItem = answerItem.getElementsByTagName("destructor")[0];
setValue(coordsItem, coords);
var answerColor = answerItem.getElementsByTagName('color')[0];
var i = areas.length-1;
setValue(answerColor, ''+colors[i]['r']+','+colors[i]['g']+','+colors[i]['b']);
refreshXForm();
}
};
var refreshXForm = function(){
xforms.ready = false;
model.rebuild();
model.recalculate();
xforms.refresh();
xforms.ready = true;
}
that.init = function(){
model = document.getElementById('btzAnswersCard_mainModel');
instance = model.getInstanceDocument('btzAnswersCard_mainInstance');
answer = model.getInstanceDocument('btzAnswersCard_answerInstance').getElementsByTagName('answer')[0];
answers = instance.getElementsByTagName('data')[0].getElementsByTagName('answers')[0];
nodes = {
'preview' : _.getEl('preview'),
'draw' : _.getEl('draw'),
'canvas' : _.getEl('canvas'),
'points' : _.getEl('points'),
'buttons' : _.getEl('bar'),
'info' : _.getEl('info')
}
// Init Canvas
checkCanvas();
that.drawAnswerPointsAll();
// Render buttons
// clearAllBtn();
addBtn();
};
}