Bug #430691 - r=sayre - microformats - When parsing tel or email, ignore type when inferring value

This commit is contained in:
Michael Kaply 2008-09-21 18:48:15 -05:00
Родитель 80aa3b19a4
Коммит 2728a8a9a2
2 изменённых файлов: 58 добавлений и 16 удалений

Просмотреть файл

@ -439,6 +439,15 @@ var Microformats = {
if (Microformats.matchClass(propnode, "value")) { if (Microformats.matchClass(propnode, "value")) {
return Microformats.parser.textGetter(parentnode, parentnode); return Microformats.parser.textGetter(parentnode, parentnode);
} else { } else {
/* Virtual case */
if (!parentnode && (Microformats.getElementsByClassName(propnode, "type").length > 0)) {
var tempNode = propnode.cloneNode(true);
var typeNodes = Microformats.getElementsByClassName(tempNode, "type");
for (let i=0; i < typeNodes.length; i++) {
typeNodes[i].parentNode.removeChild(typeNodes[i]);
}
return Microformats.parser.textGetter(tempNode);
}
return Microformats.parser.textGetter(propnode, parentnode); return Microformats.parser.textGetter(propnode, parentnode);
} }
}, },
@ -469,6 +478,15 @@ var Microformats = {
if (Microformats.matchClass(propnode, "value")) { if (Microformats.matchClass(propnode, "value")) {
return Microformats.parser.textGetter(parentnode, parentnode); return Microformats.parser.textGetter(parentnode, parentnode);
} else { } else {
/* Virtual case */
if (!parentnode && (Microformats.getElementsByClassName(propnode, "type").length > 0)) {
var tempNode = propnode.cloneNode(true);
var typeNodes = Microformats.getElementsByClassName(tempNode, "type");
for (let i=0; i < typeNodes.length; i++) {
typeNodes[i].parentNode.removeChild(typeNodes[i]);
}
return Microformats.parser.textGetter(tempNode);
}
return Microformats.parser.textGetter(propnode, parentnode); return Microformats.parser.textGetter(propnode, parentnode);
} }
} }
@ -524,9 +542,6 @@ var Microformats = {
datatypeHelper: function(prop, node, parentnode) { datatypeHelper: function(prop, node, parentnode) {
var result; var result;
var datatype = prop.datatype; var datatype = prop.datatype;
if (prop.implied) {
datatype = prop.subproperties[prop.implied].datatype;
}
switch (datatype) { switch (datatype) {
case "dateTime": case "dateTime":
result = Microformats.parser.dateTimeGetter(node, parentnode); result = Microformats.parser.dateTimeGetter(node, parentnode);
@ -571,15 +586,11 @@ var Microformats = {
} }
/* This handles the case where one property implies another property */ /* This handles the case where one property implies another property */
/* For instance, org by itself is actually org.organization-name */ /* For instance, org by itself is actually org.organization-name */
if (prop.implied && (result != undefined)) {
var temp = result;
result = {};
result[prop.implied] = temp;
}
if (prop.values && (result != undefined)) { if (prop.values && (result != undefined)) {
var validType = false; var validType = false;
for (let value in prop.values) { for (let value in prop.values) {
if (result.toLowerCase() == prop.values[value]) { if (result.toLowerCase() == prop.values[value]) {
result = result.toLowerCase();
validType = true; validType = true;
break; break;
} }
@ -683,8 +694,6 @@ var Microformats = {
} else { } else {
result = Microformats.parser.datatypeHelper(propobj, propnode); result = Microformats.parser.datatypeHelper(propobj, propnode);
} }
} else if (propobj.implied) {
result = Microformats.parser.datatypeHelper(propobj, propnode);
} }
} else if (!result) { } else if (!result) {
result = Microformats.parser.datatypeHelper(propobj, propnode, parentnode); result = Microformats.parser.datatypeHelper(propobj, propnode, parentnode);
@ -1357,13 +1366,13 @@ var hCard_definition = {
"org" : { "org" : {
subproperties: { subproperties: {
"organization-name" : { "organization-name" : {
virtual: true
}, },
"organization-unit" : { "organization-unit" : {
plural: true plural: true
} }
}, },
plural: true, plural: true
implied: "organization-name"
}, },
"photo" : { "photo" : {
plural: true, plural: true,
@ -1392,11 +1401,11 @@ var hCard_definition = {
values: ["msg", "home", "work", "pref", "voice", "fax", "cell", "video", "pager", "bbs", "car", "isdn", "pcs"] values: ["msg", "home", "work", "pref", "voice", "fax", "cell", "video", "pager", "bbs", "car", "isdn", "pcs"]
}, },
"value" : { "value" : {
datatype: "tel" datatype: "tel",
virtual: true
} }
}, },
plural: true, plural: true
implied: "value"
}, },
"tz" : { "tz" : {
}, },

Просмотреть файл

@ -190,6 +190,16 @@
<object class="tel" data="modem:+1.415.555.1242">call me</object> <object class="tel" data="modem:+1.415.555.1242">call me</object>
<area class="tel" href="modem:+1.415.555.1243">call me</area> <area class="tel" href="modem:+1.415.555.1243">call me</area>
</div> </div>
<div class="vcard" id="21-tel.2">
<span class="fn">John Doe</span>
<span class="tel"><span class="type">Home</span> +1.415.555.1212</span>
</div>
<div class="vcard" id="21-tel.3">
<span class="fn">John Doe</span>
<span class="tel"><span class="type">Home</span><span class="type"> Pref</span> +1.415.555.1212</span>
</div>
<!-- TODO: add test for 'extended' --> <!-- TODO: add test for 'extended' -->
<div class="vcard" id="22-adr"> <div class="vcard" id="22-adr">
@ -540,6 +550,15 @@
<span class="note"><b>Note</b></span> <span class="note"><b>Note</b></span>
</div> </div>
<div class="vcard" id="email-type">
<span class="fn">John Doe</span>
<span class="email">
<span class="type">internet</span>
<a href="mailto:notthis@example.com">john@example.com</a>
</span>
</div>
</div> </div>
<pre id="test"> <pre id="test">
<script class="testbody" type="text/javascript"> <script class="testbody" type="text/javascript">
@ -791,6 +810,17 @@ function test_hCard() {
is(hcard.tel[8].value, "+1.415.555.1241", "21-tel - tel"); is(hcard.tel[8].value, "+1.415.555.1241", "21-tel - tel");
is(hcard.tel[9].value, "+1.415.555.1242", "21-tel - tel"); is(hcard.tel[9].value, "+1.415.555.1242", "21-tel - tel");
hcard = new hCard(document.getElementById("21-tel.2"));
is(hcard.tel[0].type[0], "home", "21-tel.2 - type");
is(hcard.tel[0].value, "+1.415.555.1212", "21-tel.2 - tel");
hcard = new hCard(document.getElementById("21-tel.3"));
is(hcard.tel[0].type[0], "home", "21-tel.3 - type (home)");
is(hcard.tel[0].type[1], "pref", "21-tel.3 - type (pref)");
is(hcard.tel[0].value, "+1.415.555.1212", "21-tel.3 - tel");
hcard = new hCard(document.getElementById("22-adr")); hcard = new hCard(document.getElementById("22-adr"));
is(hcard.fn, "John Doe", "22-adr - fn"); is(hcard.fn, "John Doe", "22-adr - fn");
@ -1142,7 +1172,10 @@ function test_hCard() {
is(hcard.note[0], "Note", "39-noteHTML - note"); is(hcard.note[0], "Note", "39-noteHTML - note");
is(hcard.note[0].toHTML(), "<b>Note</b>", "39-noteHTML - note as HTML"); is(hcard.note[0].toHTML(), "<b>Note</b>", "39-noteHTML - note as HTML");
is(hcard.note[0].match("Note"), "Note", "39-noteHTML - match in note"); is(hcard.note[0].match("Note"), "Note", "39-noteHTML - match in note");
hcard = new hCard(document.getElementById("email-type"));
is(hcard.email[0].type, "internet", "email - type no value (type)");
is(hcard.email[0].value, "john@example.com", "email - type no value (value)");
} }
</script> </script>