var Turbolinks=function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId]){return installedModules[moduleId].exports}var module=installedModules[moduleId]={i:moduleId,l:false,exports:{}};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.l=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.d=function(exports,name,getter){if(!__webpack_require__.o(exports,name)){Object.defineProperty(exports,name,{enumerable:true,get:getter})}};__webpack_require__.r=function(exports){if(typeof Symbol!=="undefined"&&Symbol.toStringTag){Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"})}Object.defineProperty(exports,"__esModule",{value:true})};__webpack_require__.t=function(value,mode){if(mode&1)value=__webpack_require__(value);if(mode&8)return value;if(mode&4&&typeof value==="object"&&value&&value.__esModule)return value;var ns=Object.create(null);__webpack_require__.r(ns);Object.defineProperty(ns,"default",{enumerable:true,value:value});if(mode&2&&typeof value!="string")for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns};__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module["default"]}:function getModuleExports(){return module};__webpack_require__.d(getter,"a",getter);return getter};__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)};__webpack_require__.p="";return __webpack_require__(__webpack_require__.s="./src/turbolinks/index.js")}({"./src/turbolinks/browser_adapter.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n __webpack_require__(/*! ./http_request */ "./src/turbolinks/http_request.js");\n\n __webpack_require__(/*! ./progress_bar */ "./src/turbolinks/progress_bar.js");\n\n Turbolinks.BrowserAdapter = (function() {\n var NETWORK_FAILURE, TIMEOUT_FAILURE, ref;\n\n ref = Turbolinks.HttpRequest, NETWORK_FAILURE = ref.NETWORK_FAILURE, TIMEOUT_FAILURE = ref.TIMEOUT_FAILURE;\n\n function BrowserAdapter(controller) {\n this.controller = controller;\n this.showProgressBar = bind(this.showProgressBar, this);\n this.progressBar = new Turbolinks.ProgressBar;\n }\n\n BrowserAdapter.prototype.visitProposedToLocationWithAction = function(location, action) {\n return this.controller.startVisitToLocationWithAction(location, action);\n };\n\n BrowserAdapter.prototype.visitStarted = function(visit) {\n visit.issueRequest();\n visit.changeHistory();\n return visit.loadCachedSnapshot();\n };\n\n BrowserAdapter.prototype.visitRequestStarted = function(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action !== "restore") {\n return this.showProgressBarAfterDelay();\n } else {\n return this.showProgressBar();\n }\n };\n\n BrowserAdapter.prototype.visitRequestProgressed = function(visit) {\n return this.progressBar.setValue(visit.progress);\n };\n\n BrowserAdapter.prototype.visitRequestCompleted = function(visit) {\n return visit.loadResponse();\n };\n\n BrowserAdapter.prototype.visitRequestFailedWithStatusCode = function(visit, statusCode) {\n switch (statusCode) {\n case NETWORK_FAILURE:\n case TIMEOUT_FAILURE:\n return this.reload();\n default:\n return visit.loadResponse();\n }\n };\n\n BrowserAdapter.prototype.visitRequestFinished = function(visit) {\n return this.hideProgressBar();\n };\n\n BrowserAdapter.prototype.visitCompleted = function(visit) {\n return visit.followRedirect();\n };\n\n BrowserAdapter.prototype.pageInvalidated = function() {\n return this.reload();\n };\n\n BrowserAdapter.prototype.showProgressBarAfterDelay = function() {\n return this.progressBarTimeout = setTimeout(this.showProgressBar, this.controller.progressBarDelay);\n };\n\n BrowserAdapter.prototype.showProgressBar = function() {\n return this.progressBar.show();\n };\n\n BrowserAdapter.prototype.hideProgressBar = function() {\n this.progressBar.hide();\n return clearTimeout(this.progressBarTimeout);\n };\n\n BrowserAdapter.prototype.reload = function() {\n return window.location.reload();\n };\n\n return BrowserAdapter;\n\n })();\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/browser_adapter.js?')},"./src/turbolinks/controller.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n __webpack_require__(/*! ./location */ "./src/turbolinks/location.js");\n\n __webpack_require__(/*! ./browser_adapter */ "./src/turbolinks/browser_adapter.js");\n\n __webpack_require__(/*! ./history */ "./src/turbolinks/history.js");\n\n __webpack_require__(/*! ./view */ "./src/turbolinks/view.js");\n\n __webpack_require__(/*! ./scroll_manager */ "./src/turbolinks/scroll_manager.js");\n\n __webpack_require__(/*! ./snapshot_cache */ "./src/turbolinks/snapshot_cache.js");\n\n __webpack_require__(/*! ./visit */ "./src/turbolinks/visit.js");\n\n Turbolinks.Controller = (function() {\n function Controller() {\n this.clickBubbled = bind(this.clickBubbled, this);\n this.clickCaptured = bind(this.clickCaptured, this);\n this.pageLoaded = bind(this.pageLoaded, this);\n this.history = new Turbolinks.History(this);\n this.view = new Turbolinks.View(this);\n this.scrollManager = new Turbolinks.ScrollManager(this);\n this.restorationData = {};\n this.clearCache();\n this.setProgressBarDelay(500);\n }\n\n Controller.prototype.start = function() {\n if (Turbolinks.supported && !this.started) {\n addEventListener("click", this.clickCaptured, true);\n addEventListener("DOMContentLoaded", this.pageLoaded, false);\n this.scrollManager.start();\n this.startHistory();\n this.started = true;\n return this.enabled = true;\n }\n };\n\n Controller.prototype.disable = function() {\n return this.enabled = false;\n };\n\n Controller.prototype.stop = function() {\n if (this.started) {\n removeEventListener("click", this.clickCaptured, true);\n removeEventListener("DOMContentLoaded", this.pageLoaded, false);\n this.scrollManager.stop();\n this.stopHistory();\n return this.started = false;\n }\n };\n\n Controller.prototype.clearCache = function() {\n return this.cache = new Turbolinks.SnapshotCache(10);\n };\n\n Controller.prototype.visit = function(location, options) {\n var action, ref;\n if (options == null) {\n options = {};\n }\n location = Turbolinks.Location.wrap(location);\n if (this.applicationAllowsVisitingLocation(location)) {\n if (this.locationIsVisitable(location)) {\n action = (ref = options.action) != null ? ref : "advance";\n return this.adapter.visitProposedToLocationWithAction(location, action);\n } else {\n return window.location = location;\n }\n }\n };\n\n Controller.prototype.startVisitToLocationWithAction = function(location, action, restorationIdentifier) {\n var restorationData;\n if (Turbolinks.supported) {\n restorationData = this.getRestorationDataForIdentifier(restorationIdentifier);\n return this.startVisit(location, action, {\n restorationData: restorationData\n });\n } else {\n return window.location = location;\n }\n };\n\n Controller.prototype.setProgressBarDelay = function(delay) {\n return this.progressBarDelay = delay;\n };\n\n Controller.prototype.startHistory = function() {\n this.location = Turbolinks.Location.wrap(window.location);\n this.restorationIdentifier = Turbolinks.uuid();\n this.history.start();\n return this.history.replace(this.location, this.restorationIdentifier);\n };\n\n Controller.prototype.stopHistory = function() {\n return this.history.stop();\n };\n\n Controller.prototype.pushHistoryWithLocationAndRestorationIdentifier = function(location, restorationIdentifier1) {\n this.restorationIdentifier = restorationIdentifier1;\n this.location = Turbolinks.Location.wrap(location);\n return this.history.push(this.location, this.restorationIdentifier);\n };\n\n Controller.prototype.replaceHistoryWithLocationAndRestorationIdentifier = function(location, restorationIdentifier1) {\n this.restorationIdentifier = restorationIdentifier1;\n this.location = Turbolinks.Location.wrap(location);\n return this.history.replace(this.location, this.restorationIdentifier);\n };\n\n Controller.prototype.historyPoppedToLocationWithRestorationIdentifier = function(location, restorationIdentifier1) {\n var restorationData;\n this.restorationIdentifier = restorationIdentifier1;\n if (this.enabled) {\n restorationData = this.getRestorationDataForIdentifier(this.restorationIdentifier);\n this.startVisit(location, "restore", {\n restorationIdentifier: this.restorationIdentifier,\n restorationData: restorationData,\n historyChanged: true\n });\n return this.location = Turbolinks.Location.wrap(location);\n } else {\n return this.adapter.pageInvalidated();\n }\n };\n\n Controller.prototype.getCachedSnapshotForLocation = function(location) {\n var ref;\n return (ref = this.cache.get(location)) != null ? ref.clone() : void 0;\n };\n\n Controller.prototype.shouldCacheSnapshot = function() {\n return this.view.getSnapshot().isCacheable();\n };\n\n Controller.prototype.cacheSnapshot = function() {\n var location, snapshot;\n if (this.shouldCacheSnapshot()) {\n this.notifyApplicationBeforeCachingSnapshot();\n snapshot = this.view.getSnapshot();\n location = this.lastRenderedLocation;\n return Turbolinks.defer((function(_this) {\n return function() {\n return _this.cache.put(location, snapshot.clone());\n };\n })(this));\n }\n };\n\n Controller.prototype.scrollToAnchor = function(anchor) {\n var element;\n if (element = this.view.getElementForAnchor(anchor)) {\n return this.scrollToElement(element);\n } else {\n return this.scrollToPosition({\n x: 0,\n y: 0\n });\n }\n };\n\n Controller.prototype.scrollToElement = function(element) {\n return this.scrollManager.scrollToElement(element);\n };\n\n Controller.prototype.scrollToPosition = function(position) {\n return this.scrollManager.scrollToPosition(position);\n };\n\n Controller.prototype.scrollPositionChanged = function(scrollPosition) {\n var restorationData;\n restorationData = this.getCurrentRestorationData();\n return restorationData.scrollPosition = scrollPosition;\n };\n\n Controller.prototype.render = function(options, callback) {\n return this.view.render(options, callback);\n };\n\n Controller.prototype.viewInvalidated = function() {\n return this.adapter.pageInvalidated();\n };\n\n Controller.prototype.viewWillRender = function(newBody) {\n return this.notifyApplicationBeforeRender(newBody);\n };\n\n Controller.prototype.viewRendered = function() {\n this.lastRenderedLocation = this.currentVisit.location;\n return this.notifyApplicationAfterRender();\n };\n\n Controller.prototype.pageLoaded = function() {\n this.lastRenderedLocation = this.location;\n return this.notifyApplicationAfterPageLoad();\n };\n\n Controller.prototype.clickCaptured = function() {\n removeEventListener("click", this.clickBubbled, false);\n return addEventListener("click", this.clickBubbled, false);\n };\n\n Controller.prototype.clickBubbled = function(event) {\n var action, link, location;\n if (this.enabled && this.clickEventIsSignificant(event)) {\n if (link = this.getVisitableLinkForNode(event.target)) {\n if (location = this.getVisitableLocationForLink(link)) {\n if (this.applicationAllowsFollowingLinkToLocation(link, location)) {\n event.preventDefault();\n action = this.getActionForLink(link);\n return this.visit(location, {\n action: action\n });\n }\n }\n }\n }\n };\n\n Controller.prototype.applicationAllowsFollowingLinkToLocation = function(link, location) {\n var event;\n event = this.notifyApplicationAfterClickingLinkToLocation(link, location);\n return !event.defaultPrevented;\n };\n\n Controller.prototype.applicationAllowsVisitingLocation = function(location) {\n var event;\n event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented;\n };\n\n Controller.prototype.notifyApplicationAfterClickingLinkToLocation = function(link, location) {\n return Turbolinks.dispatch("turbolinks:click", {\n target: link,\n data: {\n url: location.absoluteURL\n },\n cancelable: true\n });\n };\n\n Controller.prototype.notifyApplicationBeforeVisitingLocation = function(location) {\n return Turbolinks.dispatch("turbolinks:before-visit", {\n data: {\n url: location.absoluteURL\n },\n cancelable: true\n });\n };\n\n Controller.prototype.notifyApplicationAfterVisitingLocation = function(location) {\n return Turbolinks.dispatch("turbolinks:visit", {\n data: {\n url: location.absoluteURL\n }\n });\n };\n\n Controller.prototype.notifyApplicationBeforeCachingSnapshot = function() {\n return Turbolinks.dispatch("turbolinks:before-cache");\n };\n\n Controller.prototype.notifyApplicationBeforeRender = function(newBody) {\n return Turbolinks.dispatch("turbolinks:before-render", {\n data: {\n newBody: newBody\n }\n });\n };\n\n Controller.prototype.notifyApplicationAfterRender = function() {\n return Turbolinks.dispatch("turbolinks:render");\n };\n\n Controller.prototype.notifyApplicationAfterPageLoad = function(timing) {\n if (timing == null) {\n timing = {};\n }\n return Turbolinks.dispatch("turbolinks:load", {\n data: {\n url: this.location.absoluteURL,\n timing: timing\n }\n });\n };\n\n Controller.prototype.startVisit = function(location, action, properties) {\n var ref;\n if ((ref = this.currentVisit) != null) {\n ref.cancel();\n }\n this.currentVisit = this.createVisit(location, action, properties);\n this.currentVisit.start();\n return this.notifyApplicationAfterVisitingLocation(location);\n };\n\n Controller.prototype.createVisit = function(location, action, arg) {\n var historyChanged, ref, restorationData, restorationIdentifier, visit;\n ref = arg != null ? arg : {}, restorationIdentifier = ref.restorationIdentifier, restorationData = ref.restorationData, historyChanged = ref.historyChanged;\n visit = new Turbolinks.Visit(this, location, action);\n visit.restorationIdentifier = restorationIdentifier != null ? restorationIdentifier : Turbolinks.uuid();\n visit.restorationData = Turbolinks.copyObject(restorationData);\n visit.historyChanged = historyChanged;\n visit.referrer = this.location;\n return visit;\n };\n\n Controller.prototype.visitCompleted = function(visit) {\n return this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n };\n\n Controller.prototype.clickEventIsSignificant = function(event) {\n return !(event.defaultPrevented || event.target.isContentEditable || event.which > 1 || event.altKey || event.ctrlKey || event.metaKey || event.shiftKey);\n };\n\n Controller.prototype.getVisitableLinkForNode = function(node) {\n if (this.nodeIsVisitable(node)) {\n return Turbolinks.closest(node, "a[href]:not([target]):not([download])");\n }\n };\n\n Controller.prototype.getVisitableLocationForLink = function(link) {\n var location;\n location = new Turbolinks.Location(link.getAttribute("href"));\n if (this.locationIsVisitable(location)) {\n return location;\n }\n };\n\n Controller.prototype.getActionForLink = function(link) {\n var ref;\n return (ref = link.getAttribute("data-turbolinks-action")) != null ? ref : "advance";\n };\n\n Controller.prototype.nodeIsVisitable = function(node) {\n var container;\n if (container = Turbolinks.closest(node, "[data-turbolinks]")) {\n return container.getAttribute("data-turbolinks") !== "false";\n } else {\n return true;\n }\n };\n\n Controller.prototype.locationIsVisitable = function(location) {\n return location.isPrefixedBy(this.view.getRootLocation()) && location.isHTML();\n };\n\n Controller.prototype.getCurrentRestorationData = function() {\n return this.getRestorationDataForIdentifier(this.restorationIdentifier);\n };\n\n Controller.prototype.getRestorationDataForIdentifier = function(identifier) {\n var base;\n return (base = this.restorationData)[identifier] != null ? base[identifier] : base[identifier] = {};\n };\n\n return Controller;\n\n })();\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/controller.js?')},"./src/turbolinks/error_renderer.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n __webpack_require__(/*! ./renderer */ "./src/turbolinks/renderer.js");\n\n Turbolinks.ErrorRenderer = (function(superClass) {\n extend(ErrorRenderer, superClass);\n\n function ErrorRenderer(html) {\n var htmlElement;\n htmlElement = document.createElement("html");\n htmlElement.innerHTML = html;\n this.newHead = htmlElement.querySelector("head");\n this.newBody = htmlElement.querySelector("body");\n }\n\n ErrorRenderer.prototype.render = function(callback) {\n return this.renderView((function(_this) {\n return function() {\n _this.replaceHeadAndBody();\n _this.activateBodyScriptElements();\n return callback();\n };\n })(this));\n };\n\n ErrorRenderer.prototype.replaceHeadAndBody = function() {\n var body, head;\n head = document.head, body = document.body;\n head.parentNode.replaceChild(this.newHead, head);\n return body.parentNode.replaceChild(this.newBody, body);\n };\n\n ErrorRenderer.prototype.activateBodyScriptElements = function() {\n var element, i, len, ref, replaceableElement, results;\n ref = this.getScriptElements();\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n replaceableElement = ref[i];\n element = this.createScriptElement(replaceableElement);\n results.push(replaceableElement.parentNode.replaceChild(element, replaceableElement));\n }\n return results;\n };\n\n ErrorRenderer.prototype.getScriptElements = function() {\n return document.documentElement.querySelectorAll("script");\n };\n\n return ErrorRenderer;\n\n })(Turbolinks.Renderer);\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/error_renderer.js?')},"./src/turbolinks/head_details.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n Turbolinks.HeadDetails = (function() {\n var elementIsMetaElementWithName, elementIsScript, elementIsStylesheet, elementIsTracked, elementType;\n\n HeadDetails.fromHeadElement = function(headElement) {\n var ref;\n return new this((ref = headElement != null ? headElement.childNodes : void 0) != null ? ref : []);\n };\n\n function HeadDetails(childNodes) {\n var base, data, i, key, len, node;\n this.elements = {};\n for (i = 0, len = childNodes.length; i < len; i++) {\n node = childNodes[i];\n if (!(node.nodeType === Node.ELEMENT_NODE)) {\n continue;\n }\n key = node.outerHTML;\n data = (base = this.elements)[key] != null ? base[key] : base[key] = {\n type: elementType(node),\n tracked: elementIsTracked(node),\n elements: []\n };\n data.elements.push(node);\n }\n }\n\n HeadDetails.prototype.hasElementWithKey = function(key) {\n return key in this.elements;\n };\n\n HeadDetails.prototype.getTrackedElementSignature = function() {\n var key, tracked;\n return ((function() {\n var ref, results;\n ref = this.elements;\n results = [];\n for (key in ref) {\n tracked = ref[key].tracked;\n if (tracked) {\n results.push(key);\n }\n }\n return results;\n }).call(this)).join("");\n };\n\n HeadDetails.prototype.getScriptElementsNotInDetails = function(headDetails) {\n return this.getElementsMatchingTypeNotInDetails("script", headDetails);\n };\n\n HeadDetails.prototype.getStylesheetElementsNotInDetails = function(headDetails) {\n return this.getElementsMatchingTypeNotInDetails("stylesheet", headDetails);\n };\n\n HeadDetails.prototype.getElementsMatchingTypeNotInDetails = function(matchedType, headDetails) {\n var elements, key, ref, ref1, results, type;\n ref = this.elements;\n results = [];\n for (key in ref) {\n ref1 = ref[key], type = ref1.type, elements = ref1.elements;\n if (type === matchedType && !headDetails.hasElementWithKey(key)) {\n results.push(elements[0]);\n }\n }\n return results;\n };\n\n HeadDetails.prototype.getProvisionalElements = function() {\n var elements, key, provisionalElements, ref, ref1, tracked, type;\n provisionalElements = [];\n ref = this.elements;\n for (key in ref) {\n ref1 = ref[key], type = ref1.type, tracked = ref1.tracked, elements = ref1.elements;\n if ((type == null) && !tracked) {\n provisionalElements.push.apply(provisionalElements, elements);\n } else if (elements.length > 1) {\n provisionalElements.push.apply(provisionalElements, elements.slice(1));\n }\n }\n return provisionalElements;\n };\n\n HeadDetails.prototype.getMetaValue = function(name) {\n var ref;\n return (ref = this.findMetaElementByName(name)) != null ? ref.getAttribute("content") : void 0;\n };\n\n HeadDetails.prototype.findMetaElementByName = function(name) {\n var element, elements, key, ref;\n element = void 0;\n ref = this.elements;\n for (key in ref) {\n elements = ref[key].elements;\n if (elementIsMetaElementWithName(elements[0], name)) {\n element = elements[0];\n }\n }\n return element;\n };\n\n elementType = function(element) {\n if (elementIsScript(element)) {\n return "script";\n } else if (elementIsStylesheet(element)) {\n return "stylesheet";\n }\n };\n\n elementIsTracked = function(element) {\n return element.getAttribute("data-turbolinks-track") === "reload";\n };\n\n elementIsScript = function(element) {\n var tagName;\n tagName = element.tagName.toLowerCase();\n return tagName === "script";\n };\n\n elementIsStylesheet = function(element) {\n var tagName;\n tagName = element.tagName.toLowerCase();\n return tagName === "style" || (tagName === "link" && element.getAttribute("rel") === "stylesheet");\n };\n\n elementIsMetaElementWithName = function(element, name) {\n var tagName;\n tagName = element.tagName.toLowerCase();\n return tagName === "meta" && element.getAttribute("name") === name;\n };\n\n return HeadDetails;\n\n })();\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/head_details.js?')},"./src/turbolinks/helpers.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n var closest, match, preventDefaultSupported,\n slice = [].slice;\n\n Turbolinks.copyObject = function(object) {\n var key, result, value;\n result = {};\n for (key in object) {\n value = object[key];\n result[key] = value;\n }\n return result;\n };\n\n Turbolinks.closest = function(element, selector) {\n return closest.call(element, selector);\n };\n\n closest = (function() {\n var html, ref;\n html = document.documentElement;\n return (ref = html.closest) != null ? ref : function(selector) {\n var node;\n node = this;\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE && match.call(node, selector)) {\n return node;\n }\n node = node.parentNode;\n }\n };\n })();\n\n Turbolinks.defer = function(callback) {\n return setTimeout(callback, 1);\n };\n\n Turbolinks.throttle = function(fn) {\n var request;\n request = null;\n return function() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return request != null ? request : request = requestAnimationFrame((function(_this) {\n return function() {\n request = null;\n return fn.apply(_this, args);\n };\n })(this));\n };\n };\n\n Turbolinks.dispatch = function(eventName, arg) {\n var cancelable, data, event, preventDefault, ref, target;\n ref = arg != null ? arg : {}, target = ref.target, cancelable = ref.cancelable, data = ref.data;\n event = document.createEvent("Events");\n event.initEvent(eventName, true, cancelable === true);\n event.data = data != null ? data : {};\n if (event.cancelable && !preventDefaultSupported) {\n preventDefault = event.preventDefault;\n event.preventDefault = function() {\n if (!this.defaultPrevented) {\n Object.defineProperty(this, "defaultPrevented", {\n get: function() {\n return true;\n }\n });\n }\n return preventDefault.call(this);\n };\n }\n (target != null ? target : document).dispatchEvent(event);\n return event;\n };\n\n preventDefaultSupported = (function() {\n var event;\n event = document.createEvent("Events");\n event.initEvent("test", true, true);\n event.preventDefault();\n return event.defaultPrevented;\n })();\n\n Turbolinks.match = function(element, selector) {\n return match.call(element, selector);\n };\n\n match = (function() {\n var html, ref, ref1, ref2;\n html = document.documentElement;\n return (ref = (ref1 = (ref2 = html.matchesSelector) != null ? ref2 : html.webkitMatchesSelector) != null ? ref1 : html.msMatchesSelector) != null ? ref : html.mozMatchesSelector;\n })();\n\n Turbolinks.uuid = function() {\n var i, j, result;\n result = "";\n for (i = j = 1; j <= 36; i = ++j) {\n if (i === 9 || i === 14 || i === 19 || i === 24) {\n result += "-";\n } else if (i === 15) {\n result += "4";\n } else if (i === 20) {\n result += (Math.floor(Math.random() * 4) + 8).toString(16);\n } else {\n result += Math.floor(Math.random() * 15).toString(16);\n }\n }\n return result;\n };\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/helpers.js?')},"./src/turbolinks/history.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n Turbolinks.History = (function() {\n function History(delegate) {\n this.delegate = delegate;\n this.onPageLoad = bind(this.onPageLoad, this);\n this.onPopState = bind(this.onPopState, this);\n }\n\n History.prototype.start = function() {\n if (!this.started) {\n addEventListener("popstate", this.onPopState, false);\n addEventListener("load", this.onPageLoad, false);\n return this.started = true;\n }\n };\n\n History.prototype.stop = function() {\n if (this.started) {\n removeEventListener("popstate", this.onPopState, false);\n removeEventListener("load", this.onPageLoad, false);\n return this.started = false;\n }\n };\n\n History.prototype.push = function(location, restorationIdentifier) {\n location = Turbolinks.Location.wrap(location);\n return this.update("push", location, restorationIdentifier);\n };\n\n History.prototype.replace = function(location, restorationIdentifier) {\n location = Turbolinks.Location.wrap(location);\n return this.update("replace", location, restorationIdentifier);\n };\n\n History.prototype.onPopState = function(event) {\n var location, ref, restorationIdentifier, turbolinks;\n if (this.shouldHandlePopState()) {\n if (turbolinks = (ref = event.state) != null ? ref.turbolinks : void 0) {\n location = Turbolinks.Location.wrap(window.location);\n restorationIdentifier = turbolinks.restorationIdentifier;\n return this.delegate.historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier);\n }\n }\n };\n\n History.prototype.onPageLoad = function(event) {\n return Turbolinks.defer((function(_this) {\n return function() {\n return _this.pageLoaded = true;\n };\n })(this));\n };\n\n History.prototype.shouldHandlePopState = function() {\n return this.pageIsLoaded();\n };\n\n History.prototype.pageIsLoaded = function() {\n return this.pageLoaded || document.readyState === "complete";\n };\n\n History.prototype.update = function(method, location, restorationIdentifier) {\n var state;\n state = {\n turbolinks: {\n restorationIdentifier: restorationIdentifier\n }\n };\n return history[method + "State"](state, null, location);\n };\n\n return History;\n\n })();\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/history.js?')},"./src/turbolinks/http_request.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n Turbolinks.HttpRequest = (function() {\n HttpRequest.NETWORK_FAILURE = 0;\n\n HttpRequest.TIMEOUT_FAILURE = -1;\n\n HttpRequest.timeout = 60;\n\n function HttpRequest(delegate, location, referrer) {\n this.delegate = delegate;\n this.requestCanceled = bind(this.requestCanceled, this);\n this.requestTimedOut = bind(this.requestTimedOut, this);\n this.requestFailed = bind(this.requestFailed, this);\n this.requestLoaded = bind(this.requestLoaded, this);\n this.requestProgressed = bind(this.requestProgressed, this);\n this.url = Turbolinks.Location.wrap(location).requestURL;\n this.referrer = Turbolinks.Location.wrap(referrer).absoluteURL;\n this.createXHR();\n }\n\n HttpRequest.prototype.send = function() {\n var base;\n if (this.xhr && !this.sent) {\n this.notifyApplicationBeforeRequestStart();\n this.setProgress(0);\n this.xhr.send();\n this.sent = true;\n return typeof (base = this.delegate).requestStarted === "function" ? base.requestStarted() : void 0;\n }\n };\n\n HttpRequest.prototype.cancel = function() {\n if (this.xhr && this.sent) {\n return this.xhr.abort();\n }\n };\n\n HttpRequest.prototype.requestProgressed = function(event) {\n if (event.lengthComputable) {\n return this.setProgress(event.loaded / event.total);\n }\n };\n\n HttpRequest.prototype.requestLoaded = function() {\n return this.endRequest((function(_this) {\n return function() {\n var ref;\n if ((200 <= (ref = _this.xhr.status) && ref < 300)) {\n return _this.delegate.requestCompletedWithResponse(_this.xhr.responseText, _this.xhr.getResponseHeader("Turbolinks-Location"));\n } else {\n _this.failed = true;\n return _this.delegate.requestFailedWithStatusCode(_this.xhr.status, _this.xhr.responseText);\n }\n };\n })(this));\n };\n\n HttpRequest.prototype.requestFailed = function() {\n return this.endRequest((function(_this) {\n return function() {\n _this.failed = true;\n return _this.delegate.requestFailedWithStatusCode(_this.constructor.NETWORK_FAILURE);\n };\n })(this));\n };\n\n HttpRequest.prototype.requestTimedOut = function() {\n return this.endRequest((function(_this) {\n return function() {\n _this.failed = true;\n return _this.delegate.requestFailedWithStatusCode(_this.constructor.TIMEOUT_FAILURE);\n };\n })(this));\n };\n\n HttpRequest.prototype.requestCanceled = function() {\n return this.endRequest();\n };\n\n HttpRequest.prototype.notifyApplicationBeforeRequestStart = function() {\n return Turbolinks.dispatch("turbolinks:request-start", {\n data: {\n url: this.url,\n xhr: this.xhr\n }\n });\n };\n\n HttpRequest.prototype.notifyApplicationAfterRequestEnd = function() {\n return Turbolinks.dispatch("turbolinks:request-end", {\n data: {\n url: this.url,\n xhr: this.xhr\n }\n });\n };\n\n HttpRequest.prototype.createXHR = function() {\n this.xhr = new XMLHttpRequest;\n this.xhr.open("GET", this.url, true);\n this.xhr.timeout = this.constructor.timeout * 1000;\n this.xhr.setRequestHeader("Accept", "text/html, application/xhtml+xml");\n this.xhr.setRequestHeader("Turbolinks-Referrer", this.referrer);\n this.xhr.onprogress = this.requestProgressed;\n this.xhr.onload = this.requestLoaded;\n this.xhr.onerror = this.requestFailed;\n this.xhr.ontimeout = this.requestTimedOut;\n return this.xhr.onabort = this.requestCanceled;\n };\n\n HttpRequest.prototype.endRequest = function(callback) {\n if (this.xhr) {\n this.notifyApplicationAfterRequestEnd();\n if (callback != null) {\n callback.call(this);\n }\n return this.destroy();\n }\n };\n\n HttpRequest.prototype.setProgress = function(progress) {\n var base;\n this.progress = progress;\n return typeof (base = this.delegate).requestProgressed === "function" ? base.requestProgressed(this.progress) : void 0;\n };\n\n HttpRequest.prototype.destroy = function() {\n var base;\n this.setProgress(1);\n if (typeof (base = this.delegate).requestFinished === "function") {\n base.requestFinished();\n }\n this.delegate = null;\n return this.xhr = null;\n };\n\n return HttpRequest;\n\n })();\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/http_request.js?')},"./src/turbolinks/index.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n this.Turbolinks = {\n supported: (function() {\n return (window.history.pushState != null) && (window.requestAnimationFrame != null) && (window.addEventListener != null);\n })(),\n visit: function(location, options) {\n return Turbolinks.controller.visit(location, options);\n },\n clearCache: function() {\n return Turbolinks.controller.clearCache();\n },\n setProgressBarDelay: function(delay) {\n return Turbolinks.controller.setProgressBarDelay(delay);\n }\n };\n\n module.exports = this.Turbolinks;\n\n window.Turbolinks = this.Turbolinks;\n\n __webpack_require__(/*! ./helpers */ "./src/turbolinks/helpers.js");\n\n __webpack_require__(/*! ./controller */ "./src/turbolinks/controller.js");\n\n __webpack_require__(/*! ./script_warning */ "./src/turbolinks/script_warning.js");\n\n __webpack_require__(/*! ./start */ "./src/turbolinks/start.js");\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/index.js?')},"./src/turbolinks/location.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n Turbolinks.Location = (function() {\n var addTrailingSlash, getPrefixURL, stringEndsWith, stringStartsWith;\n\n Location.wrap = function(value) {\n if (value instanceof this) {\n return value;\n } else {\n return new this(value);\n }\n };\n\n function Location(url) {\n var anchorLength, linkWithAnchor;\n if (url == null) {\n url = "";\n }\n linkWithAnchor = document.createElement("a");\n linkWithAnchor.href = url.toString();\n this.absoluteURL = linkWithAnchor.href;\n anchorLength = linkWithAnchor.hash.length;\n if (anchorLength < 2) {\n this.requestURL = this.absoluteURL;\n } else {\n this.requestURL = this.absoluteURL.slice(0, -anchorLength);\n this.anchor = linkWithAnchor.hash.slice(1);\n }\n }\n\n Location.prototype.getOrigin = function() {\n return this.absoluteURL.split("/", 3).join("/");\n };\n\n Location.prototype.getPath = function() {\n var ref, ref1;\n return (ref = (ref1 = this.requestURL.match(/\\/\\/[^\\/]*(\\/[^?;]*)/)) != null ? ref1[1] : void 0) != null ? ref : "/";\n };\n\n Location.prototype.getPathComponents = function() {\n return this.getPath().split("/").slice(1);\n };\n\n Location.prototype.getLastPathComponent = function() {\n return this.getPathComponents().slice(-1)[0];\n };\n\n Location.prototype.getExtension = function() {\n var ref, ref1;\n return (ref = (ref1 = this.getLastPathComponent().match(/\\.[^.]*$/)) != null ? ref1[0] : void 0) != null ? ref : "";\n };\n\n Location.prototype.isHTML = function() {\n return this.getExtension().match(/^(?:|\\.(?:htm|html|xhtml))$/);\n };\n\n Location.prototype.isPrefixedBy = function(location) {\n var prefixURL;\n prefixURL = getPrefixURL(location);\n return this.isEqualTo(location) || stringStartsWith(this.absoluteURL, prefixURL);\n };\n\n Location.prototype.isEqualTo = function(location) {\n return this.absoluteURL === (location != null ? location.absoluteURL : void 0);\n };\n\n Location.prototype.toCacheKey = function() {\n return this.requestURL;\n };\n\n Location.prototype.toJSON = function() {\n return this.absoluteURL;\n };\n\n Location.prototype.toString = function() {\n return this.absoluteURL;\n };\n\n Location.prototype.valueOf = function() {\n return this.absoluteURL;\n };\n\n getPrefixURL = function(location) {\n return addTrailingSlash(location.getOrigin() + location.getPath());\n };\n\n addTrailingSlash = function(url) {\n if (stringEndsWith(url, "/")) {\n return url;\n } else {\n return url + "/";\n }\n };\n\n stringStartsWith = function(string, prefix) {\n return string.slice(0, prefix.length) === prefix;\n };\n\n stringEndsWith = function(string, suffix) {\n return string.slice(-suffix.length) === suffix;\n };\n\n return Location;\n\n })();\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/location.js?')},"./src/turbolinks/progress_bar.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n Turbolinks.ProgressBar = (function() {\n var ANIMATION_DURATION;\n\n ANIMATION_DURATION = 300;\n\n ProgressBar.defaultCSS = ".turbolinks-progress-bar {\\n position: fixed;\\n display: block;\\n top: 0;\\n left: 0;\\n height: 3px;\\n background: #0076ff;\\n z-index: 9999;\\n transition: width " + ANIMATION_DURATION + "ms ease-out, opacity " + (ANIMATION_DURATION / 2) + "ms " + (ANIMATION_DURATION / 2) + "ms ease-in;\\n transform: translate3d(0, 0, 0);\\n}";\n\n function ProgressBar() {\n this.trickle = bind(this.trickle, this);\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n }\n\n ProgressBar.prototype.show = function() {\n if (!this.visible) {\n this.visible = true;\n this.installStylesheetElement();\n this.installProgressElement();\n return this.startTrickling();\n }\n };\n\n ProgressBar.prototype.hide = function() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n return this.fadeProgressElement((function(_this) {\n return function() {\n _this.uninstallProgressElement();\n _this.stopTrickling();\n _this.visible = false;\n return _this.hiding = false;\n };\n })(this));\n }\n };\n\n ProgressBar.prototype.setValue = function(value) {\n this.value = value;\n return this.refresh();\n };\n\n ProgressBar.prototype.installStylesheetElement = function() {\n return document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n };\n\n ProgressBar.prototype.installProgressElement = function() {\n this.progressElement.style.width = 0;\n this.progressElement.style.opacity = 1;\n document.documentElement.insertBefore(this.progressElement, document.body);\n return this.refresh();\n };\n\n ProgressBar.prototype.fadeProgressElement = function(callback) {\n this.progressElement.style.opacity = 0;\n return setTimeout(callback, ANIMATION_DURATION * 1.5);\n };\n\n ProgressBar.prototype.uninstallProgressElement = function() {\n if (this.progressElement.parentNode) {\n return document.documentElement.removeChild(this.progressElement);\n }\n };\n\n ProgressBar.prototype.startTrickling = function() {\n return this.trickleInterval != null ? this.trickleInterval : this.trickleInterval = setInterval(this.trickle, ANIMATION_DURATION);\n };\n\n ProgressBar.prototype.stopTrickling = function() {\n clearInterval(this.trickleInterval);\n return this.trickleInterval = null;\n };\n\n ProgressBar.prototype.trickle = function() {\n return this.setValue(this.value + Math.random() / 100);\n };\n\n ProgressBar.prototype.refresh = function() {\n return requestAnimationFrame((function(_this) {\n return function() {\n return _this.progressElement.style.width = (10 + (_this.value * 90)) + "%";\n };\n })(this));\n };\n\n ProgressBar.prototype.createStylesheetElement = function() {\n var element;\n element = document.createElement("style");\n element.type = "text/css";\n element.textContent = this.constructor.defaultCSS;\n return element;\n };\n\n ProgressBar.prototype.createProgressElement = function() {\n var element;\n element = document.createElement("div");\n element.className = "turbolinks-progress-bar";\n return element;\n };\n\n return ProgressBar;\n\n })();\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/progress_bar.js?')},"./src/turbolinks/renderer.js":function(module,exports,__webpack_require__){eval('/* WEBPACK VAR INJECTION */(function(Turbolinks) {// Generated by CoffeeScript 1.12.8\n(function() {\n var slice = [].slice;\n\n Turbolinks.Renderer = (function() {\n var copyElementAttributes;\n\n function Renderer() {}\n\n Renderer.render = function() {\n var args, callback, delegate, renderer;\n delegate = arguments[0], callback = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : [];\n renderer = (function(func, args, ctor) {\n ctor.prototype = func.prototype;\n var child = new ctor, result = func.apply(child, args);\n return Object(result) === result ? result : child;\n })(this, args, function(){});\n renderer.delegate = delegate;\n renderer.render(callback);\n return renderer;\n };\n\n Renderer.prototype.renderView = function(callback) {\n this.delegate.viewWillRender(this.newBody);\n callback();\n return this.delegate.viewRendered(this.newBody);\n };\n\n Renderer.prototype.invalidateView = function() {\n return this.delegate.viewInvalidated();\n };\n\n Renderer.prototype.createScriptElement = function(element) {\n var createdScriptElement;\n if (element.getAttribute("data-turbolinks-eval") === "false") {\n return element;\n } else {\n createdScriptElement = document.createElement("script");\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement;\n }\n };\n\n copyElementAttributes = function(destinationElement, sourceElement) {\n var i, len, name, ref, ref1, results, value;\n ref = sourceElement.attributes;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n ref1 = ref[i], name = ref1.name, value = ref1.value;\n results.push(destinationElement.setAttribute(name, value));\n }\n return results;\n };\n\n return Renderer;\n\n })();\n\n}).call(this);\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./ */ "./src/turbolinks/index.js")))\n\n//# sourceURL=webpack://Turbolinks/./src/turbolinks/renderer.js?')},"./src/turbolinks/script_warning.js":function(module,exports){eval('// Generated by CoffeeScript 1.12.8\n(function() {\n (function() {\n var element, script;\n if (!(element = script = document.currentScript)) {\n return;\n }\n if (script.hasAttribute("data-turbolinks-suppress-warning")) {\n return;\n }\n while (element = element.parentNode) {\n if (element === document.body) {\n return console.warn("You are loading Turbolinks from a