{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/projects/clocks/drawing_helpers.js","webpack:///./app/javascript/packs/projects/clocks/between.js","webpack:///./app/javascript/packs/projects/clocks/binary.js","webpack:///./app/javascript/packs/projects/clocks/connected.js","webpack:///./app/javascript/packs/projects/clocks/one_hand.js","webpack:///./app/javascript/packs/projects/clocks/orders.js","webpack:///./app/javascript/packs/projects/clocks/roman.js","webpack:///./app/javascript/packs/projects/clocks/rose.js","webpack:///./app/javascript/packs/projects/clocks/wrong.js","webpack:///./app/javascript/packs/projects/clocks.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","drawBackground","canvas","context","fillStyle","fillRect","width","height","drawArc","startX","startY","radius","startAngle","endAngle","colour","beginPath","strokeStyle","arc","stroke","drawLine","endX","endY","moveTo","lineTo","drawLineWithRotation","angle","length","rotate","canvasBetween","document","getElementById","ctxBetween","getContext","drawBetween","state","angleHrs","angleMins","angleSecs","sort","a","b","angleA","angleB","angleC","lineWidth","canvasBinary","ctxBinary","drawBinary","strings","hrs","toString","mins","secs","xStep","yStep","j","charAt","Math","PI","fill","canvasConnected","ctxConnected","drawConnected","centreX","centreY","endHrsX","cos","endHrsY","sin","endMinsX","endMinsY","endSecsX","endSecsY","lineCap","canvasOneHand","ctxOneHand","drawOneHand","lengthHrs","colourSecs","translate","canvasOrders","ctxOrders","drawOrders","angleYrs","angleMths","angleDts","angleMscs","roman","romanify","num","romans","arabics","answer","updateRomanClock","romanHrs","romanMins","romanSecs","innerHTML","canvasRose","ctxRose","halfPi","drawLoop","min","max","step","k","theta","x","y","drawRose","maxMins","maxSecs","wrong","randomOffset","random","formatNumber","initWrongClock","currentWrongHrs","currentWrongMins","currentWrongSecs","displayHrs","displayMins","displaySecs","updateWrongClock","targetSecs","targetMins","setState","yrs","mths","time","Date","now","parseInt","getFullYear","getMonth","dts","getDate","getHours","getMinutes","getSeconds","mscs","getMilliseconds","setInterval","preupdateSecs"],"mappings":"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","file":"js/projects/clocks-3c9a5b04ee5110e4834e.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 = 47);\n","export const drawBackground = (canvas, context) => {\n context.fillStyle = 'black';\n context.fillRect(0, 0, canvas.width, canvas.height);\n};\n\nexport const drawArc = (context, startX, startY, radius, startAngle, endAngle, colour) => {\n context.beginPath();\n context.strokeStyle = colour;\n context.arc(startX, startY, radius, startAngle, endAngle);\n context.stroke();\n};\n\nexport const drawLine = (context, startX, startY, endX, endY, colour) => {\n context.beginPath();\n context.strokeStyle = colour;\n context.moveTo(startX, startY);\n context.lineTo(endX, endY);\n context.stroke();\n};\n\nexport const drawLineWithRotation = (context, angle, length, colour) => {\n context.rotate(angle);\n context.beginPath();\n context.strokeStyle = colour;\n context.moveTo(0, 0);\n context.lineTo(length, 0);\n context.stroke();\n context.rotate(-angle);\n};\n","import { drawBackground, drawArc } from './drawing_helpers.js';\n\nconst canvasBetween = document.getElementById('between');\n\nconst ctxBetween = canvasBetween.getContext('2d');\ncanvasBetween.width = 240;\ncanvasBetween.height = 180;\n\nexport const drawBetween = (state) => {\n drawBackground(canvasBetween, ctxBetween);\n\n // Set up variables we'll need\n const startX = canvasBetween.width / 2;\n const startY = canvasBetween.height / 2;\n\n // Note that .sort() treats everything as a string by default, hence the callback\n const [angleA, angleB, angleC] = [state.angleHrs, state.angleMins, state.angleSecs].sort((a, b) => a - b);\n\n ctxBetween.lineWidth = 5;\n\n drawArc(ctxBetween, startX, startY, 60, angleC, angleA, '#E01A4F');\n drawArc(ctxBetween, startX, startY, 65, angleB, angleC, '#042D43');\n drawArc(ctxBetween, startX, startY, 70, angleA, angleB, '#F57E2A');\n};\n","import { drawBackground } from './drawing_helpers.js';\n\nconst canvasBinary = document.getElementById('binary');\n\nconst ctxBinary = canvasBinary.getContext('2d');\ncanvasBinary.width = 240;\ncanvasBinary.height = 180;\n\nexport const drawBinary = (state) => {\n drawBackground(canvasBinary, ctxBinary);\n\n const binaryHrs = state.hrs.toString(2);\n const binaryMins = state.mins.toString(2);\n const binarySecs = state.secs.toString(2);\n const strings = [binaryHrs, binaryMins, binarySecs];\n\n const xStep = canvasBinary.width / 8;\n const yStep = canvasBinary.height / 6;\n\n for (let j = 0; j < 3; j += 1) {\n for (let i = 0; i < 7; i += 1) {\n if (j == 0 && (i == 5 || i == 6)) {\n break;\n } else {\n ctxBinary.beginPath();\n if (i < strings[j].length && strings[j].charAt(strings[j].length - 1 - i) == '1') {\n ctxBinary.fillStyle = '#F57E2A';\n } else {\n ctxBinary.fillStyle = '#042D43';\n }\n ctxBinary.arc(xStep * (7 - i), yStep * (j + 2), 10, 0, 2 * Math.PI);\n ctxBinary.fill();\n }\n\n }\n }\n};\n","import { drawBackground, drawLine } from './drawing_helpers.js';\n\nconst canvasConnected = document.getElementById('connected');\n\nconst ctxConnected = canvasConnected.getContext('2d');\ncanvasConnected.width = 240;\ncanvasConnected.height = 180;\n\nexport const drawConnected = (state) => {\n drawBackground(canvasConnected, ctxConnected);\n\n const centreX = canvasConnected.width / 2;\n const centreY = canvasConnected.height / 2;\n const length = 30;\n\n const endHrsX = centreX + (length * Math.cos(state.angleHrs));\n const endHrsY = centreY + (length * Math.sin(state.angleHrs));\n\n const endMinsX = endHrsX + (length * Math.cos(state.angleMins));\n const endMinsY = endHrsY + (length * Math.sin(state.angleMins));\n\n const endSecsX = endMinsX + (length * Math.cos(state.angleSecs));\n const endSecsY = endMinsY + (length * Math.sin(state.angleSecs));\n\n ctxConnected.lineWidth = 5;\n ctxConnected.lineCap = \"round\";\n\n drawLine(ctxConnected, centreX, centreY, endHrsX, endHrsY, '#FF0000');\n drawLine(ctxConnected, endHrsX, endHrsY, endMinsX, endMinsY, '#00FF00');\n drawLine(ctxConnected, endMinsX, endMinsY, endSecsX, endSecsY, '#0000FF');\n};\n","import { drawBackground, drawLineWithRotation } from './drawing_helpers.js';\n\nconst canvasOneHand = document.getElementById('one-hand');\n\nconst ctxOneHand = canvasOneHand.getContext('2d');\ncanvasOneHand.width = 240;\ncanvasOneHand.height = 180;\n\nexport const drawOneHand = (state) => {\n drawBackground(canvasOneHand, ctxOneHand);\n\n // Set up variables we'll need\n const startX = canvasOneHand.width / 2;\n const startY = canvasOneHand.height / 2;\n\n const lengthHrs = ((state.hrs % 12) * 4) + 31;\n const colourSecs = `hsl(${state.secs * 6},100%,50%)`;\n\n ctxOneHand.lineWidth = 5;\n ctxOneHand.lineCap = \"round\";\n\n ctxOneHand.translate(startX, startY);\n drawLineWithRotation(ctxOneHand, state.angleMins, lengthHrs, colourSecs);\n ctxOneHand.translate(-startX, -startY);\n};\n","import { drawBackground, drawLineWithRotation } from './drawing_helpers.js';\n\nconst canvasOrders = document.getElementById('orders');\n\nconst ctxOrders = canvasOrders.getContext('2d');\ncanvasOrders.width = 240;\ncanvasOrders.height = 180;\n\nexport const drawOrders = (state) => {\n drawBackground(canvasOrders, ctxOrders);\n\n // Set up variables we'll need\n const startX = canvasOrders.width / 2;\n const startY = canvasOrders.height / 2;\n\n ctxOrders.lineWidth = 5;\n ctxOrders.lineCap = \"round\";\n\n ctxOrders.translate(startX, startY);\n drawLineWithRotation(ctxOrders, state.angleYrs, 75, '#ff0000');\n drawLineWithRotation(ctxOrders, state.angleMths, 70, '#ffa500');\n drawLineWithRotation(ctxOrders, state.angleDts, 65, '#ffff00');\n drawLineWithRotation(ctxOrders, state.angleHrs, 60, '#008000');\n drawLineWithRotation(ctxOrders, state.angleMins, 55, '#0000ff');\n drawLineWithRotation(ctxOrders, state.angleSecs, 50, '#4b0082');\n drawLineWithRotation(ctxOrders, state.angleMscs, 45, '#ee82ee');\n ctxOrders.translate(-startX, -startY);\n};\n","const roman = document.getElementById('roman');\n\nconst romanify = (num) => {\n // We only need Roman numerals up to L as we'll never reach 90\n const romans = ['L', 'XL', 'X', 'IX', 'V', 'IV', 'I'];\n // The Arabic numerals matching the above Roman numerals, in order\n const arabics = [50, 40, 10, 9, 5, 4, 1];\n let answer = '';\n\n // We'll iterate over the above arrays, note from larger to smaller\n for (let i = 0; i < romans.length; i += 1) {\n // If our num is still bigger than next Arabic numeral\n // We need to append its Roman expression to our answer\n // Note inclusion of 4, 9 and 40 to handle prepending of Is and Xs\n while (num >= arabics[i]) {\n answer += romans[i];\n num -= arabics[i];\n }\n }\n\n return answer == '' ? 'Nulla' : answer;\n};\n\nexport const updateRomanClock = (state) => {\n // Convert each element to Roman numerals\n const romanHrs = romanify(state.hrs);\n const romanMins = romanify(state.mins);\n const romanSecs = romanify(state.secs);\n // Enter them into the dom in one go\n roman.innerHTML = `${romanHrs}:${romanMins}${romanSecs}`;\n};\n","import { drawBackground } from './drawing_helpers.js';\n\nconst canvasRose = document.getElementById('rose');\n\nconst ctxRose = canvasRose.getContext('2d');\ncanvasRose.width = 240;\ncanvasRose.height = 180;\n\nconst halfPi = Math.PI * 0.5;\n\nconst drawLoop = (min, max, step, k, radius) => {\n for (let i = min; i <= max; i += step) {\n const theta = (i / 180) * Math.PI;\n const r = 60 * Math.cos(k * theta);\n const x = r * Math.cos(theta - halfPi);\n const y = r * Math.sin(theta - halfPi);\n\n ctxRose.beginPath();\n ctxRose.fillStyle = `hsl(${i}, 100%, 50%)`;\n ctxRose.arc(x, y, radius, 0, 2 * Math.PI);\n ctxRose.fill();\n }\n};\n\nexport const drawRose = (state) => {\n drawBackground(canvasRose, ctxRose);\n\n let k = state.hrs % 12;\n // We want hours to be over 1 - 12, not 0 - 11\n k = k == 0 ? 12 : k;\n // 60 mins in an hour, 360 degrees in a full circle\n // So stepMins = 360 / 60\n const stepMins = 6;\n // We need to subtract 90 to start from the vertical\n const maxMins = state.mins * stepMins;\n // 60 secs in a minute, so stepSecs = stepMins / 60\n const stepSecs = 0.1;\n const maxSecs = maxMins + (state.secs * stepSecs);\n\n ctxRose.translate(canvasRose.width / 2, canvasRose.height / 2);\n\n drawLoop(0, maxMins, stepMins, k, 2);\n drawLoop(maxMins, maxSecs, stepSecs, k, 1);\n\n ctxRose.translate(-(canvasRose.width / 2), -(canvasRose.height / 2));\n};\n","const wrong = document.getElementById('wrong');\n\nconst randomOffset = (max) => {\n // 50/50 to return +/-1\n return Math.random() < 0.5 ? 1 : -1;\n};\n\nconst formatNumber = (num) => {\n // Prepend a zero to single-digit numbers\n return num < 10 ? '0' + num.toString() : num;\n};\n\nexport const initWrongClock = (state) => {\n // We want to keep track of the currently displayed values for hr, min and sec\n state.currentWrongHrs = state.hrs;\n state.currentWrongMins = state.mins;\n // We add 60 before taking modulus for case secs is 0 and offset -1\n state.currentWrongSecs = (state.secs + randomOffset() + 60) % 60;\n\n // Before we display for the first time, prepend 0s to any single digit numbers\n const displayHrs = formatNumber(state.hrs);\n const displayMins = formatNumber(state.mins);\n const displaySecs = formatNumber(state.currentWrongSecs);\n\n wrong.innerHTML = `${displayHrs}:${displayMins}${displaySecs}`;\n};\n\nexport const updateWrongClock = (state) => {\n // Secs we want to display will be correct time +/- 1\n // By adding 60 before taking modulus we avoid issues with negatives\n const targetSecs = (state.secs + randomOffset() + 60) % 60;\n // Save current wrong mins to work out whether hour ticks over or not\n let targetMins = state.currentWrongMins;\n\n // Tick over to new minute (or back if necessary)\n if (state.currentWrongSecs > 45 && targetSecs < 15) {\n targetMins = (state.currentWrongMins + 1) % 60;\n } else if (state.currentWrongSecs < 15 && targetSecs > 45) {\n targetMins = (state.currentWrongMins + 59) % 60;\n }\n\n // Tick over to new hour (or back if necessary)\n if (state.currentWrongMins > 45 && targetMins < 15) {\n state.currentWrongHrs = (state.currentWrongHrs + 1) % 24;\n } else if (state.currentWrongMins < 15 && targetMins > 45) {\n state.currentWrongHrs = (state.currentWrongHrs + 23) % 24;\n }\n\n // Now we can set the secs and mins to their new values\n state.currentWrongSecs = targetSecs;\n state.currentWrongMins = targetMins;\n\n const displayHrs = formatNumber(state.currentWrongHrs);\n const displayMins = formatNumber(state.currentWrongMins);\n const displaySecs = formatNumber(state.currentWrongSecs);\n\n wrong.innerHTML = `${displayHrs}:${displayMins}${displaySecs}`;\n};\n","import { drawBetween } from './clocks/between.js';\nimport { drawBinary } from './clocks/binary.js';\nimport { drawConnected } from './clocks/connected.js';\nimport { drawOneHand } from './clocks/one_hand.js';\nimport { drawOrders } from './clocks/orders.js';\nimport { updateRomanClock } from './clocks/roman.js';\nimport { drawRose } from './clocks/rose.js';\nimport { initWrongClock, updateWrongClock } from './clocks/wrong.js';\n\nconst state = {};\n\nconst daysInMonth = (yrs, mths) => {\n return new Date(yrs, mths, 0).getDate();\n}\n\nconst setState = () => {\n const time = new Date(Date.now());\n state.yrs = parseInt(time.getFullYear());\n state.mths = parseInt(time.getMonth());\n state.dts = parseInt(time.getDate());\n state.hrs = parseInt(time.getHours());\n state.mins = parseInt(time.getMinutes());\n state.secs = parseInt(time.getSeconds());\n state.mscs = parseInt(time.getMilliseconds());\n\n state.angleYrs = (2 * Math.PI * ((state.yrs % 100) / 100)) - (0.5 * Math.PI);\n state.angleMths = (2 * Math.PI * (state.mths / 12)) - (0.5 * Math.PI);\n state.angleDts = (2 * Math.PI * (state.dts / daysInMonth(state.yrs, state.mths))) - (0.5 * Math.PI);\n state.angleHrs = (2 * Math.PI * ((state.hrs % 12) / 12)) - (0.5 * Math.PI);\n state.angleMins = (2 * Math.PI * (state.mins / 60)) - (0.5 * Math.PI);\n state.angleSecs = (2 * Math.PI * (state.secs / 60)) - (0.5 * Math.PI);\n state.angleMscs = (2 * Math.PI * (state.mscs / 1000)) - (0.5 * Math.PI);\n}\n\nconst init = () => {\n // Set a temporary state.secs so setState() can create preupdateSecs\n state.secs = 0;\n setState();\n\n updateRomanClock(state);\n initWrongClock(state);\n drawBetween(state);\n drawOrders(state);\n drawOneHand(state);\n drawBinary(state);\n drawConnected(state);\n drawRose(state);\n};\n\nconst updateClocks = () => {\n setState();\n\n if (state.secs != state.preupdateSecs) {\n state.preupdateSecs = state.secs;\n\n drawBetween(state);\n drawBinary(state);\n drawOneHand(state);\n updateRomanClock(state);\n updateWrongClock(state);\n drawConnected(state);\n drawRose(state);\n }\n\n drawOrders(state);\n};\n\ninit();\n\n// Set the clocks going as soon as the page loads\nsetInterval(updateClocks, 10);\n"],"sourceRoot":""}