Last active
January 20, 2017 01:01
-
-
Save marcelovani/388baba3f679f231dfd90721426cc1c5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| (function($) { | |
| /** | |
| * @memberOf $ | |
| */ | |
| $.wpProQuizFront = function(element, options) { | |
| console.log(options.json); | |
| var $e = $(element); | |
| var config = options; | |
| var plugin = this; | |
| var results = new Object(); | |
| var catResults = new Object(); | |
| var startTime = 0; | |
| var currentQuestion = null; | |
| var quizSolved = []; | |
| var lastButtonValue = ""; | |
| var inViewQuestions = false; | |
| var currentPage = 1; | |
| var bitOptions = { | |
| randomAnswer: 0, | |
| randomQuestion: 0, | |
| disabledAnswerMark: 0, | |
| checkBeforeStart: 0, | |
| preview: 0, | |
| cors: 0, | |
| isAddAutomatic: 0, | |
| quizSummeryHide: 0, | |
| skipButton: 0, | |
| reviewQustion: 0, | |
| autoStart: 0, | |
| forcingQuestionSolve: 0, | |
| hideQuestionPositionOverview: 0, | |
| formActivated: 0, | |
| maxShowQuestion: 0, | |
| sortCategories: 0 | |
| }; | |
| var quizStatus = { | |
| isQuizStart: 0, | |
| isLocked: 0, | |
| loadLock: 0, | |
| isPrerequisite: 0, | |
| isUserStartLocked: 0 | |
| }; | |
| var globalNames = { | |
| check: 'input[name="check"]', | |
| next: 'input[name="next"]', | |
| questionList: '.wpProQuiz_questionList', | |
| questionInput: '.wpProQuiz_questionInput', | |
| skip: 'input[name="skip"]', | |
| singlePageLeft: 'input[name="wpProQuiz_pageLeft"]', | |
| singlePageRight: 'input[name="wpProQuiz_pageRight"]' | |
| }; | |
| var globalElements = { | |
| back: $e.find('input[name="back"]'), | |
| next: $e.find(globalNames.next), | |
| quiz: $e.find('.wpProQuiz_quiz'), | |
| questionList: $e.find('.wpProQuiz_list'), | |
| results: $e.find('.wpProQuiz_results'), | |
| quizStartPage: $e.find('.wpProQuiz_text'), | |
| timelimit: $e.find('.wpProQuiz_time_limit'), | |
| toplistShowInButton: $e.find('.wpProQuiz_toplistShowInButton'), | |
| listItems: $() | |
| }; | |
| var toplistData = { | |
| token: '', | |
| isUser: 0 | |
| }; | |
| var formPosConst = { | |
| START: 0, | |
| END: 1 | |
| }; | |
| /** | |
| * @memberOf timelimit | |
| */ | |
| var timelimit = (function() { | |
| var _counter = config.timelimit; | |
| var _intervalId = 0; | |
| var instance = {}; | |
| instance.stop = function() { | |
| if(_counter) { | |
| window.clearInterval(_intervalId); | |
| globalElements.timelimit.hide(); | |
| } | |
| }; | |
| instance.start = function() { | |
| if(!_counter) | |
| return; | |
| var x = _counter * 1000; | |
| var $timeText = globalElements.timelimit.find('span').text(plugin.methode.parseTime(_counter)); | |
| var $timeDiv = globalElements.timelimit.find('.wpProQuiz_progress'); | |
| globalElements.timelimit.show(); | |
| var beforeTime = +new Date(); | |
| _intervalId = window.setInterval(function() { | |
| var diff = (+new Date() - beforeTime); | |
| var elapsedTime = x - diff; | |
| if(diff >= 500) { | |
| $timeText.text(plugin.methode.parseTime(Math.ceil(elapsedTime / 1000))); | |
| } | |
| $timeDiv.css('width', (elapsedTime / x * 100) + '%'); | |
| if(elapsedTime <= 0) { | |
| instance.stop(); | |
| plugin.methode.finishQuiz(true); | |
| } | |
| }, 16); | |
| }; | |
| return instance; | |
| })(); | |
| /** | |
| * @memberOf reviewBox | |
| */ | |
| var reviewBox = new function() { | |
| var $contain = [], $cursor = [], $list = [], $items = []; | |
| var x = 0, offset = 0, diff = 0, top = 0, max = 0; | |
| var itemsStatus = []; | |
| this.init = function() { | |
| $contain = $e.find('.wpProQuiz_reviewQuestion'); | |
| $cursor = $contain.find('div'); | |
| $list = $contain.find('ol'); | |
| $items = $list.children(); | |
| $cursor.mousedown(function(e) { | |
| e.preventDefault(); | |
| e.stopPropagation(); | |
| offset = e.pageY - $cursor.offset().top + top; | |
| $(document).bind('mouseup.scrollEvent', endScroll); | |
| $(document).bind('mousemove.scrollEvent', moveScroll); | |
| }); | |
| $items.click(function(e) { | |
| plugin.methode.showQuestion($(this).index()); | |
| }); | |
| $e.bind('questionSolved', function(e) { | |
| itemsStatus[e.values.index].solved = e.values.solved; | |
| setColor(e.values.index); | |
| }); | |
| $e.bind('changeQuestion', function(e) { | |
| $items.removeClass('wpProQuiz_reviewQuestionTarget'); | |
| $items.removeClass('active'); | |
| $items.eq(e.values.index).addClass('wpProQuiz_reviewQuestionTarget'); | |
| $items.eq(e.values.index).addClass('active'); | |
| scroll(e.values.index); | |
| }); | |
| $e.bind('reviewQuestion', function(e) { | |
| itemsStatus[e.values.index].review = !itemsStatus[e.values.index].review; | |
| setColor(e.values.index); | |
| }); | |
| $contain.bind('mousewheel DOMMouseScroll', function(e) { | |
| /*e.preventDefault(); | |
| var ev = e.originalEvent; | |
| var w = ev.wheelDelta ? -ev.wheelDelta / 120 : ev.detail / 3; | |
| var plus = 20 * w; | |
| var x = top - $list.offset().top + plus; | |
| if(x > max) | |
| x = max; | |
| if(x < 0) | |
| x = 0; | |
| var o = x / diff; | |
| $list.attr('style', 'margin-top: ' + (-x) + 'px !important'); | |
| $cursor.css({top: o}); | |
| return false;*/ | |
| }); | |
| }; | |
| this.show = function(save) { | |
| if(bitOptions.reviewQustion) | |
| $contain.parent().show(); | |
| $e.find('.wpProQuiz_reviewDiv .wpProQuiz_button2').show(); | |
| if(save) | |
| return; | |
| /*$list.attr('style', 'margin-top: 0px !important');*/ | |
| /*$cursor.css({top: 0});*/ | |
| var h = $list.outerHeight(); | |
| var c = $contain.height(); | |
| x = c - $cursor.height(); | |
| offset = 0; | |
| max = h-c; | |
| diff = max / x; | |
| this.reset(); | |
| if(h > 100) { | |
| $cursor.show(); | |
| } | |
| top = $cursor.offset().top; | |
| }; | |
| this.hide = function() { | |
| $contain.parent().hide(); | |
| }; | |
| this.toggle = function() { | |
| if(bitOptions.reviewQustion) { | |
| $contain.parent().toggle(); | |
| $items.removeClass('wpProQuiz_reviewQuestionTarget'); | |
| $e.find('.wpProQuiz_reviewDiv .wpProQuiz_button2').hide(); | |
| /*$list.attr('style', 'margin-top: 0px !important');*/ | |
| $cursor.css({top: 0}); | |
| var h = $list.outerHeight(); | |
| var c = $contain.height(); | |
| x = c - $cursor.height(); | |
| offset = 0; | |
| max = h-c; | |
| diff = max / x; | |
| if(h > 100) { | |
| $cursor.show(); | |
| } | |
| top = $cursor.offset().top; | |
| } | |
| }; | |
| this.reset = function() { | |
| for(var i = 0, c = $items.length; i < c; i++) { | |
| itemsStatus[i] = {}; | |
| } | |
| $items.removeClass('wpProQuiz_reviewQuestionTarget').css('background-color', ''); | |
| }; | |
| function scroll(index) { | |
| var $item = $items.eq(index); | |
| var iTop = $item.offset().top; | |
| var cTop = $contain.offset().top; | |
| var calc = iTop - cTop; | |
| if((calc - 4) < 0 || (calc + 32) > 100) { | |
| var x = cTop - $items.eq(0).offset().top - (cTop - $list.offset().top) + $item.position().top; | |
| if(x > max) | |
| x = max; | |
| var o = x / diff; | |
| /*$list.attr('style', 'margin-top: ' + (-x) + 'px !important');*/ | |
| /*$cursor.css({top: o});*/ | |
| } | |
| } | |
| function setColor(index) { | |
| var color = ''; | |
| var itemStatus = itemsStatus[index]; | |
| if(itemStatus.review) { | |
| color = '#FFB800'; | |
| } else if(itemStatus.solved) { | |
| color = '#58A819'; | |
| } | |
| $items.eq(index).css('background-color', color); | |
| $items.eq(index).addClass('text-white'); | |
| } | |
| function moveScroll(e) { | |
| e.preventDefault(); | |
| var o = e.pageY - offset; | |
| if(o < 0) | |
| o = 0; | |
| if(o > x) | |
| o = x; | |
| var v = diff * o; | |
| /*$list.attr('style', 'margin-top: ' + (-v) + 'px !important');*/ | |
| $cursor.css({top: o}); | |
| } | |
| function endScroll(e) { | |
| e.preventDefault(); | |
| $(document).unbind('.scrollEvent'); | |
| } | |
| }; | |
| function QuestionTimer() { | |
| var questionStartTime = 0; | |
| var currentQuestionId = -1; | |
| var quizStartTimer = 0; | |
| var isQuizStart = false; | |
| this.questionStart = function(questionId) { | |
| if(currentQuestionId != -1) | |
| this.questionStop(); | |
| currentQuestionId = questionId; | |
| questionStartTime = +new Date(); | |
| }; | |
| this.questionStop = function() { | |
| if(currentQuestionId == -1) | |
| return; | |
| results[currentQuestionId].time += Math.round((new Date() - questionStartTime) / 1000); | |
| currentQuestionId = -1; | |
| $e.find(globalNames.check).hide(); | |
| }; | |
| this.startQuiz = function() { | |
| if(isQuizStart) | |
| this.stopQuiz(); | |
| quizStartTimer = +new Date(); | |
| isQuizStart = true; | |
| }; | |
| this.stopQuiz = function() { | |
| if(!isQuizStart) | |
| return; | |
| results['comp'].quizTime += Math.round((new Date() - quizStartTimer) / 1000); | |
| isQuizStart = false; | |
| }; | |
| this.init = function() { | |
| }; | |
| }; | |
| var questionTimer = new QuestionTimer(); | |
| /** | |
| * @memberOf checker | |
| */ | |
| var checker = function(name, data, $question, $questionList) { | |
| var correct = true; | |
| var points = 0; | |
| var isDiffPoints = $.isArray(data.points); | |
| var statistcAnswerData = {}; | |
| var func = { | |
| singleMulti: function() { | |
| var input = $questionList.find('.wpProQuiz_questionInput').attr('disabled', 'disabled'); | |
| var isDiffMode = data.diffMode; | |
| $questionList.children().each(function(i) { | |
| var $item = $(this); | |
| var index = $item.data('pos'); | |
| var checked = input.eq(i).is(':checked'); | |
| if(data.correct[index]) { | |
| if(!checked) { | |
| correct = false; | |
| } else { | |
| if(isDiffPoints) { | |
| if(isDiffMode) | |
| points = data.points[index]; | |
| else | |
| points += data.points[index]; | |
| } | |
| } | |
| if(data.disCorrect) { | |
| correct = true; | |
| } else { | |
| plugin.methode.marker($item, true); | |
| } | |
| } else { | |
| if(checked) { | |
| if(!data.disCorrect) { | |
| plugin.methode.marker($item, false); | |
| correct = false; | |
| } else { | |
| correct = true; | |
| } | |
| if(isDiffMode) | |
| points = data.points[index]; | |
| } else { | |
| if(isDiffPoints && !isDiffMode) { | |
| points += data.points[index]; | |
| } | |
| } | |
| } | |
| }); | |
| }, | |
| sort_answer: function() { | |
| var $items = $questionList.children(); | |
| $items.each(function(i, v) { | |
| var $this = $(this); | |
| statistcAnswerData[i] = $this.data('pos'); | |
| if(i == $this.data('pos')) { | |
| plugin.methode.marker($this, true); | |
| if(isDiffPoints) { | |
| points += data.points[i]; | |
| } | |
| } else { | |
| plugin.methode.marker($this, false); | |
| correct = false; | |
| } | |
| }); | |
| $items.children().css({'box-shadow': '0 0', 'cursor': 'auto'}); | |
| $questionList.sortable("destroy"); | |
| $items.sort(function(a, b) { | |
| return $(a).data('pos') > $(b).data('pos') ? 1 : -1; | |
| }); | |
| $questionList.append($items); | |
| }, | |
| matrix_sort_answer: function() { | |
| var $items = $questionList.children(); | |
| var matrix = new Array(); | |
| statistcAnswerData = {0:-1}; | |
| $items.each(function() { | |
| var $this = $(this); | |
| var i = $this.data('pos'); | |
| var $stringUl = $this.find('.wpProQuiz_maxtrixSortCriterion'); | |
| var $stringItem = $stringUl.children(); | |
| if($stringItem.length) | |
| statistcAnswerData[i] = $stringItem.data('pos'); | |
| if($stringItem.length && $.inArray(String(i), String($stringItem.data('correct')).split(',')) >= 0) { | |
| // if(i == $stringItem.data('pos')) { | |
| plugin.methode.marker($stringUl, true); | |
| if(isDiffPoints) { | |
| points += data.points[i]; | |
| } | |
| } else { | |
| correct = false; | |
| plugin.methode.marker($stringUl, false); | |
| } | |
| matrix[i] = $stringUl; | |
| }); | |
| plugin.methode.resetMatrix($question); | |
| $question.find('.wpProQuiz_sortStringItem').each(function() { | |
| var x = matrix[$(this).data('pos')]; | |
| if(x != undefined) | |
| x.append(this); | |
| }).css({'box-shadow': '0 0', 'cursor': 'auto'}); | |
| $question.find('.wpProQuiz_sortStringList, .wpProQuiz_maxtrixSortCriterion').sortable("destroy"); | |
| }, | |
| free_answer: function() { | |
| var $li = $questionList.children(); | |
| var value = $li.find('.wpProQuiz_questionInput').attr('disabled', 'disabled').val(); | |
| if($.inArray($.trim(value).toLowerCase(), data.correct) >= 0) { | |
| plugin.methode.marker($li, true); | |
| } else { | |
| plugin.methode.marker($li, false); | |
| correct = false; | |
| } | |
| }, | |
| cloze_answer: function() { | |
| $questionList.find('.wpProQuiz_cloze').each(function(i, v) { | |
| var $this = $(this); | |
| var cloze = $this.children(); | |
| var input = cloze.eq(0); | |
| var span = cloze.eq(1); | |
| var inputText = plugin.methode.cleanupCurlyQuotes(input.val()); | |
| if($.inArray(inputText, data.correct[i]) >= 0) { | |
| if(isDiffPoints) { | |
| points += data.points[i]; | |
| } | |
| if(!bitOptions.disabledAnswerMark) { | |
| input.css('background-color', '#B0DAB0'); | |
| } | |
| } else { | |
| if(!bitOptions.disabledAnswerMark) { | |
| input.css('background-color', '#FFBABA'); | |
| } | |
| correct = false; | |
| span.show(); | |
| } | |
| input.attr('disabled', 'disabled'); | |
| }); | |
| }, | |
| assessment_answer: function() { | |
| correct = true; | |
| var $input = $questionList.find('.wpProQuiz_questionInput').attr('disabled', 'disabled'); | |
| var val = 0; | |
| $input.filter(':checked').each(function() { | |
| val += parseInt($(this).val()); | |
| }); | |
| points = val; | |
| } | |
| }; | |
| func[name](); | |
| if(!isDiffPoints && correct) { | |
| points = data.points; | |
| } | |
| return {c: correct, p: points, s: statistcAnswerData}; | |
| }; | |
| /** | |
| * @memberOf formClass | |
| */ | |
| var formClass = new function() { | |
| var funcs = { | |
| isEmpty: function(str) { | |
| str = $.trim(str); | |
| return (!str || 0 === str.length); | |
| } | |
| // testValidate: function(str, type) { | |
| // switch (type) { | |
| // case 0: //None | |
| // return true; | |
| // case 1: //Text | |
| // return !funcs.isEmpty(str); | |
| // case 2: //Number | |
| // return !isNaN(str); | |
| // case 3: //E-Mail | |
| // return new RegExp(/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/) | |
| // .test($.trim(str)); | |
| // } | |
| // } | |
| }; | |
| var typeConst = { | |
| TEXT: 0, | |
| TEXTAREA: 1, | |
| NUMBER: 2, | |
| CHECKBOX: 3, | |
| EMAIL: 4, | |
| YES_NO: 5, | |
| DATE: 6, | |
| SELECT: 7, | |
| RADIO: 8 | |
| }; | |
| this.checkForm = function() { | |
| var check = true; | |
| $e.find('.wpProQuiz_forms input, .wpProQuiz_forms textarea, .wpProQuiz_forms .wpProQuiz_formFields, .wpProQuiz_forms select').each(function() { | |
| var $this = $(this); | |
| var isRequired = $this.data('required') == 1; | |
| var type = $this.data('type'); | |
| var test = true; | |
| var value = $.trim($this.val()); | |
| switch (type) { | |
| case typeConst.TEXT: | |
| case typeConst.TEXTAREA: | |
| case typeConst.SELECT: | |
| if(isRequired) | |
| test = !funcs.isEmpty(value); | |
| break; | |
| case typeConst.NUMBER: | |
| if(isRequired || !funcs.isEmpty(value)) | |
| test = !funcs.isEmpty(value) && !isNaN(value); | |
| break; | |
| case typeConst.EMAIL: | |
| if(isRequired || !funcs.isEmpty(value)) | |
| test = !funcs.isEmpty(value) && new RegExp(/^[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/) | |
| .test(value); | |
| break; | |
| case typeConst.CHECKBOX: | |
| if(isRequired) | |
| test = $this.is(':checked'); | |
| break; | |
| case typeConst.YES_NO: | |
| case typeConst.RADIO: | |
| if(isRequired) | |
| test = $this.find('input[type="radio"]:checked').val() !== undefined; | |
| break; | |
| case typeConst.DATE: | |
| var num = 0, co = 0; | |
| $this.find('select').each(function() { | |
| num++; | |
| co += funcs.isEmpty($(this).val()) ? 0 : 1; | |
| }); | |
| if(isRequired || co > 0) | |
| test = num == co; | |
| break; | |
| } | |
| if(test) { | |
| $this.siblings('.wpProQuiz_invalidate').hide(); | |
| } else { | |
| check = false; | |
| $this.siblings('.wpProQuiz_invalidate').show(); | |
| } | |
| }); | |
| // $('.wpProQuiz_forms input, .wpProQuiz_forms textarea').each(function() { | |
| // var $this = $(this); | |
| // var isRequired = $this.data('required') == 1; | |
| // var validate = $this.data('validate') & 0xFF; | |
| // var test = false; | |
| // var $infos = $this.parents('div:eq(0)').find('.wpProQuiz_invalidate'); | |
| // | |
| // if(isRequired) { | |
| // if($this.attr('type') == 'checkbox') { | |
| // if($this.is(':checked')) | |
| // test = true; | |
| // | |
| // } else { | |
| // if(!funcs.isEmpty($this.val())) | |
| // test = true; | |
| // } | |
| // | |
| // if(!test) { | |
| // check = false; | |
| // $infos.eq(0).show(); | |
| // } else { | |
| // $infos.eq(0).hide(); | |
| // } | |
| // } | |
| // | |
| // if(!funcs.testValidate($this.val(), validate)) { | |
| // check = false; | |
| // $infos.eq(1).show(); | |
| // } else { | |
| // $infos.eq(1).hide(); | |
| // } | |
| // | |
| // }); | |
| // if(!check) | |
| // alert(WpProQuizGlobal.fieldsNotFilled); | |
| // | |
| return check; | |
| }; | |
| this.getFormData = function() { | |
| var data = {}; | |
| $e.find('.wpProQuiz_forms input, .wpProQuiz_forms textarea, .wpProQuiz_forms .wpProQuiz_formFields, .wpProQuiz_forms select').each(function() { | |
| var $this = $(this); | |
| var id = $this.data('form_id'); | |
| var type = $this.data('type'); | |
| switch (type) { | |
| case typeConst.TEXT: | |
| case typeConst.TEXTAREA: | |
| case typeConst.SELECT: | |
| case typeConst.NUMBER: | |
| case typeConst.EMAIL: | |
| data[id] = $this.val(); | |
| break; | |
| case typeConst.CHECKBOX: | |
| data[id] = $this.is(':checked') ? 1 : 0; | |
| break; | |
| case typeConst.YES_NO: | |
| case typeConst.RADIO: | |
| data[id] = $this.find('input[type="radio"]:checked').val(); | |
| break; | |
| case typeConst.DATE: | |
| data[id] = { | |
| day: $this.find('select[name="wpProQuiz_field_' + id +'_day"]').val(), | |
| month: $this.find('select[name="wpProQuiz_field_' + id +'_month"]').val(), | |
| year: $this.find('select[name="wpProQuiz_field_' + id +'_year"]').val() | |
| }; | |
| break; | |
| } | |
| }); | |
| return data; | |
| }; | |
| }; | |
| var fetchAllAnswerData = function(resultData) { | |
| $e.find('.wpProQuiz_questionList').each(function() { | |
| var $this = $(this); | |
| var questionId = $this.data('question_id'); | |
| var type = $this.data('type'); | |
| var data = {}; | |
| if(type == 'single' || type == 'multiple') { | |
| $this.find('.wpProQuiz_questionListItem').each(function() { | |
| data[$(this).data('pos')] = +$(this).find('.wpProQuiz_questionInput').is(':checked'); | |
| }); | |
| } else if(type == 'free_answer') { | |
| data[0] = $this.find('.wpProQuiz_questionInput').val(); | |
| } else if(type == 'sort_answer') { | |
| return true; | |
| // $this.find('.wpProQuiz_questionListItem').each(function() { | |
| // data[$(this).index()] = $(this).data('pos'); | |
| // }); | |
| } else if(type == 'matrix_sort_answer') { | |
| return true; | |
| // $this.find('.wpProQuiz_questionListItem').each(function() { | |
| // data[$(this).data('pos')] = $(this).find('.wpProQuiz_answerCorrect').length; | |
| // }); | |
| } else if(type == 'cloze_answer') { | |
| var i = 0; | |
| $this.find('.wpProQuiz_cloze input').each(function() { | |
| data[i++] = $(this).val(); | |
| }); | |
| } else if(type == 'assessment_answer') { | |
| data[0] = ''; | |
| $this.find('.wpProQuiz_questionInput:checked').each(function() { | |
| data[$(this).data('index')] = $(this).val(); | |
| }); | |
| } | |
| resultData[questionId]['data'] = data; | |
| }); | |
| }; | |
| plugin.methode = { | |
| /** | |
| * @memberOf plugin.methode | |
| */ | |
| parseBitOptions: function() { | |
| if(config.bo) { | |
| bitOptions.randomAnswer = config.bo & (1 << 0); | |
| bitOptions.randomQuestion = config.bo & (1 << 1); | |
| bitOptions.disabledAnswerMark = config.bo & (1 << 2); | |
| bitOptions.checkBeforeStart = config.bo & (1 << 3); | |
| bitOptions.preview = config.bo & (1 << 4); | |
| bitOptions.isAddAutomatic = config.bo & (1 << 6); | |
| bitOptions.reviewQustion = config.bo & ( 1 << 7); | |
| bitOptions.quizSummeryHide = config.bo & (1 << 8); | |
| bitOptions.skipButton = config.bo & (1 << 9); | |
| bitOptions.autoStart = config.bo & (1 << 10); | |
| bitOptions.forcingQuestionSolve = config.bo & (1 << 11); | |
| bitOptions.hideQuestionPositionOverview = config.bo & (1 << 12); | |
| bitOptions.formActivated = config.bo & (1 << 13); | |
| bitOptions.maxShowQuestion = config.bo & (1 << 14); | |
| bitOptions.sortCategories = config.bo & (1 << 15); | |
| var cors = config.bo & (1 << 5); | |
| if(cors && jQuery.support != undefined && jQuery.support.cors != undefined && jQuery.support.cors == false) { | |
| bitOptions.cors = cors; | |
| } | |
| } | |
| }, | |
| setClozeStyle: function() { | |
| $e.find('.wpProQuiz_cloze input').each(function() { | |
| var $this = $(this); | |
| var word = ""; | |
| var wordLen = $this.data('wordlen'); | |
| for(var i = 0; i < wordLen; i++) | |
| word += "w"; | |
| var clone = $(document.createElement("span")) | |
| .css('visibility', 'hidden') | |
| .text(word) | |
| .appendTo($('body')); | |
| var width = clone.width(); | |
| clone.remove(); | |
| $this.width(width + 5); | |
| }); | |
| }, | |
| parseTime: function(sec) { | |
| var seconds = parseInt(sec % 60); | |
| var minutes = parseInt((sec / 60) % 60); | |
| var hours = parseInt((sec / 3600) % 24); | |
| seconds = (seconds > 9 ? '' : '0') + seconds; | |
| minutes = (minutes > 9 ? '' : '0') + minutes; | |
| hours = (hours > 9 ? '' : '0') + hours; | |
| return hours + ':' + minutes + ':' + seconds; | |
| }, | |
| cleanupCurlyQuotes: function(str) { | |
| str = str.replace(/\u2018/, "'"); | |
| str = str.replace(/\u2019/, "'"); | |
| str = str.replace(/\u201C/, '"'); | |
| str = str.replace(/\u201D/, '"'); | |
| return $.trim(str).toLowerCase(); | |
| }, | |
| resetMatrix: function(selector) { | |
| selector.each(function() { | |
| var $this = $(this); | |
| var $list = $this.find('.wpProQuiz_sortStringList'); | |
| $this.find('.wpProQuiz_sortStringItem').each(function() { | |
| $list.append($(this)); | |
| }); | |
| }); | |
| }, | |
| marker: function(e, correct) { | |
| if(!bitOptions.disabledAnswerMark) { | |
| if(correct) { | |
| e.addClass('wpProQuiz_answerCorrect'); | |
| /*display check icon*/ | |
| $('.wpProQuiz_answerCorrect').find('.fa-check').attr('style', 'display: block !important'); | |
| } else { | |
| e.addClass('wpProQuiz_answerIncorrect'); | |
| /*display X icon*/ | |
| $('.wpProQuiz_answerIncorrect').find('.fa-times').attr('style', 'display: block !important'); | |
| } | |
| } | |
| }, | |
| startQuiz: function(loadData) { | |
| if(quizStatus.loadLock) { | |
| quizStatus.isQuizStart = 1; | |
| return; | |
| } | |
| quizStatus.isQuizStart = 0; | |
| if(quizStatus.isLocked) { | |
| globalElements.quizStartPage.hide(); | |
| $e.find('.wpProQuiz_lock').show(); | |
| return; | |
| } | |
| if(quizStatus.isPrerequisite) { | |
| globalElements.quizStartPage.hide(); | |
| $e.find('.wpProQuiz_prerequisite').show(); | |
| return; | |
| } | |
| if(quizStatus.isUserStartLocked) { | |
| globalElements.quizStartPage.hide(); | |
| $e.find('.wpProQuiz_startOnlyRegisteredUser').show(); | |
| return; | |
| } | |
| if(bitOptions.maxShowQuestion && !loadData) { | |
| globalElements.quizStartPage.hide(); | |
| $e.find('.wpProQuiz_loadQuiz').show(); | |
| plugin.methode.loadQuizDataAjax(true); | |
| return; | |
| } | |
| if(bitOptions.formActivated && config.formPos == formPosConst.START) { | |
| if(!formClass.checkForm()) | |
| return; | |
| } | |
| plugin.methode.loadQuizData(); | |
| if(bitOptions.randomQuestion) { | |
| plugin.methode.random(globalElements.questionList); | |
| } | |
| if(bitOptions.randomAnswer) { | |
| plugin.methode.random($e.find(globalNames.questionList)); | |
| } | |
| if(bitOptions.sortCategories) { | |
| plugin.methode.sortCategories(); | |
| } | |
| plugin.methode.random($e.find('.wpProQuiz_sortStringList')); | |
| plugin.methode.random($e.find('[data-type="sort_answer"]')); | |
| $e.find('.wpProQuiz_listItem').each(function(i, v) { | |
| var $this = $(this); | |
| $this.find('.wpProQuiz_question_page span:eq(0)').text(i+1); | |
| $this.find('> h5 span').text(i+1); | |
| $this.find('.wpProQuiz_questionListItem').each(function(i, v) { | |
| $(this).find('> span:not(.wpProQuiz_cloze)').text(i+1 + '. '); | |
| }); | |
| }); | |
| globalElements.next = $e.find(globalNames.next); | |
| switch (config.mode) { | |
| case 3: | |
| $e.find('input[name="checkSingle"]').show(); | |
| break; | |
| case 2: | |
| $e.find(globalNames.check).hide(); | |
| if(!bitOptions.skipButton && bitOptions.reviewQustion) | |
| $e.find(globalNames.skip).show(); | |
| break; | |
| case 1: | |
| $e.find('input[name="back"]').slice(1).show(); | |
| case 0: | |
| globalElements.next.hide(); | |
| break; | |
| } | |
| if(bitOptions.hideQuestionPositionOverview || config.mode == 3) | |
| $e.find('.wpProQuiz_question_page').hide(); | |
| //Change last name | |
| var $lastButton = globalElements.next.last(); | |
| lastButtonValue = $lastButton.val(); | |
| $lastButton.val(config.lbn); | |
| var $listItem = globalElements.questionList.children(); | |
| globalElements.listItems = $e.find('.wpProQuiz_list > li'); | |
| if(config.mode == 3) { | |
| plugin.methode.showSinglePage(0); | |
| // if(config.qpp) { | |
| // $listItem.slice(0, config.qpp).show(); | |
| // $e.find(globalNames.singlePageRight).show(); | |
| // $e.find('input[name="checkSingle"]').hide(); | |
| // } else { | |
| // $listItem.show(); | |
| // } | |
| } else { | |
| currentQuestion = $listItem.eq(0).show(); | |
| var questionId = currentQuestion.find(globalNames.questionList).data('question_id'); | |
| questionTimer.questionStart(questionId); | |
| } | |
| questionTimer.startQuiz(); | |
| $e.find('.wpProQuiz_sortable').parents('ul').sortable({ | |
| update: function( event, ui ) { | |
| var $p = $(this).parents('.wpProQuiz_listItem'); | |
| $e.trigger({type: 'questionSolved', values: {item: $p, index: $p.index(), solved: true}}); | |
| } | |
| }).disableSelection(); | |
| $e.find('.wpProQuiz_sortStringList, .wpProQuiz_maxtrixSortCriterion').sortable({ | |
| connectWith: '.wpProQuiz_maxtrixSortCriterion:not(:has(li)), .wpProQuiz_sortStringList', | |
| placeholder: 'wpProQuiz_placehold', | |
| update: function( event, ui ) { | |
| var $p = $(this).parents('.wpProQuiz_listItem'); | |
| $e.trigger({type: 'questionSolved', values: {item: $p, index: $p.index(), solved: true}}); | |
| } | |
| }).disableSelection(); | |
| quizSolved = []; | |
| timelimit.start(); | |
| startTime = +new Date(); | |
| results = {comp: {points: 0, correctQuestions: 0, quizTime: 0}}; | |
| $e.find('.wpProQuiz_questionList').each(function() { | |
| var questionId = $(this).data('question_id'); | |
| results[questionId] = {time: 0, solved: 0}; | |
| }); | |
| catResults = {}; | |
| $.each(options.catPoints, function(i, v) { | |
| catResults[i] = 0; | |
| }); | |
| globalElements.quizStartPage.hide(); | |
| $e.find('.wpProQuiz_loadQuiz').hide(); | |
| globalElements.quiz.show(); | |
| reviewBox.show(); | |
| if(config.mode != 3) { | |
| $e.trigger({type: 'changeQuestion', values: {item: currentQuestion, index: currentQuestion.index()}}); | |
| } | |
| }, | |
| showSingleQuestion: function(question) { | |
| var page = question ? Math.ceil(question / config.qpp) : 1; | |
| this.showSinglePage(page); | |
| // plugin.methode.scrollTo($element, 1); | |
| }, | |
| showSinglePage: function(page) { | |
| $listItem = globalElements.questionList.children().hide(); | |
| if(!config.qpp) { | |
| $listItem.show(); | |
| return; | |
| } | |
| page = page ? +page : 1; | |
| var maxPage = Math.ceil($e.find('.wpProQuiz_list > li').length / config.qpp); | |
| if(page > maxPage) | |
| return; | |
| var pl = $e.find(globalNames.singlePageLeft).hide(); | |
| var pr = $e.find(globalNames.singlePageRight).hide(); | |
| var cs = $e.find('input[name="checkSingle"]').hide(); | |
| if(page > 1) { | |
| pl.val(pl.data('text').replace(/%d/, page-1)).show(); | |
| } | |
| if(page == maxPage) { | |
| cs.show(); | |
| } else { | |
| pr.val(pr.data('text').replace(/%d/, page+1)).show(); | |
| } | |
| currentPage = page; | |
| var start = config.qpp * (page - 1); | |
| $listItem.slice(start, start + config.qpp).show(); | |
| plugin.methode.scrollTo(globalElements.quiz); | |
| }, | |
| nextQuestion: function() { | |
| // currentQuestion = currentQuestion.hide().next().show(); | |
| // | |
| // plugin.methode.scrollTo(globalElements.quiz); | |
| // | |
| // $e.trigger({type: 'changeQuestion', values: {item: currentQuestion, index: currentQuestion.index()}}); | |
| // | |
| // if(!currentQuestion.length) { | |
| // plugin.methode.showQuizSummary(); | |
| // } | |
| this.showQuestionObject(currentQuestion.next()); | |
| }, | |
| prevQuestion: function() { | |
| // currentQuestion = currentQuestion.hide().prev().show(); | |
| // | |
| // plugin.methode.scrollTo(globalElements.quiz); | |
| // | |
| // $e.trigger({type: 'changeQuestion', values: {item: currentQuestion, index: currentQuestion.index()}}); | |
| // | |
| this.showQuestionObject(currentQuestion.prev()); | |
| }, | |
| showQuestion: function(index) { | |
| var $element = globalElements.listItems.eq(index); | |
| if(config.mode == 3 || inViewQuestions) { | |
| if(config.qpp) { | |
| plugin.methode.showSingleQuestion(index+1); | |
| // questionTimer.startQuiz(); | |
| // return; | |
| } | |
| // plugin.methode.scrollTo($e.find('.wpProQuiz_list > li').eq(index), 1); | |
| plugin.methode.scrollTo($element, 1); | |
| questionTimer.startQuiz(); | |
| return; | |
| } | |
| // currentQuestion.hide(); | |
| // | |
| // currentQuestion = $element.show(); | |
| // | |
| // plugin.methode.scrollTo(globalElements.quiz); | |
| // | |
| // $e.trigger({type: 'changeQuestion', values: {item: currentQuestion, index: currentQuestion.index()}}); | |
| // | |
| // if(!currentQuestion.length) | |
| // plugin.methode.showQuizSummary(); | |
| this.showQuestionObject($element); | |
| }, | |
| showQuestionObject: function(obj) { | |
| if(!obj.length && bitOptions.forcingQuestionSolve && bitOptions.quizSummeryHide && bitOptions.reviewQustion) { | |
| for(var i = 0, c = $e.find('.wpProQuiz_listItem').length; i < c; i++) { | |
| if(!quizSolved[i]) { | |
| alert(WpProQuizGlobal.questionsNotSolved); | |
| return false; | |
| } | |
| } | |
| } | |
| currentQuestion.hide(); | |
| currentQuestion = obj.show(); | |
| plugin.methode.scrollTo(globalElements.quiz); | |
| $e.trigger({type: 'changeQuestion', values: {item: currentQuestion, index: currentQuestion.index()}}); | |
| if(!currentQuestion.length) { | |
| plugin.methode.showQuizSummary(); | |
| } else { | |
| var questionId = currentQuestion.find(globalNames.questionList).data('question_id'); | |
| questionTimer.questionStart(questionId); | |
| } | |
| }, | |
| skipQuestion: function() { | |
| $e.trigger({type: 'skipQuestion', values: {item: currentQuestion, index: currentQuestion.index()}}); | |
| plugin.methode.nextQuestion(); | |
| }, | |
| reviewQuestion: function() { | |
| $e.trigger({type: 'reviewQuestion', values: {item: currentQuestion, index: currentQuestion.index()}}); | |
| plugin.methode.nextQuestion(); | |
| }, | |
| showQuizSummary: function() { | |
| questionTimer.questionStop(); | |
| questionTimer.stopQuiz(); | |
| if(bitOptions.quizSummeryHide || !bitOptions.reviewQustion) { | |
| if(bitOptions.formActivated && config.formPos == formPosConst.END) { | |
| reviewBox.hide(); | |
| globalElements.quiz.hide(); | |
| plugin.methode.scrollTo($e.find('.wpProQuiz_infopage').show()); | |
| } else { | |
| plugin.methode.finishQuiz(); | |
| } | |
| return; | |
| } | |
| var quizSummary = $e.find('.wpProQuiz_checkPage'); | |
| quizSummary.find('ol:eq(0)').empty() | |
| .append($e.find('.wpProQuiz_reviewQuestion ol li').clone().removeClass('wpProQuiz_reviewQuestionTarget')) | |
| .children().click(function(e) { | |
| quizSummary.hide(); | |
| globalElements.quiz.show(); | |
| reviewBox.show(true); | |
| plugin.methode.showQuestion($(this).index()); | |
| }); | |
| var cSolved = 0; | |
| for(var i = 0, c = quizSolved.length; i < c; i++) { | |
| if(quizSolved[i]) { | |
| cSolved++; | |
| } | |
| } | |
| quizSummary.find('span:eq(0)').text(cSolved); | |
| reviewBox.hide(); | |
| globalElements.quiz.hide(); | |
| quizSummary.show(); | |
| plugin.methode.scrollTo(quizSummary); | |
| }, | |
| finishQuiz: function(timeover) { | |
| questionTimer.questionStop(); | |
| questionTimer.stopQuiz(); | |
| timelimit.stop(); | |
| var time = (+new Date() - startTime) / 1000; | |
| time = (config.timelimit && time > config.timelimit) ? config.timelimit : time; | |
| $e.find('.wpProQuiz_quiz_time span').text(plugin.methode.parseTime(time)); | |
| if(timeover) { | |
| globalElements.results.find('.wpProQuiz_time_limit_expired').show(); | |
| } | |
| plugin.methode.checkQuestion(globalElements.questionList.children(), true); | |
| $e.find('.wpProQuiz_correct_answer').text(results.comp.correctQuestions); | |
| results.comp.result = Math.round(results.comp.points / config.globalPoints * 100 * 100) / 100; | |
| results.comp.solved = 0; | |
| //for(var i = 0; i < quizSolved.length; i++) | |
| // results.comp.solved += quizSolved[i] ? 1 : 0; | |
| var $pointFields = $e.find('.wpProQuiz_points span'); | |
| $pointFields.eq(0).text(results.comp.points); | |
| $pointFields.eq(1).text(config.globalPoints); | |
| $pointFields.eq(2).text(results.comp.result + '%'); | |
| //Result-Text START | |
| var $resultText = $e.find('.wpProQuiz_resultsList > li').eq(plugin.methode.findResultIndex(results.comp.result)); | |
| var formData = formClass.getFormData(); | |
| $resultText.find('.wpProQuiz_resultForm').each(function() { | |
| var $this = $(this); | |
| var formId = $this.data('form_id'); | |
| var data = formData[formId]; | |
| if(typeof data === 'object') { | |
| data = data['day'] + '-' + data['month'] + '-' + data['year']; | |
| } | |
| $this.text(data).show(); | |
| }); | |
| $resultText.show(); | |
| //Result-Text END | |
| plugin.methode.setAverageResult(results.comp.result, false); | |
| this.setCategoryOverview(); | |
| plugin.methode.sendCompletedQuiz(); | |
| if(bitOptions.isAddAutomatic && toplistData.isUser) { | |
| plugin.methode.addToplist(); | |
| } | |
| reviewBox.hide(); | |
| $e.find('.wpProQuiz_checkPage, .wpProQuiz_infopage').hide(); | |
| globalElements.quiz.hide(); | |
| globalElements.results.show(); | |
| plugin.methode.scrollTo(globalElements.results); | |
| }, | |
| setCategoryOverview: function() { | |
| results.comp.cats = {}; | |
| $e.find('.wpProQuiz_catOverview li').each(function() { | |
| var $this = $(this); | |
| var catId = $this.data('category_id'); | |
| if(config.catPoints[catId] === undefined) { | |
| $this.hide(); | |
| return true; | |
| } | |
| var r = Math.round(catResults[catId] / config.catPoints[catId] * 100 * 100) / 100; | |
| results.comp.cats[catId] = r; | |
| $this.find('.wpProQuiz_catPercent').text(r + '%'); | |
| $this.show(); | |
| }); | |
| }, | |
| questionSolved: function(e) { | |
| quizSolved[e.values.index] = e.values.solved; | |
| var $questionList = e.values.item.find(globalNames.questionList); | |
| var data = config.json[$questionList.data('question_id')]; | |
| results[data.id].solved = Number(e.values.fake ? results[data.id].solved : e.values.solved); | |
| }, | |
| sendCompletedQuiz: function() { | |
| if(bitOptions.preview) | |
| return; | |
| fetchAllAnswerData(results); | |
| var formData = formClass.getFormData(); | |
| plugin.methode.ajax({ | |
| action : 'wp_pro_quiz_completed_quiz', | |
| quizId : config.quizId, | |
| results : results, | |
| forms: formData | |
| }); | |
| }, | |
| findResultIndex: function(p) { | |
| var r = config.resultsGrade; | |
| var index = -1; | |
| var diff = 999999; | |
| for(var i = 0; i < r.length; i++){ | |
| var v = r[i]; | |
| if((p >= v) && ((p-v) < diff)) { | |
| diff = p-v; | |
| index = i; | |
| } | |
| } | |
| return index; | |
| }, | |
| showQustionList: function() { | |
| inViewQuestions = !inViewQuestions; | |
| globalElements.toplistShowInButton.hide(); | |
| globalElements.quiz.toggle(); | |
| $e.find('.wpProQuiz_QuestionButton').hide(); | |
| globalElements.questionList.children().show(); | |
| reviewBox.toggle(); | |
| $e.find('.wpProQuiz_question_page').hide(); | |
| }, | |
| random: function(group) { | |
| group.each(function() { | |
| var e = $(this).children().get().sort(function() { | |
| return Math.round(Math.random()) - 0.5; | |
| }); | |
| $(e).appendTo(e[0].parentNode); | |
| }); | |
| }, | |
| sortCategories: function() { | |
| var e = $('.wpProQuiz_list').children().get().sort(function(a, b) { | |
| var aQuestionId = $(a).find('.wpProQuiz_questionList').data('question_id'); | |
| var bQuestionId = $(b).find('.wpProQuiz_questionList').data('question_id'); | |
| return config.json[aQuestionId].catId - config.json[bQuestionId].catId; | |
| }); | |
| $(e).appendTo(e[0].parentNode); | |
| }, | |
| restartQuiz: function() { | |
| globalElements.results.hide(); | |
| globalElements.quizStartPage.show(); | |
| globalElements.questionList.children().hide(); | |
| globalElements.toplistShowInButton.hide(); | |
| reviewBox.hide(); | |
| $e.find('.wpProQuiz_questionInput, .wpProQuiz_cloze input').removeAttr('disabled').removeAttr('checked') | |
| .css('background-color', ''); | |
| // $e.find('.wpProQuiz_cloze input').val(''); | |
| $e.find('.wpProQuiz_questionListItem input[type="text"]').val(''); | |
| $('.wpProQuiz_answerCorrect').find('.fa-check').removeAttr('style'); | |
| $('.wpProQuiz_answerIncorrect').find('.fa-times').removeAttr('style'); | |
| $e.find('.wpProQuiz_answerCorrect, .wpProQuiz_answerIncorrect').removeClass('wpProQuiz_answerCorrect wpProQuiz_answerIncorrect'); | |
| $e.find('.answer-is-correct').removeClass('answer-is-correct'); | |
| $e.find('.answer-is-incorrect').removeClass('answer-is-incorrect'); | |
| $e.find('.text-white').removeClass('text-white'); | |
| $e.find('.wpProQuiz_listItem').data('check', false); | |
| $e.find('.wpProQuiz_response').hide().children().hide(); | |
| plugin.methode.resetMatrix($e.find('.wpProQuiz_listItem')); | |
| $e.find('.wpProQuiz_sortStringItem, .wpProQuiz_sortable').removeAttr('style'); | |
| $e.find('.wpProQuiz_clozeCorrect, .wpProQuiz_QuestionButton, .wpProQuiz_resultsList > li').hide(); | |
| $e.find('.wpProQuiz_question_page, input[name="tip"]').show(); | |
| $e.find('.wpProQuiz_resultForm').text('').hide(); | |
| globalElements.results.find('.wpProQuiz_time_limit_expired').hide(); | |
| globalElements.next.last().val(lastButtonValue); | |
| inViewQuestions = false; | |
| plugin.methode.startQuiz(); | |
| }, | |
| checkQuestion: function(list, endCheck) { | |
| list = (list == undefined) ? currentQuestion : list; | |
| list.each(function() { | |
| var $this = $(this); | |
| var $questionList = $this.find(globalNames.questionList); | |
| var data = config.json[$questionList.data('question_id')]; | |
| var name = data.type; | |
| questionTimer.questionStop(); | |
| if($this.data('check')) { | |
| return true; | |
| } | |
| if(data.type == 'single' || data.type == 'multiple') { | |
| name = 'singleMulti'; | |
| } | |
| var result = checker(name, data, $this, $questionList); | |
| $this.find('.wpProQuiz_response').show(); | |
| $this.find(globalNames.check).hide(); | |
| $this.find(globalNames.skip).hide(); | |
| /*$this.find(globalNames.next).show();*/ | |
| results[data.id].points = result.p; | |
| results[data.id].correct = Number(result.c); | |
| results[data.id].data = result.s; | |
| results['comp'].points += result.p; | |
| catResults[data.catId] += result.p; | |
| if(result.c) { | |
| if (config.mode == 2) { | |
| /* hide correct answer message */ | |
| $this.find('.wpProQuiz_response').hide(); | |
| results['comp'].correctQuestions += 1; | |
| $('.wpProQuiz_reviewQuestion').find('li.active').addClass('answer-is-correct').removeClass('active'); | |
| /* If answer is correct, move to the next question */ | |
| var questionLength = $('.wpProQuiz_reviewQuestion').find('ol li').length; | |
| var currentItem = $('li.wpProQuiz_reviewQuestionTarget').index()+1; | |
| if( questionLength == currentItem ) { | |
| $this.find(globalNames.next).show(); | |
| } else { | |
| plugin.methode.nextQuestion(); | |
| } | |
| } else if (config.mode == 0) { | |
| /* hide correct answer message */ | |
| $this.find('.wpProQuiz_response').hide(); | |
| results['comp'].correctQuestions += 1; | |
| $('.wpProQuiz_reviewQuestion').find('li.active').addClass('answer-is-correct').removeClass('active'); | |
| /* If answer is correct, move to the next question */ | |
| var questionLength = $('.wpProQuiz_reviewQuestion').find('ol li').length; | |
| var currentItem = $('li.wpProQuiz_reviewQuestionTarget').index()+1; | |
| $this.find(globalNames.next).show(); | |
| } | |
| } else { | |
| $this.find('.wpProQuiz_incorrect').show(); | |
| /*add class for incorrect answer*/ | |
| $('.wpProQuiz_reviewQuestion').find('li.active').addClass('answer-is-incorrect').removeClass('active'); | |
| $this.find(globalNames.next).show(); | |
| } | |
| $this.find('.wpProQuiz_responsePoints').text(result.p); | |
| $this.data('check', true); | |
| if(!endCheck) | |
| $e.trigger({type: 'questionSolved', values: {item: $this, index: $this.index(), solved: true, fake: true}}); | |
| }); | |
| }, | |
| showTip: function() { | |
| var $this = $(this); | |
| var id = $this.siblings('.wpProQuiz_question').find(globalNames.questionList).data('question_id'); | |
| $this.siblings('.wpProQuiz_tipp').fadeIn(800); | |
| results[id].tip = 1; | |
| $(document).bind('mouseup.tipEvent', function(e) { | |
| var $tip = $e.find('.wpProQuiz_tipp'); | |
| var $btn = $e.find('input[name="tip"]'); | |
| if(!$tip.is(e.target) && $tip.has(e.target).length == 0 && !$btn.is(e.target)) { | |
| $tip.fadeOut(800); | |
| $(document).unbind('.tipEvent'); | |
| } | |
| }); | |
| }, | |
| ajax: function(data, success, dataType) { | |
| dataType = dataType || 'json'; | |
| if(bitOptions.cors) { | |
| jQuery.support.cors = true; | |
| } | |
| $.post(WpProQuizGlobal.ajaxurl, data, success, dataType); | |
| if(bitOptions.cors) { | |
| jQuery.support.cors = false; | |
| } | |
| }, | |
| checkQuizLock: function() { | |
| quizStatus.loadLock = 1; | |
| plugin.methode.ajax({ | |
| action: 'wp_pro_quiz_check_lock', | |
| quizId: config.quizId | |
| }, function(json) { | |
| if(json.lock != undefined) { | |
| quizStatus.isLocked = json.lock.is; | |
| if(json.lock.pre) { | |
| $e.find('input[name="restartQuiz"]').hide(); | |
| } | |
| } | |
| if(json.prerequisite != undefined) { | |
| quizStatus.isPrerequisite = 1; | |
| $e.find('.wpProQuiz_prerequisite span').text(json.prerequisite); | |
| } | |
| if(json.startUserLock != undefined) { | |
| quizStatus.isUserStartLocked = json.startUserLock; | |
| } | |
| quizStatus.loadLock = 0; | |
| if(quizStatus.isQuizStart) { | |
| plugin.methode.startQuiz(); | |
| } | |
| }); | |
| }, | |
| loadQuizData: function() { | |
| plugin.methode.ajax({ | |
| action: 'wp_pro_quiz_load_quiz_data', | |
| quizId: config.quizId | |
| }, function(json) { | |
| if(json.toplist) { | |
| plugin.methode.handleToplistData(json.toplist); | |
| } | |
| if(json.averageResult != undefined) { | |
| plugin.methode.setAverageResult(json.averageResult, true); | |
| } | |
| }); | |
| }, | |
| setAverageResult: function(p, g) { | |
| var v = $e.find('.wpProQuiz_resultValue:eq(' + (g ? 0 : 1) + ') > * '); | |
| v.eq(1).text(p + '%'); | |
| v.eq(0).css('width', (240 * p / 100) + 'px'); | |
| }, | |
| handleToplistData: function(json) { | |
| var $tp = $e.find('.wpProQuiz_addToplist'); | |
| var $addBox = $tp.find('.wpProQuiz_addBox').show().children('div'); | |
| if(json.canAdd) { | |
| $tp.show(); | |
| $tp.find('.wpProQuiz_addToplistMessage').hide(); | |
| $tp.find('.wpProQuiz_toplistButton').show(); | |
| toplistData.token = json.token; | |
| toplistData.isUser = 0; | |
| if(json.userId) { | |
| $addBox.hide(); | |
| toplistData.isUser = 1; | |
| if(bitOptions.isAddAutomatic) { | |
| $tp.hide(); | |
| } | |
| } else { | |
| $addBox.show(); | |
| var $captcha = $addBox.children().eq(1); | |
| if(json.captcha) { | |
| $captcha.find('input[name="wpProQuiz_captchaPrefix"]').val(json.captcha.code); | |
| $captcha.find('.wpProQuiz_captchaImg').attr('src', json.captcha.img); | |
| $captcha.find('input[name="wpProQuiz_captcha"]').val(''); | |
| $captcha.show(); | |
| } else { | |
| $captcha.hide(); | |
| } | |
| } | |
| } else { | |
| $tp.hide(); | |
| } | |
| }, | |
| scrollTo: function(e, h) { | |
| var x = e.offset().top - 100; | |
| if(h || (window.pageYOffset || document.body.scrollTop) > x) { | |
| $('html,body').animate({scrollTop: x}, 300); | |
| } | |
| }, | |
| addToplist: function() { | |
| if(bitOptions.preview) | |
| return; | |
| var $addToplistMessage = $e.find('.wpProQuiz_addToplistMessage').text(WpProQuizGlobal.loadData).show(); | |
| var $addBox = $e.find('.wpProQuiz_addBox').hide(); | |
| plugin.methode.ajax({ | |
| action: 'wp_pro_quiz_add_toplist', | |
| quizId: config.quizId, | |
| token: toplistData.token, | |
| name: $addBox.find('input[name="wpProQuiz_toplistName"]').val(), | |
| email: $addBox.find('input[name="wpProQuiz_toplistEmail"]').val(), | |
| captcha: $addBox.find('input[name="wpProQuiz_captcha"]').val(), | |
| prefix: $addBox.find('input[name="wpProQuiz_captchaPrefix"]').val(), | |
| points: results.comp.points, | |
| totalPoints:config.globalPoints | |
| }, function(json) { | |
| $addToplistMessage.text(json.text); | |
| if(json.clear) { | |
| $addBox.hide(); | |
| plugin.methode.updateToplist(); | |
| } else { | |
| $addBox.show(); | |
| } | |
| if(json.captcha) { | |
| $addBox.find('.wpProQuiz_captchaImg').attr('src', json.captcha.img); | |
| $addBox.find('input[name="wpProQuiz_captchaPrefix"]').val(json.captcha.code); | |
| $addBox.find('input[name="wpProQuiz_captcha"]').val(''); | |
| } | |
| }); | |
| }, | |
| updateToplist: function() { | |
| if(typeof(wpProQuiz_fetchToplist) == "function") { | |
| wpProQuiz_fetchToplist(); | |
| } | |
| }, | |
| registerSolved: function() { | |
| $e.find('.wpProQuiz_questionInput[type="text"]').change(function(e) { | |
| var $this = $(this); | |
| var $p = $this.parents('.wpProQuiz_listItem'); | |
| var s = false; | |
| if($this.val() != '') { | |
| s = true; | |
| } | |
| $e.trigger({type: 'questionSolved', values: {item: $p, index: $p.index(), solved: s}}); | |
| }); | |
| $e.find('.wpProQuiz_questionList[data-type="single"] .wpProQuiz_questionInput, .wpProQuiz_questionList[data-type="assessment_answer"] .wpProQuiz_questionInput').change(function(e) { | |
| var $this = $(this); | |
| var $p = $this.parents('.wpProQuiz_listItem'); | |
| var s = this.checked; | |
| $e.trigger({type: 'questionSolved', values: {item: $p, index: $p.index(), solved: s}}); | |
| }); | |
| $e.find('.wpProQuiz_cloze input').change(function() { | |
| var $this = $(this); | |
| var $p = $this.parents('.wpProQuiz_listItem'); | |
| var s = true; | |
| $p.find('.wpProQuiz_cloze input').each(function() { | |
| if($(this).val() == '') { | |
| s = false; | |
| return false; | |
| } | |
| }); | |
| $e.trigger({type: 'questionSolved', values: {item: $p, index: $p.index(), solved: s}}); | |
| }); | |
| $e.find('.wpProQuiz_questionList[data-type="multiple"] .wpProQuiz_questionInput').change(function(e) { | |
| var $this = $(this); | |
| var $p = $this.parents('.wpProQuiz_listItem'); | |
| var c = 0; | |
| $p.find('.wpProQuiz_questionList[data-type="multiple"] .wpProQuiz_questionInput').each(function(e) { | |
| if(this.checked) | |
| c++; | |
| }); | |
| $e.trigger({type: 'questionSolved', values: {item: $p, index: $p.index(), solved: (c) ? true : false}}); | |
| }); | |
| }, | |
| loadQuizDataAjax: function(quizStart) { | |
| plugin.methode.ajax({ | |
| action: 'wp_pro_quiz_admin_ajax', | |
| func: 'quizLoadData', | |
| data: { | |
| quizId: config.quizId | |
| } | |
| }, function(json) { | |
| config.globalPoints = json.globalPoints; | |
| config.catPoints = json.catPoints; | |
| config.json = json.json; | |
| globalElements.quiz.remove(); | |
| $e.find('.wpProQuiz_quizAnker').after(json.content); | |
| //Reinit globalElements | |
| globalElements = { | |
| back: $e.find('input[name="back"]'), | |
| next: $e.find(globalNames.next), | |
| quiz: $e.find('.wpProQuiz_quiz'), | |
| questionList: $e.find('.wpProQuiz_list'), | |
| results: $e.find('.wpProQuiz_results'), | |
| quizStartPage: $e.find('.wpProQuiz_text'), | |
| timelimit: $e.find('.wpProQuiz_time_limit'), | |
| toplistShowInButton: $e.find('.wpProQuiz_toplistShowInButton'), | |
| listItems: $() | |
| }; | |
| plugin.methode.initQuiz(); | |
| if(quizStart) | |
| plugin.methode.startQuiz(true); | |
| }); | |
| }, | |
| setQuestionType: function(questionType) { | |
| if (questionType == 'multiple' || questionType == 'free_answer' ) { | |
| $e.find(globalElements.next).hide(); | |
| } else { | |
| $e.find(globalElements.next).show(); | |
| } | |
| }, | |
| setAdvanceOrNot: function(questionType){ | |
| if (questionType == 'multiple' || questionType == 'free_answer' ) { | |
| alert(questionType+ 'setAdvanceOrNot'); | |
| plugin.methode.nextQuestion(); | |
| } | |
| }, | |
| initQuiz: function() { | |
| plugin.methode.setClozeStyle(); | |
| plugin.methode.registerSolved(); | |
| globalElements.next.click(function() { | |
| if(bitOptions.forcingQuestionSolve && !quizSolved[currentQuestion.index()] | |
| && (bitOptions.quizSummeryHide || !bitOptions.reviewQustion)) { | |
| alert(WpProQuizGlobal.questionNotSolved); | |
| return false; | |
| } | |
| plugin.methode.nextQuestion(); | |
| }); | |
| globalElements.back.click(function() { | |
| plugin.methode.prevQuestion(); | |
| }); | |
| $e.find(globalNames.check).click(function() { | |
| if(bitOptions.forcingQuestionSolve && !quizSolved[currentQuestion.index()] | |
| && (bitOptions.quizSummeryHide || !bitOptions.reviewQustion)) { | |
| alert(WpProQuizGlobal.questionNotSolved); | |
| return false; | |
| } | |
| plugin.methode.checkQuestion(); | |
| }); | |
| $e.find(globalNames.questionInput).click(function() { | |
| if(bitOptions.forcingQuestionSolve && !quizSolved[currentQuestion.index()] | |
| && (bitOptions.quizSummeryHide || !bitOptions.reviewQustion)) { | |
| alert(WpProQuizGlobal.questionNotSolved); | |
| return false; | |
| } | |
| /* check data types */ | |
| var questionType = currentQuestion.find(globalNames.questionList).attr('data-type'); | |
| if (questionType == 'multiple' || questionType == 'free_answer') { | |
| $e.find(globalNames.check).show(); | |
| } else if (questionType == 'single') { | |
| plugin.methode.checkQuestion(); | |
| } else { | |
| $e.find(globalNames.check).show(); | |
| } | |
| }); | |
| //for sort matrix sorting | |
| $e.find('.wpProQuiz_sortStringItem').one('mouseenter', function() { | |
| $e.find(globalNames.check).show(); | |
| }); | |
| //for sorting | |
| $e.find('.wpProQuiz_sortable').one('mouseenter', function() { | |
| $e.find(globalNames.check).show(); | |
| }); | |
| //for cloze questions | |
| $e.find('.wpProQuiz_cloze').click(function() { | |
| $e.find(globalNames.check).show(); | |
| }); | |
| $e.find('input[name="checkSingle"]').click(function() { | |
| if(bitOptions.forcingQuestionSolve && (bitOptions.quizSummeryHide || !bitOptions.reviewQustion)) { | |
| for(var i = 0, c = $e.find('.wpProQuiz_listItem').length; i < c; i++) { | |
| if(!quizSolved[i]) { | |
| alert(WpProQuizGlobal.questionsNotSolved); | |
| return false; | |
| } | |
| } | |
| } | |
| plugin.methode.showQuizSummary(); | |
| }); | |
| $e.find('input[name="tip"]').click(plugin.methode.showTip); | |
| $e.find('input[name="skip"]').click(plugin.methode.skipQuestion); | |
| $e.find('input[name="wpProQuiz_pageLeft"]').click(function() { | |
| plugin.methode.showSinglePage(currentPage-1); | |
| }); | |
| $e.find('input[name="wpProQuiz_pageRight"]').click(function() { | |
| plugin.methode.showSinglePage(currentPage+1); | |
| }); | |
| } | |
| }; | |
| // /** | |
| // * @memberOf plugin | |
| // */ | |
| // plugin.init = function() { | |
| // // | |
| // plugin.methode.setClozeStyle(); | |
| // // | |
| // plugin.methode.registerSolved(); | |
| // | |
| // | |
| // reviewBox.init(); | |
| // | |
| // if(bitOptions.checkBeforeStart && !bitOptions.preview) { | |
| // plugin.methode.checkQuizLock(); | |
| // } | |
| // | |
| // $e.find('input[name="startQuiz"]').click(function() { | |
| // plugin.methode.startQuiz(); | |
| // return false; | |
| // }); | |
| // | |
| // // | |
| // globalElements.next.click(function() { | |
| // if(bitOptions.forcingQuestionSolve && !quizSolved[currentQuestion.index()] | |
| // && (bitOptions.quizSummeryHide || !bitOptions.reviewQustion)) { | |
| // | |
| // alert(WpProQuizGlobal.questionNotSolved); | |
| // return false; | |
| // } | |
| // | |
| // plugin.methode.nextQuestion(); | |
| // }); | |
| // | |
| // // | |
| // globalElements.back.click(function() { | |
| // plugin.methode.prevQuestion(); | |
| // }); | |
| // | |
| // $e.find('input[name="reShowQuestion"]').click(function() { | |
| // plugin.methode.showQustionList(); | |
| // }); | |
| // | |
| // $e.find('input[name="restartQuiz"]').click(function() { | |
| // plugin.methode.restartQuiz(); | |
| // }); | |
| // | |
| // // | |
| // $e.find(globalNames.check).click(function() { | |
| // if(bitOptions.forcingQuestionSolve && !quizSolved[currentQuestion.index()] | |
| // && (bitOptions.quizSummeryHide || !bitOptions.reviewQustion)) { | |
| // | |
| // alert(WpProQuizGlobal.questionNotSolved); | |
| // return false; | |
| // } | |
| // | |
| // plugin.methode.checkQuestion(); | |
| // }); | |
| // | |
| // // | |
| // $e.find('input[name="checkSingle"]').click(function() { | |
| // if(bitOptions.forcingQuestionSolve && (bitOptions.quizSummeryHide || !bitOptions.reviewQustion)) { | |
| // for(var i = 0, c = $e.find('.wpProQuiz_listItem').length; i < c; i++) { | |
| // if(!quizSolved[i]) { | |
| // alert(WpProQuizGlobal.questionsNotSolved); | |
| // return false; | |
| // } | |
| // } | |
| // } | |
| // | |
| // plugin.methode.showQuizSummary(); | |
| // }); | |
| // | |
| // // | |
| // $e.find('input[name="tip"]').click(plugin.methode.showTip); | |
| // | |
| // // | |
| // $e.find('input[name="skip"]').click(plugin.methode.skipQuestion); | |
| // | |
| // $e.find('input[name="review"]').click(plugin.methode.reviewQuestion); | |
| // | |
| // $e.find('input[name="wpProQuiz_toplistAdd"]').click(plugin.methode.addToplist); | |
| // | |
| // $e.find('input[name="quizSummary"]').click(plugin.methode.showQuizSummary); | |
| // | |
| // $e.find('input[name="endQuizSummary"]').click(function() { | |
| // if(bitOptions.forcingQuestionSolve) { | |
| // for(var i = 0, c = $e.find('.wpProQuiz_listItem').length; i < c; i++) { | |
| // if(!quizSolved[i]) { | |
| // alert(WpProQuizGlobal.questionsNotSolved); | |
| // return false; | |
| // } | |
| // } | |
| // } | |
| // | |
| // if(bitOptions.formActivated && config.formPos == formPosConst.END && !formClass.checkForm()) | |
| // return; | |
| // | |
| // plugin.methode.finishQuiz(); | |
| // }); | |
| // | |
| // $e.find('input[name="endInfopage"]').click(function() { | |
| // if(formClass.checkForm()) | |
| // plugin.methode.finishQuiz(); | |
| // }); | |
| // | |
| // $e.find('input[name="showToplist"]').click(function() { | |
| // globalElements.quiz.hide(); | |
| // globalElements.toplistShowInButton.toggle(); | |
| // }); | |
| // | |
| // // | |
| // $e.find('input[name="wpProQuiz_pageLeft"]').click(function() { | |
| // plugin.methode.showSinglePage(currentPage-1); | |
| // }); | |
| // | |
| // // | |
| // $e.find('input[name="wpProQuiz_pageRight"]').click(function() { | |
| // plugin.methode.showSinglePage(currentPage+1); | |
| // }); | |
| // | |
| // $e.bind('questionSolved', plugin.methode.questionSolved); | |
| // }; | |
| /** | |
| * @memberOf plugin | |
| */ | |
| plugin.preInit = function() { | |
| plugin.methode.parseBitOptions(); | |
| reviewBox.init(); | |
| $e.find('input[name="startQuiz"]').click(function() { | |
| plugin.methode.startQuiz(); | |
| return false; | |
| }); | |
| if(bitOptions.checkBeforeStart && !bitOptions.preview) { | |
| plugin.methode.checkQuizLock(); | |
| } | |
| $e.find('input[name="reShowQuestion"]').click(function() { | |
| plugin.methode.showQustionList(); | |
| }); | |
| $e.find('input[name="restartQuiz"]').click(function() { | |
| plugin.methode.restartQuiz(); | |
| }); | |
| $e.find('input[name="review"]').click(plugin.methode.reviewQuestion); | |
| $e.find('input[name="wpProQuiz_toplistAdd"]').click(plugin.methode.addToplist); | |
| $e.find('input[name="quizSummary"]').click(plugin.methode.showQuizSummary); | |
| $e.find('input[name="endQuizSummary"]').click(function() { | |
| if(bitOptions.forcingQuestionSolve) { | |
| for(var i = 0, c = $e.find('.wpProQuiz_listItem').length; i < c; i++) { | |
| if(!quizSolved[i]) { | |
| alert(WpProQuizGlobal.questionsNotSolved); | |
| return false; | |
| } | |
| } | |
| } | |
| if(bitOptions.formActivated && config.formPos == formPosConst.END && !formClass.checkForm()) | |
| return; | |
| plugin.methode.finishQuiz(); | |
| }); | |
| $e.find('input[name="endInfopage"]').click(function() { | |
| if(formClass.checkForm()) | |
| plugin.methode.finishQuiz(); | |
| }); | |
| $e.find('input[name="showToplist"]').click(function() { | |
| globalElements.quiz.hide(); | |
| globalElements.toplistShowInButton.toggle(); | |
| }); | |
| $e.bind('questionSolved', plugin.methode.questionSolved); | |
| if(!bitOptions.maxShowQuestion) { | |
| plugin.methode.initQuiz(); | |
| } | |
| if(bitOptions.autoStart) | |
| plugin.methode.startQuiz(); | |
| }; | |
| plugin.preInit(); | |
| }; | |
| $.fn.wpProQuizFront = function(options) { | |
| return this.each(function() { | |
| if(undefined == $(this).data('wpProQuizFront')) { | |
| $(this).data('wpProQuizFront', new $.wpProQuizFront(this, options)); | |
| } | |
| }); | |
| }; | |
| })(jQuery); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment