{"version":3,"file":"13.ad310dece9181241.bundle.js","mappings":"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","sources":["webpack://WebComponents/./node_modules/codemirror/mode/gas/gas.js","webpack://WebComponents/./runestone/lp/js/lp.js"],"sourcesContent":["// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n mod(require(\"../../lib/codemirror\"));\n else if (typeof define == \"function\" && define.amd) // AMD\n define([\"../../lib/codemirror\"], mod);\n else // Plain browser env\n mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"gas\", function(_config, parserConfig) {\n 'use strict';\n\n // If an architecture is specified, its initialization function may\n // populate this array with custom parsing functions which will be\n // tried in the event that the standard functions do not find a match.\n var custom = [];\n\n // The symbol used to start a line comment changes based on the target\n // architecture.\n // If no architecture is pased in \"parserConfig\" then only multiline\n // comments will have syntax support.\n var lineCommentStartSymbol = \"\";\n\n // These directives are architecture independent.\n // Machine specific directives should go in their respective\n // architecture initialization function.\n // Reference:\n // http://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops\n var directives = {\n \".abort\" : \"builtin\",\n \".align\" : \"builtin\",\n \".altmacro\" : \"builtin\",\n \".ascii\" : \"builtin\",\n \".asciz\" : \"builtin\",\n \".balign\" : \"builtin\",\n \".balignw\" : \"builtin\",\n \".balignl\" : \"builtin\",\n \".bundle_align_mode\" : \"builtin\",\n \".bundle_lock\" : \"builtin\",\n \".bundle_unlock\" : \"builtin\",\n \".byte\" : \"builtin\",\n \".cfi_startproc\" : \"builtin\",\n \".comm\" : \"builtin\",\n \".data\" : \"builtin\",\n \".def\" : \"builtin\",\n \".desc\" : \"builtin\",\n \".dim\" : \"builtin\",\n \".double\" : \"builtin\",\n \".eject\" : \"builtin\",\n \".else\" : \"builtin\",\n \".elseif\" : \"builtin\",\n \".end\" : \"builtin\",\n \".endef\" : \"builtin\",\n \".endfunc\" : \"builtin\",\n \".endif\" : \"builtin\",\n \".equ\" : \"builtin\",\n \".equiv\" : \"builtin\",\n \".eqv\" : \"builtin\",\n \".err\" : \"builtin\",\n \".error\" : \"builtin\",\n \".exitm\" : \"builtin\",\n \".extern\" : \"builtin\",\n \".fail\" : \"builtin\",\n \".file\" : \"builtin\",\n \".fill\" : \"builtin\",\n \".float\" : \"builtin\",\n \".func\" : \"builtin\",\n \".global\" : \"builtin\",\n \".gnu_attribute\" : \"builtin\",\n \".hidden\" : \"builtin\",\n \".hword\" : \"builtin\",\n \".ident\" : \"builtin\",\n \".if\" : \"builtin\",\n \".incbin\" : \"builtin\",\n \".include\" : \"builtin\",\n \".int\" : \"builtin\",\n \".internal\" : \"builtin\",\n \".irp\" : \"builtin\",\n \".irpc\" : \"builtin\",\n \".lcomm\" : \"builtin\",\n \".lflags\" : \"builtin\",\n \".line\" : \"builtin\",\n \".linkonce\" : \"builtin\",\n \".list\" : \"builtin\",\n \".ln\" : \"builtin\",\n \".loc\" : \"builtin\",\n \".loc_mark_labels\" : \"builtin\",\n \".local\" : \"builtin\",\n \".long\" : \"builtin\",\n \".macro\" : \"builtin\",\n \".mri\" : \"builtin\",\n \".noaltmacro\" : \"builtin\",\n \".nolist\" : \"builtin\",\n \".octa\" : \"builtin\",\n \".offset\" : \"builtin\",\n \".org\" : \"builtin\",\n \".p2align\" : \"builtin\",\n \".popsection\" : \"builtin\",\n \".previous\" : \"builtin\",\n \".print\" : \"builtin\",\n \".protected\" : \"builtin\",\n \".psize\" : \"builtin\",\n \".purgem\" : \"builtin\",\n \".pushsection\" : \"builtin\",\n \".quad\" : \"builtin\",\n \".reloc\" : \"builtin\",\n \".rept\" : \"builtin\",\n \".sbttl\" : \"builtin\",\n \".scl\" : \"builtin\",\n \".section\" : \"builtin\",\n \".set\" : \"builtin\",\n \".short\" : \"builtin\",\n \".single\" : \"builtin\",\n \".size\" : \"builtin\",\n \".skip\" : \"builtin\",\n \".sleb128\" : \"builtin\",\n \".space\" : \"builtin\",\n \".stab\" : \"builtin\",\n \".string\" : \"builtin\",\n \".struct\" : \"builtin\",\n \".subsection\" : \"builtin\",\n \".symver\" : \"builtin\",\n \".tag\" : \"builtin\",\n \".text\" : \"builtin\",\n \".title\" : \"builtin\",\n \".type\" : \"builtin\",\n \".uleb128\" : \"builtin\",\n \".val\" : \"builtin\",\n \".version\" : \"builtin\",\n \".vtable_entry\" : \"builtin\",\n \".vtable_inherit\" : \"builtin\",\n \".warning\" : \"builtin\",\n \".weak\" : \"builtin\",\n \".weakref\" : \"builtin\",\n \".word\" : \"builtin\"\n };\n\n var registers = {};\n\n function x86(_parserConfig) {\n lineCommentStartSymbol = \"#\";\n\n registers.ax = \"variable\";\n registers.eax = \"variable-2\";\n registers.rax = \"variable-3\";\n\n registers.bx = \"variable\";\n registers.ebx = \"variable-2\";\n registers.rbx = \"variable-3\";\n\n registers.cx = \"variable\";\n registers.ecx = \"variable-2\";\n registers.rcx = \"variable-3\";\n\n registers.dx = \"variable\";\n registers.edx = \"variable-2\";\n registers.rdx = \"variable-3\";\n\n registers.si = \"variable\";\n registers.esi = \"variable-2\";\n registers.rsi = \"variable-3\";\n\n registers.di = \"variable\";\n registers.edi = \"variable-2\";\n registers.rdi = \"variable-3\";\n\n registers.sp = \"variable\";\n registers.esp = \"variable-2\";\n registers.rsp = \"variable-3\";\n\n registers.bp = \"variable\";\n registers.ebp = \"variable-2\";\n registers.rbp = \"variable-3\";\n\n registers.ip = \"variable\";\n registers.eip = \"variable-2\";\n registers.rip = \"variable-3\";\n\n registers.cs = \"keyword\";\n registers.ds = \"keyword\";\n registers.ss = \"keyword\";\n registers.es = \"keyword\";\n registers.fs = \"keyword\";\n registers.gs = \"keyword\";\n }\n\n function armv6(_parserConfig) {\n // Reference:\n // http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf\n // http://infocenter.arm.com/help/topic/com.arm.doc.ddi0301h/DDI0301H_arm1176jzfs_r0p7_trm.pdf\n lineCommentStartSymbol = \"@\";\n directives.syntax = \"builtin\";\n\n registers.r0 = \"variable\";\n registers.r1 = \"variable\";\n registers.r2 = \"variable\";\n registers.r3 = \"variable\";\n registers.r4 = \"variable\";\n registers.r5 = \"variable\";\n registers.r6 = \"variable\";\n registers.r7 = \"variable\";\n registers.r8 = \"variable\";\n registers.r9 = \"variable\";\n registers.r10 = \"variable\";\n registers.r11 = \"variable\";\n registers.r12 = \"variable\";\n\n registers.sp = \"variable-2\";\n registers.lr = \"variable-2\";\n registers.pc = \"variable-2\";\n registers.r13 = registers.sp;\n registers.r14 = registers.lr;\n registers.r15 = registers.pc;\n\n custom.push(function(ch, stream) {\n if (ch === '#') {\n stream.eatWhile(/\\w/);\n return \"number\";\n }\n });\n }\n\n var arch = (parserConfig.architecture || \"x86\").toLowerCase();\n if (arch === \"x86\") {\n x86(parserConfig);\n } else if (arch === \"arm\" || arch === \"armv6\") {\n armv6(parserConfig);\n }\n\n function nextUntilUnescaped(stream, end) {\n var escaped = false, next;\n while ((next = stream.next()) != null) {\n if (next === end && !escaped) {\n return false;\n }\n escaped = !escaped && next === \"\\\\\";\n }\n return escaped;\n }\n\n function clikeComment(stream, state) {\n var maybeEnd = false, ch;\n while ((ch = stream.next()) != null) {\n if (ch === \"/\" && maybeEnd) {\n state.tokenize = null;\n break;\n }\n maybeEnd = (ch === \"*\");\n }\n return \"comment\";\n }\n\n return {\n startState: function() {\n return {\n tokenize: null\n };\n },\n\n token: function(stream, state) {\n if (state.tokenize) {\n return state.tokenize(stream, state);\n }\n\n if (stream.eatSpace()) {\n return null;\n }\n\n var style, cur, ch = stream.next();\n\n if (ch === \"/\") {\n if (stream.eat(\"*\")) {\n state.tokenize = clikeComment;\n return clikeComment(stream, state);\n }\n }\n\n if (ch === lineCommentStartSymbol) {\n stream.skipToEnd();\n return \"comment\";\n }\n\n if (ch === '\"') {\n nextUntilUnescaped(stream, '\"');\n return \"string\";\n }\n\n if (ch === '.') {\n stream.eatWhile(/\\w/);\n cur = stream.current().toLowerCase();\n style = directives[cur];\n return style || null;\n }\n\n if (ch === '=') {\n stream.eatWhile(/\\w/);\n return \"tag\";\n }\n\n if (ch === '{') {\n return \"bracket\";\n }\n\n if (ch === '}') {\n return \"bracket\";\n }\n\n if (/\\d/.test(ch)) {\n if (ch === \"0\" && stream.eat(\"x\")) {\n stream.eatWhile(/[0-9a-fA-F]/);\n return \"number\";\n }\n stream.eatWhile(/\\d/);\n return \"number\";\n }\n\n if (/\\w/.test(ch)) {\n stream.eatWhile(/\\w/);\n if (stream.eat(\":\")) {\n return 'tag';\n }\n cur = stream.current().toLowerCase();\n style = registers[cur];\n return style || null;\n }\n\n for (var i = 0; i < custom.length; i++) {\n style = custom[i](ch, stream, state);\n if (style) {\n return style;\n }\n }\n },\n\n lineComment: lineCommentStartSymbol,\n blockCommentStart: \"/*\",\n blockCommentEnd: \"*/\"\n };\n});\n\n});\n","// .. Copyright (C) 2017 Bryan A. Jones.\n//\n// This file is part of E-Book Binder.\n//\n// E-Book Binder is free software: you can redistribute it and/or modify it\n// under the terms of the GNU General Public License as published by the Free\n// Software Foundation, either version 3 of the License, or (at your option)\n// any later version.\n//\n// E-Book Binder is distributed in the hope that it will be useful, but WITHOUT\n// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n// details.\n//\n// You should have received a copy of the GNU General Public License along\n// with E-Book Binder. If not, see .\n//\n// .. highlight:: javascript\n//\n// **************************************************************************************\n// |docname| - JavaScript functions supporting immediate feedback to in-browser questions\n// **************************************************************************************\n\n\"use strict\";\n\nimport RunestoneBase from \"../../common/js/runestonebase\";\nimport CodeMirror from \"codemirror\";\nimport \"codemirror/mode/gas/gas.js\";\nimport \"codemirror/mode/python/python.js\";\nimport \"codemirror/mode/javascript/javascript.js\";\nimport \"codemirror/mode/sql/sql.js\";\nimport \"codemirror/mode/clike/clike.js\";\nimport \"codemirror/mode/octave/octave.js\";\nimport \"codemirror/lib/codemirror.css\";\n\n// Constructor\n// ===========\n// Object containing all instances of LP problems. (I assume there is just one per page.)\nwindow.LPList = {};\n\n// FITB constructor\nclass LP extends RunestoneBase {\n constructor(opts) {\n super(opts);\n this.useRunestoneServices = opts.useRunestoneServices;\n // Store the DOM element (the input) for the \"Test\" button.\n this.element = opts.orig;\n this.containerDiv = this.element;\n this.divid = this.element.id;\n // Store the DOM element (the textarea) where compile results will be displayed.\n this.resultElement = $(this.element).siblings(\".lp-result\");\n // Store the DOM element (a div) where feedback will be displayed.\n this.feedbackElement = $(this.element)\n .siblings(\".lp-feedback\")\n .children(\"div\");\n // Use a nice editor.\n let that = this;\n this.textAreas = [];\n $(\".code_snippet\").each(function (index, element) {\n let editor = CodeMirror.fromTextArea(element, {\n lineNumbers: true,\n mode: $(that.element).attr(\"data-lang\"),\n indentUnit: 4,\n matchBrackets: true,\n autoMatchParens: true,\n extraKeys: { Tab: \"indentMore\", \"Shift-Tab\": \"indentLess\" },\n });\n // Make the editor resizable.\n $(editor.getWrapperElement()).resizable({\n resize: function () {\n editor.setSize($(this).width(), $(this).height());\n editor.refresh();\n },\n });\n // Keep track of it.\n that.textAreas.push(editor);\n });\n // Handle clicks to the \"Save and run\" button.\n $(this.element).click((eventObject) =>\n that.onSaveAndRun(eventObject).then(null)\n );\n this.checkServer(\"lp_build\", true);\n }\n\n // Data structures:\n //\n // Format of data stored locally and on the server*::\n //\n // - answer: JSON-encoded string containing {\n // code_snippets: [\n // str, snippet 1, ...\n // ],\n // (optional) resultString: str, output from build.\n // }\n // - correct: (optional) float, a percentage from 0 to 100.\n // - timestamp: date/time in UTC.\n //\n // Format of data sent to the server*::\n //\n // - answer: JSON-encoded string containing only the code_snippets\n // array, not resultString. There's no point in sending the\n // previous resultString, since the server will compute a new\n // one.\n // - event: \"lp_build\"\n // - act: \"\", since the useinfo table requires it. It's not\n // otherwise used.\n // - path: str, giving the relative path to this web page. Used\n // to find the source code which produced this page in order\n // to do snippet replacement.\n // - div_id: str, the div_id of this component.\n //\n // Format of data received from the server::\n //\n // If there was an error:\n // - errors: [\n // str, error message 1, ...\n // ]\n //\n // Otherwise:\n // - answer: JSON-encoded string containing {\n // resultString: str, output from build.\n // Note that the code_snippets aren't sent back, to save\n // bandwidth.\n // }\n // - correct: float, a percentage from 0 to 100.\n // - timestamp: str, the server's timestamp.\n //\n // * For simplicity, I omitted the common fields (course, etc.) and discussed only fields unique to this component.\n\n async onSaveAndRun(_eventObject) {\n // Prevent multiple click while the build is running.\n $(this.element).attr(\"disabled\", true);\n $(this.resultElement).val(\"Building...\");\n $(this.feedbackElement).text(\"\").attr(\"\");\n // Since the Save and run button was clicked, we assume the code snippets have been changed; therefore, don't store ``correct`` or ``answer.resultString`` because they are out of date.\n //\n // Store the answer as a string, since this is what goes in to / comes out from the database. We have to translate this back to a data structure when restoring from the db or local storage.\n let code_snippets = this.textareasToData();\n this.setLocalStorage({\n answer: JSON.stringify({ code_snippets: code_snippets }),\n timestamp: new Date(),\n });\n // Store the answer that the server returns, which includes additional data (correct/incorrect, feedback from the build, etc.).\n let serverAnswer;\n try {\n serverAnswer = await this.logBookEvent({\n event: \"lp_build\",\n answer: JSON.stringify(code_snippets),\n // This is required by useinfo, but not used.\n act: \"\",\n // Find the relative path to this web page. Slice off the leading ``/``.\n path: window.location.href\n .replace(eBookConfig.app, \"\")\n .slice(1),\n div_id: this.divid,\n });\n } catch (err) {\n $(this.feedbackElement)\n .val(`Error contacting server: {err}.`)\n .attr(\"class\", \"alert alert-danger\");\n return;\n } finally {\n // Always re-enable the button after the server responds.\n $(this.element).attr(\"disabled\", false);\n }\n serverAnswer = serverAnswer.detail;\n // The server doesn't return the ``code_snippets``, for efficiency. Include those. If an error was returned, note that there is no ``answer`` yet.\n if (!(\"answer\" in serverAnswer)) {\n serverAnswer.answer = {};\n }\n serverAnswer.answer.code_snippets = code_snippets;\n this.displayAnswer(serverAnswer);\n // JSON-encode the answer for storage.\n serverAnswer.answer = JSON.stringify(serverAnswer.answer);\n this.setLocalStorage(serverAnswer);\n }\n\n // Given a single answer, display it.\n displayAnswer(data) {\n if (\"errors\" in data) {\n // Display any server-side errors. If this key is present, other keys won't be.\n $(this.feedbackElement)\n .text(data.errors.join(\"
\"))\n .attr(\"class\", \"alert alert-danger\");\n } else {\n // Display and color-code the results.\n $(this.resultElement).val(data.answer.resultString);\n if (data.correct == null) {\n $(this.feedbackElement)\n .text(\"Response recorded.\")\n .attr(\"class\", \"alert alert-success\");\n } else if (data.correct >= 100) {\n $(this.feedbackElement)\n .text(\"Correct. Grade: \" + data.correct + \"%\")\n .attr(\"class\", \"alert alert-success\");\n } else {\n $(this.feedbackElement)\n .text(\"Incorrect. Grade: \" + data.correct + \"%\")\n .attr(\"class\", \"alert alert-danger\");\n }\n // Scroll to the bottom of the results.\n $(this.resultElement).scrollTop(this.resultElement[0].scrollHeight);\n }\n }\n\n // Store the contents of each textarea into an array of strings.\n textareasToData() {\n return $.map(this.textAreas, function (obj, index) {\n // See https://codemirror.net/doc/manual.html#api.\n return obj.getValue();\n });\n }\n\n // Store an array of strings in ``data.code_snippets`` into each textarea.\n dataToTextareas(data) {\n // Find all code snippet textareas.\n $(this.textAreas).each(function (index, value) {\n // Silently ignore if ``data.answer.code_snippets`` or ``data.answer.code_snippets[index]`` isn't defined.\n value.setValue((data.answer.code_snippets || \"\")[index] || \"\");\n });\n }\n\n // Restore answers from storage retrieval done in RunestoneBase.\n restoreAnswers(data) {\n // We store the answer as a JSON-encoded string in the db / local storage. Restore the actual data structure from it.\n data.answer = JSON.parse(data.answer);\n this.dataToTextareas(data);\n this.displayAnswer(data);\n }\n\n checkLocalStorage() {\n // Loads previous answers from local storage if they exist.\n var storedData;\n if (localStorage.length > 0) {\n var key = this.localStorageKey();\n var ex = localStorage.getItem(key);\n if (ex !== null) {\n try {\n storedData = JSON.parse(ex);\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(key);\n return;\n }\n this.restoreAnswers(storedData);\n }\n }\n }\n\n setLocalStorage(data) {\n localStorage.setItem(this.localStorageKey(), JSON.stringify(data));\n }\n}\n\n// Initialization\n// ==============\n// Find the custom HTML tags and execute our code on them.\n$(document).on(\"runestone:login-complete\", function () {\n $(\"[data-component=lp_build]\").each(function (index) {\n try {\n window.LPList[this.id] = new LP({\n orig: this,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n });\n } catch (err) {\n console.log(`Error rendering LP Problem ${this.id}`);\n }\n });\n});\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\nwindow.component_factory[\"lp_build\"] = function (opts) {\n return new LP(opts);\n};\n"],"names":["CodeMirror","defineMode","_config","parserConfig","custom","lineCommentStartSymbol","directives","registers","arch","architecture","toLowerCase","clikeComment","stream","state","ch","maybeEnd","next","tokenize","ax","eax","rax","bx","ebx","rbx","cx","ecx","rcx","dx","edx","rdx","si","esi","rsi","di","edi","rdi","sp","esp","rsp","bp","ebp","rbp","ip","eip","rip","cs","ds","ss","es","fs","gs","syntax","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","lr","pc","r13","r14","r15","push","eatWhile","startState","token","eatSpace","style","cur","eat","skipToEnd","end","escaped","nextUntilUnescaped","current","test","i","length","lineComment","blockCommentStart","blockCommentEnd","mod","window","LPList","LP","constructor","opts","super","this","useRunestoneServices","element","orig","containerDiv","divid","id","resultElement","$","siblings","feedbackElement","children","that","textAreas","each","index","editor","lineNumbers","mode","attr","indentUnit","matchBrackets","autoMatchParens","extraKeys","Tab","getWrapperElement","resizable","resize","setSize","width","height","refresh","click","eventObject","onSaveAndRun","then","checkServer","async","_eventObject","val","text","serverAnswer","code_snippets","textareasToData","setLocalStorage","answer","JSON","stringify","timestamp","Date","logBookEvent","event","act","path","location","href","replace","eBookConfig","app","slice","div_id","err","detail","displayAnswer","data","errors","join","resultString","correct","scrollTop","scrollHeight","map","obj","getValue","dataToTextareas","value","setValue","restoreAnswers","parse","checkLocalStorage","storedData","localStorage","key","localStorageKey","ex","getItem","console","log","message","removeItem","setItem","document","on","component_factory"],"sourceRoot":""}