{"version":3,"file":"350.d37f5c532eb242de.bundle.js","mappings":"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","sources":["webpack://WebComponents/./runestone/poll/js/poll.js"],"sourcesContent":["/*\n__author__ = Kirby Olson\n__date__ = 6/12/2015 */\n\"use strict\";\n\nimport RunestoneBase from \"../../common/js/runestonebase\";\nimport \"../css/poll.css\";\n\nexport var pollList = {};\n\nexport default class Poll extends RunestoneBase {\n constructor(opts) {\n super(opts);\n var orig = opts.orig; //entire

element\n this.origElem = orig;\n this.divid = orig.id;\n this.children = this.origElem.childNodes;\n this.optionList = [];\n this.optsArray = [];\n this.comment = false;\n if ($(this.origElem).is(\"[data-comment]\")) {\n this.comment = true;\n }\n this.resultsViewer = $(orig).data(\"results\");\n this.getQuestionText();\n this.getOptionText(); //populates optionList\n this.renderPoll(); //generates HTML\n // Checks localStorage to see if this poll has already been completed by this user.\n this.checkPollStorage();\n this.caption = \"Poll\";\n this.addCaption(\"runestone\");\n }\n getQuestionText() {\n //finds the text inside the parent tag, but before the first

  • tag and sets it as the question\n var _this = this;\n var firstAnswer;\n for (var i = 0; i < this.children.length; i++) {\n if (this.children[i].tagName == \"LI\") {\n firstAnswer = _this.children[i];\n break;\n }\n }\n var delimiter = firstAnswer.outerHTML;\n var fulltext = $(this.origElem).html();\n var temp = fulltext.split(delimiter);\n this.question = temp[0];\n }\n getOptionText() {\n //Gets the text from each
  • tag and places it in this.optionList\n var _this = this;\n for (var i = 0; i < this.children.length; i++) {\n if (_this.children[i].tagName == \"LI\") {\n _this.optionList.push($(_this.children[i]).text());\n }\n }\n }\n renderPoll() {\n //generates the HTML that the user interacts with\n var _this = this;\n this.containerDiv = document.createElement(\"div\");\n this.pollForm = document.createElement(\"form\");\n this.resultsDiv = document.createElement(\"div\");\n this.containerDiv.id = this.divid;\n $(this.containerDiv).addClass(this.origElem.getAttribute(\"class\"));\n $(this.pollForm).html(\n `${this.question}`\n );\n $(this.pollForm).attr({\n id: this.divid + \"_form\",\n method: \"get\",\n action: \"\",\n onsubmit: \"return false;\",\n });\n this.pollForm.appendChild(document.createElement(\"br\"));\n for (var i = 0; i < this.optionList.length; i++) {\n var radio = document.createElement(\"input\");\n var tmpid = _this.divid + \"_opt_\" + i;\n $(radio).attr({\n id: tmpid,\n name: this.divid + \"_group1\",\n type: \"radio\",\n value: i,\n });\n $(radio).click(this.submitPoll.bind(this));\n var label = document.createElement(\"label\");\n $(label).attr(\"for\", tmpid);\n $(label).text(this.optionList[i]);\n this.pollForm.appendChild(radio);\n this.optsArray.push(radio);\n this.pollForm.appendChild(label);\n this.pollForm.appendChild(document.createElement(\"br\"));\n }\n if (this.comment) {\n this.renderTextField();\n }\n this.resultsDiv.id = this.divid + \"_results\";\n this.containerDiv.appendChild(this.pollForm);\n this.containerDiv.appendChild(this.resultsDiv);\n $(this.origElem).replaceWith(this.containerDiv);\n }\n renderTextField() {\n this.textfield = document.createElement(\"input\");\n this.textfield.type = \"text\";\n $(this.textfield).addClass(\"form-control\");\n this.textfield.style.width = \"300px\";\n this.textfield.name = this.divid + \"_comment\";\n this.textfield.placeholder = \"Any comments?\";\n this.pollForm.appendChild(this.textfield);\n this.pollForm.appendChild(document.createElement(\"br\"));\n }\n submitPoll() {\n //checks the poll, sets localstorage and submits to the server\n var poll_val = null;\n for (var i = 0; i < this.optsArray.length; i++) {\n if (this.optsArray[i].checked) {\n poll_val = this.optsArray[i].value;\n break;\n }\n }\n if (poll_val === null) return;\n var comment_val = \"\";\n if (this.comment) {\n comment_val = this.textfield.value;\n }\n var act = \"\";\n if (comment_val !== \"\") {\n act = poll_val + \":\" + comment_val;\n } else {\n act = poll_val;\n }\n var eventInfo = { event: \"poll\", act: act, div_id: this.divid };\n // log the response to the database\n this.logBookEvent(eventInfo); // in bookfuncs.js\n // log the fact that the user has answered the poll to local storage\n localStorage.setItem(this.divid, \"true\");\n if (!document.getElementById(`${this.divid}_sent`)) {\n $(this.pollForm).append(\n `Thanks, your response has been recorded`\n );\n } else {\n $(`#${this.divid}_sent`).html(\n \"Only Your last reponse is recorded\"\n );\n }\n // show the results of the poll\n if (this.resultsViewer === \"all\") {\n var data = {};\n data.div_id = this.divid;\n data.course = eBookConfig.course;\n jQuery.get(\n `${eBookConfig.new_server_prefix}/assessment/getpollresults`,\n data,\n this.showPollResults\n );\n }\n }\n showPollResults(results) {\n //displays the results returned by the server\n results = results.detail;\n var total = results[\"total\"];\n var optCounts = results[\"opt_counts\"];\n var div_id = results[\"div_id\"];\n var my_vote = results[\"my_vote\"];\n // restore current users vote\n if (my_vote > -1) {\n this.optsArray[my_vote].checked = \"checked\";\n }\n // show results summary if appropriate\n if (\n (this.resultsViewer === \"all\" &&\n localStorage.getItem(this.divid === \"true\")) ||\n eBookConfig.isInstructor\n ) {\n $(this.resultsDiv).html(\n `Results: ${total} responses

    `\n );\n var list = $(document.createElement(\"div\"));\n $(list).addClass(\"results-container\");\n for (var i = 0; i < this.optionList.length; i++) {\n var count;\n var percent;\n if (optCounts[i] > 0) {\n count = optCounts[i];\n percent = (count / total) * 100;\n } else {\n count = 0;\n percent = 0;\n }\n var text = count + \" (\" + Math.round(10 * percent) / 10 + \"%)\"; // round percent to 10ths\n var html;\n if (percent > 10) {\n html =\n `
    ${i + 1}.
    ` +\n \"
    \" +\n \"
    ` +\n \"\" +\n text +\n \"
    \";\n } else {\n html =\n `
    ${i + 1}.
    ` +\n \"
    \" +\n \"
    ` +\n \"\" +\n text +\n \"
    \";\n }\n var el = $(html);\n list.append(el);\n }\n $(this.resultsDiv).append(list);\n }\n this.indicate_component_ready();\n }\n disableOptions() {}\n checkPollStorage() {\n //checks the localstorage to see if the poll has been completed already\n var _this = this;\n var len = localStorage.length;\n if (len > 0) {\n //If the poll has already been completed, show the results\n var data = {};\n data.div_id = this.divid;\n data.course = eBookConfig.course;\n jQuery\n .get(\n `${eBookConfig.new_server_prefix}/assessment/getpollresults`,\n data,\n this.showPollResults.bind(this)\n )\n .fail(this.indicate_component_ready.bind(this));\n } else {\n this.indicate_component_ready();\n }\n }\n}\n\n// Do not render poll data until login-complete event so we know instructor status\n$(document).on(\"runestone:login-complete\", function () {\n $(\"[data-component=poll]\").each(function (index) {\n try {\n pollList[this.id] = new Poll({ orig: this });\n } catch (err) {\n console.log(`Error rendering Poll Problem ${this.id}\n Details: ${err}`);\n console.log(err.stack);\n }\n });\n});\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\nwindow.component_factory.poll = function (opts) {\n return new Poll(opts);\n};\n"],"names":["pollList","Poll","constructor","opts","super","orig","this","origElem","divid","id","children","childNodes","optionList","optsArray","comment","$","is","resultsViewer","data","getQuestionText","getOptionText","renderPoll","checkPollStorage","caption","addCaption","firstAnswer","i","length","tagName","delimiter","outerHTML","temp","html","split","question","_this","push","text","containerDiv","document","createElement","pollForm","resultsDiv","addClass","getAttribute","attr","method","action","onsubmit","appendChild","radio","tmpid","name","type","value","click","submitPoll","bind","label","renderTextField","replaceWith","textfield","style","width","placeholder","poll_val","checked","comment_val","eventInfo","event","act","div_id","logBookEvent","localStorage","setItem","getElementById","append","course","eBookConfig","jQuery","get","new_server_prefix","showPollResults","results","total","detail","optCounts","my_vote","getItem","isInstructor","list","count","percent","Math","round","el","indicate_component_ready","disableOptions","fail","on","each","index","err","console","log","stack","window","component_factory","poll"],"sourceRoot":""}