{"version":3,"sources":["webpack:///./django/project/@static/@modules/curriculum-wheel/main.ts","webpack:///./django/project/@static/@modules/curriculum-wheel/controller.ts","webpack:///./django/project/@static/@modules/curriculum-wheel/index.js"],"names":[],"mappings":"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","file":"js/curriculum-wheel.js","sourcesContent":["import * as Backbone from \"backbone\";\r\nimport * as Marionette from \"backbone.marionette\";\r\nimport * as $ from \"jquery\";\r\nimport ViewController from \"./controller\";\r\n\r\nconst app = new Marionette.Application()\r\n\r\napp.once(\"start\", () => {\r\n new ViewController().render()\r\n});\r\n\r\n$(() => {\r\n app.start();\r\n});\r\n\n\n\n// WEBPACK FOOTER //\n// ./django/project/@static/@modules/curriculum-wheel/main.ts","import * as $ from \"jquery\";\r\nimport * as Backbone from \"backbone\";\r\nimport * as Marionette from \"backbone.marionette\";\r\nimport * as _ from \"underscore\";\r\nimport {on, Options} from \"../utils/decorators\";\r\n\r\n\r\n@Options({\r\n template: false,\r\n el: \".js-wheel-desktop-wrap\",\r\n ui: {\r\n navTabsList: \".js-nav-tabs\",\r\n defaultTab: \".js-default-tab\",\r\n curriculumLinks: \".js-curriculum-wheel-link\",\r\n curriculumDial: \".js-curriculum-dial\"\r\n }\r\n})\r\n\r\nexport default class ViewController extends Marionette.View{\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n // BEHAVIOR:\r\n // =====================================\r\n // on tab hover: activate current tab\r\n // on tab leave: revert to default tab\r\n // fix fast hovers: delay tab activation for 200ms\r\n\r\n // -------------------------------------\r\n // CONSTANTS\r\n // -------------------------------------\r\n\r\n public TAB_ACTIVATION_TIMER_ID;\r\n public CURRENT_TOTAL_ANGLE = 0;\r\n public $CURRENT_TAB;\r\n\r\n // -------------------------------------\r\n // EVENTS\r\n // -------------------------------------\r\n\r\n @on(\"mouseenter @ui.curriculumLinks\")\r\n onMouseEnterCurriculumLink(JQueryEventObject: any) {\r\n const $this = $(JQueryEventObject.currentTarget);\r\n this.startActivateTabTimer($this);\r\n }\r\n\r\n @on(\"mouseleave @ui.curriculumLinks\")\r\n onMouseLeaveCurriculumLink(JQueryEventObject: any) {\r\n // If mouse leave a link, activate invisible\r\n // default tab content\r\n const $defaultTab = this.ui.defaultTab;\r\n this.startActivateTabTimer($defaultTab);\r\n }\r\n\r\n // -------------------------------------\r\n // FUNCTIONS\r\n // -------------------------------------\r\n\r\n onRender() {\r\n console.log(\"Curriculum wheel viewcontroller rendered\");\r\n this.setActiveTab(this.ui.defaultTab);\r\n this.activateTab(this.ui.defaultTab);\r\n }\r\n\r\n activateTab($tabToActivate: any) {\r\n const degreesToRotate = this.getDegreesToRotate(this.$CURRENT_TAB, $tabToActivate);\r\n this.CURRENT_TOTAL_ANGLE += degreesToRotate;\r\n // console.log(`wants to rotate by ${degreesToRotate} degrees`);\r\n // console.log(`total angle will be ${this.CURRENT_TOTAL_ANGLE} degrees`);\r\n\r\n if ($tabToActivate !== this.ui.defaultTab) {\r\n // Spin the dial to point at this link, and scale it onscreen\r\n this.ui.curriculumDial.css({\r\n \"transform\": `translate(-50%, -50%) rotateZ(${this.CURRENT_TOTAL_ANGLE}deg) scale(1)`\r\n });\r\n } else {\r\n // Special case for default tab, because it scales dial off-screen\r\n this.ui.curriculumDial.css({\r\n \"transform\": `translate(-50%, -50%) rotateZ(${this.CURRENT_TOTAL_ANGLE}deg) scale(1.3)`\r\n });\r\n }\r\n\r\n // Use Bootstrap show tab function to reveal center content\r\n $tabToActivate.tab(\"show\");\r\n this.setActiveTab($tabToActivate);\r\n }\r\n\r\n startActivateTabTimer($tabToActivate: any) {\r\n\r\n // If a tab had been set to activate, but another is\r\n // triggered before activation, clear previous countdown.\r\n clearTimeout(this.TAB_ACTIVATION_TIMER_ID);\r\n\r\n // Create small delay for tab activation, to account\r\n // for fast hovers. e.g. only want `setActiveTab()`\r\n // to trigger 1x if there are several fast hovers\r\n this.TAB_ACTIVATION_TIMER_ID = setTimeout(() => {\r\n this.activateTab($tabToActivate);\r\n }, 200);\r\n }\r\n\r\n clearActivateTabTimer() {\r\n clearTimeout(this.TAB_ACTIVATION_TIMER_ID);\r\n }\r\n\r\n setActiveTab($activeTab) {\r\n this.$CURRENT_TAB = $activeTab;\r\n console.log(`current tab is now ${this.$CURRENT_TAB.data(\"dial-rotate\")}`);\r\n }\r\n\r\n getRadiansToRotate($currentTab: any, $tabToActivate: any) {\r\n const currentTabPositionInRadians = $currentTab.data(\"degrees\") * Math.PI / 180;\r\n const tabToActivatePositionInRadians = $tabToActivate.data(\"degrees\") * Math.PI / 180;\r\n\r\n // Find which difference is LESS -> forward or back (*** CONTINUE HERE ***)\r\n const radiansToRotate = tabToActivatePositionInRadians - currentTabPositionInRadians;\r\n\r\n return radiansToRotate;\r\n }\r\n\r\n getDegreesToRotate($currentTab: any, $tabToActivate: any) {\r\n const currentTabPositionInDegrees = $currentTab.data(\"degrees\");\r\n let nextTabPositionInDegrees = $tabToActivate.data(\"degrees\");\r\n\r\n // Check to see if going from quadrant 4 to quadrant 1\r\n const nextTabQuadrant = this.getQuadrantLocation($tabToActivate);\r\n const currentTabQuadrant = this.getQuadrantLocation(this.$CURRENT_TAB);\r\n\r\n if (currentTabQuadrant === 4 && nextTabQuadrant === 1) {\r\n console.log(\"going from 4 to 1\");\r\n\r\n // If going from 4 to 1, you're passing 0deg. Need to\r\n // keep increasing degree count, if you want it to move\r\n // clockwise\r\n nextTabPositionInDegrees += 360;\r\n }\r\n\r\n // TODO: determine why this is necessary\r\n // Think about starting from 0 and going 1 stop CCW\r\n if (currentTabQuadrant === 1 && nextTabQuadrant === 4) {\r\n nextTabPositionInDegrees = -1 * (360 - nextTabPositionInDegrees);\r\n }\r\n\r\n let degreesToRotate = nextTabPositionInDegrees - currentTabPositionInDegrees;\r\n\r\n // Insure you're going the SHORTEST distance. ONE way will be\r\n // <= to 180 degrees, since you're on a circle. If it's trying\r\n // to go the long way, reverse direction.\r\n if (Math.abs(degreesToRotate) >= 180) {\r\n const shorterAbsoluteDistanceInDegrees = 360 - Math.abs(degreesToRotate)\r\n\r\n // Tracking logs - worth keeping for math clarity\r\n // console.log(\"trying to go > 180 degrees\");\r\n // console.log(`degreesToRotate = ${nextTabPositionInDegrees} - ${currentTabPositionInDegrees}`);\r\n // console.log(`degreesToRotate = ${degreesToRotate}`);\r\n // console.log(`shorter distance is ${shorterAbsoluteDistanceInDegrees}`);\r\n\r\n // If CCW\r\n if (degreesToRotate >= 0) {\r\n degreesToRotate = -1 * shorterAbsoluteDistanceInDegrees;\r\n } else {\r\n degreesToRotate = shorterAbsoluteDistanceInDegrees;\r\n }\r\n }\r\n\r\n // NOTE: Always ADDING the following value to CURRENT_TOTAL_ANGLE\r\n return degreesToRotate;\r\n }\r\n\r\n getQuadrantLocation($targetTab: any) {\r\n const targetTabPositionInDegrees = $targetTab.data(\"degrees\");\r\n let quadrantNumber;\r\n\r\n if ((targetTabPositionInDegrees >= 0) && (targetTabPositionInDegrees < 90)) {\r\n quadrantNumber = 1;\r\n } else if ((targetTabPositionInDegrees >= 90) && (targetTabPositionInDegrees < 180)) {\r\n quadrantNumber = 2;\r\n } else if ((targetTabPositionInDegrees >= 180) && (targetTabPositionInDegrees < 270)) {\r\n quadrantNumber = 3;\r\n } else if ((targetTabPositionInDegrees >= 270) && (targetTabPositionInDegrees < 360)) {\r\n quadrantNumber = 4;\r\n }\r\n\r\n return quadrantNumber;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./django/project/@static/@modules/curriculum-wheel/controller.ts","require(\"./main.ts\");\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./django/project/@static/@modules/curriculum-wheel/index.js\n// module id = 61\n// module chunks = 36"],"sourceRoot":""}