Added question viewer functionality
Added view questions panel to editor interface Added view questions section of web site Added links to navbars
This commit is contained in:
		
							
								
								
									
										260
									
								
								ref-test/app/view/static/css/style.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										260
									
								
								ref-test/app/view/static/css/style.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,260 @@
 | 
			
		||||
body {
 | 
			
		||||
    padding: 80px 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.site-footer {
 | 
			
		||||
    background-color: lightgray;
 | 
			
		||||
    font-size: small;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.site-footer p {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-container {
 | 
			
		||||
    display: -ms-flexbox;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    -ms-flex-align: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    padding-top: 40px;
 | 
			
		||||
    padding-bottom: 40px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-display {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    max-width: 420px;
 | 
			
		||||
    padding: 15px;
 | 
			
		||||
    margin: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-heading {
 | 
			
		||||
    margin-bottom: 2rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-label-group {
 | 
			
		||||
    position: relative;
 | 
			
		||||
    margin-bottom: 2rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-label-group input,
 | 
			
		||||
.form-label-group label {
 | 
			
		||||
    padding: var(--input-padding-y) var(--input-padding-x);
 | 
			
		||||
    font-size: 16pt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-label-group label {
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    display: block;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    margin-bottom: 0; /* Override default `<label>` margin */
 | 
			
		||||
    line-height: 1.5;
 | 
			
		||||
    color: #495057;
 | 
			
		||||
    cursor: text; /* Match the input under the label */
 | 
			
		||||
    border: 1px solid transparent;
 | 
			
		||||
    border-radius: .25rem;
 | 
			
		||||
    transition: all .1s ease-in-out;
 | 
			
		||||
    z-index: -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-label-group input {
 | 
			
		||||
    background-color: transparent;
 | 
			
		||||
    border: none;
 | 
			
		||||
    border-radius: 0%;
 | 
			
		||||
    border-bottom: 2px solid #585858;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-label-group input:active, .form-label-group input:focus {
 | 
			
		||||
    background-color: transparent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-label-group input::-webkit-input-placeholder {
 | 
			
		||||
    color: transparent;
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
.form-label-group input:-ms-input-placeholder {
 | 
			
		||||
    color: transparent;
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
.form-label-group input::-ms-input-placeholder {
 | 
			
		||||
    color: transparent;
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
.form-label-group input::-moz-placeholder {
 | 
			
		||||
    color: transparent;
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
.form-label-group input::placeholder {
 | 
			
		||||
    color: transparent;
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
.form-label-group input:not(:placeholder-shown) {
 | 
			
		||||
    padding-top: calc(var(--input-padding-y) + var(--input-padding-y) * (2 / 3));
 | 
			
		||||
    padding-bottom: calc(var(--input-padding-y) / 3);
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
.form-label-group input:not(:placeholder-shown) ~ label {
 | 
			
		||||
    padding-top: calc(var(--input-padding-y) / 3);
 | 
			
		||||
    padding-bottom: calc(var(--input-padding-y) / 3);
 | 
			
		||||
    font-size: 12px;
 | 
			
		||||
    color: #777;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-check {
 | 
			
		||||
    margin-bottom: 2rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.checkbox input {
 | 
			
		||||
    transform: scale(1.5);
 | 
			
		||||
    margin-right: 1rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.signin-forgot-password {
 | 
			
		||||
    font-size: 14pt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-submission-button {
 | 
			
		||||
    margin-bottom: 2rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-submission-button button, .form-submission-button a {
 | 
			
		||||
    margin: 1rem;
 | 
			
		||||
    vertical-align: middle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-submission-button button span, .form-submission-button button svg, .form-submission-button a span, .form-submission-button a svg {
 | 
			
		||||
    margin: 0 2px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
table.dataTable {
 | 
			
		||||
    border-collapse: collapse;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.table-row {
 | 
			
		||||
    vertical-align: middle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.row-actions {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
    white-space: nowrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.dataTables_wrapper .dt-buttons {
 | 
			
		||||
    left: 50%;
 | 
			
		||||
    transform: translateX(-50%);
 | 
			
		||||
    float:none;  
 | 
			
		||||
    text-align:center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.row-actions button, .row-actions a {
 | 
			
		||||
    margin: 0px 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#cookie-alert {
 | 
			
		||||
    padding-right: 16px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#dismiss-cookie-alert {
 | 
			
		||||
    margin-top: 16px;
 | 
			
		||||
    width: fit-content;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.alert-db-empty {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    max-width: 720px;
 | 
			
		||||
    font-size: 14pt;
 | 
			
		||||
    margin: 20px auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-date-input, .form-select-input {
 | 
			
		||||
    position: relative;
 | 
			
		||||
    margin: 2rem 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-date-input input,
 | 
			
		||||
.form-date-input label, .form-select-input select, .form-select-input label {
 | 
			
		||||
    padding: var(--input-padding-y) var(--input-padding-x);
 | 
			
		||||
    font-size: 16pt;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    background-color: transparent;
 | 
			
		||||
    border: none;
 | 
			
		||||
    border-bottom: 2px solid #585858;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.datepicker::-webkit-calendar-picker-indicator {    
 | 
			
		||||
    border: 1px;
 | 
			
		||||
    border-color: gray;
 | 
			
		||||
    border-radius: 10%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-date-input label, .form-select-input label {
 | 
			
		||||
    /* position: absolute; */
 | 
			
		||||
    /* top: 0;
 | 
			
		||||
    left: 0; */
 | 
			
		||||
    display: block;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    margin-bottom: 0; /* Override default `<label>` margin */
 | 
			
		||||
    line-height: 1.5;
 | 
			
		||||
    color: #495057;
 | 
			
		||||
    cursor: text; /* Match the input under the label */
 | 
			
		||||
    border: 1px solid transparent;
 | 
			
		||||
    border-radius: .25rem;
 | 
			
		||||
    transition: all .1s ease-in-out;
 | 
			
		||||
    z-index: -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.button-icon {
 | 
			
		||||
    font-size: 20px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.form-upload {
 | 
			
		||||
    margin: 2rem 0;
 | 
			
		||||
    font-size: 14pt;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.result-action-buttons, .test-action {
 | 
			
		||||
    margin: 5px auto;
 | 
			
		||||
    width: fit-content;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.accordion-item {
 | 
			
		||||
    background-color: unset;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Change Autocomplete styles in Chrome*/
 | 
			
		||||
input:-webkit-autofill,
 | 
			
		||||
input:-webkit-autofill:hover, 
 | 
			
		||||
input:-webkit-autofill:focus,
 | 
			
		||||
textarea:-webkit-autofill,
 | 
			
		||||
textarea:-webkit-autofill:hover,
 | 
			
		||||
textarea:-webkit-autofill:focus,
 | 
			
		||||
select:-webkit-autofill,
 | 
			
		||||
select:-webkit-autofill:hover,
 | 
			
		||||
select:-webkit-autofill:focus {
 | 
			
		||||
  transition: background-color 5000s ease-in-out 0s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Fallback for Edge
 | 
			
		||||
-------------------------------------------------- */
 | 
			
		||||
@supports (-ms-ime-align: auto) {
 | 
			
		||||
    .form-label-group label {
 | 
			
		||||
      display: none;
 | 
			
		||||
    }
 | 
			
		||||
    .form-label-group input::-ms-input-placeholder {
 | 
			
		||||
      color: #777;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
  /* Fallback for IE
 | 
			
		||||
  -------------------------------------------------- */
 | 
			
		||||
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
 | 
			
		||||
    .form-label-group label {
 | 
			
		||||
        display: none;
 | 
			
		||||
    }
 | 
			
		||||
    .form-label-group input:-ms-input-placeholder {
 | 
			
		||||
        color: #777;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
  
 | 
			
		||||
							
								
								
									
										30
									
								
								ref-test/app/view/static/css/view.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								ref-test/app/view/static/css/view.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
.info-panel {
 | 
			
		||||
    display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.control-panel {
 | 
			
		||||
    margin-left: auto;
 | 
			
		||||
    margin-right: 0;
 | 
			
		||||
    width:fit-content;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#alert-box {
 | 
			
		||||
    margin: 30px auto;
 | 
			
		||||
    max-width: 460px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.block {
 | 
			
		||||
    border: 2px solid black;
 | 
			
		||||
    border-radius: 10px;
 | 
			
		||||
    margin: 10px;
 | 
			
		||||
    padding: 5px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.question-body, .question-block {
 | 
			
		||||
    padding: 0px 2em;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
blockquote {
 | 
			
		||||
    padding: 0px 2em;
 | 
			
		||||
    font-style: italic;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										2
									
								
								ref-test/app/view/static/js/jquery-3.6.0.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								ref-test/app/view/static/js/jquery-3.6.0.min.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										115
									
								
								ref-test/app/view/static/js/script.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								ref-test/app/view/static/js/script.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,115 @@
 | 
			
		||||
// Menu Highlight Scripts
 | 
			
		||||
const menuItems = document.getElementsByClassName('nav-link')
 | 
			
		||||
for(let i = 0; i < menuItems.length; i++) {
 | 
			
		||||
    if(menuItems[i].pathname == window.location.pathname) {
 | 
			
		||||
        menuItems[i].classList.add('active')
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
const dropdownItems = document.getElementsByClassName('dropdown-item')
 | 
			
		||||
for(let i = 0; i< dropdownItems.length; i++) {
 | 
			
		||||
    if(dropdownItems[i].pathname == window.location.pathname) {
 | 
			
		||||
        dropdownItems[i].classList.add('active')
 | 
			
		||||
        $( "#" + dropdownItems[i].id ).closest( '.dropdown' ).find('.dropdown-toggle').addClass('active')
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// General Post Method Form Processing Script
 | 
			
		||||
$('form.form-post').submit(function(event) {
 | 
			
		||||
    
 | 
			
		||||
    var $form = $(this)
 | 
			
		||||
    var data = $form.serialize()
 | 
			
		||||
    var url = $(this).prop('action')
 | 
			
		||||
    var rel_success = $(this).data('rel-success')
 | 
			
		||||
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url: url,
 | 
			
		||||
        type: 'POST',
 | 
			
		||||
        data: data,
 | 
			
		||||
        dataType: 'json',
 | 
			
		||||
        success: function(response) {
 | 
			
		||||
            if (response.redirect_to) {
 | 
			
		||||
                window.location.href = response.redirect_to
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                window.location.href = rel_success
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        error: function(response) {
 | 
			
		||||
            error_response(response)
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    event.preventDefault()
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
function error_response(response) {
 | 
			
		||||
 | 
			
		||||
    const $alert = $("#alert-box")
 | 
			
		||||
    $alert.html('')
 | 
			
		||||
 | 
			
		||||
    if (typeof response.responseJSON.error === 'string' || response.responseJSON.error instanceof String) {
 | 
			
		||||
        $alert.html(`
 | 
			
		||||
        <div class="alert alert-danger alert-dismissible fade show" role="alert">
 | 
			
		||||
            <i class="bi bi-exclamation-triangle-fill" title="Danger"></i>
 | 
			
		||||
            ${response.responseJSON.error}
 | 
			
		||||
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
 | 
			
		||||
        </div>
 | 
			
		||||
        `)
 | 
			
		||||
    } else if (response.responseJSON.error instanceof Array) {
 | 
			
		||||
        var output = ''
 | 
			
		||||
        for (let i = 0; i < response.responseJSON.error.length; i ++) {
 | 
			
		||||
            output += `
 | 
			
		||||
            <div class="alert alert-danger alert-dismissible fade show" role="alert">
 | 
			
		||||
                <i class="bi bi-exclamation-triangle-fill" title="Danger"></i>
 | 
			
		||||
                ${response.responseJSON.error[i]}
 | 
			
		||||
                <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
 | 
			
		||||
            </div>
 | 
			
		||||
            `
 | 
			
		||||
            $alert.html(output)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    $alert.focus()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Dismiss Cookie Alert
 | 
			
		||||
$('#dismiss-cookie-alert').click(function(event){
 | 
			
		||||
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url: '/cookies/',
 | 
			
		||||
        type: 'POST',
 | 
			
		||||
        data: {
 | 
			
		||||
            time: Date.now()
 | 
			
		||||
        },
 | 
			
		||||
        dataType: 'json',
 | 
			
		||||
        success: function(response){
 | 
			
		||||
            console.log(response)
 | 
			
		||||
        },
 | 
			
		||||
        error: function(response){
 | 
			
		||||
            console.log(response)
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
    event.preventDefault()
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
// Create New Dataset
 | 
			
		||||
$('.create-new-dataset').click(function(event){
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url: '/api/editor/new/',
 | 
			
		||||
        type: 'POST',
 | 
			
		||||
        data: {
 | 
			
		||||
            time: Date.now()
 | 
			
		||||
        },
 | 
			
		||||
        dataType: 'json',
 | 
			
		||||
        success: function(response){
 | 
			
		||||
            if (response.redirect_to) {
 | 
			
		||||
                window.location.href = response.redirect_to
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        error: function(response){
 | 
			
		||||
            console.log(response)
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
    event.preventDefault()
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										130
									
								
								ref-test/app/view/static/js/view.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								ref-test/app/view/static/js/view.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,130 @@
 | 
			
		||||
// Variable Declarations
 | 
			
		||||
const $control_panel = $('.control-panel')
 | 
			
		||||
const $info_panel = $('.info-panel')
 | 
			
		||||
const $viewer_panel = $('.viewer-panel')
 | 
			
		||||
 | 
			
		||||
var element_index = 0
 | 
			
		||||
 | 
			
		||||
// Info Button Listener
 | 
			
		||||
$control_panel.find('button').click(function(event){
 | 
			
		||||
    if ($info_panel.is(":hidden")) {
 | 
			
		||||
        $viewer_panel.hide()
 | 
			
		||||
        $info_panel.fadeIn()
 | 
			
		||||
        $(this).addClass('active')
 | 
			
		||||
    } else {
 | 
			
		||||
        $info_panel.hide()
 | 
			
		||||
        $viewer_panel.fadeIn()
 | 
			
		||||
        $(this).removeClass('active')
 | 
			
		||||
    }
 | 
			
		||||
    event.preventDefault()
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
function parse_data(data) {
 | 
			
		||||
    var block
 | 
			
		||||
    var obj
 | 
			
		||||
    for (let i = 0; i < data.length; i++) {
 | 
			
		||||
        block = data[i]
 | 
			
		||||
        obj = document.createElement('div')
 | 
			
		||||
        obj.classList = 'block'
 | 
			
		||||
        if (block['type'] == 'question') {
 | 
			
		||||
            text = document.createElement('p')
 | 
			
		||||
            text.innerHTML = `<strong>Question ${block['q_no'] + 1}.</strong> ${block['text']}`
 | 
			
		||||
            obj.append(text)
 | 
			
		||||
            question_body = document.createElement('div')
 | 
			
		||||
            question_body.className ='question-body'
 | 
			
		||||
            type = document.createElement('p')
 | 
			
		||||
            type.innerHTML = `<strong>Question Type:</strong> ${block['q_type']}`
 | 
			
		||||
            question_body.append(type)
 | 
			
		||||
            options = document.createElement('p')
 | 
			
		||||
            options.innerHTML = '<strong>Options:</strong>'
 | 
			
		||||
            option_list = document.createElement('ul')
 | 
			
		||||
            for (let _i = 0; _i < block['options'].length; _i++) {
 | 
			
		||||
                option = document.createElement('li')
 | 
			
		||||
                option.innerHTML = block['options'][_i]
 | 
			
		||||
                if (block['correct'] == _i) {
 | 
			
		||||
                    option.innerHTML += ' <span class="badge rounded-pill bg-success">Correct</span>'
 | 
			
		||||
                }
 | 
			
		||||
                option_list.append(option)
 | 
			
		||||
            }
 | 
			
		||||
            options.append(option_list)
 | 
			
		||||
            question_body.append(options)
 | 
			
		||||
            tags = document.createElement('p')
 | 
			
		||||
            tags.innerHTML = `<strong>Tags:</strong>`
 | 
			
		||||
            tag_list = document.createElement('ul')
 | 
			
		||||
            for (let _i = 0; _i < block['tags'].length; _i++) {
 | 
			
		||||
                tag = document.createElement('li')
 | 
			
		||||
                tag.innerHTML = block['tags'][_i]
 | 
			
		||||
                tag_list.append(tag)
 | 
			
		||||
            }
 | 
			
		||||
            tags.append(tag_list)
 | 
			
		||||
            question_body.append(tags)
 | 
			
		||||
            obj.append(question_body)
 | 
			
		||||
        } else if (block['type'] == 'block') {
 | 
			
		||||
            meta = document.createElement('p')
 | 
			
		||||
            meta.innerHTML = `<strong>Block ${i+1}.</strong> ${block['questions'].length} questions.`
 | 
			
		||||
            obj.append(meta)
 | 
			
		||||
            header = document.createElement('blockquote')
 | 
			
		||||
            header.innerText = block['question_header']
 | 
			
		||||
            obj.append(header)
 | 
			
		||||
            var block_question = document.createElement('div')
 | 
			
		||||
            var question
 | 
			
		||||
            block_question.className = 'question-block'
 | 
			
		||||
            for (let _i = 0; _i < block['questions'].length; _i++) {
 | 
			
		||||
                question = block['questions'][_i]
 | 
			
		||||
                text = document.createElement('p')
 | 
			
		||||
                text.innerHTML = `<strong>Question ${question['q_no'] + 1}.</strong> ${question['text']}`
 | 
			
		||||
                block_question.append(text)
 | 
			
		||||
                question_body = document.createElement('div')
 | 
			
		||||
                question_body.className ='question-body'
 | 
			
		||||
                type = document.createElement('p')
 | 
			
		||||
                type.innerHTML = `<strong>Question Type:</strong> ${question['q_type']}`
 | 
			
		||||
                question_body.append(type)
 | 
			
		||||
                options = document.createElement('p')
 | 
			
		||||
                options.innerHTML = '<strong>Options:</strong>'
 | 
			
		||||
                option_list = document.createElement('ul')
 | 
			
		||||
                for (let __i = 0; __i < question['options'].length; __i++) {
 | 
			
		||||
                    option = document.createElement('li')
 | 
			
		||||
                    option.innerHTML = question['options'][__i]
 | 
			
		||||
                    if (question['correct'] == __i) {
 | 
			
		||||
                        option.innerHTML += ' <span class="badge rounded-pill bg-success">Correct</span>'
 | 
			
		||||
                    }
 | 
			
		||||
                    option_list.append(option)
 | 
			
		||||
                }
 | 
			
		||||
                options.append(option_list)
 | 
			
		||||
                question_body.append(options)
 | 
			
		||||
                tags = document.createElement('p')
 | 
			
		||||
                tags.innerHTML = `<strong>Tags:</strong>`
 | 
			
		||||
                tag_list = document.createElement('ul')
 | 
			
		||||
                for (let __i = 0; __i < question['tags'].length; __i++) {
 | 
			
		||||
                    tag = document.createElement('li')
 | 
			
		||||
                    tag.innerHTML = question['tags'][__i]
 | 
			
		||||
                    tag_list.append(tag)
 | 
			
		||||
                }
 | 
			
		||||
                tags.append(tag_list)
 | 
			
		||||
                question_body.append(tags)
 | 
			
		||||
                block_question.append(question_body)
 | 
			
		||||
                obj.append(block_question)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        $viewer_panel.append(obj)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Fetch data once page finishes loading
 | 
			
		||||
$(window).on('load', function() {
 | 
			
		||||
    $.ajax({
 | 
			
		||||
        url: target,
 | 
			
		||||
        type: 'POST',
 | 
			
		||||
        data: JSON.stringify({
 | 
			
		||||
            'id': id,
 | 
			
		||||
            'action': 'fetch'
 | 
			
		||||
        }),
 | 
			
		||||
        contentType: 'application/json',
 | 
			
		||||
        success: function(response) {
 | 
			
		||||
            parse_data(response['data'])
 | 
			
		||||
        },
 | 
			
		||||
        error: function(response) {
 | 
			
		||||
            console.log(response)
 | 
			
		||||
        }
 | 
			
		||||
    })
 | 
			
		||||
})
 | 
			
		||||
		Reference in New Issue
	
	Block a user