Unverified Commit 5b813e73 authored by Robert Knight's avatar Robert Knight Committed by GitHub

Merge pull request #732 from hypothesis/fix-document-metadata-tests-in-chrome

Fix document metadata tests in chrome
parents 6869a2fe d98aff1a
$ = require('jquery')
baseURI = require('document-base-uri')
Plugin = require('../plugin')
......@@ -28,8 +27,7 @@ module.exports = class Document extends Plugin
this.getDocumentMetadata()
# returns the primary URI for the document being annotated
# Returns the primary URI for the document being annotated
uri: =>
uri = decodeURIComponent(this._getDocumentHref())
for link in @metadata.link
......@@ -37,8 +35,7 @@ module.exports = class Document extends Plugin
uri = link.href
return uri
# returns all uris for the document being annotated
# Returns all uris for the document being annotated
uris: =>
uniqueUrls = {}
for link in @metadata.link
......@@ -87,9 +84,9 @@ module.exports = class Document extends Plugin
_getMetaTags: (prefix, attribute, delimiter) =>
tags = {}
for meta in $("meta")
name = $(meta).attr(attribute)
content = $(meta).prop("content")
for meta in @document.querySelectorAll('meta')
name = meta.getAttribute(attribute)
content = meta.content
if name
match = name.match(RegExp("^#{prefix}#{delimiter}(.+)$", "i"))
if match
......@@ -114,24 +111,23 @@ module.exports = class Document extends Plugin
else if @metadata.dc.title
@metadata.title = @metadata.dc.title[0]
else
@metadata.title = $("head title").text()
@metadata.title = @document.title
_getLinks: =>
# we know our current location is a link for the document
# we know our current location is a link for the document
@metadata.link = [href: this._getDocumentHref()]
# look for some relevant link relations
for link in $("link")
l = $(link)
href = this._absoluteUrl(l.prop('href')) # get absolute url
rel = l.prop('rel')
type = l.prop('type')
lang = l.prop('hreflang')
for link in @document.querySelectorAll('link')
href = this._absoluteUrl(link.href) # get absolute url
rel = link.rel
type = link.type
lang = link.hreflang
if rel not in ["alternate", "canonical", "bookmark", "shortlink"] then continue
if rel is 'alternate'
# Ignore feeds resources
# Ignore feeds resources
if type and type.match /^application\/(rss|atom)\+xml/ then continue
# Ignore alternate languages
if lang then continue
......@@ -150,7 +146,6 @@ module.exports = class Document extends Plugin
# kind of a hack to express DOI identifiers as links but it's a
# convenient place to look them up later, and somewhat sane since
# they don't have a type
if name == "doi"
for doi in values
if doi[0..3] != "doi:"
......@@ -180,8 +175,8 @@ module.exports = class Document extends Plugin
@metadata.documentFingerprint = dcUrn
_getFavicon: =>
for link in $("link")
if $(link).prop("rel") in ["shortcut icon", "icon"]
for link in @document.querySelectorAll('link')
if link.rel in ["shortcut icon", "icon"]
@metadata["favicon"] = this._absoluteUrl(link.href)
# Hack to get a absolute url from a possibly relative one
......
......@@ -173,9 +173,19 @@ describe 'Document', ->
if canonicalLink
canonicalLink.remove()
createDoc = (href, baseURI) ->
# Create a blank HTML document with a faked `href` and `baseURI` and
# return a `Document` instance which reads metadata from it.
createDoc = (href, baseURI, htmlDoc) ->
if !htmlDoc
# Create a blank DOM Document
htmlDoc = document.implementation.createHTMLDocument()
# `Document.location` is not overridable. In order to fake the
# location in tests, create a proxy object in front of our blank HTML
# document.
fakeDocument =
createElement: document.createElement.bind(document),
createElement: htmlDoc.createElement.bind(htmlDoc),
querySelectorAll: htmlDoc.querySelectorAll.bind(htmlDoc),
location:
href: href
doc = new Document($('<div></div>')[0], {
......@@ -215,11 +225,12 @@ describe 'Document', ->
assert.equal(doc.uri(), href)
it 'returns the canonical URI if present', ->
canonicalLink = document.createElement('link')
htmlDoc = document.implementation.createHTMLDocument()
canonicalLink = htmlDoc.createElement('link')
canonicalLink.rel = 'canonical'
canonicalLink.href = 'https://publisher.org/canonical'
document.head.appendChild(canonicalLink)
htmlDoc.head.appendChild(canonicalLink)
doc = createDoc('https://publisher.org/not-canonical', null)
doc = createDoc('https://publisher.org/not-canonical', null, htmlDoc)
assert.equal doc.uri(), canonicalLink.href
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment