{"version":3,"sources":["dynamic-selector.js"],"names":["define","useRadioButtons","this","selector","$selectorContainer","renderSelector","id","selectorItem","findSelector","$row","$","children","findChildren","length","text","subQuestion","appendTo","self","onChange","parents","remove","selectedId","find","attr","$select","class","on","value","append","setTimeout","window","createDropdown","each","i","name","data-id","files","$button","href","target","indexOf","renderRadioGroup","$radio","type","placeholder","$label","$radioDiv","last","prop","trigger","parentId","push","init"],"mappings":"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","file":"dynamic-selector.js","sourcesContent":["define(function () {\r\n var DynamicSelector = function(useRadioButtons) {\r\n this.selector = null;\r\n this.$selectorContainer = null;\r\n this.useRadioButtons = useRadioButtons;\r\n \r\n /* This function renders a new Dynamic Selector from a given ID.\r\n This involves creating a new div and, if necessary:\r\n * creating a question\r\n * creating a dropdown of answers\r\n * displaying a list of files/links if end of selector is reached\r\n */\r\n this.renderSelector = function (id) {\r\n // Using the id parameter, obtain the selector object\r\n var selectorItem = this.findSelector(id);\r\n if (selectorItem) {\r\n \r\n // Create a new div for this selector row\r\n var $row = $(\"
\", {\r\n id: \"selector-row-\" + selectorItem.id\r\n });\r\n \r\n // Obtain a list of \"children\". i.e. items to show in the dropdown\r\n var children = this.findChildren(selectorItem.id);\r\n if (children.length > 0) {\r\n \r\n // Create the question label and append to row\r\n $(\"\", {\r\n text: selectorItem.subQuestion\r\n })\r\n .appendTo($row);\r\n \r\n // onChange function to use when the dropdown value changes\r\n var self = this;\r\n var onChange = function () {\r\n // Remove any subsequent rows after this one. Useful if a select \"higher up\" the chain changes\r\n $(\" ~ div[id^='selector-row']\", $(this).parents(\"div[id^='selector-row']\")).remove();\r\n \r\n // Get the ID from the selected option\r\n var selectedId = $(this).find(\"option:selected\").attr(\"data-id\");\r\n \r\n // Render a new selector row using this ID\r\n self.renderSelector(selectedId);\r\n };\r\n \r\n // Create a new select element and bind the onChange function\r\n var $select = $(\"\", { \"class\": \"required\" }).on(\"change\", onChange);\r\n \r\n // Create the initial \"Please select\" option. \r\n // As the value is empty (and the select is .required), this will be hidden from the dropdown.\r\n $(\"\", {\r\n text: \"Please select\",\r\n value: \"\"\r\n })\r\n .appendTo($select);\r\n \r\n // Append the select box to the row\r\n $row.append($select);\r\n \r\n // Turn the select box into a fancy-looking dropdown\r\n // NB. Timeout is needed because site-wide-forms.js code runs in footer (potentially after this)\r\n setTimeout(function () {\r\n if (window.createDropdown) {\r\n window.createDropdown($select);\r\n }\r\n }, 1);\r\n \r\n // Populate the select box with a list of options\r\n $.each(children, function (i, value) {\r\n // Create a new option and append to select box\r\n $(\"\", {\r\n value: value.name,\r\n text: value.name,\r\n \"data-id\": value.id\r\n })\r\n .appendTo($select);\r\n });\r\n }\r\n \r\n // Obtain a list of files for the user to download\r\n if (selectorItem.files) {\r\n \r\n // Create the download button for each file\r\n $.each(selectorItem.files, function (i, value) {\r\n var $button = $(\"\", {\r\n text: value.name,\r\n \"class\": \"btn btn-lg btn-inline\",\r\n href: value.href,\r\n target: (value.href.indexOf(\".pdf\") > -1 ) ? \"_blank\" : \"\"\r\n });\r\n $row.append($button).append(\"