{"version":3,"sources":["webpack:///index.3e40a806a7.js","webpack:///webpack/bootstrap 3e40a806a7","webpack:///./src/js/connector/point.js","webpack:///./src/js/connector/polyline.js","webpack:///./src/js/dom-util.js","webpack:///./node_modules/debounce/index.js","webpack:///./src/js/main.js","webpack:///./node_modules/fast-memoize/src/index.js","webpack:///./src/js/scroll-nav.js","webpack:///./src/js/connector/connector.js","webpack:///./src/js/lib/event_target.js","webpack:///./src/js/animated-favicon.js","webpack:///./src/favicon.png","webpack:///./src/js/tags/facebook.js","webpack:///./src/js/tags/ga.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","parentJsonpFunction","window","chunkIds","moreModules","executeModules","chunkId","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","shift","1","e","onScriptComplete","script","onerror","onload","clearTimeout","timeout","chunk","Error","undefined","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","createElement","type","charset","async","nc","setAttribute","src","p","setTimeout","appendChild","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error","s","_classCallCheck","instance","Constructor","TypeError","value","_createClass","defineProperties","target","props","descriptor","writable","key","protoProps","staticProps","Point","x","y","this","point","default","_extends","assign","arguments","source","AnimatedPolyline","options","lineCap","strokeStyle","lineWidth","animated","animateAmount","finished","segments","ctx","callback","moveCallback","currentSegmentIndex","startSegment","idx","finish","currentPoint","nextPoint","xDirection","yDirection","draw","loop","lastRender","Date","getTime","delta","renderTick","animRequest","requestAnimationFrame","stopDrawing","cancelAnimationFrame","getNextPosition","moveAmount","pos","clone","targetPos","yDiff","Math","abs","xDiff","equals","save","beginPath","moveTo","lineTo","stroke","restore","$","id","doc","getElementById","getRelPosition","node","ancestor","top","left","tagName","offsetTop","offsetLeft","offsetParent","parentNode","getTransformPropertyName","_fastMemoize2","obj","_fastMemoize","body","prefixes","ilen","prefix","propertyName","style","debounce","func","wait","immediate","later","last","now","timestamp","result","apply","context","args","debounced","callNow","clear","flush","_interopRequireDefault","eventHandlerFor","element","handler","otherElHandler","stopPropagation","cancelBubble","toggleAnnoyingMode","on","annoyingMode","bod","classList","add","gifViewerMode","className","remove","toggleGifViewer","initializeGiphy","giphyPromise","then","Giphy","catch","log","_debounce2","_debounce","_scrollNav2","_scrollNav","_animatedFavicon2","_animatedFavicon","_facebook2","_facebook","_ga2","_ga","imageCredit","imageCreditText","expandLink","addEventListener","g","randomGIF","backgroundImage","images","original","url","innerHTML","preventDefault","expanded","replace","creditURL","source_post_url","indexOf","text","username","slice","Array","sections","concat","getElementsByClassName","nav","ScrollNav","redrawConnectors","addHandler","section","addStyleChanges","el","0","200","memoize","fn","cache","cacheDefault","serializer","serializerDefault","strategy","strategyDefault","isPrimitive","monadic","arg","cacheKey","computedValue","set","variadic","assemble","serialize","bind","create","strategyVariadic","strategyMonadic","JSON","stringify","ObjectWithoutPrototypeCache","has","strategies","_connector2","_connector","win","ACTIVE_REGEX","RegExp","ACTIVE","foreachSection","connector","currentSection","activeConnector","sectionActivateHandlers","sectionDeactivateHandlers","activateSection","scrollTop","calculateSectionProperties","posTop","clientHeight","position","height","browserHeight","activatePosition","parseInt","getAttribute","pageYOffset","innerHeight","documentElement","figure","els","test","getFigureForSection","hasHandlerForSection","toLowerCase","callSectionHandler","offsetHeight","drawConnector","sectionId","activateHandler","deactivateHandler","deactivate","handlers","title","getChildByTagName","Connector","parentEl","dest","marginRight","marginLeft","addListener","getConnector","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","constructor","setPrototypeOf","__proto__","_event_target2","_event_target","_point2","_point","_polyline2","_polyline","prefs","option","_EventTarget","fire","canvas","line","removeChild","srcPosition","destPosition","srcX","offsetWidth","srcY","destX","destY","min","MARGIN","width","getContext","fireMoveEvent","EventTarget","__WEBPACK_AMD_DEFINE_RESULT__","define","_listeners","listener","event","listeners","len","removeListener","splice","animatedFavicon","toDataURL","img","link","newLink","cloneNode","clearRect","drawImage","replaceChild","require","loadFacebookSDK","fbAsyncInit","FB","init","xfbml","version","Event","subscribe","js","fjs","insertBefore","googleAnalyticsTag","r","a","q","ga"],"mappings":"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","file":"index.3e40a806a7.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId]) {\n/******/ \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n/******/ \t\t\t}\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n/******/ \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n/******/ \t\twhile(resolves.length) {\n/******/ \t\t\tresolves.shift()();\n/******/ \t\t}\n/******/\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// objects to store loaded and loading chunks\n/******/ \tvar installedChunks = {\n/******/ \t\t1: 0\n/******/ \t};\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/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId) {\n/******/ \t\tvar installedChunkData = installedChunks[chunkId];\n/******/ \t\tif(installedChunkData === 0) {\n/******/ \t\t\treturn new Promise(function(resolve) { resolve(); });\n/******/ \t\t}\n/******/\n/******/ \t\t// a Promise means \"currently loading\".\n/******/ \t\tif(installedChunkData) {\n/******/ \t\t\treturn installedChunkData[2];\n/******/ \t\t}\n/******/\n/******/ \t\t// setup Promise in chunk cache\n/******/ \t\tvar promise = new Promise(function(resolve, reject) {\n/******/ \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n/******/ \t\t});\n/******/ \t\tinstalledChunkData[2] = promise;\n/******/\n/******/ \t\t// start chunk loading\n/******/ \t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\tvar script = document.createElement('script');\n/******/ \t\tscript.type = \"text/javascript\";\n/******/ \t\tscript.charset = 'utf-8';\n/******/ \t\tscript.async = true;\n/******/ \t\tscript.timeout = 120000;\n/******/\n/******/ \t\tif (__webpack_require__.nc) {\n/******/ \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n/******/ \t\t}\n/******/ \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".\" + \"3e40a806a7\" + \".js\";\n/******/ \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n/******/ \t\tscript.onerror = script.onload = onScriptComplete;\n/******/ \t\tfunction onScriptComplete() {\n/******/ \t\t\t// avoid mem leaks in IE.\n/******/ \t\t\tscript.onerror = script.onload = null;\n/******/ \t\t\tclearTimeout(timeout);\n/******/ \t\t\tvar chunk = installedChunks[chunkId];\n/******/ \t\t\tif(chunk !== 0) {\n/******/ \t\t\t\tif(chunk) {\n/******/ \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n/******/ \t\t\t\t}\n/******/ \t\t\t\tinstalledChunks[chunkId] = undefined;\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t\thead.appendChild(script);\n/******/\n/******/ \t\treturn promise;\n/******/ \t};\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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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 = \"/\";\n/******/\n/******/ \t// on error function for async loading\n/******/ \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 5);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Point = function () {\n function Point(x, y) {\n _classCallCheck(this, Point);\n\n this.x = x;\n this.y = y;\n }\n\n _createClass(Point, [{\n key: \"greaterThan\",\n value: function greaterThan(point) {\n return this.y > point.y || this.x > point.x;\n }\n }, {\n key: \"equals\",\n value: function equals(point) {\n return this.y === point.y && this.x === point.x;\n }\n }, {\n key: \"clone\",\n value: function clone() {\n return new Point(this.x, this.y);\n }\n }]);\n\n return Point;\n}();\n\nexports.default = Point;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n// TODO: just use ES6 class...\nvar AnimatedPolyline = function AnimatedPolyline() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.options = _extends({\n lineCap: 'round',\n strokeStyle: '#f1dbce',\n lineWidth: 4,\n animated: true,\n animateAmount: 4\n }, options);\n\n this.finished = false;\n this.segments = options.segments;\n this.ctx = options.ctx;\n this.callback = options.callback || function () {};\n this.moveCallback = options.moveCallback || function () {};\n\n // array index of beginning position of current segment\n this.currentSegmentIndex = 0;\n\n this.startSegment();\n};\n\nAnimatedPolyline.prototype.startSegment = function () {\n var idx = this.currentSegmentIndex;\n var segments = this.segments;\n\n // Finish if we've exhausted our line segments\n if (this.currentSegmentIndex >= segments.length - 1) {\n this.finish();\n return;\n }\n\n this.currentPoint = segments[idx];\n this.nextPoint = segments[idx + 1];\n\n this.xDirection = true;\n this.yDirection = true;\n\n if (this.nextPoint.x - this.currentPoint.x < 0) {\n this.xDirection = false;\n }\n if (this.nextPoint.y - this.currentPoint.y < 0) {\n this.yDirection = false;\n }\n};\n\nAnimatedPolyline.prototype.draw = function (animated) {\n if (typeof animated !== 'undefined') {\n this.options.animated = animated;\n }\n this.finished = false;\n this.loop();\n};\n\nAnimatedPolyline.prototype.loop = function (lastRender) {\n var _this = this;\n\n if (this.finished) {\n return;\n }\n\n if (typeof lastRender === 'undefined') {\n lastRender = new Date().getTime();\n }\n\n var delta = new Date().getTime() - lastRender;\n this.renderTick(delta);\n lastRender = new Date().getTime();\n\n // set up our next frame\n this.animRequest = window.requestAnimationFrame(function () {\n return _this.loop(lastRender);\n });\n};\n\nAnimatedPolyline.prototype.finish = function () {\n this.stopDrawing();\n this.callback();\n};\n\nAnimatedPolyline.prototype.stopDrawing = function () {\n this.finished = true;\n if (this.animRequest) {\n window.cancelAnimationFrame(this.animRequest);\n this.animRequest = null;\n }\n};\n\n/* Given an amount to move from the current position (unit = canvas coordinates),\n * return the new coordinates to move to.\n */\nAnimatedPolyline.prototype.getNextPosition = function (moveAmount) {\n var pos = this.currentPoint.clone();\n var targetPos = this.nextPoint.clone();\n\n if (!this.options.animated) {\n return targetPos;\n }\n\n var yDiff = Math.abs(targetPos.y - pos.y);\n var xDiff = Math.abs(targetPos.x - pos.x);\n\n if (moveAmount > yDiff) {\n // amount we're about to move exceeds amount we need to\n pos.y = targetPos.y;\n } else if (this.yDirection && targetPos.y > pos.y) {\n pos.y += moveAmount;\n } else if (!this.yDirection && targetPos.y < pos.y) {\n pos.y -= moveAmount;\n }\n\n if (moveAmount > xDiff) {\n // amount we're about to move exceeds what we need to\n pos.x = targetPos.x;\n } else if (this.xDirection && targetPos.x > pos.x) {\n pos.x += moveAmount;\n } else if (!this.xDirection && targetPos.x < pos.x) {\n pos.x -= moveAmount;\n }\n return pos;\n};\n\nAnimatedPolyline.prototype.renderTick = function (delta) {\n if (this.finished) return;\n\n var options = this.options;\n var interval = 60 / 1000;\n var ctx = this.ctx;\n var targetPos = this.nextPoint;\n\n // `options.animateAmount`px / frame @ 60 target fps\n var moveAmount = delta * interval * options.animateAmount;\n\n var pos = this.currentPoint;\n\n if (!targetPos.equals(pos)) {\n ctx.save();\n ctx.beginPath();\n ctx.lineCap = options.lineCap;\n ctx.strokeStyle = options.strokeStyle;\n ctx.moveTo(pos.x, pos.y);\n\n pos = this.currentPoint = this.getNextPosition(moveAmount);\n\n // var radius = 75;\n // var startAngle = 1.1 * Math.PI;\n // var endAngle = 1.9 * Math.PI;\n // var counterClockwise = false;\n // context.arc(x, y, radius, startAngle, endAngle, counterClockwise);\n\n ctx.lineTo(pos.x, pos.y);\n ctx.lineWidth = options.lineWidth;\n ctx.stroke();\n ctx.restore();\n\n this.moveCallback({\n x: pos.x,\n y: pos.y,\n animated: options.animated\n });\n } else if (targetPos.equals(pos)) {\n this.currentSegmentIndex += 1;\n this.startSegment();\n }\n};\n\nexports.default = AnimatedPolyline;\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getTransformPropertyName = undefined;\nexports.$ = $;\nexports.getRelPosition = getRelPosition;\n\nvar _fastMemoize = __webpack_require__(6);\n\nvar _fastMemoize2 = _interopRequireDefault(_fastMemoize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar doc = document;\nvar body = doc.body;\n\nfunction $(id) {\n return doc.getElementById(id);\n}\n\n/* \n * Get position of `node` relative to a specified\n * `ancestor`\n */\nfunction getRelPosition(node, ancestor) {\n var top = 0;\n var left = 0;\n\n while (node) {\n if (node.tagName) {\n top = top + node.offsetTop;\n left = left + node.offsetLeft;\n node = node.offsetParent;\n } else {\n node = node.parentNode;\n }\n if (node === ancestor) {\n node = null;\n }\n }\n\n return [left, top];\n};\n\n/*\n * Get prefixed or un-prefixed name of \"transform\" property\n * in this browser.\n */\nvar getTransformPropertyName = exports.getTransformPropertyName = (0, _fastMemoize2.default)(function () {\n var prefixes = ['', 'webkit', 'moz', 'ms'];\n for (var i = 0, ilen = prefixes.length; i < ilen; i++) {\n var prefix = prefixes[i];\n var propertyName = prefix + (prefix ? 'T' : 't') + 'ransform';\n if (typeof body.style[propertyName] !== 'undefined') {\n return propertyName;\n }\n }\n});\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n\n\n/***/ }),\n/* 4 */,\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _debounce = __webpack_require__(3);\n\nvar _debounce2 = _interopRequireDefault(_debounce);\n\nvar _domUtil = __webpack_require__(2);\n\nvar _scrollNav = __webpack_require__(7);\n\nvar _scrollNav2 = _interopRequireDefault(_scrollNav);\n\nvar _animatedFavicon = __webpack_require__(10);\n\nvar _animatedFavicon2 = _interopRequireDefault(_animatedFavicon);\n\nvar _facebook = __webpack_require__(12);\n\nvar _facebook2 = _interopRequireDefault(_facebook);\n\nvar _ga = __webpack_require__(13);\n\nvar _ga2 = _interopRequireDefault(_ga);\n\n__webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar doc = document;\nvar bod = doc.body;\n\nfunction initialize() {\n var slice = Array.prototype.slice;\n var sections = slice.call(doc.getElementsByTagName('section')).concat(slice.call(doc.getElementsByClassName('project')));\n var nav = new _scrollNav2.default(sections);\n\n window.addEventListener('resize', (0, _debounce2.default)(nav.redrawConnectors, 500));\n\n nav.addHandler('comicSans', function (section) {\n section.className += ' comic-sans';\n }, function (section) {\n section.className = section.className.replace('comic-sans', '');\n });\n\n nav.addStyleChanges([{\n el: (0, _domUtil.$)('sidebar'),\n 0: 'top:120px',\n 200: 'top:10px'\n }, {\n el: (0, _domUtil.$)('title'),\n 0: 'opacity:1; top:22px; transform:rotate(9deg)',\n 200: 'opacity:0; top:500px; transform:rotate(130deg)'\n }]);\n\n document.getElementsByTagName('html')[0].classList.remove('loading');\n\n (0, _animatedFavicon2.default)();\n (0, _facebook2.default)();\n (0, _ga2.default)();\n}\n\nvar annoyingMode = false;\nvar gifViewerMode = false;\nvar imageCredit = void 0;\nvar imageCreditText = void 0;\nvar expandLink = void 0;\n\n// Wrap event handler to match exact element and not bubble\nfunction eventHandlerFor(element, handler, otherElHandler) {\n return function (e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n if (typeof e.cancelBubble !== 'undefined') {\n e.cancelBubble = true;\n }\n if (e.target !== element) {\n if (otherElHandler) {\n otherElHandler(e);\n }\n return;\n }\n handler(e);\n };\n}\n\n/* Make background go crazy for psychedelic unicorns on-hover */\nfunction toggleAnnoyingMode(on) {\n if (!annoyingMode && on) {\n annoyingMode = true;\n bod.classList.add('annoying');\n } else if (!on && !gifViewerMode) {\n annoyingMode = false;\n bod.className = bod.classList.remove('annoying');\n }\n}\n\nfunction toggleGifViewer(on) {\n toggleAnnoyingMode(on);\n if (!gifViewerMode && on) {\n gifViewerMode = true;\n bod.classList.add('gif-mode');\n } else if (!on) {\n gifViewerMode = false;\n bod.classList.remove('gif-mode');\n }\n}\n\nbod.addEventListener('mouseover', eventHandlerFor(bod, function () {\n if (!annoyingMode) {\n annoyingMode = true;\n bod.className += ' annoying';\n }\n}, function () {\n toggleAnnoyingMode(false);\n}));\n\nvar giphyPromise = void 0;\nfunction initializeGiphy() {\n if (giphyPromise) {\n return giphyPromise;\n }\n giphyPromise = new Promise(function (resolve) {\n __webpack_require__.e/* require.ensure */(0).then((function (require) {\n resolve(__webpack_require__( /* webpackChunkName: \"giphy\" */15));\n }).bind(null, __webpack_require__)).catch(__webpack_require__.oe);\n }).then(function (Giphy) {\n return new Giphy.default('edf9d49ffe4c45ed881c35edd4b14151');\n }) // eslint-disable-line new-cap\n .catch(function (error) {\n return console.log('Failed to load Giphy JS SDK', error);\n });\n return giphyPromise;\n}\n\nbod.addEventListener('click', eventHandlerFor(bod, function () {\n initializeGiphy().then(function (g) {\n return g.randomGIF('abstract');\n }).then(function (o) {\n toggleAnnoyingMode(true);\n bod.style.backgroundImage = 'url(' + o.images.original.url + ')';\n\n if (!imageCredit) {\n imageCredit = doc.createElement('div');\n imageCredit.id = 'imageCredit';\n imageCredit.className = 'image-credit';\n\n expandLink = doc.createElement('a');\n expandLink.className = 'expand-link hidden';\n expandLink.innerHTML = '→';\n expandLink.addEventListener('click', function (e) {\n e.preventDefault();\n if (expandLink.expanded) {\n expandLink.expanded = false;\n toggleGifViewer(false);\n } else {\n expandLink.expanded = true;\n toggleGifViewer(true);\n }\n return false;\n });\n imageCredit.appendChild(expandLink);\n\n imageCreditText = doc.createElement('span');\n imageCredit.appendChild(imageCreditText);\n\n bod.appendChild(imageCredit);\n window.setTimeout(function () {\n expandLink.className = expandLink.className.replace('hidden', '');\n }, 0);\n }\n\n var creditURL = o.source_post_url || o.source;\n if (creditURL.indexOf('http') !== 0) {\n creditURL = o.url;\n }\n\n var text = '\\n GIF by:\\n ' + o.username + '
\\n Via Giphy\\n ';\n imageCreditText.innerHTML = text;\n }).catch(function (error) {\n return console.error('Error retrieving GIF', error);\n });\n}));\n\ninitialize();\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n//\n// Main\n//\n\nfunction memoize (fn, options) {\n var cache = options && options.cache\n ? options.cache\n : cacheDefault\n\n var serializer = options && options.serializer\n ? options.serializer\n : serializerDefault\n\n var strategy = options && options.strategy\n ? options.strategy\n : strategyDefault\n\n return strategy(fn, {\n cache: cache,\n serializer: serializer\n })\n}\n\n//\n// Strategy\n//\n\nfunction isPrimitive (value) {\n return value == null || typeof value === 'number' || typeof value === 'boolean' // || typeof value === \"string\" 'unsafe' primitive for our needs\n}\n\nfunction monadic (fn, cache, serializer, arg) {\n var cacheKey = isPrimitive(arg) ? arg : serializer(arg)\n\n var computedValue = cache.get(cacheKey)\n if (typeof computedValue === 'undefined') {\n computedValue = fn.call(this, arg)\n cache.set(cacheKey, computedValue)\n }\n\n return computedValue\n}\n\nfunction variadic (fn, cache, serializer) {\n var args = Array.prototype.slice.call(arguments, 3)\n var cacheKey = serializer(args)\n\n var computedValue = cache.get(cacheKey)\n if (typeof computedValue === 'undefined') {\n computedValue = fn.apply(this, args)\n cache.set(cacheKey, computedValue)\n }\n\n return computedValue\n}\n\nfunction assemble (fn, context, strategy, cache, serialize) {\n return strategy.bind(\n context,\n fn,\n cache,\n serialize\n )\n}\n\nfunction strategyDefault (fn, options) {\n var strategy = fn.length === 1 ? monadic : variadic\n\n return assemble(\n fn,\n this,\n strategy,\n options.cache.create(),\n options.serializer\n )\n}\n\nfunction strategyVariadic (fn, options) {\n var strategy = variadic\n\n return assemble(\n fn,\n this,\n strategy,\n options.cache.create(),\n options.serializer\n )\n}\n\nfunction strategyMonadic (fn, options) {\n var strategy = monadic\n\n return assemble(\n fn,\n this,\n strategy,\n options.cache.create(),\n options.serializer\n )\n}\n\n//\n// Serializer\n//\n\nfunction serializerDefault () {\n return JSON.stringify(arguments)\n}\n\n//\n// Cache\n//\n\nfunction ObjectWithoutPrototypeCache () {\n this.cache = Object.create(null)\n}\n\nObjectWithoutPrototypeCache.prototype.has = function (key) {\n return (key in this.cache)\n}\n\nObjectWithoutPrototypeCache.prototype.get = function (key) {\n return this.cache[key]\n}\n\nObjectWithoutPrototypeCache.prototype.set = function (key, value) {\n this.cache[key] = value\n}\n\nvar cacheDefault = {\n create: function create () {\n return new ObjectWithoutPrototypeCache()\n }\n}\n\n//\n// API\n//\n\nmodule.exports = memoize\nmodule.exports.strategies = {\n variadic: strategyVariadic,\n monadic: strategyMonadic\n}\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _debounce = __webpack_require__(3);\n\nvar _debounce2 = _interopRequireDefault(_debounce);\n\nvar _domUtil = __webpack_require__(2);\n\nvar _connector = __webpack_require__(8);\n\nvar _connector2 = _interopRequireDefault(_connector);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar doc = document;\nvar bod = doc.body;\nvar win = window;\n\nvar ACTIVE = 'active';\nvar ACTIVE_REGEX = new RegExp(ACTIVE + '\\\\w*');\nvar MARGIN = 20;\n\n/**\n * Manages scroll-driven effects\n *\n * TODO: split out scroll-monitoring logic from business logic\n * (Just use e.g. https://github.com/stutrek/scrollMonitor for scroll-monitoring logic)\n */\n\nvar ScrollNav = function () {\n function ScrollNav(sections) {\n var _this = this;\n\n _classCallCheck(this, ScrollNav);\n\n this.redrawConnectors = function () {\n _this.foreachSection(function (section) {\n var connector = section.connector;\n if (!connector) {\n return;\n }\n connector.clear();\n connector.draw();\n });\n };\n\n this.sections = sections;\n this.currentSection = undefined;\n this.activeConnector = undefined;\n\n this.sectionActivateHandlers = {};\n this.sectionDeactivateHandlers = {};\n\n this.foreachSection(function (section) {\n section.addEventListener('click', function () {\n return _this.activateSection(section);\n });\n });\n\n window.setTimeout(function () {\n if (!_this.currentSection && !bod.scrollTop) {\n _this.activateSection((0, _domUtil.$)('about'));\n }\n }, 1000);\n\n // Cache DOM positioning and size properties for sections\n var calculateSectionProperties = function calculateSectionProperties() {\n for (var i = 0, ilen = _this.sections.length; i < ilen; i++) {\n var section = _this.sections[i];\n var posTop = section.offsetTop;\n section.setAttribute('data-offset-top', posTop);\n section.setAttribute('data-client-height', section.clientHeight);\n }\n };\n\n window.addEventListener('resize', (0, _debounce2.default)(calculateSectionProperties), 60);\n calculateSectionProperties();\n\n window.addEventListener('scroll', (0, _debounce2.default)(function () {\n var position = _this.position();\n var height = _this.browserHeight();\n var activatePosition = position + height / 2.5;\n\n for (var i = 0, ilen = _this.sections.length; i < ilen; i++) {\n var section = _this.sections[i];\n var posTop = parseInt(section.getAttribute('data-offset-top'), 10);\n var posBottom = posTop + parseInt(section.getAttribute('data-client-height'), 10);\n\n if (activatePosition < posBottom && activatePosition > posTop) {\n if (_this.activateSection(section)) {\n break;\n }\n }\n }\n }, 90));\n }\n\n _createClass(ScrollNav, [{\n key: 'position',\n value: function position() {\n return win.pageYOffset || bod.scrollTop;\n }\n }, {\n key: 'browserHeight',\n value: function browserHeight() {\n return win.innerHeight || doc.documentElement.clientHeight || bod.clientHeight;\n }\n }, {\n key: 'foreachSection',\n value: function foreachSection(func) {\n for (var i = 0, ilen = this.sections.length; i < ilen; i++) {\n func(this.sections[i]);\n }\n }\n\n // Return the main figure for the specified section\n\n }, {\n key: 'getFigureForSection',\n value: function getFigureForSection(section) {\n var figure = section.getElementsByTagName('figure');\n if (!figure.length) return false;\n return figure[0];\n }\n\n // Get first child of the active section with the specified tag name\n\n }, {\n key: 'getChildByTagName',\n value: function getChildByTagName(tagName) {\n var els = this.currentSection.getElementsByTagName(tagName);\n if (!els.length) return false;\n return els[0];\n }\n }, {\n key: 'activateSection',\n value: function activateSection(section) {\n // let's consider this a success; the section is already current\n if (section === this.currentSection) return true;\n\n // skip if section wasn't found or is already active\n if (!section || ACTIVE_REGEX.test(section.className)) {\n return false;\n }\n\n var figure = this.getFigureForSection(section);\n if (!figure && !this.hasHandlerForSection(section)) return false;\n\n // don't listen on sections that contain project sub-sections (we listen to the sub-sections)\n if (section.tagName.toLowerCase() === 'section' && section.getElementsByClassName('project').length) {\n return false;\n }\n\n // Deactivate last section\n if (this.currentSection) {\n this.callSectionHandler(true);\n }\n\n this.currentSection = section;\n\n section.className = section.className.replace(ACTIVE, '');\n section.className += ' ' + ACTIVE;\n\n if (figure) {\n figure.style.top = this.position() + document.documentElement.clientHeight - figure.offsetHeight - MARGIN + 'px';\n this.drawConnector();\n }\n\n this.callSectionHandler();\n return true;\n }\n }, {\n key: 'addHandler',\n value: function addHandler(sectionId, activateHandler, deactivateHandler) {\n this.sectionActivateHandlers[sectionId] = activateHandler;\n this.sectionDeactivateHandlers[sectionId] = deactivateHandler;\n }\n }, {\n key: 'hasHandlerForSection',\n value: function hasHandlerForSection(section) {\n if (typeof this.sectionActivateHandlers[section.id] === 'function') {\n return true;\n }\n return false;\n }\n }, {\n key: 'callSectionHandler',\n value: function callSectionHandler(deactivate) {\n var section = this.currentSection;\n var id = section.id;\n var handlers = this.sectionActivateHandlers;\n if (deactivate) {\n handlers = this.sectionDeactivateHandlers;\n }\n if (typeof handlers[id] === 'function') {\n handlers[id].call(null, section);\n }\n }\n }, {\n key: 'getConnector',\n value: function getConnector(section) {\n var _this2 = this;\n\n var title = this.getChildByTagName('h3') || this.getChildByTagName('h2');\n var figure = this.getFigureForSection(section);\n var connector = section.connector;\n\n if (connector) {\n return connector;\n }\n\n connector = new _connector2.default({\n parentEl: (0, _domUtil.$)('content'),\n src: title,\n dest: figure,\n style: {\n marginRight: 50,\n marginLeft: 5\n }\n });\n\n connector.addListener('cleared', function () {\n if (!_this2.currentSection) return;\n _this2.currentSection.className = _this2.currentSection.className.replace('active', '');\n });\n\n section.connector = connector;\n return connector;\n }\n }, {\n key: 'drawConnector',\n value: function drawConnector() {\n this.activeConnector = this.getConnector(this.currentSection);\n this.activeConnector.draw();\n }\n }]);\n\n return ScrollNav;\n}();\n\nexports.default = ScrollNav;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _domUtil = __webpack_require__(2);\n\nvar _event_target = __webpack_require__(9);\n\nvar _event_target2 = _interopRequireDefault(_event_target);\n\nvar _point = __webpack_require__(0);\n\nvar _point2 = _interopRequireDefault(_point);\n\nvar _polyline = __webpack_require__(1);\n\nvar _polyline2 = _interopRequireDefault(_polyline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**\n * Connector draws a line between two DOM elements using