class Turbolinks.HeadDetails
constructor: (@element) -> @elements = {} for element in @element.childNodes when element.nodeType is Node.ELEMENT_NODE key = element.outerHTML data = @elements[key] ?= type: elementType(element) tracked: elementIsTracked(element) elements: [] data.elements.push(element) hasElementWithKey: (key) -> key of @elements getTrackedElementSignature: -> (key for key, {tracked} of @elements when tracked).join("") getScriptElementsNotInDetails: (headDetails) -> @getElementsMatchingTypeNotInDetails("script", headDetails) getStylesheetElementsNotInDetails: (headDetails) -> @getElementsMatchingTypeNotInDetails("stylesheet", headDetails) getElementsMatchingTypeNotInDetails: (matchedType, headDetails) -> elements[0] for key, {type, elements} of @elements when type is matchedType and not headDetails.hasElementWithKey(key) getProvisionalElements: -> provisionalElements = [] for key, {type, tracked, elements} of @elements if not type? and not tracked provisionalElements.push(elements...) else if elements.length > 1 provisionalElements.push(elements[1...]...) provisionalElements elementType = (element) -> if elementIsScript(element) "script" else if elementIsStylesheet(element) "stylesheet" elementIsTracked = (element) -> element.getAttribute("data-turbolinks-track") is "reload" elementIsScript = (element) -> tagName = element.tagName.toLowerCase() tagName is "script" elementIsStylesheet = (element) -> tagName = element.tagName.toLowerCase() tagName is "style" or (tagName is "link" and element.getAttribute("rel") is "stylesheet")