1 2 3 4 5(function ($, Drupal, window, document) { 6 7 'use strict'; 8 9 window.testDelay = 10000; 10 window.userAnswers = {}; 11 window.wordAnswers = {}; 12 window.trackMyMouse = false; 13 14window.prideaGetMarkClass = function (mark) { 15 var markClass = 'u'; 16 if (mark >= 0.2) markClass = 'r'; 17 if (mark >= 0.5) markClass = 'y'; 18 if (mark >= 0.8) markClass = 'g'; 19 if (mark >= 0.99) markClass = 's'; 20 return markClass; 21} 22 23if (window.digObject == undefined) 24 window.digObject = function(p) { 25 var elements = p.split('.'); 26 if (window.hasOwnProperty(elements[0])) { 27 var el = window[elements[0]]; 28 for (var i = 1; i < elements.length; i++) { 29 if (el.hasOwnProperty(elements[i])) { 30 el = el[elements[i]]; 31 } else { 32 return false; 33 } 34 } 35 return el; 36 } 37 return false; 38 } 39//Drupal.settings.pridea.pageData.homework.homework_admin 40 41 42/** 43 * Evaluate the strength of a user's password. 44 * 45 * Returns the estimated strength and the relevant output message. 46 */ 47Drupal.evaluatePasswordStrength = function (password) { 48 password = $.trim(password); 49 50 var weaknesses = 0, strength = 100, msg = []; 51 52 var hasLowercase = /[a-z]+/.test(password); 53 var hasUppercase = /[A-Z]+/.test(password); 54 var hasNumbers = /[0-9]+/.test(password); 55 var hasPunctuation = /[^a-zA-Z0-9]+/.test(password); 56 57 // If there is a username edit box on the page, compare password to that, otherwise 58 // use value from the database. 59 var usernameBox = $('input.username'); 60 var username = (usernameBox.length > 0) ? usernameBox.val() : translate.username; 61 62 // Lose 5 points for every character less than 6, plus a 30 point penalty. 63 if (password.length < 6) { 64 msg.push(translate.tooShort); 65 strength -= ((6 - password.length) * 5) + 30; 66 } 67 68 // Count weaknesses. 69 if (!hasLowercase) { 70 msg.push(translate.addLowerCase); 71 weaknesses++; 72 } 73 if (!hasUppercase) { 74 msg.push(translate.addUpperCase); 75 weaknesses++; 76 } 77 if (!hasNumbers) { 78 msg.push(translate.addNumbers); 79 weaknesses++; 80 } 81 if (!hasPunctuation) { 82 msg.push(translate.addPunctuation); 83 weaknesses++; 84 } 85 86 // Apply penalty for each weakness (balanced against length penalty). 87 switch (weaknesses) { 88 case 1: 89 strength -= 12.5; 90 break; 91 92 case 2: 93 strength -= 25; 94 break; 95 96 case 3: 97 strength -= 40; 98 break; 99 100 case 4: 101 strength -= 40; 102 break; 103 } 104 105 // Check if password is the same as the username. 106 if (password !== '' && password.toLowerCase() === username.toLowerCase()) { 107 msg.push(translate.sameAsUsername); 108 // Passwords the same as username are always very weak. 109 strength = 5; 110 } 111 112 // Based on the strength, work out what text should be shown by the password strength meter. 113 if (strength < 60) { 114 indicatorText = translate.weak; 115 } else if (strength < 70) { 116 indicatorText = translate.fair; 117 } else if (strength < 80) { 118 indicatorText = translate.good; 119 } else if (strength <= 100) { 120 indicatorText = translate.strong; 121 } 122 123 // Assemble the final message. 124 msg = translate.hasWeaknesses + '<ul><li>' + msg.join('</li><li>') + '</li></ul>'; 125 return { strength: strength, message: msg, indicatorText: indicatorText }; 126 127}; 128 129 130 function checkFooter(){ 131 var footer = $('#footer'); 132 if (footer.length == 1) { 133 $('body').removeClass('sticky-footer'); 134 if (footer.offset().top + footer.outerHeight() < window.innerHeight) { 135 $('body').addClass('sticky-footer'); 136 } 137 } 138 } 139 140 function checkLexisExercise() { 141 //console.log('checkLexisExercise'); 142 var exercise = $('.exercise').first(); 143 if (exercise.length == 1) { 144 var id = exercise.attr('data-id'); 145 $.post('/ajax/exercise/check', {exercise_id: id, answers: JSON.stringify(window.flashcards)}, function(data) { 146 var result = JSON.parse(data); 147 //console.log(result); 148 }); 149 } 150 } 151 152 function wordLurkAppend(typed,lurked_answers) { 153 //console.log(typed,lurked); 154 var lurked = lurked_answers.split('&&')[0] 155 var maxlen = lurked.length; 156 var result = ''; 157 var cnt = 3; 158 for (var i = 0; i < typed.length - 1; i++) { 159 if (i < maxlen) { 160 if (typed[i] != lurked[i]) { 161 if (cnt > 0) { 162 cnt--; 163 result += lurked[i]; 164 } 165 } else { 166 result += typed[i]; 167 } 168 } 169 } 170 if (cnt>0 && result.length < lurked.length) { 171 result += lurked.substring(result.length, result.length + cnt); 172 } 173 return result; 174 } 175 176 function penalty(btn,message) { 177 var element = $('<div class="penalty-message">' + message + '</div>').appendTo('body'); 178 var top = btn.offset().top - 20; 179 var left = btn.offset().left; 180 element.css({ 181 top: top, 182 left: left 183 }); 184 setTimeout(function() { 185 element.addClass('anim'); 186 },100); 187 setTimeout(function() { 188 element.remove(); 189 },1700); 190 } 191 192 function pryWord() { 193 window.pryPenalty += 0.2; 194 var btn = $(this).addClass('clicked'); 195 btn.find('use').attr('xlink:href', '/sites/all/modules/pridea/media/icons.svg#lurk'); 196 var ex = $(this).closest('.exercise'); 197 penalty(btn,'-0.2'); 198 var pryParse = function(data){ 199 if (data.status == 'ok') { 200 console.log('data.lurked',data.lurked) 201 if (Array.isArray(data.lurked) || typeof data.lurked == 'object') { 202 //if (window.lastFocusedInput !== undefined) { 203 var input = btn.parent().find('input'); 204 var index = input.attr('data-question'); 205 //console.log('lurk index', input); 206 if (data.lurked[index] != undefined) { 207 //console.log('lurk target'); 208 var text = input.val().trim(); 209 text = wordLurkAppend(text,data.lurked[index]); 210 input.val(text); 211 } 212 //} 213 } else { 214 var input = ex.find('input.word-type'); 215 216 if (input.length>1) { 217 input = $('.active_flashcard_slide').find('input.word-type'); 218 } 219 var text = input.val().trim(); 220 text = wordLurkAppend(text,data.lurked); 221 input.val(text); 222 } 223 } 224 } 225 226 var eid, eclass = 0; 227 if (ex.find('.exercise_slide').length > 0) { 228 eid = $('.active_flashcard_slide').attr('data-nid'); 229 eclass = 'word'; 230 } else { 231 eid = ex.attr('data-id'); 232 eclass = 'exercise'; 233 } 234 if (window.lurked != undefined && window.lurked[eclass][eid] != undefined) { 235 pryParse(window.lurked[eclass][eid]); 236 } else { 237 $.get('/ajax/' + eclass + '/pry/' + eid, function(res) { 238 var data = JSON.parse(res); 239 //console.log('lurked',data); 240 if (window.lurked == undefined) { 241 window.lurked = {}; 242 } 243 if (window.lurked[eclass] == undefined) { 244 window.lurked[eclass] = {}; 245 } 246 window.lurked[eclass][eid] = data; 247 pryParse(data); 248 }); 249 } 250 251 } 252 253 254 function checkWord() { 255 var btn = $(this); 256 if (!btn.hasClass('disabled')) { 257 btn.addClass('disabled'); 258 var exercise = btn.closest('.exercise'); 259 var word = $('.active_flashcard_slide'); 260 var word_nid = word.attr('data-nid'); 261 var answer = word.find('input.word-type').val().trim(); 262 $.post('/ajax/word/check', {word_id: word_nid, answer: answer}, function(res) { 263 if (window.wordAnswers[word_nid] == undefined) window.wordAnswers[word_nid] = []; 264 window.wordAnswers[word_nid].push(answer); 265 var data = JSON.parse(res); 266 //console.log(res); 267 btn.removeClass('disabled'); 268 if (data.status == 'ok' && data.rating != undefined) { 269 window.flashcards[word_nid] = data.rating - window.pryPenalty; 270 word.removeClass('mistake').removeClass('solved').removeClass('perfect').removeClass('incorrect'); 271 if (data.rating >= 0.8) { 272 word.addClass('solved'); 273 } else { 274 if (data.rating >= 0.6) { 275 word.addClass('incorrect'); 276 } else { 277 word.addClass('mistake'); 278 } 279 } 280 if (data.rating == 1) { 281 word.addClass('perfect'); 282 btn.hide(); 283 } 284 if (word.is(':last-child')) { 285 var id = exercise.attr('data-id'); 286 $.post('/ajax/exercise/check', {exercise_id: id, answers: JSON.stringify(window.flashcards), data: JSON.stringify(window.wordAnswers)}, function(data) { 287 var result = JSON.parse(data); 288 //console.log('/ajax/exercise/check', result); 289 }); 290 } 291 } 292 }); 293 } 294 } 295 296 function showExerciseMistake(element, mode, item) { 297 switch (mode) { 298 case 'collate': 299 element.find('.answers li').eq(item).addClass('mistake'); 300 break; 301 case 'radio': 302 element.find('[data-question="' + item + '"]').parent().addClass('mistake'); 303 break; 304 case 'checkboxes': 305 element.find('[data-question="' + item + '"]').parent().addClass('mistake'); 306 break; 307 default: 308 element.find('[data-question="' + item + '"]').addClass('mistake'); 309 break; 310 } 311 } 312 313 function checkExerciseBtn() { 314 $('.check-word').once().click(checkWord); 315 $('.check-exercise').once().click(function(){ 316 var btn = $(this); 317 if (!btn.hasClass('disabled')) { 318 btn.addClass('disabled'); 319 var ex = $(this).closest('.exercise'); 320 var id = ex.attr('data-id'); 321 var mode = ex.attr('data-mode'); 322 var answers = {}; 323 ex.find('[data-question]').each(function(index){ 324 var q = $(this); 325 var a = -1; 326 var txt = ''; 327 switch (mode) { 328 case 'selectlist': 329 case 'select': 330 a= q.find('option:selected').val(); 331 break; 332 case 'typelist': 333 case 'type': 334 a = q.val().trim(); 335 break; 336 case 'radio':
337 a = q.parent().find('input:checked').val(); 338 break; 339 case 'collate': 340 txt = q.parent().next().children().eq(index).text().trim().toLowerCase(); 341 a = []; 342 $('ul.answers li.ui-sortable-handle').each(function(){ 343 if (this.textContent.trim().toLowerCase() == txt) a.push(this.getAttribute('data-value')); 344 }); 345 //a = q.parent().next().children().eq(index).attr('data-value'); 346 break; 347 case 'dragdrop': 348 txt = q.children().first().text().trim().toLowerCase(); 349 a = []; 350 $('.ui-sortable-handle').each(function(){ 351 if (this.textContent.trim().toLowerCase() == txt) a.push(this.getAttribute('data-value')); 352 }); 353 //a = q.children().first().attr('data-value'); 354 break; 355 case 'paint': 356 txt = q.text().trim().toLowerCase(); 357 a = []; 358 q.parent().find('li').each(function(){ 359 if (this.textContent.trim().toLowerCase() == txt) { 360 if (this.getAttribute('data-answer') !== null) 361 a.push(this.getAttribute('data-answer')); 362 } 363 }); 364 //a = q.attr('data-answer'); 365 break; 366 case 'dialog': 367 case 'sentense': 368 txt = q.text().trim().toLowerCase(); 369 a = []; 370 q.parent().find('li').each(function(index){ 371 if (this.textContent.trim().toLowerCase() == txt) { 372 a.push(index); 373 } 374 }); 375 //a = q.index(); 376 //console.log(q.attr('data-question'), 'q.index() = ' + q.index() + ' index = ' + index) 377 break; 378 case 'checkboxes': 379 a = q.is(':checked') * 1; 380 break; 381 } 382 answers[q.attr('data-question')] = a; 383 }); 384 var answersJSON = JSON.stringify(answers); 385 if (window.lastAnswers != undefined) { 386 if (answersJSON == window.lastAnswers) { 387 console.log('ANSWERS DID NOT CHANGED! ') 388 } 389 } 390 391 console.log('answers', answers); 392 window.lastAnswers = answersJSON; 393 var checkdata = {exercise_id: id, answers: answersJSON, penalty: window.pryPenalty}; 394 $.post('/ajax/exercise/check', checkdata, function(data) { 395 btn.removeClass('disabled'); 396 var result = JSON.parse(data); 397 console.log(result); 398 if (result.status == 'ok') { 399 if (result.result != undefined) { 400 var eid = '#eid_'+id; 401 $(eid).addClass('solved_' + prideaGetMarkClass(result.result)); 402 if (result.result>0.8) { 403 $(eid).addClass('solved_1'); 404 } 405 } 406 var exercise_node = '#exercise-' + id; 407 $(exercise_node).find('.mistake').removeClass('mistake'); 408 $(exercise_node).find('.incorrect').removeClass('incorrect'); 409 if (result.incorrect.length > 0) { 410 for (var i = result.incorrect.length - 1; i >= 0; i--) { 411 $(exercise_node).find('[data-question="' + result.incorrect[i] + '"]').addClass('incorrect'); 412 } 413 } 414 if (result.mistakes.length > 0) { 415 for (var i = result.mistakes.length - 1; i >= 0; i--) { 416 showExerciseMistake($(exercise_node),mode,result.mistakes[i]); 417 } 418 } else { 419 $(exercise_node).addClass('solved'); 420 if (result.result != undefined) { 421 $('#total_exercise_result').text(Math.round(result.result * 100) / 10).parent().removeClass('hidden'); 422 } else { 423 $('#exercise_result_label').hide(); 424 $('#total_exercise_result').text().parent().removeClass('hidden'); 425 } 426 if (result.incorrect.length == 0) { 427 btn.hide(); 428 $('.spain-keyboard').hide(); 429 } 430 } 431 } else { 432 if (result.status == 'error') { 433 modalbox(Drupal.t('Error'), '<div class="msg">' + Drupal.t('Your have reached the exercise limit on your plan.') + '</div>', '<a class="btn" href="/plans">' + Drupal.t('See plans')+'</a>') 434 } 435 } 436 }); 437 } 438 }); 439 } 440 441 function showProgress() { 442 function addE(exercises) { 443 var exercise_ids = Object.keys(exercises); 444 var solved_state, solved; 445 for (var i = exercise_ids.length - 1; i >= 0; i--) { 446 solved = exercises[exercise_ids[i]]; 447 //console.log($('.active1 #e' + exercise_ids[i] + '_result'),solved.toPrecision(2) * 10); 448 449 $('.active1 .e' + exercise_ids[i] + '_result').html('<span class="hwm">
449' + solved.toPrecision(2) * 10 + '</span>'); 450 $('.active1 .e' + exercise_ids[i] + '_result').parent().addClass(getMarkClass(solved)); 451 if (solved >= 0.8) { 452 solved_state = 1; 453 } else { 454 solved_state = 0; 455 } 456 457 $('#eid_' + exercise_ids[i]).addClass('solved_' + solved).addClass('solved_'+getMarkClass(solved)); 458 $('#exercise-' + exercise_ids[i]).addClass('solved_' + solved).addClass('solved_'+getMarkClass(solved)); 459 $('.active0 .e' + exercise_ids[i]).addClass('solved_' + solved).addClass('solved_'+getMarkClass(solved)); 460 //$('.active0 #e' + exercises[i] + '_result').html(result.toPrecision(2) * 10); 461 } 462 } 463 function addL(lessons){ 464 for (var i = lessons.length - 1; i >= 0; i--) { 465 $('#nid_' + lessons[i]).addClass('pass'); 466 $('#l' + lessons[i]).addClass('pass' ); 467 $('.active1 .l' + lessons[i] + '_result').html('<span class="hwm">+</span>').parent().addClass('g'); 468 } 469 } 470 if (window.digObject('Drupal.settings.pridea.progress')) { 471 //if (Drupal.settings.pridea !== undefined && Drupal.settings.pridea.progress !== undefined) { 472 var progress = Drupal.settings.pridea.progress; 473 if (Drupal.settings.pridea.progress.length!== undefined) { 474 for (var i = Drupal.settings.pridea.progress.length - 1; i >= 0; i--) { 475 if (Drupal.settings.pridea.progress[i]['e'] !== undefined) { 476 addE(Drupal.settings.pridea.progress[i]['e']); 477 } 478 if (Drupal.settings.pridea.progress[i]['l'] !== undefined) { 479 addL(Object.keys(Drupal.settings.pridea.progress[i]['l'])); 480 } 481 if (Drupal.settings.pridea.progress[i].i !== undefined) { 482 var pcnt = Drupal.settings.pridea.progress[i].i * 100 / Drupal.settings.pridea.progress[i].total; 483 $('#course_' + Drupal.settings.pridea.progress[i].course_id + '_progress').html('<span class="bar"></span>').children('.bar').css({width: Math.ceil(pcnt) + '%'}); 484 } 485 } 486 } else { 487 if (progress['e'] !== undefined) { 488 addE(progress['e']); 489 } 490 if (progress['l'] !== undefined) { 491 addL(Object.keys(progress['l'])); 492 } 493 if (progress.i !== undefined) { 494 var pcnt = progress.i * 100 / progress.total; 495 $('#course_' + progress.course_id + '_progress').html('<span class="bar"></span>').children('.bar').css({width: Math.ceil(pcnt) + '%'}); 496 } 497 } 498 499 $('.theme-elements').each(function(){ 500 var theme = $(this); 501 var elements = theme.children('a').length; 502 var solved = theme.children('a.pass, a.solved_1').length; 503 if (elements == solved) { 504 theme.parent().addClass('solved'); 505 } 506 }); 507 } 508 } 509 510 511 function playAudioSlide() { 512 $('.slick-active').find('audio').first()[0].play(); 513 } 514 515 function slicks() { 516 $('.node-lesson .field-word-reference').addClass('.col-md-8').wrapAll('<div class="word-gallery container"></div>').first().parent().on('init', playAudioSlide).slick({ 517 dots: true, 518 arrows: true, 519 infinite: false, 520 nextArrow: '<span class="arrow-right"><svg><use xlink:href="/sites/all/modules/pridea/media/icons.svg#arrow"/></svg></span>', 521 prevArrow: '<span class="arrow-left"><svg><use xlink:href="/sites/all/modules/pridea/media/icons.svg#arrow"/></svg></span>', 522 }).on('afterChange',playAudioSlide); 523 } 524 525 function flashcard_tick() { 526 window.flashcard_timeout--; 527 $('.timer-block').html(window.flashcard_timeout); 528 if (window.flashcard_timeout == 0) { 529 var slide = $('.active_flashcard_slide'); 530 $('.timer-block').hide(); 531 slide.addClass('unsolved'); 532 clearInterval(window.flashcard_timer); 533 var word_nid = slide.attr('data-nid'); 534 window.flashcards[word_nid] = -1; 535 } 536 } 537 538 function lexis_slide_next() { 539 clearInterval(window.flashcard_timer); 540 $('.check-word').show(); 541 var active_flashcard_slide = $('.active_flashcard_slide'); 542 if (active_flashcard_slide.length == 0) { 543 $('.exercise_slide').first().addClass('active_flashcard_slide'); 544 } else { 545 if (!active_flashcard_slide.hasClass('solved')) { 546 var word_nid = active_flashcard_slide.attr('data-nid'); 547 active_flashcard_slide.addClass('unsolved');
548 window.flashcards[word_nid] = -1; 549 if (active_flashcard_slide.is(':last-child')) { 550 checkLexisExercise(); 551 } 552 } 553 active_flashcard_slide.removeClass('active_flashcard_slide').next().addClass('active_flashcard_slide'); 554 if ($('.active_flashcard_slide').next().length == 0) { 555 $('.btn.next-slide').hide(); 556 $('.msg_finish').removeClass('hidden'); 557 } 558 } 559 560 var exercise = $('.active_flashcard_slide').closest('.exercise'); 561 if (exercise.hasClass('lexis')) { 562 window.flashcard_timeout = 11; 563 window.flashcard_timer = setInterval(flashcard_tick, 1000); 564 flashcard_tick(); 565 $('.timer-block').show(); 566 } 567 //checkFooter(); 568 window.pryPenalty = 0; 569 } 570 571 function lexis_slides() { 572 $('.flashcard').once(function(){ 573 var card = $(this); 574 var img = card.find('img'); 575 img.clone().appendTo(card).addClass('placeholder'); 576 }); 577 setTimeout(function(){ 578 $('.exercise_slides').once(function(){ 579 window.flashcards = {}; 580 console.log('init flashcards'); 581 lexis_slide_next(); 582 $('.btn.next-slide').click(lexis_slide_next); 583 $('.flashcard').once().click(function(){ 584 var slide = $(this).closest('.exercise_slide'); 585 var word_nid = slide.attr('data-nid'); 586 var fake = $(this).hasClass('fake'); 587 console.log('flashcard ' + word_nid, 'click'); 588 $(this).find('.ex_text').css({'color': '#000', 'z-index': 10}); 589 $(this).addClass('show'); 590 if (!slide.hasClass('solved') && !slide.hasClass('unsolved')) { 591 console.log('flashcard ' + word_nid, 'untouched'); 592 593 if (window.flashcards[word_nid] !== undefined) { 594 window.flashcards[word_nid]++ 595 } else { 596 window.flashcards[word_nid] = 1; 597 } 598 if (!fake) { 599 console.log('flashcard ' + word_nid, 'solved'); 600 clearInterval(window.flashcard_timer); 601 slide.addClass('solved'); 602 if (slide.is(':last-child')) { 603 checkLexisExercise(); 604 } 605 $('.timer-block').hide(); 606 } else { 607 console.log('flashcard ' + word_nid, 'wrong answer'); 608 $(this).addClass('fake'); 609 } 610 } 611 612 }); 613 }).addClass('initialized'); 614 }, 500); 615 } 616 617 function lurkButtons() { 618 var textinputs = $('.exercise.view-mode-full input[type=text]'); 619 if (digObject('Drupal.settings.pridea.needlurk') !== false && Drupal.settings.pridea.needlurk.length > 0) { 620 for (var i = 0; i < Drupal.settings.pridea.needlurk.length; i++) { 621 if (Drupal.settings.pridea.needlurk[i]) { 622 $(textinputs.get(i)).wrap('<span class="text-input-wrapper"></span>').parent().append('<svg class="lurk-button"><use xlink:href="/sites/all/modules/pridea/media/icons.svg#unlurk" /></svg>'); 623 } 624 } 625 } else { 626 textinputs.wrap('<span class="text-input-wrapper"></span>').parent().append('<svg class="lurk-button"><use xlink:href="/sites/all/modules/pridea/media/icons.svg#unlurk" /></svg>'); 627 } 628 629 $('.lurk-button').once().click(pryWord); 630 } 631 632 function keyboard() { 633 $('.spain-keyboard .kbrd-key').once().click(function(e){ 634 if (window.lastFocusedInput !== undefined) { 635 var input = $('#' + window.lastFocusedInput); 636 input.val(input.val() + $(this).attr('data-value')).focus(); 637 } 638 }); 639 } 640 641 function exercises() { 642 643 $('.dragdrop .wordpalette').first().each(function(){ 644 var w = $(this).wrap('<div id="wordpalette_wrapper"></div>'); 645 var p = w.parent(); 646 w.css({width: p.width() + 'px'}); 647 p.css({height: p.height() + 'px'}); 648 649 650 }); 651 652 $(window).scroll(function(){ 653 var w = $('#wordpalette_wrapper'); 654 if (w.length > 0){ 655 if (window.scrollY + window.innerHeight < w.offset().top + w.height()) { 656 w.children().addClass('floating') 657 } else { 658 w.children().removeClass('floating') 659 } 660 } 661 }); 662 663 $('input[type="text"]').once().each(function(index){ 664 $(this).attr('id','input-text-' + index); 665 }).blur(function(){ 666 window.lastFocusedInput = $(this).attr('id'); 667 }); 668 669 670 lurkButtons(); 671 672 $('select').addClass('custom-select'); 673 $('.ex_slides').once().slick({ 674 dots: true, 675 arrows: true 676 }); 677 678 679 $('.sortable').once().sortable().disableSelection(); 680 681 $('.palette li').once().click(function(){ 682 $('.palette li').removeClass('selected'); 683 $(this).addClass('selected'); 684 }); 685 686 $('.ex_group .terms li').once().click(function(){ 687 var color = $(this).closest('.ex_group').find('.palette li.selected'); 688 if (color.length>0) { 689 var color_class = color.attr('data-color'); 690 var value = color.attr('data-id'); 691 $(this).removeAttr('class').addClass(color_class).attr('data-answer', value); 692 } 693 }); 694 695 $('.ex_sentence .words').once().sortable().disableSelection(); 696 697 $( ".ex_dialog .sentences" ).once().sortable().disableSelection(); 698 699 $('.ex_insert .words, .ex_insert .droppable').once().sortable({
700 connectWith: '.wordpalette, span.droppable', 701 receive: function() { 702 $('.mistake').removeClass('.mistake'); 703 }, 704 }).disableSelection(); 705 706 $('.exercise.spell').find('.play-pause-btn').click(function(){ 707 708 var e = $(this).closest('.exercise'); 709 if (!e.hasClass('checked')) { 710 e.addClass('checked'); 711 $.post('/ajax/exercise/check', {exercise_id: e.attr('data-id'), answers: true}, function(data) { 712 var result = JSON.parse(data); 713 console.log(result); 714 }); 715 } 716 717 }); 718 } 719 720 721 function rescale() { 722 $('.ex_sort').each(function(){ 723 var ex_sort = $(this); 724 var li = ex_sort.find('li').removeAttr('style'); 725 var maxH = 0; 726 li.each(function(){ 727 if ($(this).outerHeight() > maxH) maxH = $(this).outerHeight(); 728 729 }); 730 li.css({height: maxH}); 731 }); 732 $('#header_style').remove(); 733 var nav = document.getElementById('navigation'); 734 var bgl = -(nav.children[0].clientWidth - nav.clientWidth) / 2 - 1600; 735 $('body').append('<style id="header_style">#navigation:before {background-position: '+bgl+'px center}</style>'); 736 groupExtras(); 737 } 738 739 740 741 function stat_chart(container,data) { 742 var box = $(container); 743 var val; 744 if (box.length == 1) { 745 box.html('<div class="chart"></div>').children('.chart').first().html('<div class="empty_chart">' + Drupal.t('No data')+ '</div>'); 746 if (data.items.length > 0) { 747 if (data.type == 'matters') { 748 box = box.html('<div class="chart"></div>').children('.chart').first(); 749 data.items.forEach(function(item) { 750 if (item.y !== false){ 751 val = Math.min(95,Math.atan(item.y / 10)* 2 * 95 / Math.PI); 752 box.append('<div class="bar" style="width:' + (100 / data.items.length) + '%"><div class="label_x">' + item.label_x+ '</div><div class="svg"><svg viewBox="0 0 1 1" class="circle ' + item.class + '" style="width:' + val + '%"><circle cy="0.5" cx="0.5" r="0.49" /></svg><div class="svg_label">' + item.value + '</div></div></div>'); 753 } else 754 box.append('<div class="bar" style="width:' + (100 / data.items.length) + '%"><div class="label_x">' + item.label_x+ '</div></div>'); 755 }); 756 } 757 if (data.type == 'marks') { 758 box = box.html('<div class="chart"></div>').children('.chart').first(); 759 var lines = ''; 760 for (var i = data.labels_y.length - 1; i >= 0; i--) lines += '<div class="x-line" style="height:' + (100 / data.labels_y.length)+ '%"><div class="label_y">' + data.labels_y[i] + '</div></div>'; 761 box.append('<div class="axis_y">' + lines + '</div>'); 762 data.items.forEach(function(item){ 763 if (item.y !== false) 764 box.append('<div class="bar" style="width:' + (100 / data.items.length) + '%"><div class="label_x">' + item.label_x+ '</div><div class="ball ' + item.class + '" style="bottom:' + item.y * 100 + '%">' + item.value + '</div></div>'); 765 else 766 box.append('<div class="bar" style="width:' + (100 / data.items.length) + '%"><div class="label_x">' + item.label_x+ '</div></div>'); 767 }); 768 } 769 if (data.type == 'activity') { 770 box = box.html('<div class="chart"></div>').children('.chart').first(); 771 var lines = ''; 772 for (var i = data.labels_y.length - 1; i >= 0; i--) lines += '<div class="x-line" style="height:' + (100 / data.labels_y.length)+ '%"><div class="label_y">' + data.labels_y[i] + '</div></div>'; 773 box.append('<div class="axis_y">' + lines + '</div>'); 774 data.items.forEach(function(item){ 775 if (item.y !== false && item.y > 0) 776 box.append('<div class="bar" style="width:' + (100 / data.items.length) + '%"><div class="label_x">' + item.label_x+ '</div><div class="ball ' + item.class + '" style="bottom:' + (item.y/data.max_s) * 100 + '%">' + item.value + '</div></div>'); 777 else 778 box.append('<div class="bar" style="width:' + (100 / data.items.length) + '%"><div class="label_x">' + item.label_x+ '</div></div>'); 779 }); 780 } 781 } 782 } 783 } 784 785 function daysInMonth (year, month) { 786 return new Date(year, month, 0).getDate(); 787 } 788 789 function dmy(date) { 790 var m,d; 791 m = date.getMonth()*1 + 1; 792 m = m>9 ? m : '0'+m; 793 d = date.getDate()*1; 794 d = d>9 ? d : '0'+d; 795 return d + '.' + m + '.' +(date.getYear()-100); 796 } 797 798 function getWeek(date) { 799 var onejan = new Date(date.getFullYear(), 0, 1); 800 return Math.ceil((((date - onejan) / 86400000) + onejan.getDay() + 1) / 7); 801 } 802 803 function leadZero(a) { 804 return a>9 ? a : '0' + a; 805 } 806 807 function nmd(date) { 808 var m,d; 809 m = date.getMonth()*1 + 1; 810 d = date.getDate()*1; 811 return leadZero(d) + '.' + leadZero(m); 812 } 813 814 function getMarkClass(mark) { 815 var markClass = 'u'; 816 if (mark >= 0.2) markClass = 'r'; 817 if (mark >= 0.5) markClass = 'y'; 818 if (mark >= 0.8) markClass = 'g'; 819 if (mark >= 0.99) markClass = 's'; 820 return markClass; 821 } 822 823 function stat_chart_view(chart) { 824 var type = chart.attr('data-type'); 825 var data = {type: type, items: [], labels_y: []}
825; 826 827 var pushDataMarks = function(curr, tmd, em, label){ 828 if (curr < tmd) { 829 data.items.push({label_x: label, class: 'u', y: false, value: false}) 830 } else { 831 if (em) { 832 data.items.push({label_x: label, class: getMarkClass(em), y: em, value: Math.round(em * 100)/10}) 833 } else { 834 data.items.push({label_x: label, class: 'u', y: 0, value: '-',}) 835 } 836 } 837 } 838 839 var calcStartDate = function(curr,start) { 840 var startDate = false; 841 if (group == 'day') { 842 delta_year = curr.getFullYear() + Math.ceil(start / 12); 843 delta_month = curr.getMonth() + start % 12; 844 startDate = new Date(delta_year, delta_month, 1); 845 } 846 if (group == 'annual') { 847 delta_year = curr.getFullYear()*1 + start*1; 848 startDate = new Date(delta_year, 0, 1); 849 } 850 if (group == 'month') { 851 delta_year = curr.getFullYear() + Math.ceil(start / 12); 852 delta_month = curr.getMonth() + start % 12; 853 startDate = new Date(delta_year, delta_month, 1); 854 } 855 if (group == 'week') { 856 var shift = curr.getDay() - 1; 857 if (shift == -1) shift = 6; 858 startDate = new Date(curr - (shift - start * 7) * 24*60*60*1000); 859 } 860 return startDate; 861 } 862 863 var pushDataSessions = function(curr, tmd, sessions, label){ 864 if (curr < tmd) { 865 data.items.push({label_x: label, class: '', y: false, value: false}) 866 } else { 867 if (sessions) { 868 data.items.push({label_x: label, class: '', y: Math.max(sessions,1), value: Math.max(sessions)}) 869 } else { 870 data.items.push({label_x: label, class: '', y: 0, value: '-',}) 871 } 872 } 873 } 874 875 876 var pushDataMatters = function(matters) { 877 for (var i = 0; i <= 4; i++) { 878 if (matters.by_type !== undefined && matters.by_type[i] !== undefined) { 879 if (data.items[i] == undefined) { 880 data.items[i] = { 881 mark: matters.by_type[i].mark, 882 count:matters.by_type[i].e + matters.by_type[i].t, 883 lessons: matters.by_type[i].l 884 } 885 } else { 886 data.items[i].mark += matters.by_type[i].mark*10; 887 data.items[i].count += matters.by_type[i].e + matters.by_type[i].t; 888 data.items[i].lessons += matters.by_type[i].l; 889 } 890 } 891 } 892 } 893 if (type == 'marks') { 894 data.labels_y = ['1','2','3','4','5','6','7','8','9','10']; 895 var group = chart.attr('data-group'); 896 if (group == undefined) group = 'day'; 897 if (true) { 898 var start = chart.attr('data-start'); 899 var curr = new Date(); 900 if (start == undefined) start = 0; 901 902 var data_key = chart.attr('data-key'); 903 var dataset = digObject('Drupal.settings.pridea.stat.' + data_key); 904 //if (dataset.days == undefined) return; 905 if ( dataset !== false && dataset.days !== undefined) { 906 907 908 var delta_year, delta_month, loopend, startDate, elem,tmd,ex,em, daycnt,curr_corrected; 909 startDate = calcStartDate(curr,start); 910 911 var parseDays = function(){ 912 if (group == 'day') { 913 chart.parent().find('.chart_current').html(Drupal.t(monthNames[startDate.getMonth()],{},{context: 'pridea.js'}) + ' ' + startDate.getFullYear()); 914 daycnt = daysInMonth(startDate.getFullYear(), startDate.getMonth() + 1); 915 for (var i = 1; i <= daycnt; i++) { 916 tmd = new Date(startDate.getFullYear(), startDate.getMonth(), i); 917 elem = dataset.days[dmy(tmd)]; 918 em = 0; 919 if (elem) { 920 ex = elem.e + elem.t; 921 em = elem.mark; 922 em = ex > 0 ? em / ex : 0; 923 } 924 pushDataMarks(curr,tmd,em,tmd.getDate()); 925 } 926 } 927 if (group == 'annual') { 928 chart.parent().find('.chart_current').html(startDate.getFullYear()); 929 curr_corrected = new Date(curr.getFullYear(), curr.getMonth() + 1,1); 930 for (var i = 1; i <= 12; i++) { 931 ex = 0; 932 em = 0; 933 daycnt = daysInMonth(startDate.getFullYear(), i, 1); 934 for (var j = 1; j <= daycnt; j++) { 935 tmd = new Date(startDate.getFullYear(), i - 1, j); 936 elem = dataset.days[dmy(tmd)]; 937 if (elem) { 938 ex += elem.e + elem.t; 939 em += elem.mark; 940 } 941 } 942 em = ex > 0 ? em / ex : 0; 943 pushDataMarks(curr_corrected,tmd,em,tmd.getMonth()+1); 944 } 945 } 946 if (group == 'month') { 947 chart.parent().find('.chart_current').html(Drupal.t(monthNames[startDate.getMonth()],{},{context: 'pridea.js'}) + ' ' + startDate.getFullYear()); 948 curr_corrected = new Date(curr.getFullYear(), curr.getMonth(),curr.getDate() + 7); 949 var weekDay = startDate.getDay(); 950 if (weekDay > 1) startDate = new Date(delta_year, delta_month, 9 - weekDay); 951 if (weekDay == 0) startDate = new Date(delta_year, delta_month, 2); 952 daycnt = daysInMonth(startDate.getFullYear(), startDate.getMonth(), 1);
953 var weekcnt = Math.ceil((daycnt - startDate.getDate()) / 7); 954 for (var i = 0; i < weekcnt; i++) { 955 ex = 0; 956 em = 0; 957 for (var j = 0; j < 7; j++) { 958 tmd = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i * 7 + j); 959 elem = dataset.days[dmy(tmd)]; 960 if (elem) { 961 ex += elem.e + elem.t; 962 em += elem.mark; 963 } 964 } 965 em = ex > 0 ? em / ex : 0; 966 pushDataMarks(curr_corrected,tmd,em,getWeek(tmd)); 967 } 968 } 969 if (group == 'week') { 970 chart.parent().find('.chart_current').html(Drupal.t('Week') + ' ' + getWeek(startDate)); 971 for (var i = 0; i < 7; i++) { 972 tmd = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i); 973 elem = dataset.days[dmy(tmd)]; 974 em = 0; 975 if (elem) { 976 ex = elem.e + elem.t; 977 em = elem.mark; 978 em = ex > 0 ? em / ex : 0; 979 } 980 pushDataMarks(curr,tmd,em,nmd(tmd)); 981 } 982 } 983 stat_chart(chart,data); 984 } 985 986 if (startDate.getTime()/1000 > dataset.start) { 987 parseDays(); 988 } else { 989 $.post('/user/stat',{stat_start:Math.floor(startDate.getTime()/1000), stat_loaded: dataset.start},function(data){ 990 var result = JSON.parse(data); 991 if (result.days !== undefined) { 992 for (var daymark in result.days) { 993 Drupal.settings.pridea.stat.marks.days[daymark] = result.days[daymark]; 994 } 995 Drupal.settings.pridea.stat.marks.start = result.start; 996 parseDays(); 997 } 998 }); 999 } 1000 } 1001 } 1002 } 1003 1004 if (type == 'matters') { 1005 var group = chart.attr('data-group'); 1006 if (group == undefined) group = 'day'; 1007 var start = chart.attr('data-start'); 1008 if (start == undefined) start = 0; 1009 var curr = new Date(); 1010 var data_key = chart.attr('data-key'); 1011 var dataset = digObject('Drupal.settings.pridea.stat.' + data_key); 1012 if ( dataset !== false) { 1013 var delta_year, delta_month, loopend, startDate, elem,tmd,marks, daycnt, keys; 1014 if (group == 'day') { 1015 var keys = Object.keys(dataset.days); 1016 chart.parent().find('.chart_current').html(Drupal.t('Total')); 1017 for (var i = keys.length - 1; i >= 0; i--) { 1018 pushDataMatters(dataset.days[keys[i]]); 1019 } 1020 } 1021 if (group == 'annual') { 1022 delta_year = curr.getFullYear()*1 + start*1; 1023 startDate = new Date(delta_year, 0, 1); 1024 tmd = startDate; 1025 var cnt = 0; 1026 chart.parent().find('.chart_current').html(startDate.getFullYear()); 1027 while (!(tmd.getDate()==31 && tmd.getMonth()==11) && cnt<= 365) { 1028 if (dataset.days[dmy(tmd)] !== undefined) { 1029 pushDataMatters(dataset.days[dmy(tmd)]); 1030 } 1031 cnt++; 1032 tmd = new Date(delta_year, startDate.getMonth(),cnt); 1033 } 1034 } 1035 if (group == 'month') { 1036 delta_year = curr.getFullYear() + Math.ceil(start / 12); 1037 delta_month = curr.getMonth() + start % 12; 1038 startDate = new Date(delta_year, delta_month, 1); 1039 daycnt = daysInMonth(startDate.getFullYear(), startDate.getMonth() + 1); 1040 chart.parent().find('.chart_current').html(Drupal.t(monthNames[startDate.getMonth()],{},{context: 'pridea.js'}) + ' ' + startDate.getFullYear()); 1041 for (var i = 1; i <= daycnt; i++) { 1042 tmd = new Date(startDate.getFullYear(), startDate.getMonth(),i); 1043 if (dataset.days[dmy(tmd)] !== undefined) { 1044 pushDataMatters(dataset.days[dmy(tmd)]); 1045 } 1046 } 1047 } 1048 if (group == 'week') { 1049 var shift = curr.getDay() - 1; 1050 if (shift == -1) shift = 6; 1051 startDate = new Date(curr - (shift - start * 7) * 24*60*60*1000); 1052 chart.parent().find('.chart_current').html(Drupal.t('Week') + ' ' + getWeek(startDate)); 1053 for (var i = 0; i < 7; i++) { 1054 tmd = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i); 1055 if (dataset.days[dmy(tmd)] !== undefined) { 1056 pushDataMatters(dataset.days[dmy(tmd)]); 1057 } 1058 } 1059 } 1060 } 1061 1062
1063 data.items.forEach(function(item,index){ 1064 data.items[index].y = item.count + item.lessons; 1065 data.items[index].value = item.count > 0 ? Math.round(item.mark * 10 / item.count) / 10 : 0; 1066 if (lectionMatters[index] !== undefined) 1067 data.items[index].label_x = lectionMatters[index]; 1068 data.items[index].class = getMarkClass(data.items[index].value / 10); 1069 }); 1070 1071 stat_chart(chart,data); 1072 } 1073 1074 if (type == 'activity') { 1075 var group = chart.attr('data-group'); 1076 if (group == undefined) group = 'day'; 1077 if (true) { 1078 var start = chart.attr('data-start'); 1079 if (start == undefined) start = 0; 1080 var curr = new Date(); 1081 var data_key = chart.attr('data-key'); 1082 var dataset = digObject('Drupal.settings.pridea.stat.' + data_key); 1083 if ( dataset !== false) { 1084 var delta_year, delta_month, loopend, startDate, elem,tmd,ex,em, daycnt, curr_corrected; 1085 if (group == 'day') { 1086 delta_year = curr.getFullYear() + Math.ceil(start / 12); 1087 delta_month = curr.getMonth() + start % 12; 1088 startDate = new Date(delta_year, delta_month, 1); 1089 chart.parent().find('.chart_current').html(Drupal.t(monthNames[startDate.getMonth()],{},{context: 'pridea.js'}) + ' ' + startDate.getFullYear()); 1090 daycnt = daysInMonth(startDate.getFullYear(), startDate.getMonth() + 1); 1091 for (var i = 1; i <= daycnt; i++) { 1092 tmd = new Date(startDate.getFullYear(), startDate.getMonth(), i); 1093 elem = dataset.days[dmy(tmd)]; 1094 em = 0; 1095 if (elem !== undefined) { 1096 if (elem.e !== undefined) em += elem.e; 1097 if (elem.l !== undefined) em += elem.l; 1098 if (elem.t !== undefined) em += elem.t; 1099 } 1100 pushDataSessions(curr, tmd, em, tmd.getDate()); 1101 } 1102 } 1103 if (group == 'annual') { 1104 delta_year = curr.getFullYear()*1 + start*1; 1105 startDate = new Date(delta_year, 0, 1); 1106 curr_corrected = new Date(curr.getFullYear(), curr.getMonth() + 1,1); 1107 chart.parent().find('.chart_current').html(startDate.getFullYear()); 1108 for (var i = 1; i <= 12; i++) { 1109 em = 0; 1110 daycnt = daysInMonth(startDate.getFullYear(), i, 1); 1111 for (var j = 1; j <= daycnt; j++) { 1112 tmd = new Date(startDate.getFullYear(), i - 1, j); 1113 elem = dataset.days[dmy(tmd)]; 1114 if (elem !== undefined) { 1115 if (elem.e !== undefined) em += elem.e; 1116 if (elem.l !== undefined) em += elem.l; 1117 if (elem.t !== undefined) em += elem.t; 1118 } 1119 } 1120 pushDataSessions(curr_corrected, tmd, em, tmd.getMonth()+1); 1121 } 1122 } 1123 if (group == 'month') { 1124 delta_year = curr.getFullYear() + Math.ceil(start / 12); 1125 delta_month = curr.getMonth() + start % 12; 1126 startDate = new Date(delta_year, delta_month, 1); 1127 curr_corrected = new Date(curr.getFullYear(), curr.getMonth(),curr.getDate() + 7); 1128 chart.parent().find('.chart_current').html(Drupal.t(monthNames[startDate.getMonth()],{},{context: 'pridea.js'}) + ' ' + startDate.getFullYear()); 1129 var weekDay = startDate.getDay(); 1130 if (weekDay > 1) startDate = new Date(delta_year, delta_month, 9 - weekDay); 1131 if (weekDay == 0) startDate = new Date(delta_year, delta_month, 2); 1132 daycnt = daysInMonth(startDate.getFullYear(), startDate.getMonth(), 1); 1133 var weekcnt = Math.ceil((daycnt - startDate.getDate()) / 7); 1134 for (var i = 0; i < weekcnt; i++) { 1135 em = 0; 1136 for (var j = 0; j < 7; j++) { 1137 tmd = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i * 7 + j); 1138 elem = dataset.days[dmy(tmd)]; 1139 if (elem !== undefined) { 1140 if (elem.e !== undefined) em += elem.e; 1141 if (elem.l !== undefined) em += elem.l; 1142 if (elem.t !== undefined) em += elem.t; 1143 } 1144 } 1145 pushDataSessions(curr_corrected, tmd, em, getWeek(tmd)); 1146 } 1147 } 1148 if (group == 'week') { 1149 var shift = curr.getDay() - 1; 1150 if (shift == -1) shift = 6; 1151 startDate = new Date(curr - (shift - start * 7) * 24*60*60*1000); 1152 chart.parent().find('.chart_current').html(Drupal.t('Week') + ' ' + getWeek(startDate)); 1153 for (var i = 0; i < 7; i++) { 1154 tmd = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() + i); 1155 elem = dataset.days[dmy(tmd)]; 1156 em = 0; 1157 if (elem !== undefined) { 1158 if (elem.e !== undefined) em += elem.e; 1159 if (elem.l !== undefined) em += elem.l; 1160 if (elem.t !== undefined) em += elem.t; 1161 } 1162 pushDataSessions(curr, tmd, em, nmd(tmd)); 1163 } 1164 } 1165 } 1166 } 1167 var maxVal = 1;
1168 data.items.forEach(function(item,index) { 1169 maxVal = Math.max(maxVal, item.y); 1170 }); 1171 data.max_s = maxVal; 1172 stat_chart(chart,data); 1173 } 1174 1175 1176 /*var slice = 1177 stat_chart(chart,{ 1178 items: [ 1179 {label_x: 'b', class: '', y: 0.1, value: '10%',}, 1180 {label_x: 'c', class: '', y: 0.2, value: '20%',}, 1181 {label_x: 'd', class: '', y: 0.3, value: '30%',}, 1182 ], 1183 labels_y: ['1','2','3','4','5','6','7','8','9','10'], 1184 type: 'default' 1185 });*/ 1186 } 1187 1188 function stat() { 1189 $('.pridea_chart').once(function(){ 1190 stat_chart_view($(this)); 1191 }); 1192 $('.btn_toggle').click(function(){ 1193 var btn = $(this); 1194 var chart = btn.closest('.pridea_chart_wrapper').find('.pridea_chart'); 1195 chart.attr('data-group',btn.attr('data-group')); 1196 chart.removeAttr('data-start'); 1197 btn.closest('.pridea_chart_wrapper').find('.btn_toggle').removeClass('active'); 1198 btn.addClass('active'); 1199 stat_chart_view(chart); 1200 }); 1201 $('.chart_footer .prev').once().click(function(){ 1202 var chart = $(this).closest('.pridea_chart_wrapper').find('.pridea_chart'); 1203 var start = chart.attr('data-start'); 1204 if (start == undefined) start = 0; 1205 chart.attr('data-start', start - 1); 1206 stat_chart_view(chart); 1207 }); 1208 $('.chart_footer .next').once().click(function(){ 1209 var chart = $(this).closest('.pridea_chart_wrapper').find('.pridea_chart'); 1210 var start = chart.attr('data-start')*1; 1211 if (start == undefined) start = 0; 1212 if (start + 1 <= 0) chart.attr('data-start', start + 1); 1213 stat_chart_view(chart); 1214 }); 1215 $('.pridea_chart_wrapper').once(function(){ 1216 $(this).find('.btn_toggle').last().click(); 1217 }); 1218 /*$('.chartjs').once(function(){ 1219 var chart = $(this); 1220 var data = JSON.parse(chart.attr('data-chart')); 1221 var title = chart.attr('data-title'); 1222 var type = chart.attr('data-type'); 1223 var max = 1; 1224 if (chart.attr('data-max') !== undefined ) max = chart.attr('data-max') * 1; 1225 if (type == undefined || type == 'ball') { 1226 ballChart(data,chart, title, max); 1227 } 1228 if (type == 'bar') { 1229 barChart(data,chart, title); 1230 } 1231 1232 });*/ 1233 1234 } 1235 1236 1237 function sessionTimeout() { 1238 var timeout = $.cookie('pridea_session_cookie'); 1239 var expires = new Date(); 1240 var curr_date = expires.getDate(); 1241 var curr_month = expires.getMonth() + 1; 1242 var curr_year = expires.getYear(); 1243 var pin = curr_year + "-" + curr_month + "-" + curr_date; 1244 expires.setHours( expires.getHours() + 1); 1245 if (timeout == pin) { 1246 //continue session 1247 console.log('continue session'); 1248 } else { 1249 //new session 1250 console.log('new session'); 1251 $.get('/ajax/ping'); 1252 } 1253 $.cookie('pridea_session_cookie',pin,{expires: expires}); 1254 } 1255 1256 1257 function comments() { 1258 1259 $('.comment_reply_btn').once().click(function(){ 1260 var btn = $(this); 1261 var parent = btn.closest('.comment_wrapper').find('.comment_reply'); 1262 var form = $('form.pridea_messages_reply_form').first(); 1263 form.insertAfter(parent).addClass('active'); 1264 if (btn.attr('data-cid') !== undefined) { 1265 form.find('[name=answer]').val(btn.attr('data-cid')); 1266 } else { 1267 form.find('[name=answer]').val(0); 1268 } 1269 if (btn.attr('data-nid') !== undefined) form.find('[name=gid]').val(btn.attr('data-nid')); 1270 }); 1271 1272 /*$('.expand-comments').each(function(){ 1273 var btn = $(this); 1274 var ctotal = btn.parent().find('.msg.comment'); 1275 var cnew = ctotal.filter('.new'); 1276 var txt = ctotal.length; 1277 if (cnew.length > 0) { 1278 txt += ' <b>(+' + cnew.length + ')</b>'; 1279 } 1280 btn.find('.answer_count').html(txt); 1281 }); 1282 1283 $('.comment-list .comment-list-comment').once().click(function(){ 1284 var c = $(this); 1285 var cid = c.attr('data-cid'); 1286 var gid = c.attr('data-gid'); 1287 window.location = '/group/' + gid + '/messages/' + cid; 1288 }); 1289 1290 $('#comment-admin').once(function(){ 1291 var teaserbox = $('#comment-admin-teasers'); 1292 var list = $('#comment-admin-thread'); 1293 var comments = list.find('.comment-list-comment'); 1294 //var teasers = comments.filter('.depth2'); 1295 //teasers.clone().removeAttr('id').appendTo(teaserbox); 1296 1297 comments.find('.comment-icon').click(function(){ 1298 var c = $(this).closest('.comment-list-comment'); 1299 var f = $('#comment-admin-form').attr('class','depth' + c.attr('data-depth')).insertAfter(c).show(); 1300 f.find('input[name="answer"]').val(c.attr('data-cid')); 1301 f.find('input[name="thread"]').val($('#comment-admin').attr('data-thread')); 1302 f.find('input[name="gid"]').val($('#comment-admin').attr('group-id')); 1303 }).html('<svg><use xlink:href="/sites/all/modules/pridea/media/icons.svg#reply"></svg>'); 1304 1305 var dataset = JSON.parse($(this).attr('data-list')); 1306 teaserbox.find('.comment-list-comment').click(function(){ 1307 $('#comment-admin-form').hide(); 1308 var uid = $(this).attr('data-uid'); 1309 //var cid = $(this).attr('data-cid'); 1310 comments.hide(); 1311 var cids = comments.filter('[data-uid=' + uid + ']').filter('[data-depth=2]'); 1312 cids.each(function(){ 1313 var cid = $(this).attr('data-cid');
1314 $('#comment-admin').attr('data-thread',uid); 1315 var rows = Object.keys(dataset); 1316 for (var i = rows.length - 1; i >= 0; i--) { 1317 for (var j = dataset[rows[i]].length - 1; j >= 0; j--) { 1318 if (dataset[rows[i]][j] == cid) { 1319 $('#cid' + rows[i]).show(); 1320 } 1321 } 1322 } 1323 }); 1324 }); 1325 1326 if (location.hash !== '') 1327 setTimeout(function(){ 1328 console.log('found', teaserbox.find('[data-cid=' + location.hash.replace('#','') + ']')) 1329 teaserbox.find('[data-uid=' + location.hash.replace('#','') + ']').click(); 1330 },100); 1331 }); 1332 1333 $('#comment-thread').once(function(){ 1334 var thread = $(this); 1335 var gid = thread.attr('group-id'); 1336 var cid = thread.find('.initial .comment-list-comment').attr('data-cid'); 1337 var f = $('#comment-list-form'); 1338 f.find('input[name="answer"]').val(cid); 1339 f.find('input[name="gid"]').val(gid); 1340 });*/ 1341 } 1342 1343 1344 function notifications() { 1345 var markup = ''; 1346 var total = 0; 1347 var count = 0; 1348 var grouped = false; 1349 $('#my-messages').append('<div class="notifications messages"></div>'); 1350 $('#my-groups').append('<div class="notifications groups"></div>'); 1351 $('#my-notifications').append('<div class="notifications events"></div>'); 1352 $('#my-homework').append('<div class="notifications homework"></div>'); 1353 1354 $('.notifications').hide(); 1355 //*************************/// 1356 //return; 1357 //*************************/// 1358 if (digObject('Drupal.settings.pridea.pageData') !== false) { 1359 var items = Object.keys(Drupal.settings.pridea.pageData); 1360 for (var i = items.length - 1; i >= 0; i--) { 1361 if (Drupal.settings.pridea.pageData[items[i]].rows !== undefined) { 1362 if (Drupal.settings.pridea.pageData[items[i]].title !== undefined) { 1363 markup += '<h3>' + Drupal.settings.pridea.pageData[items[i]].title + '<h3>'; 1364 grouped = true; 1365 } else { 1366 grouped = false; 1367 } 1368 count = 0; 1369 1370 for (var j = Drupal.settings.pridea.pageData[items[i]].rows.length - 1; j >= 0; j--) { 1371 //console.log('data',Drupal.settings.pridea.pageData[items[i]].rows[j]); 1372 total += Drupal.settings.pridea.pageData[items[i]].rows[j].count * 1; 1373 count += Drupal.settings.pridea.pageData[items[i]].rows[j].count * 1; 1374 if (!grouped) { markup += '<h3>';} 1375 markup += '<a href="' + Drupal.settings.basePath + Drupal.settings.pridea.pageData[items[i]].rows[j].url + '">' + 1376 Drupal.settings.pridea.pageData[items[i]].rows[j].title + 1377 ' <span class="count">' + Drupal.settings.pridea.pageData[items[i]].rows[j].count + '</span></a>'; 1378 if (!grouped) { markup += '</h3>';} 1379 if (Drupal.settings.pridea.pageData[items[i]].rows[j].id !== undefined && count > 0) { 1380 //console.log(Drupal.settings.pridea.pageData[items[i]].rows[j].id); 1381 $('#node-' + Drupal.settings.pridea.pageData[items[i]].rows[j].id).addClass('notification-exists'); 1382 $('.notifications.' + items[i] + '_' + Drupal.settings.pridea.pageData[items[i]].rows[j].id).text(count).show().parent('.messages_parent').addClass('new_messages'); 1383 1384 } 1385 1386 } 1387 //console.log('count',count); 1388 if (count>0) $('.notifications.' + items[i]).text(count).show(); 1389 } 1390 } 1391 } 1392 if (total > 0) { 1393 $('.notifications.total').text(total).show(); 1394 } 1395 window.notifications_text = markup; 1396 //console.log(markup); 1397 } 1398 1399 1400 1401 function test_answers_post() { 1402 var tests = Object.keys(window.flashcards); 1403 var answers = ''; 1404 var rating = 0; 1405 var count = $('.exercise-test-element').length; 1406 if (count>0) { 1407 for (var i = 0; i < tests.length; i++) { 1408 answers += String(window.flashcards[tests[i]]); 1409 rating += window.flashcards[tests[i]]; 1410 } 1411 var nid = $('.page-node.node-type-test .node-test, #my-word-test').attr('data-id'); 1412 var post = {}; 1413 //console.log('Test done ' + count + ' from ',tests.length); 1414 if (tests.length == count) { 1415 var grade = count > 0 ? (rating / count) : 0; 1416 if (isNaN(grade)) grade = 0; 1417 post = {answers: answers, nid: nid, result: grade, finalize: true}; 1418 $('#test_grade').html((grade * 10).toFixed(2)); 1419 $('#test_results').show(); 1420 1421 } else { 1422 post = {answers: answers, nid: nid, result: 0}; 1423 } 1424 $.post('/ajax/test/post', post, function(data){ 1425 console.log('test res',data); 1426 }); 1427 } 1428 } 1429 1430 1431 function conj_answers_post() { 1432 var tests = Object.keys(window.flashcards); 1433 if (tests.length == Drupal.settings.pridea.conjResult.length) { 1434 var res = 0; 1435 for (var i = tests.length - 1; i >= 0; i--) { 1436 res += window.flashcards[tests[i]]; 1437 } 1438 res = res/10; 1439 $('#test_grade').html((res * 10).toFixed(2)); 1440 $('#test_results').show(); 1441 $.post('/ajax/conj/post', {result: res}, function(data){ 1442 console.log('test res',data); 1443 }); 1444 } 1445 } 1446 1447 1448 function test_answer(id) { // -1 == timeout 1449 clearTimeout(window.testTimer);
1450 $('#timebar').removeClass('armed'); 1451 var test = $('.exercise-test-element.active'); 1452 var element_id = test.addClass('passed').attr('data-id'); 1453 //console.log('id', id); 1454 //console.log('answers', Drupal.settings.pridea.testAnswers[element_id]); 1455 if (id >=0 ) { 1456 if (Drupal.settings.pridea.testAnswers !== undefined && Drupal.settings.pridea.testAnswers[element_id] !== undefined) { 1457 if (id == Drupal.settings.pridea.testAnswers[element_id][0]) { 1458 window.flashcards[element_id] = 1; 1459 $('.test-bullet[data-id=' + element_id +']').addClass('passed'); 1460 if ($('.exercise-test-test_v_i').length > 0) { 1461 $('#test-element-' + element_id + ' .test_example').show(); 1462 } 1463 } else { 1464 window.flashcards[element_id] = 0; 1465 1466 $('.test-bullet[data-id=' + element_id +']').addClass('failed'); 1467 } 1468 $('#test-element-' + element_id + ' .explanation_row').show(); 1469 $('#test-element-' + element_id + ' .btn[data-value='+ Drupal.settings.pridea.testAnswers[element_id][0]+ ']').addClass('this_wins'); 1470 } else { 1471 $('.test-bullet[data-id=' + element_id +']').addClass('error'); 1472 } 1473 } else { 1474 window.flashcards[element_id] = 0; 1475 $('.test-bullet[data-id=' + element_id +']').addClass('failed'); 1476 } 1477 test_answers_post(); 1478 if (!test.is(':last-child')) $('.test_navigation a.next').show(); 1479 } 1480 1481 function test_compare_words(correct,test) { 1482 var smplf = function($t){return $t.replace(/á/g,'a').replace(/é/g,'e').replace(/Ã/g,'i').replace(/ó/g,'o').replace(/ú/g,'u');} 1483 if (correct == test) return 1; 1484 if (smplf(correct) == smplf(test)) return 0.7; 1485 return 0; 1486 } 1487 1488 1489 function test_conj_answer() { 1490 var res = 0; 1491 var total = 0; 1492 var test = $('.exercise-test-element.active').addClass('passed'); 1493 var element_id = test.attr('data-id'); 1494 if (Drupal.settings.pridea.conjResult !== undefined && Drupal.settings.pridea.conjResult[element_id - 1] !== undefined) { 1495 test.find('.conj_input').each(function(){ 1496 var i = $(this); 1497 var t = i.val(); 1498 var v = i.attr('data-value'); 1499 var correct = Drupal.settings.pridea.conjResult[element_id - 1][v]; 1500 total++; 1501 var word_res = test_compare_words(correct,t); 1502 res += word_res; 1503 if (word_res == 1) { 1504 i.replaceWith('<span class="answer">' + t + '</span>'); 1505 } else { 1506 if (word_res > 0.5) { 1507 i.replaceWith('<span class="incorrect-answer">' + t + ' <span class="correct">' + correct + '</span></span>'); 1508 } else { 1509 i.replaceWith('<span class="wrong-answer">' + t + ' <span class="correct">' + correct + '</span></span>'); 1510 } 1511 1512 } 1513 }); 1514 $('.test-bullet[data-id=' + element_id +']').addClass((res > 2) ? 'passed' : 'failed'); 1515 window.flashcards[element_id] = res / total; 1516 } 1517 conj_answers_post(); 1518 if (!test.is(':last-child')) $('.test_navigation a.next').show(); 1519 } 1520 1521 function test_continue($test_id) { 1522 if (Drupal.settings.pridea.testResult !== undefined && Drupal.settings.pridea.testResult[$test_id] !== undefined) { 1523 var progress = Drupal.settings.pridea.testResult[$test_id].progress; 1524 var elements = $('.exercise-test-element'); 1525 var count = elements.length; 1526 var type = elements.first().parent().closest('.exercise-test').attr('data-type'); 1527 if (type !== 'test_v_t' && progress.length < count) { 1528 for (var i = 0; i < progress.length; i++) { 1529 var element_id = elements.eq(i).addClass('passed').attr('data-id'); 1530 window.flashcards[element_id] = progress[i] * 1; 1531 $('.test-bullet[data-id=' + element_id +']').addClass( (progress[i] == 1) ? 'passed' : 'failed'); 1532 if (Drupal.settings.pridea.testAnswers[element_id] !== undefined) { 1533 $('#test-element-' + element_id + ' .btn[data-value='+ Drupal.settings.pridea.testAnswers[element_id][0]+ ']').addClass('this_wins'); 1534 } else { 1535 return 0; 1536 } 1537 } 1538 return progress.length; 1539 } 1540 } 1541 return 0; 1542 } 1543 1544 function conj_navigate(element = 'start') { 1545 var el = false;
1546 //console.log('Navigate', element); 1547 if (element == 'next') { 1548 el = $('.exercise-test-element.active').next(); 1549 } else if (element == 'prev') { 1550 el = $('.exercise-test-element.active').prev(); 1551 } else if (element == 'start') { 1552 el = $('.exercise-test-element').eq(0); 1553 } 1554 if (el.length>0) { 1555 $('.exercise-test-element').removeClass('active').hide(); 1556 el.addClass('active').show(); 1557 $('.test_navigation a').show(); 1558 if (!el.hasClass('passed')) $('.test_navigation a.next').hide(); 1559 if (el.is(':last-child')) $('.test_navigation a.next').hide(); 1560 if (el.is(':first-child')) $('.test_navigation a.prev').hide(); 1561 } 1562 var element_id = $('.exercise-test-element.active').attr('data-id'); 1563 $('.test-bullet').removeClass('active'); 1564 $('.test-bullet[data-id=' + element_id +']').addClass('active'); 1565 } 1566 1567 function test_navigate(element = 'next') { 1568 var el = false; 1569 var bul = false; 1570 clearTimeout(window.testTimer); 1571 setTimeout(function(){ 1572 $('#timebar').removeClass('armed'); 1573 var test = $('.page-node.node-type-test .node-test, #my-word-test'); 1574 if (element == 'next') { 1575 el = $('.exercise-test-element.active').next(); 1576 } else if (element == 'prev') { 1577 el = $('.exercise-test-element.active').prev(); 1578 } else { 1579 if (parseInt(element) != NaN ) { 1580 el = test.find('.exercise-test-element').hide().removeClass('active').eq(element); 1581 } 1582 } 1583 if (el.length>0) { 1584 $('.test_navigation a').show(); 1585 if (!el.hasClass('passed')) $('.test_navigation a.next').hide(); 1586 if (el.is(':last-child')) $('.test_navigation a.next').hide(); 1587 if (el.is(':first-child')) $('.test_navigation a.prev').hide(); 1588 test.find('.exercise-test-element').hide().removeClass('active'); 1589 el.show().addClass('active'); 1590 var element_id = $('.exercise-test-element.active').attr('data-id'); 1591 $('.test-bullet').removeClass('active'); 1592 $('.test-bullet[data-id=' + element_id +']').addClass('active'); 1593 if (!el.hasClass('passed')) { 1594 $('#timebar').addClass('armed'); 1595 window.testTimer = setTimeout(function(){ 1596 test_answer(-1); 1597 $('#timebar').removeClass('armed'); 1598 },window.testDelay); 1599 } 1600 } 1601 },100); 1602 } 1603 1604 1605 function tests() { 1606 var test = $('.page-node.node-type-test .node-test, #my-word-test').once(function(){ 1607 window.flashcards = {}; 1608 window.testDelay = 10000; 1609 var test = $(this); 1610 if (test.hasClass('exercise-test-test_phr') || test.hasClass('exercise-test-test_grm')) { 1611 window.testDelay = 60000; 1612 } 1613 var start = test_continue($(this).attr('data-id')); 1614 if (test.attr('id') == 'my-word-test') { 1615 start = 0; 1616 } 1617 $('nav.test_navigation .next').click(function(e){ 1618 test_navigate('next'); 1619 e.preventDefault(); 1620 }); 1621 $('nav.test_navigation .prev').click(function(e){ 1622 test_navigate('prev'); 1623 e.preventDefault(); 1624 }); 1625 $(this).find('#test_items .btn.btn-main').on('click touchend',function(e){ 1626 if (!$(this).closest('.exercise-test-element').hasClass('passed')) { 1627 var answer = $(this).addClass('clicked').attr('data-value'); 1628 test_answer(answer); 1629 } 1630 }); 1631 $('#test_start').click(function(){ 1632 $('#test_intro').hide(); 1633 $('#test_main').show(); 1634 setTimeout(function(){ 1635 test_navigate(start); 1636 },300); 1637 }); 1638 /*setTimeout(function(){ 1639 test_navigate(start); 1640 },500); */ 1641 }); 1642 1643 $('.test-intro .result-mark').once(function(){ 1644 var p = $(this); 1645 var tid = p.attr('class').replace(/.*progress_([0-9]*).*/,'$1'); 1646 if (digObject('Drupal.settings.pridea.testResult') !== false && Drupal.settings.pridea.testResult[tid] !== undefined) { 1647 var res = Drupal.settings.pridea.testResult[tid].result*1; 1648 var cls = getMarkClass(res); 1649 //if (p.hasClass('test_v_t') || p.hasClass('test_v_i') || p.hasClass('test_v_p')) total = 10; 1650 //var percent = 100 * Drupal.settings.pridea.testResult[tid].progress.length / total; 1651 p.append(Math.round(res * 10) ).addClass('show').addClass(cls); 1652 } 1653 }); 1654 var testProgress = false;
1655 if (testProgress = digObject('Drupal.settings.pridea.testResult')) { 1656 var test_ids = Object.keys(testProgress); 1657 var res = 0; 1658 for (var i = test_ids.length - 1; i >= 0; i--) { 1659 res = parseFloat(testProgress[test_ids[i]].result) * 10; 1660 $('.active1 .homework_row .progress_' + test_ids[i]).text(res.toPrecision(2)); 1661 1662 } 1663 1664 } 1665 //$('.homework_row .progress') 1666 1667 $('.test_example_show').once().click(function(){ 1668 $(this).hide().parent().find('.test_example').show(); 1669 }); 1670 1671 $('.conjugation_container').once(function(){ 1672 window.flashcards = {}; 1673 var start = test_continue($(this).attr('data-id')); 1674 $('nav.test_navigation .next').click(function(e){ 1675 conj_navigate('next'); 1676 e.preventDefault(); 1677 }); 1678 $('nav.test_navigation .prev').click(function(e){ 1679 conj_navigate('prev'); 1680 e.preventDefault(); 1681 }); 1682 $(this).find('.btn.btn-main').click(function(){ 1683 if (!$(this).closest('.exercise-test-element').hasClass('passed')) { 1684 test_conj_answer(); 1685 $(this).hide(); 1686 } 1687 }); 1688 setTimeout(function(){ 1689 conj_navigate(); 1690 },500); 1691 }); 1692 1693 $('#tests_back_btn').attr('href',document.referrer); 1694 } 1695 1696 1697 function groupRequests() { 1698 $('.btn-group-request').click(function(){ 1699 var btn = $(this); 1700 if (btn.attr('data-uid') !== undefined && btn.attr('data-utype') !== undefined) { 1701 $.post('/ajax/group_request',{rtype: btn.attr('data-utype'), rid: btn.attr('data-uid') },function(data) { 1702 if (data !== '' && data !== undefined) { 1703 var d = JSON.parse(data); 1704 console.log(d); 1705 if (d.result == 'OK' && d.text !== undefined) { 1706 modalbox(Drupal.t('Group request'), d.text); 1707 } else { 1708 if (d.text !== undefined) { 1709 modalbox(Drupal.t('Error'), d.text); 1710 } 1711 } 1712 } 1713 }); 1714 } 1715 }) 1716 } 1717 1718 function searchForm() { 1719 var searchDic = function(){ 1720 var q = $('#block-block-6 input[type=text]').val().trim(); 1721 window.location = '/dictionary/' + q; 1722 } 1723 $('#block-block-6 .btn').once().click(searchDic); 1724 $('#block-block-6 input[type=text]').keyup(function(event){ 1725 if (event.which == 13) searchDic(); 1726 }) 1727 1728 $('#serch_link a').html('<span>' + $('#serch_link a').text() + '</span><svg><use xlink:href="/sites/all/themes/pridea/media/icons.svg#i_search"></svg>'); 1729 } 1730 1731 1732 function navigationElements() { 1733 $('.unit_theme_title').once(function(){ 1734 var elements = Drupal.settings.pridea.navigator; 1735 if (elements.length>0) { 1736 var theme = $('<span id="theme_navigator" class="col-12 col-md-4 col-lg-5 text-md-right" ></span>').appendTo(this); 1737 for (var i = 0; i < elements.length; i++) { 1738 if (elements[i].node == '1') { 1739 theme.append('<a id="nid_' + elements[i].id + '" href="' + elements[i].url + '">Int.</a>'); 1740 } else { 1741 theme.append('<a id="eid_' + elements[i].id + '" href="' + elements[i].url + '">E' + elements[i].eindex + '</a>'); 1742 } 1743 } 1744 } 1745 }); 1746 if (digObject('Drupal.settings.pridea.current') !== false) { 1747 $('#' + Drupal.settings.pridea.current.type + 'id_' + Drupal.settings.pridea.current.id).addClass('current'); 1748 } 1749 } 1750 1751 1752 function swipe(){ 1753 var t = $('.exercise-test,.conjugation_container').addClass('drag-parent'); 1754 var dr = t.find('.exercise-test-element'); 1755 var x = 0; 1756 var ts = 0; 1757 var dir = 0; 1758 if (dr.length > 0){ 1759 var i = dr.draggable({ axis: "x", scroll: false , 1760 start: function(e, ui) { 1761 $(this).addClass('swipe'); 1762 x = ui.position.left; 1763 ts = new Date().getTime(); 1764 dir = 0; 1765 }, 1766 drag: function(e, ui) { 1767 var cdir = x > ui.position.left ? 1 : -1; 1768 if (cdir != dir) { 1769 dir = cdir; 1770 $(this).removeClass('dir-1').removeClass('dir1').addClass('dir' + dir); 1771 } 1772 }, 1773 stop: function(e, ui) { 1774 var delta = x - ui.position.left; 1775 var speed = delta / (new Date().getTime() - ts); 1776 var ret = true; 1777 if (speed > 1 && delta > 100) { 1778 if ($('nav.test_navigation .next').is(':visible')) { 1779 ret = false;
1780 var w = $(this).outerWidth(); 1781 $(this).draggable('disable').animate({left: -w},function(){ 1782 $('nav.test_navigation .next').click(); 1783 $(this).css({left: 0}).draggable('enable'); 1784 }); 1785 } 1786 } 1787 if (speed < -1 && delta < -100) { 1788 if ($('nav.test_navigation .prev').is(':visible')) { 1789 ret = false; 1790 var w = $(this).outerWidth(); 1791 $(this).draggable('disable').animate({left: w},function(){ 1792 $('nav.test_navigation .prev').click(); 1793 $(this).css({left: 0}).draggable('enable'); 1794 }); 1795 } 1796 } 1797 if (ret) { 1798 $(this).draggable('disable').animate({left: 0},300,function(){ 1799 $(this).draggable('enable'); 1800 }); 1801 } 1802 $(this).removeClass('swipe'); 1803 }, 1804 }); 1805 } 1806 } 1807 1808 1809 function homeworkProgress(){ 1810 $('.hw_toggle_marks').click(function(e){ 1811 $(this).closest('.homework-template, .pridea_chart_wrapper').toggleClass('showmarks'); 1812 e.preventDefault(); 1813 }); 1814 $('.homework-template').find('.hw_toggle_description').click(function(e){ 1815 $(this).closest('.homework-template').toggleClass('showdescription'); 1816 e.preventDefault(); 1817 }); 1818 1819 if (digObject('Drupal.settings.pridea.homeworkProgress') !== false) { 1820 var hw,elements,exercises,result,cls,item, title; 1821 hw = Object.keys(Drupal.settings.pridea.homeworkProgress); 1822 for (var i = hw.length - 1; i >= 0; i--) { 1823 elements = Object.keys(Drupal.settings.pridea.homeworkProgress[hw[i]].result); 1824 1825 1826 1827 for (var j = elements.length - 1; j >= 0; j--) { 1828 //console.log(Drupal.settings.pridea.homeworkProgress[hw[i]].result[elements[j]]); 1829 exercises = Object.keys(Drupal.settings.pridea.homeworkProgress[hw[i]].result[elements[j]]); 1830 for (var k = exercises.length - 1; k >= 0; k--) { 1831 //$('.active0 #' + elements[j]) 1832 result = parseFloat(Drupal.settings.pridea.homeworkProgress[hw[i]].result[elements[j]][exercises[k]]); 1833 1834 item = $('.active0 #' + elements[j] + exercises[k]).parent(); 1835 item.parent().removeClass('s').removeClass('r').removeClass('g').removeClass('y'); 1836 if (elements[j] == 'e'){ 1837 if (result >= 0.2) item.parent().removeClass('u'); 1838 if (result >= 0.99) item.parent().addClass('s') 1839 else 1840 if (result >= 0.8) item.parent().addClass('g') 1841 else 1842 if (result >= 0.5) item.parent().addClass('y') 1843 else 1844 if (result >= 0.2) item.parent().addClass('r') 1845 } else { 1846 if (result > 0.9) item.parent().addClass('g') 1847 } 1848 1849 1850 1851 1852 1853 item.attr('title',result); 1854 if (elements[j] == 'e'){ 1855 $('.active0 .' + elements[j] + exercises[k] + '_result').html('<span class="hwm">' + result.toPrecision(2) * 10 + '</span>'); 1856 }else { 1857 if (result > 0.9) 1858 $('.active0 .' + elements[j] + exercises[k] + '_result').html('<span class="hwm">+</span>'); 1859 } 1860 //console.log('.active0 #' + elements[j] + exercises[k],Drupal.settings.pridea.homeworkProgress[hw[i]].result[elements[j]][exercises[k]]); 1861 } 1862 } 1863 } 1864 } 1865 if (digObject('Drupal.settings.pridea.testResult') !== false) { 1866 var testResult,result; 1867 hw = Object.keys(Drupal.settings.pridea.testResult); 1868 for (var i = hw.length - 1; i >= 0; i--) { 1869 testResult = parseFloat(Drupal.settings.pridea.testResult[hw[i]].result); 1870 item = $('.active0 #t' + hw[i]).parent(); 1871 item.parent().removeClass('s').removeClass('r').removeClass('g').removeClass('y'); 1872 $('.active0 .t' + hw[i] + '_result').html('<span class="hwm">' + testResult.toPrecision(2) * 10 + '</span>'); 1873 if (testResult >= 0.2) item.parent().removeClass('u'); 1874 item.parent().addClass(prideaGetMarkClass(testResult)); 1875 } 1876 } 1877 1878 } 1879 1880 1881 function modalbox(title,body,footer = '') { 1882 $('#modalbox h2').html(title); 1883 $('#modalbox .modal-body').html(body); 1884 $('#modalbox .modal-footer').remove(); 1885 if (footer !== '') { 1886 $('#modalbox .modal-body').after('<div class="modal-footer">' + footer + '</div>'); 1887 } 1888 $('#modalbox .modal-body').html(body); 1889 $('#block-user-login').modal('hide'); 1890 $('#modalbox').modal(); 1891 } 1892 1893 1894 function homeworkAdminProgress() { 1895 $('.homework-admin-template').once(function(){
1896 var hw = $(this); 1897 var hw_id = hw.attr('data-id'); 1898 var gr_id = hw.attr('data-group'); 1899 var hwmval = 0; 1900 1901 1902 var show_hw_data = function(){ 1903 var rows_data = {}; 1904 var users_data = {}; 1905 var users = hw.find('.hw_user'); 1906 var rows = hw.find('.homework_row'); 1907 var calculatedData = {}; 1908 if (calculatedData = digObject('Drupal.settings.pridea.studentProgressCalculated_'+gr_id +'_'+hw_id)) { 1909 rows_data = calculatedData.rows_data; 1910 users_data = calculatedData.users_data; 1911 } else { 1912 hw.find('.hw_rs').addClass('u').removeClass('y').removeClass('r').removeClass('g').removeClass('s').html('<span class="hwm">-</span>'); 1913 rows.addClass('u').removeClass('y').removeClass('r').removeClass('g').removeClass('s').find('.result').html('<span class="hwm">-</span>'); 1914 rows.each(function(){ 1915 var row = $(this); 1916 var item = row.find('a'); 1917 var id = item.attr('data-id'); 1918 var key = item.attr('data-type'); 1919 users.each(function(){ 1920 var user = $(this); 1921 var uid = user.attr('data-uid'); 1922 var rate = 0; 1923 if (rate = digObject('Drupal.settings.pridea.studentProgress.'+hw_id + '.' +key + '.' + id + '.' + gr_id + '.' + uid)) { 1924 rate = parseFloat(rate); 1925 if (rows_data[key + id] !== undefined) { 1926 rows_data[key + id] += rate; 1927 } else { 1928 rows_data[key + id] = rate; 1929 } 1930 if (users_data[uid] !== undefined) { 1931 users_data[uid] += rate; 1932 } else { 1933 users_data[uid] = rate; 1934 } 1935 } 1936 }); 1937 }); 1938 calculatedData = {}; 1939 calculatedData.rows_data = rows_data; 1940 calculatedData.users_data = users_data; 1941 Drupal.settings.pridea['studentProgressCalculated_'+gr_id +'_'+hw_id] = calculatedData; 1942 1943 } 1944 1945 var row_count = rows.length; 1946 var user_count = users.length; 1947 var row_keys = Object.keys(rows_data); 1948 var user_keys = Object.keys(users_data); 1949 1950 hw.find('.homework_plate .result').html('<span class="hwm">-</span>'); 1951 hw.find('.hw_rs').html('<span class="hwm">-</span>'); 1952 var res = 0; 1953 var item = 0; 1954 for (var i = row_keys.length - 1; i >= 0; i--) { 1955 res = rows_data[row_keys[i]] / user_count; 1956 1957 item = hw.find('#' + row_keys[i]).parent().parent().find('.result').html('<span class="hwm">'+ (res * 10).toPrecision(2) + '</span>'); 1958 item.parent().removeClass('s').removeClass('r').removeClass('g').removeClass('y'); 1959 if (res >= 0.2) item.parent().removeClass('u'); 1960 item.parent().addClass(prideaGetMarkClass(res)); 1961 } 1962 for (var i = user_keys.length - 1; i >= 0; i--) { 1963 res = users_data[user_keys[i]] / row_count; 1964 item = hw.find('.u-' + hw_id + '-' + user_keys[i]).html('<span class="hwm">'+ (res *10).toPrecision(2) + '</span>'); 1965 if (res >= 0.2) item.removeClass('u'); 1966 item.addClass(prideaGetMarkClass(res)); 1967 } 1968 }; 1969 1970 hw.click(function(e){ 1971 e.stopPropagation(); 1972 hw.find('.selected').removeClass('selected'); 1973 show_hw_data(); 1974 }); 1975 if (digObject('Drupal.settings.pridea.studentProgress.'+hw_id) !== false) { 1976 show_hw_data(); 1977 var rows = hw.find('.homework_row').click(function(e){ 1978 hw.find('.selected').removeClass('selected'); 1979 var item = $(this).addClass('selected').find('a'); 1980 hw.find('.result').html('-'); 1981 var id = item.attr('data-id'); 1982 var key = item.attr('data-type'); 1983 var ul = false; 1984 show_hw_data(); 1985 1986 hw.find('.hw_rs').addClass('u').removeClass('y').removeClass('g').removeClass('r').removeClass('s').html('<span class="hwm">-</span>'); 1987 if (ul = digObject('Drupal.settings.pridea.studentProgress.'+hw_id + '.' +key + '.' + id + '.' + gr_id)) { 1988 1989 var users = Object.keys(ul); 1990 var res = 0; 1991 var hwu; 1992 for (var i = users.length - 1; i >= 0; i--) { 1993 res = parseFloat(ul[users[i]]); 1994 hwmval = key == 'l' ? '+' : (res * 10).toPrecision(2) 1995 hwu = hw.find('.u-' + hw_id + '-' + users[i]).html('<span class="hwm">'+hwmval+'</span>'); 1996 if (res >= 0.2) hwu.removeClass('u'); 1997 hwu.removeClass('l').removeClass('e').removeClass('t'); 1998 hwu.addClass(key);
1999 hwu.addClass(prideaGetMarkClass(res)); 2000 } 2001 } 2002 e.preventDefault(); 2003 return false; 2004 }); 2005 hw.find('.hw_user').click(function(e){ 2006 var hwu = $(this); 2007 if (!hwu.hasClass('selected')) { 2008 hw.find('.selected').removeClass('selected'); 2009 var uid = hwu.addClass('selected').attr('data-uid'); 2010 var res = 0; 2011 show_hw_data(); 2012 //hw.find('.hw_rs').addClass('r').removeClass('y').removeClass('g').text('-'); 2013 rows.addClass('u').removeClass('r').removeClass('g').removeClass('y').removeClass('s').find('.result').html('<span class="hwm">-</span>'); 2014 rows.each(function(){ 2015 var row = $(this); 2016 var item = row.find('a'); 2017 var id = item.attr('data-id'); 2018 var key = item.attr('data-type'); 2019 var hu = 0; 2020 if (hu = digObject('Drupal.settings.pridea.studentProgress.'+hw_id + '.' +key + '.' + id + '.' + gr_id + '.' + uid)) { 2021 hu = parseFloat(hu); 2022 hwmval = key == 'l' ? '+' : (hu * 10).toPrecision(2) 2023 row.find('.result').html('<span class="hwm">'+hwmval+'</span>'); 2024 if (hu >= 0.2) row.removeClass('u'); 2025 row.addClass(prideaGetMarkClass(hu)); 2026 } 2027 }); 2028 e.preventDefault(); 2029 return false; 2030 } 2031 }); 2032 } 2033 }); 2034 2035 } 2036 2037 2038 function groupExtras(){ 2039 2040 $('.group_node_click').each(function(){ 2041 /*var lastT = 0; 2042 var trig = false; 2043 var surplus = 0; 2044 var g = $(this); 2045 g.find('.userpic_wrap.hidden').removeClass('hidden'); 2046 g.find('.last-on-row').removeClass('last-on-row'); 2047 g.find('.extraItems').remove(); 2048 g.find('.userpic_wrap').each(function(index){ 2049 var i = $(this); 2050 var ot = i.offset().top; 2051 if (index == 0) { 2052 lastT = ot 2053 } else { 2054 if (Math.abs(lastT - ot) > 2) { 2055 i.addClass('hidden'); 2056 if (surplus == 0) { 2057 i.prev().addClass('last-on-row'); 2058 } 2059 surplus++; 2060 } 2061 } 2062 }); 2063 g.find('.last-on-row').append('<div class="extraItems">'+surplus+'</div>');*/ 2064 var g = $(this); 2065 var href = g.attr('data-href'); 2066 g.click(function(){ 2067 window.location = href; 2068 }) 2069 }); 2070 } 2071 2072 2073 function messages() { 2074 $('.messages.status,.messages.error, .messages.warning').once(function(){ 2075 $(this).append('<div class="close-message">Ã</div>'); 2076 }); 2077 $('.close-message').click(function(){ 2078 $(this).parent().fadeOut(function(){ 2079 $(this).remove(); 2080 }); 2081 }); 2082 } 2083 2084 2085 function testAdmin() { 2086 if (digObject('Drupal.settings.pridea.pageData.user_uid') > 0) { 2087 $('.view-id-tests').once(function(){ 2088 $.get('/ajax/homework/list/t',function(data){ 2089 //console.log('hw_admin',data); 2090 var s = JSON.parse(data); 2091 if (s.result == 1 ) { 2092 $('.test-intro').each(function(){ 2093 var cls = $(this).attr('class').replace(/.*test-id-([0-9]*).*/,'$1'); 2094 if (s.t !== undefined && s.t.includes(cls)) { 2095 /*$(this).append('<a href="#" class="course-rem-homework btn btn-svg" data-key="t" data-id="' + cls + '"><svg class="btn_svg">'+ 2096 '<use xlink:href="/sites/all/themes/pridea/media/icons.svg#i_hw_minus"></use></svg></a>');*/ 2097 $(this).prepend( 2098 '<div data-id="' + cls + '" data-type="t" class="hw_actions_test added" id="t' + cls + '" ><span class="main">' + 2099 Drupal.t('Add to homework') + '</span><svg><use class="minus" xlink:href="/sites/all/themes/pridea/media/icons.svg#cb2_check" /><use class="plus" xlink:href="/sites/all/themes/pridea/media/icons.svg#cb2_empty" /></svg></div>' 2100 ); 2101 } else { 2102 /*$(this).append('<a href="#" class="course2homework btn btn-svg" data-key="t" data-id="' + cls + '"><svg class="btn_svg">'+ 2103 '<use xlink:href="/sites/all/themes/pridea/media/icons.svg#i_hw_plus"></use></svg></a>');*/ 2104 $(this).prepend( 2105 '<div data-id="' + cls + '" data-type="t" class="hw_actions_test" id="t' + cls + '" ><span class="main">' + 2106 Drupal.t('Add to homework') + '</span><svg><use class="minus" xlink:href="/sites/all/themes/pridea/media/icons.svg#cb2_check" /><use class="plus" xlink:href="/sites/all/themes/pridea/media/icons.svg#cb2_empty" /></svg></div>' 2107 ); 2108 } 2109 }); 2110 } 2111 homeworkManage(); 2112 },'text'); 2113 }); 2114 } 2115 } 2116 2117 2118 2119 function exercise_stat_show(uid) { 2120 var el = false;
2121 2122 var stat_assign = function(q, a) { 2123 if (q !== undefined) { 2124 if (q[0].nodeName.toUpperCase() == 'INPUT') q.val(a); 2125 if (q[0].nodeName.toUpperCase() == 'TD') q.html(a); 2126 if (q[0].nodeName.toUpperCase() == 'SELECT') q.val(a); 2127 //console.log(q[0].nodeName.toUpperCase()); 2128 } 2129 } 2130 2131 $('.exercises > div').addClass('undone').find('.result-mark').removeClass('r').removeClass('y').removeClass('g').removeClass('s').removeClass('u').html('-'); 2132 $('.exercises .test_element .answer').removeClass('val0').removeClass('val1').text(''); 2133 2134 if (el = digObject('Drupal.settings.pridea.exercise_stat_data.t.' + uid)) { 2135 $('.exercises > div.test_result_view').each(function(){ 2136 var t = $(this); 2137 var tid = t.attr('data-nid'); 2138 var answers = el[tid]; 2139 var mark = Math.round(answers['mark'] * 100) / 10; 2140 var markClass = prideaGetMarkClass(mark / 10); 2141 t.find('.result-mark').addClass(markClass).html(mark); 2142 t.find('.test_element').each(function(index){ 2143 var answer = answers['answers'].charAt(index); 2144 //console.log('answer',answer); 2145 $(this).find('.answer').addClass('val'+answer).text(answer); 2146 }) 2147 }); 2148 } 2149 2150 if (el = digObject('Drupal.settings.pridea.exercise_stat_data.e.' + uid)) { 2151 $('.exercises > div.exercise').each(function(){ 2152 2153 var e = $(this); 2154 var eid = e.attr('data-id'); 2155 var t = e.attr('data-mode'); 2156 var r = false; 2157 2158 if (el[eid] !== undefined) { 2159 r = el[eid]; 2160 2161 //console.log('r', r); 2162 var answer = 0; 2163 var question = false; 2164 2165 2166 if (r['mark'] !== undefined) { 2167 var mark = Math.round(r['mark'] * 100) / 10; 2168 var markClass = prideaGetMarkClass(mark / 10); 2169 e.find('.result-mark').removeClass('r').removeClass('y').removeClass('g').removeClass('s').removeClass('u').addClass(markClass).html(mark); 2170 } 2171 if (r.u !== undefined) { 2172 e.removeClass('undone'); 2173 if (t == 'type' || t == 'selectlist' || t == 'checkboxes') { 2174 var keys = Object.keys(r.u); 2175 for (var i = keys.length - 1; i >= 0; i--) { 2176 answer = r.u[keys[i]]; 2177 question = e.find('[data-question=' + keys[i] + ']'); 2178 stat_assign(question, answer); 2179 } 2180 } 2181 2182 if (t == 'checkboxes') { 2183 var keys = Object.keys(r.u); 2184 for (var i = keys.length - 1; i >= 0; i--) { 2185 answer = r.u[keys[i]]; 2186 question = e.find('[data-question=' + keys[i] + ']').prop('checked',answer); 2187 } 2188 } 2189 2190 if (t == 'lexis') { 2191 var keys = Object.keys(r.u); 2192 for (var i = keys.length - 1; i >= 0; i--) { 2193 answer = r.u[keys[i]]; 2194 question = e.find('[data-question=' + keys[i] + ']'); 2195 stat_assign(question, answer); 2196 } 2197 } 2198 2199 if (t == 'collate') { 2200 var ula = e.find('ul.answers'); 2201 var ulai = ula.children()/*.detach()*/; 2202 e.find('ul.questions').children().each(function(){ 2203 var q = $(this).attr('data-question'); 2204 var exv = r.u[q]; 2205 if (exv.length > 0) { 2206 if (exv.length>1) { 2207 exv = exv[0]; //вÑе Ð¿Ð»Ð¾Ñ Ð¾ )) 2208 } else { 2209 exv = exv[0]; 2210 } 2211 } 2212 if (r.u[q] !== undefined) { 2213 ulai.filter('[data-value=' + exv + ']').appendTo(ula); 2214 } 2215 }); 2216 } 2217 2218 if (t == 'dragdrop') { 2219 var keys = Object.keys(r.u); 2220 for (var i = keys.length - 1; i >= 0; i--) { 2221 answer = r.u[keys[i]]; 2222 if (answer.length > 0) { 2223 answer = answer[0]; 2224 } 2225 question = e.find('[data-question=' + keys[i] + ']'); 2226 e.find('[data-value="' + answer + '"]').appendTo(question); 2227 } 2228 } 2229 2230 if (t == 'paint') { 2231 var keys = Object.keys(r.u); 2232 for (var i = keys.length - 1; i >= 0; i--) { 2233 answer = r.u[keys[i]]; 2234 if (answer.length > 0) { 2235 if (answer.length>1) { 2236 answer = answer[0]; //вÑе Ð¿Ð»Ð¾Ñ Ð¾ )) 2237 } else { 2238 answer = answer[0]; 2239 } 2240 } 2241 question = e.find('[data-question=' + keys[i] + ']').removeAttr('class').addClass('color' + answer); 2242 //stat_assign(question, answer); 2243 } 2244 } 2245 2246 if (t == 'sentense' || t == 'dialog') { 2247 var q = t == 'sentense' ? 'ul.words' : 'ul.sentences'; 2248 e.find(q).each(function(){ 2249 var ula = $(this); 2250 var ulai = ula.children().detach(); 2251 var keys = []; 2252 ulai.each(function(){ 2253 keys.push($(this).attr('data-question')); 2254 }); 2255 var inverted = {}; 2256 for (var i = keys.length - 1; i >= 0; i--) inverted[r.u[keys[i]]] = keys[i];
2257 Object.keys(inverted).sort().forEach(function(key) { 2258 ulai.filter('[data-question=' + inverted[key] + ']').appendTo(ula); 2259 }); 2260 }); 2261 } 2262 } 2263 e.find('.mistake').removeClass('mistake'); 2264 if (r.e !== undefined) { 2265 r.e.forEach(function(err){ 2266 showExerciseMistake(e,t,err); 2267 }); 2268 } 2269 } 2270 }); 2271 } 2272 } 2273 2274 2275 2276 function exercise_stat(){ 2277 $('#exercise_stat').once(function(){ 2278 var s = $(this); 2279 var u = s.find('.user_stat_card'); 2280 u.click(function(){ 2281 u.removeClass('viewing'); 2282 var uid = $(this).addClass('viewing').attr('data-uid'); 2283 exercise_stat_show(uid); 2284 }); 2285 u.first().click(); 2286 }); 2287 } 2288 2289 2290 function edittables() { 2291 $('#check_all').once().click(function(){ 2292 var cb = $(this); 2293 var state = cb.prop('checked'); 2294 //console.log(state); 2295 $('input[type=checkbox]').not(cb).prop('checked',state); 2296 }); 2297 $('#remove_all').once().click(function(){ 2298 var list = []; 2299 $('input[type=checkbox]:checked').each(function(){ 2300 list.push($(this).attr('data-value')); 2301 }); 2302 if (list.length>0) { 2303 window.location = '/my_words/remove/' + list.join(',') 2304 } 2305 }); 2306 } 2307 2308 2309 function filters() { 2310 $('.views-exposed-widgets .v-exposed-widget.v-widget-filter-test_level_value,.views-exposed-widgets .views-widget-filter-test_level_value, .views-exposed-widgets .views-exposed-widget.views-widget-filter-level_value, #lexic_filters').first().appendTo('#filternest'); 2311 //$('.views-exposed-widget views-submit-button').hide(); 2312 } 2313 2314 2315 function mainmenu() { 2316 $('#block-system-main-menu li.expanded > a').on('click mousedown',function(e){ 2317 $('.user_menu').removeClass('user_menu'); 2318 $('#block-system-main-menu .sub').removeClass('sub'); 2319 $(this).parent().addClass('sub'); 2320 e.preventDefault(); 2321 return false; 2322 }); 2323 $('#block-system-main-menu').mouseleave(function(){ 2324 $('#block-system-main-menu .sub').removeClass('sub'); 2325 }) 2326 2327 } 2328 2329 function htmltables(){ 2330 $('.field-body table').each(function(){ 2331 var t = $(this); 2332 var td = t.find('td'); 2333 if (td.length == 2) { 2334 t.replaceWith('<div class="row was_table"><div class="col-12 col-md-6">' + td.eq(0).html() + '</div><div class="col-12 col-md-6">' + td.eq(1).html() + '</div></div>'); 2335 } else { 2336 var p = t.closest('.field-body'); 2337 t.wrap('<div class="scrollable"></div>'); 2338 } 2339 }); 2340 } 2341 2342 function ajax_actions(){ 2343 $('a.notification_action, a.ajax_action').click(function(e){ 2344 e.preventDefault(); 2345 var btn = $(this); 2346 var attrs = btn[0].attributes; 2347 var list = {}; 2348 for (var i = attrs.length - 1; i >= 0; i--) { 2349 if (attrs[i].name.search('data-') == 0) { 2350 list[attrs[i].name.replace('data-','')] = attrs[i].value; 2351 } 2352 } 2353 //console.log(list); 2354 $.post(btn.attr('href'),list,function(data){ 2355 var d = JSON.parse(data); 2356 if (d.result == 'ok') { 2357 if (d.message !== undefined) { 2358 var footer = ''; 2359 if (d.button !== undefined) footer = d.button; 2360 //console.log(d.message); 2361 modalbox(Drupal.t('Success'), d.message, d.button); 2362 } 2363 } else { 2364 modalbox(Drupal.t('Error'), Drupal.t('Something went wrong')); 2365 } 2366 }); 2367 }) 2368 } 2369 2370 function markup() { 2371 $('.phraseology_variant').before('<div class="phraseology_label">' + Drupal.t('Can be translated as ') + '</div>'); 2372 $('.langme').each(function(){ 2373 var a = $(this); 2374 a.attr('href',a.attr('href') + '?language='+Drupal.settings.current_language); 2375 }) 2376 } 2377 2378 2379 function unregistered() { 2380 if (digObject('Drupal.settings.pridea.pageData.user_uid') == 0) { 2381 $('.theme-elements a.exrcs').once().click(function(e){ 2382 $('#login-link').click(); 2383 e.preventDefault(); 2384 return false; 2385 }); 2386 $('.view-id-tests a').once().click(function(e){ 2387 $('#login-link').click(); 2388 e.preventDefault(); 2389 return false;
2390 }); 2391 } 2392 } 2393 2394 function themeToggleSave(){ 2395 var toggled = $.cookie('theme_visibility'); 2396 if (toggled == null || toggled == undefined) { 2397 toggled = []; 2398 } else { 2399 toggled = JSON.parse(toggled); 2400 } 2401 $('.theme_toggle').click(function(){ 2402 var btn = $(this); 2403 var target = btn.attr('data-target'); 2404 if (btn.hasClass('collapsed')) { 2405 toggled.splice(toggled.indexOf(target),1); 2406 } else { 2407 toggled.push(target); 2408 } 2409 $.cookie('theme_visibility',JSON.stringify(toggled)); 2410 }); 2411 2412 toggled.forEach(function(item){ 2413 $('[data-target='+item+']').addClass('collapsed'); 2414 $(item).removeClass('show').addClass('collapse'); 2415 }); 2416 } 2417 2418 Drupal.behaviors.pridea = { 2419 attach: function (context, settings) { 2420 2421 $('audio').once().initAudioPlayer(); 2422 filters(); 2423 comments(); 2424 sessionTimeout(); 2425 rescale(); 2426 setTimeout(rescale,600); 2427 exercises(); 2428 keyboard(); 2429 lexis_slides(); 2430 checkExerciseBtn(); 2431 navigationElements(); 2432 showProgress(); 2433 slicks(); 2434 languageSwitcher(); 2435 //stat(); 2436 searchForm(); 2437 tests(); 2438 testAdmin(); 2439 htmltables(); 2440 markup(); 2441 swipe(); 2442 homeworkManage(); 2443 homeworkManageCheck(); 2444 homeworkProgress(); 2445 homeworkAdminProgress(); 2446 messages(); 2447 exercise_stat(); 2448 edittables(); 2449 groupRequests(); 2450 mainmenu(); 2451 ajax_actions(); 2452 unregistered(); 2453 themeToggleSave(); 2454 2455 $('.click-reload').click(function(){document.location.reload();}); 2456 2457 $('#pridea-group-messages-form .form-textarea, #pridea-messages-reply-form .form-textarea, #group-post-node-form .form-textarea').trumbowyg({ 2458 btns: [['strong', 'em','underline'], ['link']], 2459 autogrow: true 2460 }); 2461 2462 $('#pridea-base-group-unsubscribe-form').once(function(){ 2463 var form = $(this); 2464 var i = form.find('.form-item-notify input'); 2465 var sw = function(){ 2466 if (i.is(':checked')) { 2467 form.find('.form-item-message').show() 2468 }else { 2469 form.find('.form-item-message').hide() 2470 } 2471 }; 2472 sw(); 2473 i.change(sw); 2474 }); 2475 2476 $('.form-file').once().filestyle(); 2477 2478 //checkFooter(); 2479 //setTimeout(checkFooter,300); 2480 2481 $('#login-link').once().click(function(e){ 2482 var btnpath = $(this).attr('href'); 2483 $.get('/ajax/is_logged_in',function(data){ 2484 if (parseInt(data) > 0) { 2485 location.reload(); 2486 } else { 2487 var modal = $('#block-user-login'); 2488 if (modal.length == 0) { 2489 window.location = btnpath; 2490 } else { 2491 var form_id = modal.find('[name=form_id]').val(); 2492 var form_build_id = modal.find('[name=form_build_id]').val(); 2493 var form_callback = modal.find('[name=form_callback]').val(); 2494 $.post('/ajax/form_check',{form_data: {form_id: form_id,form_build_id: form_build_id,form_callback: form_callback}},function(data){ 2495 var res = JSON.parse(data); 2496 if (res.result == 'REFRESH') { 2497 modal.find('[name=form_build_id]').val(res.data); 2498 $('#block-user-login').modal(); 2499 } else if (res.result == 'CACHED') { 2500 $('#block-user-login').modal(); 2501 } else { 2502 window.location = btnpath; 2503 } 2504 }); 2505 } 2506 } 2507 }); 2508 e.preventDefault(); 2509 }); 2510 $('.user-register-link').click(function(e){ 2511 modalbox(Drupal.t('Registration'), 2512 '<div class="container"><div class="row">' + 2513 '<div class="col text-center text-md-left">' + 2514 '<a class="profile_registration_link register_student" href="/student/register?language=' + Drupal.settings.current_language+ '">' + Drupal.t('I am a student') + '</a>' + 2515 '</div>' + 2516 '<div class="col text-center text-md-right">' + 2517 '<a class="profile_registration_link register_teacher" href="/prof/register?language=' + Drupal.settings.current_language+ '">' + Drupal.t('I am a teacher') + '</a>' + 2518 '</div>' + 2519 '</div></div>' 2520 ); 2521 //$('#profileModal').modal(); 2522 e.preventDefault(); 2523 }); 2524 2525 $('.page-user-messages .msg-node .msg_reply').click(function(){ 2526 var a = $(this).closest('.msg-main').find('h2 a'); 2527 var b = $(this).attr('href'); 2528 if (a.length == 1) { 2529 window.location = a.attr('href') + b; 2530 } 2531 }); 2532 } 2533 }; 2534 2535 2536 function languageSwitcher() { 2537 if (digObject('Drupal.settings.language') !== false) { 2538 var languages = Object.keys(Drupal.settings.language); 2539 var current = ''; 2540 var available = ''; 2541 var path = document.location.pathname; 2542 for (var i = languages.length - 1; i >= 0; i--) { 2543 Drupal.settings.language[languages[i]]; 2544 if (Drupal.settings.language[languages[i]].current) { 2545 current += '<li id="language_current" class="svgw">' + languages[i] + '<svg preserveAspectRatio="none" class="language_icon"><use xlink:href="/sites/all/themes/pridea/media/icons.svg#flag-' + languages[i] + '"></svg></li>'; 2546 } else { 2547 available += '<li><a href="' + path + '?language=' + languages[i] + '">' + languages[i] + '<svg preserveAspectRatio="none" class="language_icon"><use xlink:href="/sites/all/themes/pridea/media/icons.svg#flag-' + languages[i] + '"></svg></a></li>'; 2548 } 2549 2550 } 2551 available = '<div class="language" id="language_switcher"><ul class="available sub_menu">' + available + current + '</ul></div>'; 2552 $('#breadcrumbline .container').append(available); 2553 //$('#language_switcher').append(available); 2554 $('#language_current').click(function(e){ 2555 $('#language_switcher').toggleClass('active'); 2556 e.stopPropagation(); 2557 }); 2558 } 2559 } 2560 2561 2562 function homeworkManageCheck(e = null){ 2563 var themes = $('.unit-theme'); 2564 if (e !== null) { 2565 themes = $(e).closest('.unit-theme'); 2566 } 2567 themes.each(function(){ 2568 var theme = $(this); 2569 if (theme.find('.theme-elements li').length == theme.find('.theme-elements li.added').length) { 2570 theme.find('.trw').addClass('added') 2571 } else { 2572 theme.find('.trw').removeClass('added') 2573 } 2574 }); 2575 } 2576 2577 function homeworkManage() { 2578 if (digObject('Drupal.settings.pridea.pageData.homework.unpublished')) { 2579 var urlelements = document.location.pathname; 2580 if (urlelements[0] == '/') urlelements = urlelements.substr(1); 2581 urlelements = urlelements.split('/'); 2582 if (urlelements[0] !== undefined) { 2583 if (urlelements[0] == 'tests' || urlelements[0] == 'course') { 2584 $('#filternest').once().append('<a id="homework_edit" class="btn btn-main" href="/node/' + Drupal.settings.pridea.pageData.homework.unpublished + '/edit">' + Drupal.t('Edit homework') + '</a>'); 2585 } 2586 } 2587 } 2588 var hwup = function(res){ 2589 //console.log(res); 2590 var data =JSON.parse(res); 2591 if (data.success!== undefined) { 2592 if (data.success * 1 == 1) { 2593 if (data.added !== undefined) { 2594 data.added.forEach(function(e){ 2595 homeworkManageCheck($('#' + e).addClass('added')); 2596 }); 2597 } 2598 if (data.removed !== undefined) { 2599 data.removed.forEach(function(e){ 2600 homeworkManageCheck($('#' + e).removeClass('added')); 2601 }) 2602 } 2603 } 2604 } 2605 } 2606 if (digObject('Drupal.settings.pridea.pageData.homework.homework_admin')) { 2607 $('.unit-themes-admin .hw_mass').once().click(function(e){ 2608 var parent = $(this).parent(); 2609 if (parent.hasClass('added')) { 2610 var changes = []; 2611 parent.next().find('li').each(function(){changes.push({id: this.getAttribute('data-id'), type: this.getAttribute('data-type')})}); 2612 $.post('/ajax/homework/rem/',{changes:changes},hwup); 2613 } else { 2614 var changes = []; 2615 parent.next().find('li').each(function(){changes.push({id: this.getAttribute('data-id'), type: this.getAttribute('data-type')})}); 2616 $.post('/ajax/homework/add/',{changes:changes},hwup); 2617 } 2618 }); 2619 2620 $('.unit-themes-admin .hw_actions').once().click(function(e){ 2621 e.preventDefault(); 2622 var btn = $(this); 2623 var parent = btn.closest('li'); 2624 if (parent.hasClass('added')) { 2625 $.post('/ajax/homework/rem/',{changes: [{id: this.getAttribute('data-id'), type: this.getAttribute('data-type')}]}, hwup); 2626 } else { 2627 $.post('/ajax/homework/add/',{changes: [{id: this.getAttribute('data-id'), type: this.getAttribute('data-type')}]}, hwup); 2628 } 2629 }); 2630 2631 $('.hw_actions_test').once().click(function(e){ 2632 e.preventDefault(); 2633 var btn = $(this); 2634 if (btn.hasClass('added')) { 2635 $.post('/ajax/homework/rem/',{changes: [{id: this.getAttribute('data-id'), type: this.getAttribute('data-type')}]}, hwup); 2636 } else { 2637 $.post('/ajax/homework/add/',{changes: [{id: this.getAttribute('data-id'), type: this.getAttribute('data-type')}]}, hwup); 2638 } 2639 }); 2640 } 2641 } 2642 2643 2644 $(function(){ 2645 $('#block-system-user-menu .userpic, #block-menu-block-1 .userpic').once().click(function(e){ 2646 $('body').toggleClass('user_menu'); 2647 e.stopPropagation(); // This is the preferred method. 2648 return false; 2649 }); 2650 $('#mobile_menu').once().click(function(e){ 2651 $('body').toggleClass('main_menu'); 2652 e.stopPropagation(); // This is the preferred method. 2653 return false; 2654 }); 2655 $(document).click(function(){ 2656 $('body').removeClass('user_menu').removeClass('main_menu'); 2657 $('#language_switcher').removeClass('active'); 2658 }); 2659 notifications(); 2660 2661 }); 2662 2663 $(window).resize(rescale); 2664 2665 $(document).bind('cbox_complete', function() { 2666 var x = setInterval(function(){ 2667 if ($('#colorboxNode-login-Wrapper').height() > 300) { 2668 2669 //$.colorbox.resize(); 2670 //console.log('$(\'#colorboxNode-login-Wrapper\').height()',$('#colorboxNode-login-Wrapper').height()); 2671 //console.log('$(\'#cboxLoadedContent\').height()',$('#cboxLoadedContent').height()); 2672 /*if ($('#colorboxNode-login-Wrapper').height() > 300) { 2673 clearInterval(x); 2674 }*/ 2675 } 2676 },250); 2677 ///*setTimeout(function(){$.colorbox.resize();},500); 2678 }); 2679 2680 2681 2682 /*$(document).mousedown(function(e){ 2683 //console.log(e); 2684 window.trackMyMouseLast = { 2685 x: e.pageX, 2686 y: e.pageY, 2687 }; 2688 });*/ 2689 2690 $(document).dblclick(function(){ 2691 var sel = document.getSelection().toString().trim(); 2692 //if (window.lastSel !== sel) { 2693 if (sel.indexOf(' ') <0 && sel !== '') { 2694 var url = '/ajax/dictionary/' + sel; 2695 $.get(url,function(data) { 2696 var answer = JSON.parse(data); 2697 $('#dictionary_popup').remove(); 2698 $('body').append(answer.data); 2699 $('#dictionary_popup').modal(); 2700 //console.log('answer',answer); 2701 // window.lastSel = sel; 2702 }); 2703 } 2704 //} 2705 }); 2706 2707 /*function translationBoxPosition() { 2708 var box = $('#translateBtn'); 2709 var w = document.body.clientWidth; 2710 if (box.offset().left + box.outerWidth() > w) { 2711 box.css({left: w - box.outerWidth()}) 2712 } 2713 }*/ 2714
2715 /*$(document).bind('selectionchange', function(){ 2716 clearTimeout(window.trackMyMouseInterval); 2717 window.trackMyMouseInterval = setTimeout(function(){ 2718 $('#translateBtn').remove(); 2719 var sel = document.getSelection().toString().trim(); 2720 if (sel.indexOf(' ') <0 && sel !== '') { 2721 var url = '/ajax/dictionary/' + sel; 2722 $.get(url,function(data) { 2723 var answer = JSON.parse(data); 2724 $('#dictionary_popup').remove(); 2725 $('body').append(answer.data); 2726 $('#dictionary_popup').modal(); 2727 //console.log('answer',answer); 2728 }); 2729 /*$('<div id="translateBtn"><a href="/dictionary/' + sel + '">' + Drupal.t('Translate') +'</a></div>').css({ 2730 left: window.trackMyMouseLast.x, 2731 top: window.trackMyMouseLast.y, 2732 }).appendTo('body').children('a').click(function(e){ 2733 var url = '/ajax' + $(this).attr('href'); 2734 $(this).text(Drupal.t("Loading") + '...'); 2735 $.get(url,function(data) { 2736 var answer = JSON.parse(data); 2737 if (answer.result !== undefined && answer.result.toUpperCase() == 'OK') { 2738 $('#translateBtn').html('<div id="translateResult">' + answer.data + '</div>'); 2739 } else { 2740 $('#translateBtn').html('<div id="translateResult">' + Drupal.t('Not found') + '</div>'); 2741 } 2742 translationBoxPosition(); 2743 }); 2744 e.preventDefault(); 2745 }); 2746 //translationBoxPosition(); 2747 } 2748 },500); 2749 });*/ 2750 2751 2752})(jQuery, Drupal, this, this.document); 2753
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.