- ${data[i]['text']}
+root.on('click', '.panel-controls > a', function(event) {
+ event.preventDefault()
+ event.stopPropagation()
+ var action = $(this).data('action')
+ var element = $(this).closest('.accordion-item')
+ var root_container = $(this).closest('.accordion')
+ if (action == 'delete') {
+ element.remove()
+ console.log(root_container.get(0) == root.get(0))
+ if (root_container.get(0) != root.get(0) && root_container.children().length < 2 ) {
+ root_container.find('.panel-controls > a[data-action="delete"]').addClass('disabled')
+ }
+ } else if (action == 'add-question') {
+ var question = generate_single_question(root_container_id=`#${root_container.attr('id')}`)
+ $(question).insertBefore(element)
+ if (root_container.get(0) != root.get(0) && root_container.children().length > 1 ) {
+ root_container.find('.panel-controls > a[data-action="delete"]').removeClass('disabled')
+ }
+ } else if (action == 'add-block') {
+ var block = generate_block(root_container_id=`#${root_container.attr('id')}`)
+ $(block).insertBefore(element)
+ }
+ renumber_blocks()
+})
+
+root.on('change', '.form-select.question-type', function(event) {
+ event.preventDefault()
+ var type = $(this).val()
+ var options = $(this).closest('div.input-group').siblings('.options')
+ var option_controls = $(this).closest('div.input-group').siblings('.option-controls')
+ var correct = $(this).closest('div.input-group').siblings().find('.question-correct')
+ if (type == 'Yes/No') {
+ options.empty()
+ correct.empty()
+ var opt = `
+
+ 0
+
+
+
+ 1
+
+
+ `
+ options.append(opt)
+ option_controls.children('a').addClass('disabled')
+ var cor = `
+
+
+ `
+ correct.append(cor)
+ } else {
+ option_controls.children('a').removeClass('disabled')
+ options.find('input').removeAttr('disabled')
+ if (options.children().length <= 2 ){
+ option_controls.children('a[data-action="delete"]').addClass('disabled')
+ }
+ }
+})
+
+root.on('click', '.option-controls > a', function(event) {
+ event.preventDefault()
+ var action = $(this).data('action')
+ var options = $(this).closest('div.option-controls').siblings('.options')
+ var length = options.children().length
+ var correct = $(this).closest('div.option-controls').siblings().find('.question-correct')
+ if (action == 'delete') {
+ if (length > 2) {
+ options.children().last().remove()
+ correct.children().last().remove()
+ }
+ } else {
+ var opt = `
+
+ ${length}
+
+
+ `
+ options.append(opt)
+ var cor = `
`
+ correct.append(cor)
+ }
+ length = options.children().length
+ if (length <= 2) {
+ $(this).closest('div.option-controls').children('a[data-action="delete"]').addClass('disabled')
+ } else {
+ $(this).closest('div.option-controls').children('a[data-action="delete"]').removeClass('disabled')
+ }
+})
+
+
+
+$('.editor-controls > a').click(function(event){
+ event.preventDefault()
+ var action = $(this).data('action')
+ var root_accordion = $(this).closest('div').siblings('.accordion')
+ if (action == 'add-question') {
+ var obj = generate_single_question(root_container_id=`#${root_accordion.attr('id')}`)
+ root.append(obj)
+ } else if (action == 'add-block') {
+ var obj = generate_block(root_container_id=`#${root_accordion.attr('id')}`)
+ root.append(obj)
+ var block_container = $(`#element${element_index-1}`).children().find('.accordion')
+ Sortable.create(block_container.get(0), {handle: '.move-handle', onEnd: function(evt) {renumber_blocks()}})
+ var question = generate_single_question(root_container_id=`#${block_container.attr('id')}`)
+ block_container.append(question)
+ block_container.find('.panel-controls > a[data-action="delete"]').addClass('disabled')
+ } else if (action == 'done') {
+ parse_data(data)
+ }
+ renumber_blocks()
+})
+
+function parse_data(data) {
+ var block, obj, new_block, block_container, question, _question, new_question, options, correct, opt, tags
+ for (let c = 0; c < data.length; c++) {
+ block = data[c]
+ if (block['type'] == 'block') {
+ obj = generate_block(root_container_id=`#${root.attr('id')}`)
+ root.append(obj)
+ new_block = $(`#element${element_index-1}`)
+ new_block.find('.block-header-text').val(block['question_header']).trigger('change')
+ block_container = $(`#element${element_index-1}`).children().find('.accordion')
+ Sortable.create(block_container.get(0), {handle: '.move-handle', onEnd: function(evt) {renumber_blocks()}})
+ for (let _c = 0; _c < block['questions'].length; _c ++) {
+ question = block['questions'][_c]
+ _question = generate_single_question(root_container_id=`#${block_container.attr('id')}`)
+ block_container.append(_question)
+ if (block_container.children().length <= 1) {
+ block_container.find('.panel-controls > a[data-action="delete"]').addClass('disabled')
+ } else {
+ block_container.find('.panel-controls > a[data-action="delete"]').removeClass('disabled')
+ }
+ new_question = $(`#element${element_index-1}`)
+ new_question.find('.question-text').val(question['text']).trigger('change')
+ new_question.find('.question-type').val(question['q_type']).trigger('change')
+ correct = new_question.find('.question-correct')
+ if (question['q_type'] != 'Yes/No') {
+ options = new_question.find('.options')
+ options.empty()
+ correct.empty()
+ for ( var __c = 0; __c < question['options'].length; __c++) {
+ option = question['options'][__c]
+ opt = `
+
+ ${__c}
+
+
+ `
+ options.append(opt)
+ correct.append(`
`)
+ }
+ }
+ correct.val(String(question['correct']))
+ tags = question['tags'].join('\r\n')
+ new_question.find('.question-tags').val(tags)
+ }
+ } else {
+ question = block
+ obj = generate_single_question(root_container_id=`#${root.attr('id')}`)
+ root.append(obj)
+ new_question = $(`#element${element_index-1}`)
+ new_question.find('.question-text').val(question['text']).trigger('change')
+ new_question.find('.question-type').val(question['q_type']).trigger('change')
+ correct = new_question.find('.question-correct')
+ if (question['q_type'] != 'Yes/No') {
+ options = new_question.find('.options')
+ options.empty()
+ correct.empty()
+ for ( var _c = 0; _c < question['options'].length; _c++) {
+ option = question['options'][_c]
+ opt = `
+
+ ${_c}
+
-
- -
- ${data[i]['options'].join("
- ")}
-
-
+ `
+ options.append(opt)
+ correct.append(`
`)
+ }
+ }
+ correct.val(String(question['correct']))
+ tags = question['tags'].join('\r\n')
+ new_question.find('.question-tags').val(tags)
+ }
+ }
+ renumber_blocks()
+}
+
+root.on('click', '.block-controls > a', function(event){
+ event.preventDefault()
+ var action = $(this).data('action')
+ var root_accordion = $(this).closest('div').siblings('.accordion')
+ if (action == 'add-question') {
+ var question = generate_single_question(root_container_id=`#${root_accordion.attr('id')}`)
+ root_accordion.append(question)
+ if (root_accordion.children().length > 1 ) {
+ root_accordion.find('.panel-controls > a[data-action="delete"]').removeClass('disabled')
+ } else {
+ root_accordion.find('.panel-controls > a[data-action="delete"]').addClass('disabled')
+ }
+ renumber_blocks()
+ }
+})
+
+function generate_single_question(root_container_id) {
+ if (root_container_id == `#${root.attr('id')}`) {
+ var block_button = `
+
+
+
+ `
+ } else {
+ var block_button = ''
+ }
+ var question = `
+
+
+
+
+
+ Question
+
+
+
+ Question Type
+
+
+
+
+
+
+ Correct
+
+
+
+ Tags
+
- `
- root.append(obj)
- }
+
+ `
+ element_index ++
+ return question
}
-$('.panel-control').click(function(event) {
- console.log($(this).data('id'))
- var id = $(this).data('id')
- $(`#i${id}`).remove()
-})
\ No newline at end of file
+function generate_block(root_container_id) {
+ var block = `
+
+
+
+
+
+ Block Header
+
+
+
+
+
+
+
+
+ `
+ element_index ++
+ return block
+}
+
+var myArray = [
+ "Apples",
+ "Bananas",
+ "Pears"
+ ];
+
+function renumber_blocks () {
+ $( ".block-number" ).each(function(index) {
+ $( this ).text($( this ).closest('.accordion-item').index())
+ })
+}
\ No newline at end of file
diff --git a/ref-test/app/editor/templates/editor/components/base.html b/ref-test/app/editor/templates/editor/components/base.html
index a4f4498..c8fdb06 100644
--- a/ref-test/app/editor/templates/editor/components/base.html
+++ b/ref-test/app/editor/templates/editor/components/base.html
@@ -48,6 +48,7 @@
+