diff --git a/app/models/answer.rb b/app/models/answer.rb index bec8f3c..c8b2cc6 100644 --- a/app/models/answer.rb +++ b/app/models/answer.rb @@ -99,7 +99,7 @@ def answer_hash default = {'standards' => {}, text => ''} begin - h = self.text.nil? ? default : JSON.parse(answer.text) + h = self.text.nil? ? default : JSON.parse(self.text) rescue JSON::ParserError => e h = default end diff --git a/lib/assets/javascripts/views/answers/rda_metadata.js b/lib/assets/javascripts/views/answers/rda_metadata.js index e5701d2..0dfedaf 100644 --- a/lib/assets/javascripts/views/answers/rda_metadata.js +++ b/lib/assets/javascripts/views/answers/rda_metadata.js @@ -1,3 +1,5 @@ +import { isUndefined, isObject } from '../../utils/isType'; + $(() => { // url for the api we will be querying let url = ''; @@ -15,13 +17,13 @@ function removeUnused(name) { const num = Object.keys(minTree).find(x => minTree[x].name === name); // if not top level standard - if (num === undefined) { + if (isUndefined(num)) { // for each top level standard Object.keys(minTree).forEach((knum) => { const child = Object.keys(minTree[knum].children).find(x => minTree[knum].children[x].name === name); - if (num !== undefined) { - delete minTree[num].children[child]; + if (isObject(child)) { + delete minTree[knum].children[child]; $(`.rda_metadata .sub-subject select option[value="${name}"]`).remove(); } }); @@ -70,7 +72,7 @@ data: `keyword=${name}`, dataType: 'json', }).done((result) => { - if (child === undefined) { + if (isUndefined(child)) { minTree[num].standards = result.ids; } else { minTree[num].children[child].standards = result.ids; @@ -113,12 +115,13 @@ data.push({ value: descriptions[id].title, id }); simpdat.push(descriptions[id].title); }); - $('.standards-typeahead').typeahead({ source: simpdat }); + const typ = $('.standards-typeahead'); + typ.typeahead({ source: simpdat }); } function initStandards() { // for each metadata question, init selected standards according to html - $('.rda_metadata').each(() => { + $('.rda_metadata').each(function () { // list of selected standards const selectedStandards = $(this).find('.selected_standards .list'); // form listing of standards @@ -146,7 +149,7 @@ } else { // update all the dropdowns/ standards explore box (calling on subject // will suffice since it will necisarily update sub-subject) - $('.rda_metadata .subject selec').change(); + $('.rda_metadata .subject select').change(); initStandards(); initTypeahead(); } @@ -171,11 +174,11 @@ } // change sub-subjects and standards based on selected subject - $(this).on('change', '.rda_metadata .subject select', () => { - console.log('changed subject'); - const group = $(this).closest('.rda_metadata'); + $('.rda_metadata').on('change', '.subject select', (e) => { + const target = $(e.currentTarget); + const group = target.closest('.rda_metadata'); const subSubject = group.find('.sub-subject select'); - const subjectText = $(this).find(':selected').text(); + const subjectText = target.find(':selected').text(); // find subject in min_tree const subject = getSubject(subjectText); // check to see if this object has no children(and thus it's own standards) @@ -183,14 +186,14 @@ // hide sub-subject since there's no data for it subSubject.closest('div').hide(); // update the standards display selector - $('.rda_metadata .sub-subject selec').change(); + $('.rda_metadata .sub-subject select').change(); } else { // show the sub-subject incase it was previously hidden subSubject.closest('div').show(); // update the sub-subject display selector subSubject.find('option').remove(); subject.children.forEach((child) => { - $('