microdata-node
Advanced tools
Comparing version 0.0.12 to 0.0.13
@@ -33,6 +33,4 @@ 'use strict'; | ||
if (props && currentItem) { | ||
props.forEach(function (propName) { | ||
var value = parseProperty(node, currentItem); | ||
currentItem.addProperty(propName, value); | ||
}); | ||
var value = parsePropertyValue(node, currentItem); | ||
currentItem.addProperties(props, value); | ||
} else if ($node.is('[itemscope]')) { | ||
@@ -84,36 +82,36 @@ var newItem = parseItem(node, currentItem); | ||
function resolveAttribute($node, attr) { | ||
return $node.attr(attr) || ''; | ||
var value = $node.attr(attr); | ||
return value && value.trim() || ''; | ||
} | ||
function resolveUrlAttribute($node, attr) { | ||
var relative = $node.attr(attr); | ||
var relative = resolveAttribute($node, attr); | ||
if (relative && config.base) { | ||
return urlUtil.resolve(config.base, relative) || ''; | ||
return urlUtil.resolve(config.base, relative); | ||
} else { | ||
return relative || ''; | ||
return relative; | ||
} | ||
} | ||
function parseProperty(node, currentItem) { | ||
function parsePropertyValue(node, currentItem) { | ||
var $node = $(node); | ||
if ($node.is('[itemscope]')) { | ||
return parseItem(node, currentItem); | ||
} else if ($node.is('meta')) { | ||
return resolveAttribute($node, 'content'); | ||
} else if ($node.is('audio,embed,iframe,img,source,track,video')) { | ||
return resolveUrlAttribute($node, 'src'); | ||
} else if ($node.is('a,area,link')) { | ||
return resolveUrlAttribute($node, 'href'); | ||
} else if ($node.is('object')) { | ||
return resolveUrlAttribute($node, 'data'); | ||
} else if ($node.is('data')) { | ||
return resolveAttribute($node, 'value'); | ||
} else if ($node.is('meter')) { | ||
return resolveAttribute($node, 'value'); | ||
} else if ($node.is('time')) { | ||
return resolveAttribute($node, 'datetime'); | ||
} else { | ||
var text = $node.text(); | ||
text = text && text.trim(); | ||
return text || ''; | ||
if ($node.is('meta')) { | ||
return resolveAttribute($node, 'content'); | ||
} else if ($node.is('audio,embed,iframe,img,source,track,video')) { | ||
return resolveUrlAttribute($node, 'src'); | ||
} else if ($node.is('a,area,link')) { | ||
return resolveUrlAttribute($node, 'href'); | ||
} else if ($node.is('object')) { | ||
return resolveUrlAttribute($node, 'data'); | ||
} else if ($node.is('data,meter')) { | ||
return resolveAttribute($node, 'value'); | ||
} else if ($node.is('time')) { | ||
return resolveAttribute($node, 'datetime'); | ||
} else { | ||
var text = $node.text(); | ||
return text && text.trim() || ''; | ||
} | ||
} | ||
@@ -120,0 +118,0 @@ } |
@@ -25,2 +25,8 @@ 'use strict'; | ||
Item.prototype.addProperties = function addProperties(names, value) { | ||
names.forEach(function (name) { | ||
this.addProperty(name, value); | ||
}, this); | ||
}; | ||
Item.prototype.serialize = function serialize() { | ||
@@ -27,0 +33,0 @@ var item = {}; |
{ | ||
"name": "microdata-node", | ||
"version": "0.0.12", | ||
"version": "0.0.13", | ||
"description": "Cheerio based microdata parser", | ||
@@ -5,0 +5,0 @@ "main": "lib", |
@@ -205,58 +205,2 @@ /* global describe, it */ | ||
it('parses itemrefs', function () { | ||
var $ = cheerio.load( | ||
'<div id="ref1">' + | ||
' <div itemprop="name">Jan</div>' + | ||
'</div>' + | ||
'<div id="ref2" itemprop="name">Potoms</div>' + | ||
'<div itemscope itemtype="http://schema.org/Person" itemref="ref1 ref2"></div>' | ||
); | ||
var result = parser.parse($); | ||
assert.isArray(result.items); | ||
assert.lengthOf(result.items, 1); | ||
assert.deepEqual(result.items[0].properties, { | ||
name: ['Jan', 'Potoms'] | ||
}); | ||
}); | ||
it('handle top-level circular structure', function () { | ||
var $ = cheerio.load( | ||
'<div id="ref">' + | ||
' <div itemscope itemref="ref">' + | ||
' <div itemprop="name">Jan</div>' + | ||
' </div>' + | ||
'</div>' | ||
); | ||
var result = parser.parse($); | ||
assert.isArray(result.items); | ||
assert.lengthOf(result.items, 1); | ||
assert.deepEqual(result.items[0].properties, { | ||
name: ['Jan'] | ||
}); | ||
}); | ||
it('handle nested item circular structure', function () { | ||
var $ = cheerio.load( | ||
'<div id="ref">' + | ||
' <div itemprop="name">Other Jan</div>' + | ||
' <div itemprop="friend" itemscope>' + | ||
' <div itemprop="name">Jan</div>' + | ||
' <div itemprop="friend" itemscope itemref="ref"></div>' + | ||
' </div>' + | ||
'</div>' | ||
); | ||
var result = parser.parse($); | ||
assert.isArray(result.items); | ||
assert.lengthOf(result.items, 1); | ||
assert.deepEqual(result.items[0].properties, { | ||
name: [ 'Jan' ], | ||
friend: [{ | ||
properties: { | ||
name: [ 'Other Jan' ], | ||
friend: [ 'ERROR' ] | ||
} | ||
}] | ||
}); | ||
}); | ||
}); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
24206
11
607