{"version":3,"file":"957.js","mappings":"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","sources":["webpack://WebComponents/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://WebComponents/./runestone/hparsons/js/hparsonsFeedback.js","webpack://WebComponents/./runestone/hparsons/js/blockGrader.js","webpack://WebComponents/./runestone/hparsons/js/BlockFeedback.js","webpack://WebComponents/./runestone/hparsons/js/SQLFeedback.js","webpack://WebComponents/./runestone/hparsons/js/hparsons.js","webpack://WebComponents/./runestone/parsons/js/parsons-i18n.en.js","webpack://WebComponents/./runestone/parsons/js/parsons-i18n.pt-br.js"],"sourcesContent":["var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","export default class HParsonsFeedback {\n constructor(hparsons) {\n this.hparsons = hparsons;\n this.percent = 0;\n }\n createOutput() {\n console.log('createOutput method not implemented in feedback!');\n }\n async runButtonHandler() {\n console.log('runButtonClicked method not implemented in feedback!');\n }\n customizeUI() {\n // used to change some minor UI, e.g. the text on Run button\n }\n init() {\n // initlizations functionalities such as preparing SQL,\n // or checking related options\n }\n\n clearFeedback() {\n // called when input is changed\n console.log('clearFeedback method not implemented in feedback!');\n }\n \n reset() {\n // called when reset is clicked\n console.log('reset method not implemented in feedback!');\n }\n}\n","// This file is adapted from lineGrader in parsons directive.\n// We could have fit our data structure to use the original LineBasedGrader directly,\n// but that would result in changes in parsons directive affecting this, so we created a copy\n// instead.\n\nexport default class BlockBasedGrader {\n constructor(problem) {\n this.problem = problem;\n this.percent = 0;\n }\n // Use a LIS (Longest Increasing Subsequence) algorithm to return the indexes\n // that are not part of that subsequence.\n inverseLISIndices(arr) {\n // Get all subsequences\n var allSubsequences = [];\n for (var i = 0; i < arr.length; i++) {\n var subsequenceForCurrent = [arr[i]],\n current = arr[i],\n lastElementAdded = -1;\n for (var j = i; j < arr.length; j++) {\n var subsequent = arr[j];\n if (subsequent > current && lastElementAdded < subsequent) {\n subsequenceForCurrent.push(subsequent);\n lastElementAdded = subsequent;\n }\n }\n allSubsequences.push(subsequenceForCurrent);\n }\n // Figure out the longest one\n var longestSubsequenceLength = -1;\n var longestSubsequence;\n for (let i in allSubsequences) {\n var subs = allSubsequences[i];\n if (subs.length > longestSubsequenceLength) {\n longestSubsequenceLength = subs.length;\n longestSubsequence = subs;\n }\n }\n // Create the inverse indexes\n var indexes = [];\n var lIndex = 0;\n for (let i = 0; i < arr.length; i++) {\n if (lIndex > longestSubsequence.length) {\n indexes.push(i);\n } else {\n if (arr[i] == longestSubsequence[lIndex]) {\n lIndex += 1;\n } else {\n indexes.push(i);\n }\n }\n }\n return indexes;\n }\n // grade that element, returning the state\n grade() {\n this.correctLines = 0;\n this.percentLines = 0;\n var solutionLines = this.solution;\n var answerLines = this.answer;\n var i;\n var state;\n this.percentLines =\n Math.min(answerLines.length, solutionLines.length) /\n Math.max(answerLines.length, solutionLines.length);\n if (answerLines.length < solutionLines.length) {\n state = \"incorrectTooShort\";\n this.correctLength = false;\n } else if (answerLines.length == solutionLines.length) {\n this.correctLength = true;\n } else {\n this.correctLength = false;\n }\n\n // Determine whether the code **that is there** is in the correct order\n // If there is too much or too little code this only matters for\n // calculating a percentage score.\n let isCorrectOrder = true;\n this.correctLines = 0;\n this.solutionLength = solutionLines.length;\n let loopLimit = Math.min(solutionLines.length, answerLines.length);\n for (i = 0; i < loopLimit; i++) {\n if (answerLines[i] !== solutionLines[i]) {\n isCorrectOrder = false;\n } else {\n this.correctLines += 1;\n }\n }\n\n if (\n isCorrectOrder &&\n this.correctLength\n ) {\n // Perfect\n state = \"correct\";\n } else if (!isCorrectOrder && state != \"incorrectTooShort\") {\n state = \"incorrectMoveBlocks\";\n } else if (!this.correctLength && state != \"incorrectTooShort\") {\n state = \"incorrectMoveBlocks\";\n }\n this.calculatePercent();\n this.graderState = state;\n return state;\n }\n\n calculatePercent() {\n let numLines = this.percentLines * 0.2;\n let lines = this.answer.length;\n let numCorrectBlocks = (this.correctLines / lines) * 0.8;\n\n this.percent = numLines + numCorrectBlocks;\n }\n}\n","import HParsonsFeedback from \"./hparsonsFeedback\";\nimport BlockBasedGrader from \"./blockGrader.js\";\nimport \"../../parsons/js/parsons-i18n.en.js\";\nimport \"../../parsons/js/parsons-i18n.pt-br.js\";\n\nexport default class BlockFeedback extends HParsonsFeedback {\n createOutput() {\n // Block based grading output\n this.messageDiv = document.createElement(\"div\");\n this.hparsons.outerDiv.appendChild(this.messageDiv);\n }\n customizeUI() {\n $(this.hparsons.runButton).text('Check Me');\n }\n\n init() {\n this.checkCount = 0;\n this.solved = false;\n // TODO: not sure what is the best way to do this\n this.grader = new BlockBasedGrader();\n let solutionBlocks = [];\n for (let i = 0; i < this.hparsons.blockAnswer.length; ++i) {\n solutionBlocks.push(this.hparsons.originalBlocks[this.hparsons.blockAnswer[i]]);\n }\n this.solution = solutionBlocks;\n this.grader.solution = solutionBlocks;\n this.answerArea = this.hparsons.hparsonsInput.querySelector('.drop-area');\n }\n\n // Called when check button clicked (block-based Feedback)\n async runButtonHandler() {\n this.checkCurrentAnswer();\n this.logCurrentAnswer();\n this.renderFeedback();\n }\n\n async logCurrentAnswer() {\n let act = {\n scheme: \"block\",\n correct: this.grader.graderState == 'correct' ? \"T\" : \"F\",\n answer: this.hparsons.hparsonsInput.getParsonsTextArray(),\n percent: this.grader.percent\n }\n let logData = {\n event: \"hparsonsAnswer\",\n div_id: this.hparsons.divid,\n act: JSON.stringify(act),\n answer: JSON.stringify({\"blocks\": act.answer}),\n percent: this.grader.percent,\n correct: act.correct,\n }\n await this.hparsons.logBookEvent(logData);\n }\n\n // Used for block-based feedback\n checkCurrentAnswer() {\n if (!this.solved) {\n this.checkCount++;\n this.clearFeedback();\n this.grader.answer = this.hparsons.hparsonsInput.getParsonsTextArray();\n this.grade = this.grader.grade();\n if (this.grade == \"correct\") {\n $(this.hparsons.runButton).prop(\"disabled\", true);\n this.solved = true;\n }\n }\n }\n\n renderFeedback() {\n this.grade = this.grader.graderState;\n var feedbackArea;\n var answerArea = $(this.answerArea);\n feedbackArea = $(this.messageDiv);\n\n if (this.grade === \"correct\") {\n answerArea.addClass(\"correct\");\n feedbackArea.fadeIn(100);\n feedbackArea.attr(\"class\", \"alert alert-info\");\n if (this.checkCount > 1) {\n feedbackArea.html(\n $.i18n(\"msg_parson_correct\", this.checkCount)\n );\n } else {\n feedbackArea.html($.i18n(\"msg_parson_correct_first_try\"));\n }\n this.checkCount = 0;\n }\n\n if (this.grade === \"incorrectTooShort\") {\n // too little code\n answerArea.addClass(\"incorrect\");\n feedbackArea.fadeIn(500);\n feedbackArea.attr(\"class\", \"alert alert-danger\");\n feedbackArea.html($.i18n(\"msg_parson_too_short\"));\n }\n\n if (this.grade === \"incorrectMoveBlocks\") {\n var answerBlocks = this.answerArea.children;\n var inSolution = [];\n var inSolutionIndexes = [];\n var notInSolution = [];\n for (let i = 0; i < answerBlocks.length; i++) {\n var block = answerBlocks[i];\n var index = this.solution.indexOf(block.textContent);\n if (index == -1) {\n notInSolution.push(block);\n } else {\n inSolution.push(block);\n inSolutionIndexes.push(index);\n }\n }\n var lisIndexes = this.grader.inverseLISIndices(inSolutionIndexes);\n for (let i = 0; i < lisIndexes.length; i++) {\n notInSolution.push(inSolution[lisIndexes[i]]);\n }\n answerArea.addClass(\"incorrect\");\n feedbackArea.fadeIn(500);\n feedbackArea.attr(\"class\", \"alert alert-danger\");\n for (let i = 0; i < notInSolution.length; i++) {\n $(notInSolution[i]).addClass(\"incorrectPosition\");\n }\n feedbackArea.html($.i18n(\"msg_parson_wrong_order\"));\n }\n }\n\n // Feedback UI for Block-based Feedback\n clearFeedback() {\n $(this.answerArea).removeClass(\"incorrect correct\");\n var children = this.answerArea.childNodes;\n for (var i = 0; i < children.length; i++) {\n $(children[i]).removeClass(\n \"correctPosition incorrectPosition\"\n );\n }\n $(this.messageDiv).hide();\n }\n\n reset() {\n if (this.solved) {\n this.checkCount = 0;\n $(this.hparsons.runButton).prop(\"disabled\", false);\n this.solved = false;\n }\n this.clearFeedback();\n }\n\n}\n","import HParsonsFeedback from \"./hparsonsFeedback\";\nimport initSqlJs from \"sql.js/dist/sql-wasm.js\";\nimport Handsontable from \"handsontable\";\nimport \"handsontable/dist/handsontable.full.css\";\n\nvar allDburls = {};\n\nexport default class SQLFeedback extends HParsonsFeedback {\n createOutput() {\n var outDiv = document.createElement(\"div\");\n $(outDiv).addClass(\"hp_output\");\n this.outDiv = outDiv;\n this.output = document.createElement(\"pre\");\n this.output.id = this.hparsons.divid + \"_stdout\";\n $(this.output).css(\"visibility\", \"hidden\");\n var clearDiv = document.createElement(\"div\");\n $(clearDiv).css(\"clear\", \"both\"); // needed to make parent div resize properly\n this.hparsons.outerDiv.appendChild(clearDiv);\n outDiv.appendChild(this.output);\n this.hparsons.outerDiv.appendChild(outDiv);\n clearDiv = document.createElement(\"div\");\n $(clearDiv).css(\"clear\", \"both\"); // needed to make parent div resize properly\n this.hparsons.outerDiv.appendChild(clearDiv);\n }\n\n renderFeedback() {\n if (this.testResult) {\n $(this.output).text(this.testResult);\n $(this.output).css(\"visibility\", \"visible\");\n }\n $(this.outDiv).show();\n }\n\n clearFeedback() {\n $(this.outDiv).hide();\n }\n\n reset() {\n this.clearFeedback();\n }\n\n init() {\n // adapted from activecode-sql\n // fnprefix sets the path to load the sql-wasm.wasm file\n var bookprefix;\n var fnprefix;\n if (\n eBookConfig.useRunestoneServices ||\n window.location.search.includes(\"mode=browsing\")\n ) {\n bookprefix = `/books/published/${eBookConfig.basecourse}`;\n fnprefix = bookprefix + \"/_static\";\n } else {\n // The else clause handles the case where you are building for a static web browser\n bookprefix = \"\";\n fnprefix = \"/_static\";\n }\n let SQLconfig = {\n locateFile: (filename) => `${fnprefix}/${filename}`,\n };\n var self = this.hparsons;\n initSqlJs(SQLconfig).then(function (SQL) {\n // set up call to load database asynchronously if given\n if (self.dburl) {\n if (self.dburl.startsWith(\"/_static\")) {\n self.dburl = `${bookprefix}${self.dburl}`;\n }\n $(self.runButton).attr(\"disabled\", \"disabled\");\n let buttonText = $(self.runButton).text();\n $(self.runButton).text($.i18n(\"msg_activecode_load_db\"));\n if (!(self.dburl in allDburls)) {\n allDburls[self.dburl] = {\n status: \"loading\",\n xWaitFor: jQuery.Deferred(),\n };\n } else {\n if (allDburls[self.dburl].status == \"loading\") {\n allDburls[self.dburl].xWaitFor.done(function () {\n self.db = allDburls[self.dburl].dbObject;\n $(self.runButton).removeAttr(\"disabled\");\n $(self.runButton).text(buttonText);\n });\n return;\n }\n self.db = allDburls[self.dburl].dbObject;\n $(self.runButton).removeAttr(\"disabled\");\n $(self.runButton).text(buttonText);\n return;\n }\n var xhr = new XMLHttpRequest();\n // For example: https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite\n xhr.open(\"GET\", self.dburl, true);\n xhr.responseType = \"arraybuffer\";\n xhr.onload = (e) => {\n var uInt8Array = new Uint8Array(xhr.response);\n self.db = new SQL.Database(uInt8Array);\n allDburls[self.dburl].dbObject = self.db;\n $(self.runButton).text(buttonText);\n $(self.runButton).removeAttr(\"disabled\");\n allDburls[self.dburl].db = uInt8Array;\n allDburls[self.dburl].status = \"ready\";\n allDburls[self.dburl].xWaitFor.resolve();\n // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}]\n };\n xhr.send();\n } else {\n self.db = new SQL.Database();\n }\n });\n }\n\n // adapted from activecode - SQL\n async runButtonHandler() {\n // Disable the run button until the run is finished.\n this.hparsons.runButton.disabled = true;\n try {\n await this.runProg();\n } catch (e) {\n console.log(`there was an error ${e} running the code`);\n }\n this.logCurrentAnswer();\n this.renderFeedback();\n // The run is finished; re-enable the button.\n this.hparsons.runButton.disabled = false;\n }\n\n // adapted from activecode-sql\n async runProg() {\n // Clear any old results\n let divid = this.hparsons.divid + \"_sql_out\";\n let respDiv = document.getElementById(divid);\n if (respDiv) {\n respDiv.parentElement.removeChild(respDiv);\n }\n $(this.output).text(\"\");\n // creating new results div\n respDiv = document.createElement(\"div\");\n respDiv.id = divid;\n this.outDiv.appendChild(respDiv);\n // show the output div\n $(this.outDiv).show();\n\n // Run this query\n let query = await this.buildProg();\n if (!this.hparsons.db) {\n $(this.output).text(\n `Error: Database not initialized! DBURL: ${this.hparsons.dburl}`\n );\n return;\n }\n\n // When having prefix/suffix, the visualization is consistent with \"showlastsql\" option of sql activecode:\n // only visualize last entry\n\n let executionSuccessFlag = true;\n // executing hidden prefix if exist\n if (query.prefix) {\n this.prefixresults = this.executeIteratedStatements(\n this.hparsons.db.iterateStatements(query.prefix)\n );\n if (this.prefixresults.at(-1).status == \"failure\") {\n // if error occured in hidden prefix, log and stop executing the rest\n this.visualizeResults(\n respDiv,\n this.prefixresults,\n \"Error executing hidden code in prefix\"\n );\n executionSuccessFlag = false;\n }\n }\n\n // executing student input in micro Parsons\n if (executionSuccessFlag) {\n this.results = this.executeIteratedStatements(\n this.hparsons.db.iterateStatements(query.input)\n );\n if (this.results.at(-1).status == \"failure\") {\n // if error occured in student input, stop executing suffix/unitttest\n // and visualize the error\n this.visualizeResults(respDiv, this.results);\n executionSuccessFlag = false;\n } else if (!query.suffix) {\n this.visualizeResults(respDiv, this.results);\n }\n }\n\n // executing hidden suffix if exist\n // In most cases the suffix is just \"select * from x\" to\n // get all data from the table to see if the operations the table is correct\n if (executionSuccessFlag && query.suffix) {\n this.suffixresults = this.executeIteratedStatements(\n this.hparsons.db.iterateStatements(query.suffix)\n );\n if (this.suffixresults.at(-1).status == \"failure\") {\n // if error occured in hidden suffix, visualize the results\n this.visualizeResults(\n respDiv,\n this.suffixresults,\n \"Error executing hidden code in suffix\"\n );\n executionSuccessFlag = false;\n } else {\n this.visualizeResults(respDiv, this.suffixresults);\n }\n }\n\n // Now handle autograding\n // autograding takes the results of the hidden suffix if exist\n // otherwise take the result of student input\n if (this.hparsons.unittest) {\n if (executionSuccessFlag) {\n if (this.suffixresults) {\n this.testResult = this.autograde(\n this.suffixresults[this.suffixresults.length - 1]\n );\n } else {\n this.testResult = this.autograde(\n this.results[this.results.length - 1]\n );\n }\n } else {\n // unit test results when execution failed\n this.passed = 0;\n this.failed = 0;\n this.percent = NaN;\n this.unit_results = `percent:${this.percent}:passed:${this.passed}:failed:${this.failed}`;\n // Do not show unittest results if execution failed\n $(this.output).css(\"visibility\", \"hidden\");\n }\n } else {\n $(this.output).css(\"visibility\", \"hidden\");\n }\n\n return Promise.resolve(\"done\");\n }\n\n // Refactored from activecode-sql.\n // Takes iterated statements from db.iterateStatemnts(queryString)\n // Returns Array:\n /* each result: {\n status: \"success\" or \"faliure\",\n // for SELECT statements (?):\n columns: number of columns,\n values: data,\n rowcount: number of rows in data,\n // for INSERT, UPDATE, DELETE:\n operation: \"INSERT\", \"UPDATE\", or \"DELETE\",\n rowcount: number of rows modified,\n // when error occurred (aside from status):\n message: error message,\n sql: remaining SQL (?)\n // when no queries were executed:\n message: \"no queries submitted\"\n }*/\n // If an error occurs it will stop executing the rest of queries in it.\n // Thus the error result will always be the last item.\n executeIteratedStatements(it) {\n let results = [];\n try {\n for (let statement of it) {\n let columns = statement.getColumnNames();\n if (columns.length > 0) {\n // data! probably a SELECT\n let data = [];\n while (statement.step()) {\n data.push(statement.get());\n }\n results.push({\n status: \"success\",\n columns: columns,\n values: data,\n rowcount: data.length,\n });\n } else {\n let nsql = statement.getNormalizedSQL();\n let prefix = nsql.substr(0, 6).toLowerCase();\n statement.step(); // execute the query\n // Try to detect INSERT/UPDATE/DELETE to give friendly feedback\n // on rows modified - unfortunately, this won't catch such queries\n // if they use CTEs. There seems to be no reliable way of knowing\n // when a SQLite query actually modified data.\n if (\n prefix === \"insert\" ||\n prefix === \"update\" ||\n prefix === \"delete\"\n ) {\n results.push({\n status: \"success\",\n operation: prefix,\n rowcount: this.hparsons.db.getRowsModified(),\n });\n } else {\n results.push({ status: \"success\" });\n }\n }\n }\n } catch (e) {\n results.push({\n status: \"failure\",\n message: e.toString(),\n sql: it.getRemainingSQL(),\n });\n }\n if (results.length === 0) {\n results.push({\n status: \"failure\",\n message: \"No queries submitted.\",\n });\n }\n return results;\n }\n\n // output the results in the resultArray(Array).\n // container: the container that contains the results\n // resultArray (Array): see executeIteratedStatements\n // Each result will be in a separate row.\n // devNote will be displayed in the top row if exist;\n // it usually won't happen unless something is wrong with prefix and suffix.\n // (\"error execution prefix/suffix\")\n visualizeResults(container, resultArray, devNote) {\n if (devNote) {\n let section = document.createElement(\"div\");\n section.setAttribute(\"class\", \"hp_sql_result\");\n container.appendChild(section);\n let messageBox = document.createElement(\"pre\");\n messageBox.textContent = devNote;\n messageBox.setAttribute(\"class\", \"hp_sql_result_failure\");\n section.appendChild(messageBox);\n }\n for (let r of resultArray) {\n let section = document.createElement(\"div\");\n section.setAttribute(\"class\", \"hp_sql_result\");\n container.appendChild(section);\n if (r.status === \"success\") {\n if (r.columns) {\n let tableDiv = document.createElement(\"div\");\n section.appendChild(tableDiv);\n let maxHeight = 350;\n if (resultArray.length > 1) maxHeight = 200; // max height smaller if lots of results\n createTable(r, tableDiv, maxHeight);\n let messageBox = document.createElement(\"pre\");\n let rmsg = r.rowcount !== 1 ? \" rows \" : \" row \";\n let msg = \"\" + r.rowcount + rmsg + \"returned\";\n if (r.rowcount > 100) {\n msg = msg + \" (only first 100 rows displayed)\";\n }\n msg = msg + \".\";\n messageBox.textContent = msg;\n messageBox.setAttribute(\"class\", \"hp_sql_result_success\");\n section.appendChild(messageBox);\n } else if (r.rowcount) {\n let messageBox = document.createElement(\"pre\");\n let op = r.operation;\n op = op + (op.charAt(op.length - 1) === \"e\" ? \"d.\" : \"ed.\");\n let rmsg = r.rowcount !== 1 ? \" rows \" : \" row \";\n messageBox.textContent = \"\" + r.rowcount + rmsg + op;\n messageBox.setAttribute(\"class\", \"hp_sql_result_success\");\n section.appendChild(messageBox);\n } else {\n let messageBox = document.createElement(\"pre\");\n messageBox.textContent = \"Operation succeeded.\";\n messageBox.setAttribute(\"class\", \"hp_sql_result_success\");\n section.appendChild(messageBox);\n }\n } else {\n let messageBox = document.createElement(\"pre\");\n messageBox.textContent = r.message;\n messageBox.setAttribute(\"class\", \"hp_sql_result_failure\");\n section.appendChild(messageBox);\n }\n }\n }\n\n // adapted from activecode\n async buildProg() {\n // assemble code from prefix, suffix, and editor for running.\n let prog = {};\n if (this.hparsons.hiddenPrefix) {\n prog.prefix = this.hparsons.hiddenPrefix;\n }\n prog.input =\n this.hparsons.hparsonsInput.getParsonsTextArray().join(\" \") + \"\\n\";\n if (this.hparsons.hiddenSuffix) {\n prog.suffix = this.hparsons.hiddenSuffix;\n }\n return Promise.resolve(prog);\n }\n\n // copied from activecode-sql\n async logCurrentAnswer() {\n if (this.unit_results) {\n let act = {\n scheme: \"execution\",\n correct: this.failed == 0 && this.passed != 0 ? \"T\" : \"F\",\n answer: this.hparsons.hparsonsInput.getParsonsTextArray(),\n percent: this.percent, // percent is null if there is execution error\n };\n let logData = {\n event: \"hparsonsAnswer\",\n div_id: this.hparsons.divid,\n act: JSON.stringify(act),\n percent: this.percent || 0,\n correct: act.correct,\n answer: JSON.stringify({ blocks: act.answer }),\n };\n await this.hparsons.logBookEvent(logData);\n }\n }\n\n // might move to base class if used by multiple execution based feedback\n autograde(result_table) {\n var tests = this.hparsons.unittest.split(/\\n/);\n this.passed = 0;\n this.failed = 0;\n // Tests should be of the form\n // assert row,col oper value for example\n // assert 4,4 == 3\n var result = \"\";\n tests = tests.filter(function (s) {\n return s.indexOf(\"assert\") > -1;\n });\n for (let test of tests) {\n let wlist = test.split(/\\s+/);\n wlist.shift();\n let loc = wlist.shift();\n let oper = wlist.shift();\n let expected = wlist.join(\" \");\n let [row, col] = loc.split(\",\");\n result += this.testOneAssert(\n row,\n col,\n oper,\n expected,\n result_table\n );\n result += \"\\n\";\n }\n let pct = (100 * this.passed) / (this.passed + this.failed);\n this.percent = pct;\n pct = pct.toLocaleString(undefined, { maximumFractionDigits: 2 });\n result += `You passed ${this.passed} out of ${\n this.passed + this.failed\n } tests for ${pct}%`;\n this.unit_results = `percent:${pct}:passed:${this.passed}:failed:${this.failed}`;\n return result;\n }\n\n // might move to base class if used by multiple execution based feedback\n testOneAssert(row, col, oper, expected, result_table) {\n // make sure row and col are in bounds\n let actual;\n let output = \"\";\n try {\n actual = result_table.values[row][col];\n } catch (e) {\n if (expected == \"NO_DATA\") {\n this.passed++;\n output = `Passed: No data in row ${row}, column ${col}`;\n return output;\n } else {\n output = `Failed: Not enough data to check row ${row} or column ${col}`;\n return output;\n }\n }\n const operators = {\n \"==\": function (operand1, operand2) {\n return operand1 == operand2;\n },\n \"!=\": function (operand1, operand2) {\n return operand1 != operand2;\n },\n \">\": function (operand1, operand2) {\n return operand1 > operand2;\n },\n \"<\": function (operand1, operand2) {\n return operand1 > operand2;\n },\n };\n let res = operators[oper](actual, expected);\n if (res) {\n output = `Pass: ${actual} ${oper} ${expected} in row ${row} column ${result_table.columns[col]}`;\n this.passed++;\n } else {\n output = `Failed ${actual} ${oper} ${expected} in row ${row} column ${result_table.columns[col]}`;\n this.failed++;\n }\n return output;\n }\n}\n\nfunction createTable(tableData, container, maxHeight) {\n let data = tableData.values;\n let trimRows = undefined;\n if (data.length === 0) {\n // kludge: no column headers will show up unless we do this\n data = [tableData.columns.map((e) => null)];\n trimRows = [0];\n }\n\n var hot = new Handsontable(container, {\n data: data,\n trimRows: trimRows,\n width: \"100%\",\n height: maxHeight,\n autoRowSize: true,\n autoColumnSize: { useHeaders: true },\n rowHeaders: false,\n colHeaders: tableData.columns,\n editor: false,\n maxRows: 100,\n filters: false,\n dropdownMenu: false,\n licenseKey: \"non-commercial-and-evaluation\",\n });\n\n // calculate actual height and resize\n let actualHeight = 40; // header height + small margin\n if (tableData.values.length > 0) {\n for (let i = 0; i < data.length; i++) {\n actualHeight = actualHeight + hot.getRowHeight(i);\n if (actualHeight > maxHeight) break;\n }\n }\n\n hot.updateSettings({ height: actualHeight });\n\n return hot;\n}\n","import RunestoneBase from \"../../common/js/runestonebase.js\";\nimport \"../css/hparsons.css\";\nimport \"../css/hljs-xcode.css\";\nimport BlockFeedback from \"./BlockFeedback.js\";\nimport SQLFeedback from \"./SQLFeedback.js\";\nimport { InitMicroParsons } from \"micro-parsons/micro-parsons/micro-parsons.js\";\nimport \"micro-parsons/micro-parsons/micro-parsons.css\";\n// If you need to debug something in the micro-parsons library then\n// gh repo clone amy21206/micro-parsons-element\n// run npm install and npm build\n// copy everything from bin into the hparsons/js folder and build the components.\n/*import {InitMicroParsons} from './micro-parsons.js';\nimport './micro-parsons.css';*/\n\nexport var hpList;\n// Dictionary that contains all instances of horizontal Parsons problem objects\nif (hpList === undefined) hpList = {};\n\nexport default class HParsons extends RunestoneBase {\n constructor(opts) {\n super(opts);\n // getting settings\n var orig = $(opts.orig).find(\"textarea\")[0];\n this.reuse = $(orig).data(\"reuse\") ? true : false;\n this.randomize = $(orig).data(\"randomize\") ? true : false;\n this.isBlockGrading = $(orig).data(\"blockanswer\") ? true : false;\n this.language = $(orig).data(\"language\");\n if (this.isBlockGrading) {\n this.blockAnswer = $(orig).data(\"blockanswer\").split(\" \");\n }\n this.divid = opts.orig.id;\n this.containerDiv = opts.orig;\n this.useRunestoneServices = opts.useRunestoneServices;\n\n // Set the storageId (key for storing data)\n var storageId = super.localStorageKey();\n this.storageId = storageId;\n\n this.origElem = orig;\n this.origText = this.origElem.textContent;\n this.code = $(orig).text() || \"\\n\\n\\n\\n\\n\";\n this.dburl = $(orig).data(\"dburl\");\n this.runButton = null;\n this.saveButton = null;\n this.loadButton = null;\n this.outerDiv = null;\n this.controlDiv = null;\n this.processContent(this.code);\n\n // Change to factory when more execution based feedback is included\n if (this.isBlockGrading) {\n this.feedbackController = new BlockFeedback(this);\n } else {\n this.feedbackController = new SQLFeedback(this);\n }\n\n // creating UI components\n this.createEditor();\n this.createOutput();\n this.createControls();\n this.feedbackController.customizeUI();\n\n if ($(orig).data(\"caption\")) {\n this.caption = $(orig).data(\"caption\");\n } else {\n this.caption = \"MicroParsons\";\n }\n this.addCaption(\"runestone\");\n this.indicate_component_ready();\n\n // initializing functionalities for different feedback\n this.feedbackController.init();\n this.checkServer(\"hparsonsAnswer\", true);\n }\n\n processContent(code) {\n // todo: add errors when blocks are nonexistent (maybe in python)?\n this.hiddenPrefix = this.processSingleContent(code, \"--hiddenprefix--\");\n this.originalBlocks = this.processSingleContent(code, \"--blocks--\")\n .split(\"\\n\")\n .slice(1, -1);\n this.hiddenSuffix = this.processSingleContent(code, \"--hiddensuffix--\");\n this.unittest = this.processSingleContent(code, \"--unittest--\");\n }\n\n processSingleContent(code, delimitier) {\n let index = code.indexOf(delimitier);\n if (index > -1) {\n let content = code.substring(index + delimitier.length);\n let endIndex = content.indexOf(\"\\n--\");\n content =\n endIndex > -1 ? content.substring(0, endIndex + 1) : content;\n return content;\n }\n return undefined;\n }\n\n // copied from activecode, already modified to add parsons\n createEditor() {\n this.outerDiv = document.createElement(\"div\");\n $(this.origElem).replaceWith(this.outerDiv);\n this.outerDiv.id = `${this.divid}-container`;\n this.outerDiv.addEventListener(\"micro-parsons\", (ev) => {\n const eventListRunestone = [\"input\", \"reset\"];\n if (eventListRunestone.includes(ev.detail.type)) {\n // only log the events in the event list\n this.logHorizontalParsonsEvent(ev.detail);\n // when event is input or reset: clear previous feedback\n this.feedbackController.clearFeedback();\n }\n });\n const props = {\n selector: `#${this.divid}-container`,\n id: `${this.divid}-hparsons`,\n reuse: this.reuse,\n randomize: this.randomize,\n parsonsBlocks: [...this.originalBlocks],\n language: this.language,\n };\n InitMicroParsons(props);\n this.hparsonsInput = $(this.outerDiv).find(\"micro-parsons\")[0];\n }\n\n createOutput() {\n this.feedbackController.createOutput();\n }\n\n createControls() {\n var ctrlDiv = document.createElement(\"div\");\n $(ctrlDiv).addClass(\"hp_actions\");\n\n // Run Button\n this.runButton = document.createElement(\"button\");\n $(this.runButton).addClass(\"btn btn-success run-button\");\n ctrlDiv.appendChild(this.runButton);\n $(this.runButton).attr(\"type\", \"button\");\n $(this.runButton).text(\"Run\");\n var that = this;\n this.runButton.onclick = () => {\n that.feedbackController.runButtonHandler();\n that.setLocalStorage();\n };\n\n // Reset button\n var resetBtn;\n resetBtn = document.createElement(\"button\");\n $(resetBtn).text(\"Reset\");\n $(resetBtn).addClass(\"btn btn-warning run-button\");\n ctrlDiv.appendChild(resetBtn);\n this.resetButton = resetBtn;\n this.resetButton.onclick = () => {\n that.hparsonsInput.resetInput();\n that.setLocalStorage();\n that.feedbackController.reset();\n };\n $(resetBtn).attr(\"type\", \"button\");\n\n $(this.outerDiv).prepend(ctrlDiv);\n this.controlDiv = ctrlDiv;\n }\n\n // Return previous answers in local storage\n //\n localData() {\n var data = localStorage.getItem(this.storageId);\n if (data !== null) {\n if (data.charAt(0) == \"{\") {\n data = JSON.parse(data);\n } else {\n data = {};\n }\n } else {\n data = {};\n }\n return data;\n }\n // RunestoneBase: Sent when the server has data\n restoreAnswers(serverData) {\n // TODO: not tested with server data yet.\n // Server side data should be:\n /*\n {\n answer: Array, // list of answer block content\n count: ?number // number of previous attempts if block-based feedback\n }\n */\n if (serverData.answer) {\n this.hparsonsInput.restoreAnswer(serverData.answer.blocks);\n }\n if (serverData.count) {\n this.feedbackController.checkCount = serverData.count;\n }\n }\n // RunestoneBase: Load what is in local storage\n checkLocalStorage() {\n if (this.graderactive) {\n // Zihan: I think this means the component is still loading?\n return;\n }\n let localData = this.localData();\n if (localData.answer) {\n this.hparsonsInput.restoreAnswer(localData.answer);\n }\n if (localData.count) {\n this.feedbackController.checkCount = localData.count;\n }\n }\n // RunestoneBase: Set the state of the problem in local storage\n setLocalStorage(data) {\n let currentState = {};\n if (data == undefined) {\n currentState = {\n answer: this.hparsonsInput.getParsonsTextArray(),\n };\n if (this.isBlockGrading) {\n // if this is block grading, add number of previous attempts too\n currentState.count = this.feedbackController.checkCount;\n }\n } else {\n currentState = data;\n }\n localStorage.setItem(this.storageId, JSON.stringify(currentState));\n }\n\n logHorizontalParsonsEvent(hparsonsEvent) {\n let ev = {\n event: \"hparsons\",\n div_id: this.divid,\n act: JSON.stringify(hparsonsEvent),\n };\n this.logBookEvent(ev);\n }\n}\n\n/*=================================\n== Find the custom HTML tags and ==\n== execute our code on them ==\n=================================*/\n$(document).on(\"runestone:login-complete\", function () {\n $(\"[data-component=hparsons]\").each(function () {\n if ($(this).closest(\"[data-component=timedAssessment]\").length == 0) {\n // If this element exists within a timed component, don't render it here\n // try {\n hpList[this.id] = new HParsons({\n orig: this,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n });\n // } catch (err) {\n // console.log(`Error rendering ShortAnswer Problem ${this.id}\n // Details: ${err}`);\n // }\n }\n });\n});\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\nwindow.component_factory[\"hparsons\"] = function (opts) {\n return new HParsons(opts);\n};\n","$.i18n().load({\n en: {\n msg_parson_check_me: \"Check\",\n msg_parson_reset: \"Reset\",\n msg_parson_help: \"Help me\",\n msg_parson_too_short: \"Your answer is too short. Add more blocks.\",\n msg_parson_drag_from_here: \"Drag from here\",\n msg_parson_drag_to_here: \"Drop blocks here\",\n msg_parson_correct_first_try:\n \"Perfect! It took you only one try to solve this. Great job!\",\n msg_parson_correct:\n \"Perfect! It took you $1 tries to solve this. Click Reset to try to solve it in one attempt.\",\n msg_parson_correct_runnable:\n \"Click Run below to test out your solution.\",\n msg_parson_wrong_indent:\n \"This block is not indented correctly. Either indent it more by dragging it right or reduce the indention by dragging it left.\",\n msg_parson_wrong_indents:\n \"These blocks are not indented correctly. To indent a block more, drag it to the right. To reduce the indention, drag it to the left.\",\n msg_parson_wrong_order:\n \"Highlighted blocks in your answer are wrong or are in the wrong order. This can be fixed by moving, removing, or replacing highlighted blocks.\",\n msg_parson_arrow_navigate:\n \"Arrow keys to navigate. Space to select / deselect block to move.\",\n msg_parson_help_info:\n \"Click on the Help Me button if you want to make the problem easier\",\n msg_parson_not_solution:\n \"Disabled an unneeded code block (one that is not part of the solution).\",\n msg_parson_provided_indent: \"Provided the indentation.\",\n msg_parson_combined_blocks: \"Combined two code blocks into one.\",\n msg_parson_remove_incorrect:\n \"Will remove an incorrect code block from answer area\",\n msg_parson_will_combine: \"Will combine two blocks\",\n msg_parson_atleast_three_attempts:\n \"You must make at least three distinct full attempts at a solution before you can get help\",\n msg_parson_three_blocks_left:\n \"There are only 3 correct blocks left. You should be able to put them in order\",\n msg_parson_will_provide_indent: \"Will provide indentation\",\n },\n});\n","$.i18n().load({\n \"pt-br\": {\n msg_parson_check_me: \"Verificar\",\n msg_parson_reset: \"Resetar\",\n msg_parson_help:\"Ajuda\",\n msg_parson_too_short: \"Seu programa é muito curto. Adicione mais blocos.\",\n msg_parson_drag_from_here: \"Arraste daqui\",\n msg_parson_drag_to_here: \"Largue os blocos aqui\",\n msg_parson_correct_first_try:\n \"Perfeito! Você levou apenas uma tentativa para resolver. Bom trabalho!\",\n msg_parson_correct:\n \"Perfeito! Você levou $1 tentativas para resolver. Clique em Resetar para tentar resolver em uma tentativa.\" ,\n msg_parson_wrong_indent:\n \"Este bloco não está indentado corretamente. Indente mais arrastando-o para a direita ou reduza a indentação arrastando para a esquerda.\",\n msg_parson_wrong_indents:\n \"Estes blocos não estão indentados corretamente. Para indentar mais, arraste o bloco para a direita. Para reduzir a indentação, arraste para a esquerda.\",\n msg_parson_wrong_order:\n \"Blocos destacados no seu programa estão errados ou estão na ordem errada. Isso pode ser resolvido movendo, excluindo ou substituindo os blocos destacados.\",\n msg_parson_arrow_navigate:\n \"Use as teclas de setas para navegar. Espaço para selecionar/ desmarcar blocos para mover.\",\n msg_parson_help_info:\n \"Clique no botão Ajuda se você quiser facilitar o problema\",\n msg_parson_not_solution:\n \"Foi desabilitado um bloco de código desnecessário (que não faz parte da solução).\",\n msg_parson_provided_indent:\"Foi fornecida a indentação.\",\n msg_parson_combined_blocks:\"Dois blocos de códigos foram combinados em um.\",\n msg_parson_remove_incorrect:\n \"Será removido um bloco de código incorreto da área de resposta\",\n msg_parson_will_combine:\"Serão combinados dois blocos\",\n msg_parson_atleast_three_attempts:\n \"Você deve tentar pelo menos três vezes antes de pedir ajuda\",\n msg_parson_three_blocks_left:\n \"Restam apenas 3 blocos corretos. Você deve colocá-los em ordem\",\n msg_parson_will_provide_indent: \"Será fornecida a indentação\"\n },\n});\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","HParsonsFeedback","constructor","hparsons","this","percent","createOutput","console","log","runButtonHandler","customizeUI","init","clearFeedback","reset","BlockBasedGrader","problem","inverseLISIndices","arr","allSubsequences","i","length","subsequenceForCurrent","current","lastElementAdded","j","subsequent","push","longestSubsequence","longestSubsequenceLength","subs","indexes","lIndex","grade","correctLines","percentLines","state","solutionLines","solution","answerLines","answer","Math","min","max","correctLength","isCorrectOrder","solutionLength","loopLimit","calculatePercent","graderState","numLines","lines","numCorrectBlocks","BlockFeedback","messageDiv","document","createElement","outerDiv","appendChild","$","runButton","text","checkCount","solved","grader","solutionBlocks","blockAnswer","originalBlocks","answerArea","hparsonsInput","querySelector","checkCurrentAnswer","logCurrentAnswer","renderFeedback","act","scheme","correct","getParsonsTextArray","logData","event","div_id","divid","JSON","stringify","logBookEvent","prop","feedbackArea","addClass","fadeIn","attr","html","i18n","answerBlocks","children","inSolution","inSolutionIndexes","notInSolution","block","index","indexOf","textContent","lisIndexes","removeClass","childNodes","hide","allDburls","SQLFeedback","outDiv","output","css","clearDiv","testResult","show","bookprefix","fnprefix","eBookConfig","useRunestoneServices","window","location","search","includes","basecourse","SQLconfig","locateFile","filename","self","then","SQL","dburl","startsWith","buttonText","status","xWaitFor","done","db","dbObject","removeAttr","jQuery","Deferred","xhr","XMLHttpRequest","open","responseType","onload","uInt8Array","Uint8Array","response","Database","send","disabled","runProg","respDiv","getElementById","parentElement","removeChild","query","buildProg","executionSuccessFlag","prefix","prefixresults","executeIteratedStatements","iterateStatements","at","visualizeResults","results","input","suffix","suffixresults","unittest","autograde","passed","failed","NaN","unit_results","Promise","it","statement","columns","getColumnNames","data","step","get","values","rowcount","getNormalizedSQL","substr","toLowerCase","operation","getRowsModified","message","toString","sql","getRemainingSQL","container","resultArray","devNote","section","setAttribute","messageBox","r","tableDiv","maxHeight","createTable","rmsg","msg","op","charAt","prog","hiddenPrefix","join","hiddenSuffix","blocks","result_table","tests","split","result","filter","s","test","wlist","shift","loc","oper","expected","row","col","testOneAssert","pct","toLocaleString","undefined","maximumFractionDigits","actual","operand1","operand2","tableData","trimRows","hot","width","height","autoRowSize","autoColumnSize","useHeaders","rowHeaders","colHeaders","editor","maxRows","filters","dropdownMenu","licenseKey","actualHeight","getRowHeight","updateSettings","hpList","HParsons","opts","super","orig","find","reuse","randomize","isBlockGrading","language","containerDiv","storageId","localStorageKey","origElem","origText","saveButton","loadButton","controlDiv","processContent","feedbackController","createEditor","createControls","caption","addCaption","indicate_component_ready","checkServer","processSingleContent","slice","delimitier","content","substring","endIndex","replaceWith","addEventListener","ev","detail","type","logHorizontalParsonsEvent","props","selector","parsonsBlocks","ctrlDiv","resetBtn","that","onclick","setLocalStorage","resetButton","resetInput","prepend","localData","localStorage","getItem","parse","restoreAnswers","serverData","restoreAnswer","count","checkLocalStorage","graderactive","currentState","setItem","hparsonsEvent","on","each","closest","component_factory","load","en","msg_parson_check_me","msg_parson_reset","msg_parson_help","msg_parson_too_short","msg_parson_drag_from_here","msg_parson_drag_to_here","msg_parson_correct_first_try","msg_parson_correct","msg_parson_correct_runnable","msg_parson_wrong_indent","msg_parson_wrong_indents","msg_parson_wrong_order","msg_parson_arrow_navigate","msg_parson_help_info","msg_parson_not_solution","msg_parson_provided_indent","msg_parson_combined_blocks","msg_parson_remove_incorrect","msg_parson_will_combine","msg_parson_atleast_three_attempts","msg_parson_three_blocks_left","msg_parson_will_provide_indent"],"sourceRoot":""}