{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/projects/roman_calculator.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","calculator","document","querySelector","display","keys","memory","buttons","justEvaluated","evaluate","roman1","roman2","operator","num1","romanToTen","num2","tenToRoman","baseRoman","tempTotal","current","total","length","romanCharToTen","charAt","romanChar","baseTen","fracPart","Math","floor","ceil","addEventListener","buttonClicked","target","matches","input","id","classCheck","className","getElementById","textContent","currentDisplay","innerHTML","root","sqrt","sin","cos","tan"],"mappings":"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","file":"js/projects/roman_calculator-a87d471a8bb11c70ff7f.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 59);\n","const calculator = document.querySelector(\".calculator\");\nconst display = document.querySelector(\".calculatorDisplay\");\nconst keys = calculator.querySelector(\".calculatorKeys\");\nvar memory = [0, 0, \"null\"];\nvar buttons = 1;\n\nvar justEvaluated = false;\n\nkeys.addEventListener(\"click\", buttonPress);\n\nfunction buttonPress(buttonClicked) {\n //if we've clicked a button, save which one it is\n if (buttonClicked.target.matches(\"button\")) {\n var input = buttonClicked.target.id;\n var classCheck = buttonClicked.target.className;\n\n //Now we act based on which button it is\n //Cheating, all the number buttons have 1-character long ids\n if (input.length == 1) {\n //If the display is 0, change it to the value pressed, else concatenate to the current display\n if (document.getElementById(\"display\").textContent == \"Nulla\") {\n display.textContent = input;\n } else {\n var currentDisplay = display.textContent;\n display.textContent = currentDisplay + input;\n }\n } else if (input == \"switch\") {\n switchButtons();\n } else if (input == \"clear\") {\n //When we clear, we also need to clear the memory\n display.textContent = \"Nulla\";\n memory = [0, 0, \"null\"];\n justEvaluated = false;\n } else if (input == \"sqrt\") {\n var currentDisplay = romanToTen(display.textContent);\n var root = Math.sqrt(currentDisplay);\n display.textContent = tenToRoman(root);\n } else if (input == \"sin\") {\n var currentDisplay = romanToTen(display.textContent);\n var sin = Math.sin(currentDisplay);\n display.textContent = tenToRoman(sin);\n } else if (input == \"cos\") {\n var currentDisplay = romanToTen(display.textContent);\n var cos = Math.cos(currentDisplay);\n display.textContent = tenToRoman(cos);\n } else if (input == \"tan\") {\n var currentDisplay = romanToTen(display.textContent);\n var tan = Math.tan(currentDisplay);\n display.textContent = tenToRoman(tan);\n } else if (classCheck == \"keyOperator\") {\n if (memory[0] == 0 || justEvaluated == true) {\n memory[0] = display.textContent;\n justEvaluated = false;\n } else {\n memory[0] = evaluate(memory[0], display.textContent, memory[2]);\n }\n display.textContent = \"Nulla\";\n memory[2] = input;\n } else if (input == \"equals\") {\n memory[1] = display.textContent;\n var baseRoman = evaluate(memory[0], memory[1], memory[2]);\n memory[0] = baseRoman;\n display.textContent = baseRoman;\n justEvaluated = true;\n }\n\n }\n}\n\nfunction evaluate(roman1, roman2, operator) {\n var num1 = romanToTen(roman1);\n var num2 = romanToTen(roman2);\n\n if (operator == \"add\") {\n return tenToRoman(num1 + num2);\n } else if (operator == \"subtract\") {\n return tenToRoman(num1 - num2);\n } else if (operator == \"multiply\") {\n return tenToRoman(num1 * num2);\n } else if (operator == \"divide\") {\n return tenToRoman(num1 / num2);\n } else if (operator == \"power\") {\n return tenToRoman(num1 ** num2);\n }\n}\n\nfunction romanToTen(baseRoman) {\n if (baseRoman == \"Nulla\") {\n return 0;\n } else {\n var tempTotal = 0;\n var current = 0;\n var total = 0;\n\n for (i = 0; i < baseRoman.length; i++) {\n current = romanCharToTen(baseRoman.charAt(i));\n tempTotal += current;\n\n if (i == baseRoman.length - 1) {\n total += tempTotal;\n } else if (current > romanCharToTen(baseRoman.charAt(i + 1))) {\n total += tempTotal;\n tempTotal = 0;\n } else if (current < romanCharToTen(baseRoman.charAt(i + 1))) {\n total -= tempTotal;\n tempTotal = 0;\n }\n }\n\n return total;\n }\n}\n\nfunction romanCharToTen(romanChar) {\n switch (romanChar) {\n case \"M\":\n return 1000;\n break;\n case \"D\":\n return 500;\n break;\n case \"C\":\n return 100;\n break;\n case \"L\":\n return 50;\n break;\n case \"X\":\n return 10;\n break;\n case \"V\":\n return 5;\n break;\n case \"I\":\n return 1;\n break;\n default:\n return 1;\n }\n}\n\n\nfunction tenToRoman(baseTen) {\n baseRoman = \"\";\n\n if (baseTen <= (1/24)) {\n return baseRoman = \"Nulla\";\n }\n\n var fracPart = baseTen - Math.floor(baseTen);\n\n if (fracPart > (23/24)) {\n baseTen = Math.ceil(baseTen);\n }\n\n while (baseTen >= 1000) {\n baseRoman += \"M\";\n baseTen -= 1000;\n }\n if (baseTen >= 900) {\n baseRoman += \"CM\";\n baseTen -= 900;\n } else {\n while (baseTen >= 500) {\n baseRoman += \"D\";\n baseTen -= 500;\n }\n }\n if (baseTen >= 400) {\n baseRoman += \"CD\";\n baseTen -= 400;\n } else {\n while (baseTen >= 100) {\n baseRoman += \"C\";\n baseTen -= 100;\n }\n }\n if (baseTen >= 90) {\n baseRoman += \"XC\";\n baseTen -= 90;\n } else {\n while (baseTen >= 50) {\n baseRoman += \"L\";\n baseTen -= 50;\n }\n }\n if (baseTen >= 40) {\n baseRoman += \"XL\";\n baseTen -= 40;\n } else {\n while (baseTen >= 10) {\n baseRoman += \"X\";\n baseTen -= 10;\n }\n }\n if (baseTen >= 9) {\n baseRoman += \"IX\";\n baseTen -= 9;\n } else {\n while (baseTen >= 5) {\n baseRoman += \"V\";\n baseTen -= 5;\n }\n }\n if (baseTen >= 4) {\n baseRoman += \"IV\";\n } else {\n while (baseTen >= 1) {\n baseRoman += \"I\";\n baseTen -= 1;\n }\n }\n\n fracPart += 1/24;\n\n if (fracPart > 0.5) {\n baseRoman += \"s\";\n fracPart -= 0.5;\n }\n\n if (fracPart > (5/12)) {\n baseRoman += \"\\u{02059}\";\n } else if (fracPart > (4/12)) {\n baseRoman += \"\\u{02237}\";\n } else if (fracPart > (3/12)) {\n baseRoman += \"\\u{02234}\";\n } else if (fracPart > (2/12)) {\n baseRoman += \"\\u{03A}\";\n } else if (fracPart > (1/12)) {\n baseRoman += \"\\u{0B7}\";\n }\n\n return baseRoman;\n}\n\nfunction switchButtons() {\n if (buttons == 1) {\n document.getElementById(\"add\").innerHTML = \"sin\";\n document.getElementById(\"add\").id = \"sin\";\n\n document.getElementById(\"multiply\").innerHTML = \"cos\";\n document.getElementById(\"multiply\").id = \"cos\";\n\n document.getElementById(\"empty\").innerHTML = \"tan\";\n document.getElementById(\"empty\").id = \"tan\";\n\n document.getElementById(\"subtract\").innerHTML = \"√\";\n document.getElementById(\"subtract\").id = \"sqrt\";\n\n document.getElementById(\"divide\").innerHTML = \"^\";\n document.getElementById(\"divide\").id = \"power\";\n\n buttons = 2;\n } else {\n document.getElementById(\"sin\").innerHTML = \"+\";\n document.getElementById(\"sin\").id = \"add\";\n\n document.getElementById(\"cos\").innerHTML = \"×\";\n document.getElementById(\"cos\").id = \"multiply\";\n\n document.getElementById(\"tan\").innerHTML = \"\";\n document.getElementById(\"tan\").id = \"empty\";\n\n document.getElementById(\"sqrt\").innerHTML = \"-\";\n document.getElementById(\"sqrt\").id = \"subtract\";\n\n document.getElementById(\"power\").innerHTML = \"÷\";\n document.getElementById(\"power\").id = \"divide\";\n\n buttons = 1;\n }\n}\n"],"sourceRoot":""}