1jQuery(document).ready(function($) { 2 3 var weFormsFrontQuiz = { 4 init: function () { 5 var form_id = [], 6 frontend_quiz = []; 7 $(".wpuf-form-add :input[name=form_id]").each(function(){ 8 form_id.push( $(this).val() ); 9 }); 10 $(".wpuf-form-add :input[name=weforms-front-quiz]").each(function(){ 11 frontend_quiz.push( $(this).val() ); 12 }); 13 14 var idx, 15 form_selector = ''; 16 17 for ( idx = 0; idx < form_id.length; idx++ ) { 18 form_selector = '.weforms-' + form_id[idx]; 19 if ( frontend_quiz[idx] === 'yes' ) { 20 $(form_selector).off(); 21 $(form_selector).on('submit', this.frontQuizFormSubmit); 22 } 23 } 24 }, 25 26 frontQuizFormSubmit: function (e) { 27 e.preventDefault(); 28 29 var form = $(this), 30 submitButton = form.find('input[type=submit]'), 31 form_data = weFormsFrontQu
31iz.weFormsValidateForm(form); 32 33 if (form_data) { 34 35 // send the request 36 form.find('li.wpuf-submit').append('<span class="wpuf-loading"></span>'); 37 submitButton.attr('disabled', 'disabled').addClass('button-primary-disabled'); 38 39 $.post( weforms_frontend_quiz.ajaxurl, form_data, function ( res ) { 40 e.preventDefault(); 41 // var res = $.parseJSON(res); 42 var settings = res.form_settings, 43 userCanSee = settings.respondent_can_see, 44 totalPoints = settings.total_points, 45 score = totalPoints, 46 releaseGrade = settings.release_grade, 47 output = ''; 48 49 if ( releaseGrade == 'after_submission' ) { 50 output += '<ul class="wpuf-form form-label-above">'; 51 52 $.each( res.form_fields, function( key, field ) { 53 var template = field.template, 54 selectedAnswers = field.selected_answers, 55 userChoice = ( res.data !== undefined ) ? res.data[field.name] : '' , 56 fieldPoints = parseFloat(field.points), 57 isRightAnswer = weFormsFrontQu
57iz.isRightAnswer(selectedAnswers, userChoice), 58 getPoints = weFormsFrontQuiz.getPoints(fieldPoints, isRightAnswer); 59 60 var divClass = (isRightAnswer) ? 'right-answer' : 'wrong-answer'; 61 62 output += '<li class="wpuf-el '+ divClass +'">'; 63 output += '<div class="wpuf-label">'; 64 output += '<label for="' + field.name +'">'; 65 output += field.label; 66 67 if (userCanSee.includes( 'point_values' )) { 68 output += '<span class="weforms-field-points">'+ getPoints +'/'+ fieldPoints +'</span>'; 69 } 70 71 output += '</label>'; 72 output += '</div>'; 73 output += '<div class="wpuf-fields">'; 74 75 switch( template ) { 76 case 'dropdown_field': 77 case 'radio_field': 78 $.each( field.options, function( key, value ) { 79 output += '<label class="wpuf-radio-block '+ weFormsFrontQu
79iz.isChecked(key, userChoice) +'">'; 80 output += '<input name="'+ key +'" type="radio" value="'+ value +'" '+ weFormsFrontQuiz.isChecked(key, userChoice) +' disabled>'; 81 output += value; 82 output += '</label>'; 83 }); 84 85 86 if (!isRightAnswer) { 87 score -= fieldPoints; 88 89 if (userCanSee.includes( 'correct_answers' )) { 90 output += '<div class="right-answer-block">'; 91 output += '<p>Correct answer</p>'; 92 output += '<label class="wpuf-radio-block">'; 93 output += '<input type="radio" checked disabled>'; 94 output += field.options[selectedAnswers]; 95 output += '</label>'; 96 output += '</div>'; 97 } 98 }; 99 100 if (userCanSee.includes( 'question_feedback' )) { 101 if (weFormsFrontQu
101iz.hasFieldFeedback(field, isRightAnswer)) { 102 output += '<div class="weforms-answer-feedback">'; 103 output += '<p>Feedback</p>'; 104 output += '<p class="feedback">'+ weFormsFrontQuiz.getFieldFeedback(field, isRightAnswer) +'</p>'; 105 output += '</div>'; 106 } 107 }; 108 break; 109 110 case 'multiple_select': 111 case 'checkbox_field': 112 $.each( field.options, function( key, value ) { 113 var checked = ''; 114 115 if (userChoice && userChoice.includes(key) ) { 116 checked = 'checked'; 117 } 118 119 output += '<label class="wpuf-checkbox-block '+ checked +'">'; 120 output += '<input name="'+ key +'" type="checkbox" value="'+ value +'" '+ checked +' disabled>'; 121 output += value; 122 output += '</label>'; 123 }); 124 125 if (!isRightAnswer) { 126 score -= fieldPoints; 127 128 if (userCanSee.includes( 'correct_answers' )) { 129 output += '<div class="right-answer-block">'; 130 output += '<p>Correct answer</p>'; 131 132 $.each( selectedAnswers, function( key, value ) { 133 output += '<label class="wpuf-checkbox-block">'; 134 output += '<input type="checkbox" checked disabled>'; 135 output += field.options[value]; 136 output += '</label>'; 137 }); 138 139 output += '</div>'; 140 } 141 }; 142 143 if (userCanSee.includes( 'question_feedback' )) { 144 if (weFormsFrontQu
144iz.hasFieldFeedback(field, isRightAnswer)) { 145 output += '<div class="weforms-answer-feedback">'; 146 output += '<p>Feedback</p>'; 147 output += '<p class="feedback">'+ weFormsFrontQuiz.getFieldFeedback(field, isRightAnswer) +'</p>'; 148 output += '</div>'; 149 } 150 }; 151 break; 152 } 153 154 output += '</div>'; 155 output += ''; 156 output += '</li>'; 157 }); 158 159 output += '</ul>'; 160 161 if (userCanSee.includes( 'point_values' )) { 162 output += '<div class="weforms-quiz-points">'; 163 output += 'Total Points '; 164 output += '<span class="score">'+ score +'/'+ totalPoints +'</span>'; 165 output += '</div>'; 166 } 167 168 } 169 170 form.before( '<div class="wpuf-success">' + res.message + '</div><div class="weforms-quiz-feedback">' + output + '</div>'); 171 form.slideUp( 'fast', function() { 172 form.remove(); 173 }); 174 175 submitButton.removeClass('button-primary-disabled'); 176 form.find('span.wpuf-loading').remove(); 177 }); 178 } 179 }, 180 181 weFormsValidateForm: function (self) { 182 183 var temp, 184 temp_val = '', 185 error = false, 186 error_items = []; 187 error_type = ''; 188 189 // ===== Validate: Text and Textarea ======== 190 var required = self.find('[data-required="yes"]:visible'); 191 192 required.each(function (i, item) { 193 // temp_val = $.trim($(item).val()); 194 195 // console.log( $(item).data('type') ); 196 var data_type = $(item).data('type'); 197 val = ''; 198 199 switch (data_type) { 200 case 'rich': 201 var name = $(item).data('id'); 202 val = $.trim(tinyMCE.get(name).getContent()); 203 204 if (val === '') { 205 error = true; 206 207 // make it warn collor
208 weFormsFrontQuiz.weFormsFrontMarkError(item); 209 } 210 break; 211 212 case 'textarea': 213 case 'text': 214 215 val = $.trim($(item).val()); 216 217 if (val === '') { 218 error = true; 219 error_type = 'required'; 220 221 // make it warn collor 222 weFormsFrontQuiz.weFormsFrontMarkError(item, error_type); 223 } 224 break; 225 226 case 'password': 227 case 'confirm_password': 228 var hasRepeat = $(item).data('repeat'); 229 230 val = $.trim($(item).val()); 231 232 if (val === '') { 233 error = true; 234 error_type = 'required'; 235 236 // make it warn collor 237 weFormsFrontQuiz.weFormsFrontMarkError(item, error_type); 238 } 239 240 if (hasRepeat) { 241 var repeatItem = $('[data-type="confirm_password"]').eq(0); 242 243 if (repeatItem.val() !== val) { 244 error = true; 245 error_type = 'mismatch'; 246
247 weFormsFrontQuiz.weFormsFrontMarkError(repeatItem, error_type); 248 } 249 } 250 251 break; 252 253 case 'select': 254 val = $(item).val(); 255 256 // console.log(val); 257 if (!val || val === '-1') { 258 error = true; 259 error_type = 'required'; 260 261 // make it warn collor 262 weFormsFrontQuiz.weFormsFrontMarkError(item, error_type); 263 } 264 break; 265 266 case 'multiselect': 267 val = $(item).val(); 268 269 if (val === null || val.length === 0) { 270 error = true; 271 error_type = 'required'; 272 273 // make it warn collor 274 weFormsFrontQuiz.weFormsFrontMarkError(item, error_type); 275 } 276 break; 277 278 case 'tax-checkbox': 279 var length = $(item).children().find('input:checked').length; 280 281 if (!length) { 282 error = true; 283 error_type = 'required'; 284 285 // make it warn collor
286 weFormsFrontQuiz.weFormsFrontMarkError(item, error_type); 287 } 288 break; 289 290 case 'radio': 291 var length = $(item).find('input:checked').length; 292 293 if (!length) { 294 error = true; 295 error_type = 'required'; 296 297 // make it warn collor 298 weFormsFrontQuiz.weFormsFrontMarkError(item, error_type); 299 } 300 break; 301 302 case 'file': 303 var length = $(item).find('ul').children().length; 304 305 if (!length) { 306 error = true; 307 error_type = 'required'; 308 309 // make it warn collor 310 weFormsFrontQuiz.weFormsFrontMarkError(item, error_type); 311 } 312 break; 313 314 case 'email': 315 var val = $(item).val(); 316 317 if (val !== '') { 318 //run the validation
319 if (!weFormsFrontQuiz.isValidEmail(val)) { 320 error = true; 321 error_type = 'validation'; 322 323 weFormsFrontQuiz.weFormsFrontMarkError(item, error_type); 324 } 325 } else if (val === '') { 326 error = true; 327 error_type = 'required'; 328 329 weFormsFrontQuiz.weFormsFrontMarkError(item, error_type); 330 } 331 break; 332 333 334 case 'url': 335 var val = $(item).val(); 336 337 if (val !== '') { 338 //run the validation 339 if (!weFormsFrontQuiz.isValidURL(val)) { 340 error = true; 341 error_type = 'validation'; 342 343 weFormsFrontQuiz.weFormsFrontMarkError(item, error_type); 344 } 345 } 346 break; 347 } 348 349 }); 350 351 // if already some error found, bail out 352 if (error) { 353 // add error notice
354 weFormsFrontQuiz.addErrorNotice(self, 'end'); 355 356 return false; 357 } 358 359 var form_data = self.serialize(), 360 rich_texts = []; 361 362 // grab rich texts from tinyMCE 363 $('.wpuf-rich-validation', self).each(function (index, item) { 364 var item = $(item); 365 var editor_id = item.data('id'); 366 var item_name = item.data('name'); 367 var val = $.trim(tinyMCE.get(editor_id).getContent()); 368 369 rich_texts.push(item_name + '=' + encodeURIComponent(val)); 370 }); 371 372 // append them to the form var 373 form_data = form_data + '&' + rich_texts.join('&'); 374 return form_data; 375 }, 376 377 weFormsFrontMarkError: function(item, error_type) { 378 379 var error_string = ''; 380 $(item).closest('li').addClass('has-error'); 381 382 if ( error_type ) { 383 error_string = $(item).closest('li').data('label'); 384 switch ( error_type ) { 385 case 'required' : 386 error_string = error_string + ' ' + error_str_obj[error_type]; 387 break; 388 case 'mismatch' : 389 error_string = error_string + ' ' +error_str_obj[error_type]; 390 break; 391 case 'validation' : 392 error_string = error_string + ' ' + error_str_obj[error_type]; 393 break; 394 } 395 $(item).siblings('.wpuf-error-msg').remove(); 396 $(item).after('<div class="wpuf-error-msg">'+ error_string +'</div>'); 397 } 398 399 $(item).focus(); 400 }, 401 402 isChecked: function(key, userChoice, attr = 'checked') { 403 if (key == userChoice) { 404 return attr; 405 } 406 return ''; 407 }, 408 409 isRightAnswer: function(selectedAnswers, userChoice) { 410 if (typeof selectedAnswers === "string" ) { 411 if (selectedAnswers == userChoice) { 412 return true; 413 } 414 return false 415 } else if( typeof selectedAnswers === "object" ) { 416 var answers = selectedAnswers.join('|'), 417 choices = userChoice; 418 419 if (choices != null & typeof userChoice == 'object' ) { 420 choices = userChoice.join('|'); 421 } 422 423 if (answers == choices) { 424 return true; 425 } 426 return false 427 } 428 }, 429 430 getPoints: function(fieldPoints, isRightAnswer) { 431 if (isRightAnswer) { 432 return fieldPoints; 433 } 434 return 0; 435 }, 436 437 hasFieldFeedback: function(field, isRightAnswer) { 438 if (!isRightAnswer && field.incorrect_ans_feeback != "" ) { 439 return true; 440 } else if ( isRightAnswer && field.correct_ans_feeback != "" ) { 441 return true; 442 } 443 return false; 444 }, 445 446 getFieldFeedback: function(field, isRightAnswer) { 447 if (!isRightAnswer) { 448 return field.incorrect_ans_feeback; 449 } 450 return field.correct_ans_feeback; 451 }, 452 453 isValidEmail: function( email ) { 454 var pattern = new RegExp(/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i); 455 return pattern.test(email); 456 }, 457 458 isValidURL: function(url) { 459 var urlregex = new RegExp("^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.|http:\/\/|https:\/\/){1}([0-9A-Za-z]+\.)"); 460 return urlregex.test(url); 461 }, 462 463 }; 464
465 weFormsFrontQuiz.init(); 466});
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.