{
  "version": 3,
  "sources": ["../../../src/js/practice/calculator-display.js"],
  "sourcesContent": ["$(function() {\r\n\r\n  var global = window,\r\n\r\n    calculator = new Calculator(),\r\n    isLastButtonFunction = false,\r\n    isLastButtonEquals = false,\r\n    isLastButtonMemoryRecall = false,\r\n\r\n    NEGATIVE_SYMBOL = \"-\",\r\n    DECIMAL_SYMBOL = \".\",\r\n    ZERO_SYMBOL = \"0\",\r\n\r\n    $output = $(\"#calculator input[type=text]\");\r\n\r\n  function cleanSpecialSymbols(value) {\r\n    var newValue = \"\" + value,\r\n      isNegative = newValue.substr(0, 1) == NEGATIVE_SYMBOL,\r\n      numberValue = isNegative ? newValue.substr(1) : newValue;\r\n\r\n    numberValue = numberValue.replace(NEGATIVE_SYMBOL, \"\");\r\n\r\n    var splitOnDecimal = numberValue.split(DECIMAL_SYMBOL),\r\n      beforeDecimal = splitOnDecimal.shift(),\r\n      afterDecimal = splitOnDecimal;\r\n\r\n    beforeDecimal = beforeDecimal.replace(/^[0]+(.*)/, \"$1\");\r\n\r\n    newValue = [(beforeDecimal || ZERO_SYMBOL), afterDecimal.join(\"\")].join(afterDecimal.length == 0 ? \"\" : \".\");\r\n\r\n    if (isNegative && newValue != ZERO_SYMBOL) { newValue = NEGATIVE_SYMBOL + newValue; }\r\n\r\n    return newValue;\r\n  }\r\n\r\n  global.cleanSpecialSymbols = cleanSpecialSymbols;\r\n\r\n  function getDisplay() { return $output.val(); }\r\n\r\n  function setDisplay(value) { return $output.val(cleanSpecialSymbols(value)); }\r\n\r\n  function updateDisplay(value) {\r\n\r\n    var oldValue = getDisplay(),\r\n      newValue = \"\" + oldValue + value;\r\n\r\n    $output.val(cleanSpecialSymbols(newValue));\r\n  }\r\n\r\n  function clearDisplay() { $output.val(ZERO_SYMBOL); }\r\n\r\n  function calculate() {\r\n    if (calculator.isCanCalculate()) {\r\n      calculator.calculate();\r\n\r\n      setDisplay(calculator.getOutput());\r\n\r\n      calculator.clearOperands();\r\n\r\n      if (!isLastButtonEquals) {\r\n        calculator.clearOperator();\r\n      }\r\n\r\n      calculator.addInput(new Calculator.Operand(getDisplay()));\r\n    }\r\n  }\r\n\r\n  function displayMemoryStatus() {\r\n    if (calculator.isMemorySet()) {\r\n      $(\"#status p\").html(\"M\");\r\n    } else {\r\n      $(\"#status p\").html(\"\");\r\n    }\r\n  }\r\n\r\n\r\n  // Non number or function buttons\r\n\r\n  $(\"#calculator input\").not(\".function\").not(\"[name^=number_]\").click(function() {\r\n    isLastButtonFunction = false;\r\n    isLastButtonEquals = false;\r\n    isLastButtonMemoryRecall = false;\r\n  });\r\n\r\n  $(\"#calculator input[name=clear]\").click(function() {\r\n    calculator.reset();\r\n\r\n    clearDisplay();\r\n  });\r\n\r\n  $(\"#calculator input[name=clear_entry]\").click(function() {\r\n    clearDisplay();\r\n  });\r\n\r\n  $(\"#calculator input[name=memory_clear]\").click(function() {\r\n    calculator.clearMemory();\r\n\r\n    displayMemoryStatus();\r\n  });\r\n\r\n  $(\"#calculator input[name=memory_recall]\").click(function() {\r\n    setDisplay(calculator.getMemory().getValue());\r\n\r\n    isLastButtonMemoryRecall = true;\r\n  });\r\n\r\n  $(\"#calculator input[name=memory_set]\").click(function() {\r\n    var currentValue = getDisplay();\r\n\r\n    if (currentValue != ZERO_SYMBOL) {\r\n      calculator.setMemory(new Calculator.Operand(getDisplay()));\r\n    }\r\n\r\n    displayMemoryStatus();\r\n  });\r\n\r\n  $(\"#calculator input[name=memory_add]\").click(function() {\r\n    calculator.addToMemory(getDisplay());\r\n\r\n    displayMemoryStatus();\r\n  });\r\n\r\n  $(\"#calculator input[name=memory_subtract]\").click(function() {\r\n    calculator.subtractFromMemory(getDisplay());\r\n\r\n    displayMemoryStatus();\r\n  });\r\n\r\n\r\n  // Number buttons\r\n\r\n  $(\"#calculator input.number\").click(function() {\r\n    if (isLastButtonFunction || isLastButtonMemoryRecall) { clearDisplay(); }\r\n    if (isLastButtonEquals) { calculator.reset(); }\r\n\r\n    isLastButtonFunction = false;\r\n    isLastButtonMemoryRecall = false;\r\n  });\r\n\r\n  $(\"#calculator input[name^=number_]\").click(function() {\r\n    var number = this.name.substr(\"number_\".length);\r\n\r\n    updateDisplay(number);\r\n  });\r\n\r\n  $(\"#calculator input[name=decimal]\").click(function() {\r\n    updateDisplay(DECIMAL_SYMBOL);\r\n  });\r\n\r\n  $(\"#calculator input[name=toggle_sign]\").click(function() {\r\n    var oldValue = getDisplay();\r\n\r\n    if (oldValue != ZERO_SYMBOL) {\r\n      if (oldValue.substr(0, 1) == NEGATIVE_SYMBOL) {\r\n        setDisplay(oldValue.substr(1));\r\n      } else {\r\n        setDisplay(NEGATIVE_SYMBOL + oldValue);\r\n      }\r\n    }\r\n  });\r\n\r\n  $(\"#calculator input[name=backspace]\").click(function() {\r\n    var oldOutput = getDisplay();\r\n\r\n    setDisplay(oldOutput.substr(0, oldOutput.length - 1));\r\n  });\r\n\r\n\r\n  // Functions\r\n\r\n  $(\"#calculator input.function\").click(function() {\r\n    if (!isLastButtonFunction || isLastButtonEquals) {\r\n      calculator.addInput(new Calculator.Operand(getDisplay()));\r\n    }\r\n  });\r\n\r\n  $(\"#calculator input[name=add]\").click(function() { calculator.addInput(Calculator.Operators.ADD); });\r\n  $(\"#calculator input[name=subtract]\").click(function() { calculator.addInput(Calculator.Operators.SUBTRACT); });\r\n  $(\"#calculator input[name=multiply]\").click(function() { calculator.addInput(Calculator.Operators.MULTIPLY); });\r\n  $(\"#calculator input[name=divide]\").click(function() { calculator.addInput(Calculator.Operators.DIVIDE); });\r\n  $(\"#calculator input[name=reciprocal]\").click(function() { calculator.addInput(Calculator.Operators.RECIPROCAL); });\r\n  $(\"#calculator input[name=square_root]\").click(function() { calculator.addInput(Calculator.Operators.SQUARE_ROOT); });\r\n  $(\"#calculator input[name=factorial]\").click(function() { calculator.addInput(Calculator.Operators.FACTORIAL); });\r\n\r\n  $(\"#calculator input.function\").click(function() {\r\n    calculate();\r\n\r\n    isLastButtonFunction = true;\r\n  });\r\n\r\n  $(\"#calculator input[name=equals]\").click(function() {\r\n    isLastButtonEquals = true;\r\n  });\r\n\r\n\r\n  // initialize\r\n  clearDisplay();\r\n});\r\n"],
  "mappings": "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",
  "names": ["global", "calculator", "isLastButtonFunction", "isLastButtonEquals", "isLastButtonMemoryRecall", "NEGATIVE_SYMBOL", "DECIMAL_SYMBOL", "ZERO_SYMBOL", "$output", "cleanSpecialSymbols", "value", "newValue", "isNegative", "numberValue", "splitOnDecimal", "beforeDecimal", "afterDecimal", "getDisplay", "setDisplay", "updateDisplay", "oldValue", "clearDisplay", "calculate", "displayMemoryStatus", "currentValue", "number", "oldOutput"]
}
