diff --git a/js/core/biblio.js b/js/core/biblio.js index 5f7acfc2fc..71fa274fb5 100644 --- a/js/core/biblio.js +++ b/js/core/biblio.js @@ -78,7 +78,7 @@ define( $sec.makeID(null, type + " references"); refs.sort(); var $dl = $("
").appendTo($sec); - if (conf.doRDFa !== false) $dl.attr("about", ""); + if (conf.doRDFa) $dl.attr("resource", ""); for (var j = 0; j < refs.length; j++) { var ref = refs[j]; $("
") @@ -87,10 +87,6 @@ define( .appendTo($dl) ; var $dd = $("
").appendTo($dl); - if (this.doRDFa !== false) { - if (type === "Normative") $dd.attr("rel", "dcterms:requires"); - else $dd.attr("rel", "dcterms:references"); - } var refcontent = conf.biblio[ref] , circular = {} , key = ref; @@ -110,6 +106,10 @@ define( if (aliases[key].indexOf(ref) < 0) aliases[key].push(ref); if (refcontent) { $dd.html(stringifyRef(refcontent) + "\n"); + if (conf.doRDFa) { + $a = $dd.children("a"); + $a.attr("property", type === "Normative" ? "dc:requires" : "dc:references"); + } } else { if (!badrefs[ref]) badrefs[ref] = 0; diff --git a/js/core/rdfa.js b/js/core/rdfa.js index 44885153f4..a1b57980c1 100644 --- a/js/core/rdfa.js +++ b/js/core/rdfa.js @@ -10,50 +10,48 @@ define( return { run: function (conf, doc, cb, msg) { msg.pub("start", "core/rdfa"); - if (conf.doRDFa !== false) { + if (conf.doRDFa) { $("section").each(function () { var $sec = $(this) - , about = "" - , $fc = $sec.children("*").first() + , resource = "" + , $fc = $sec.children("h1,h2,h3,h4,h5,h6").first() , ref = $sec.attr("id") , fcref = null ; if (ref) { - about = "#" + ref; + resource = "#" + ref; } else if ($fc.length) { ref = $fc.attr("id"); if (ref) { - about = "#" + ref; + resource = "#" + ref; fcref = ref; } } - if (about !== "") { + var property = "bibo:hasPart"; + // Headings on everything but boilerplate + if (!resource.match(/#(abstract|sotd|toc)$/)) { $sec.attr({ "typeof": "bibo:Chapter" - , resource: about - , rel: "bibo:Chapter" + , resource: resource + , property: property }); - // create a heading triple too, as per the role spec - // since we should not be putting an @role on - // h* elements with a value of heading, but we - // still want the semantic markup - if ($fc.length) { - if (!fcref) { - // there is no ID on the heading itself. Add one - fcref = $fc.makeID("h", ref) ; - } - $fc.attr({ - about: "#" + fcref - , property: "xhv:role" - , resource: "xhv:heading" - }); + } + // create a heading triple too, as per the role spec + // since we should not be putting an @role on + // h* elements with a value of heading, but we + // still want the semantic markup + if ($fc.length) { + if (!fcref) { + // if there is no ID on the heading itself. Add one + fcref = $fc.makeID("h", ref) ; } + // set the subject to the ID of the heading + $fc.attr({ resource: "#" + fcref }) ; + // nest the contents in a span so we can set the predicate + // and object + $fc.wrapInner( "" ); } - // annotate the child h* element - - - }); } msg.pub("end", "core/rdfa"); diff --git a/js/profile-w3c-common.js b/js/profile-w3c-common.js index 59043c7dbb..8605fd9f17 100644 --- a/js/profile-w3c-common.js +++ b/js/profile-w3c-common.js @@ -42,10 +42,10 @@ define([ , "core/dfn" , "core/fix-headers" , "core/structure" - , "core/rdfa" , "w3c/informative" , "w3c/permalinks" , "core/id-headers" + , "core/rdfa" , "w3c/aria" , "core/shiv" , "core/remove-respec" diff --git a/js/ui/save-html.js b/js/ui/save-html.js index 3964a23761..37dae0f46d 100644 --- a/js/ui/save-html.js +++ b/js/ui/save-html.js @@ -82,15 +82,10 @@ define( , dt = doc.doctype; if (dt && dt.publicId) str += " PUBLIC '" + dt.publicId + "' '" + dt.systemId + "'"; str += ">\n

")); $abs.prepend("

Abstract

"); $abs.addClass("introductory"); - if (conf.doRDFa !== false) { - var rel = "dcterms:abstract" + if (conf.doRDFa) { + var rel = "dc:abstract" , ref = $abs.attr("property"); if (ref) rel = ref + " " + rel; $abs.attr({ "property": rel - , "datatype": "" }); } } diff --git a/js/w3c/aria.js b/js/w3c/aria.js index 42f92eb95a..3b40a3e3ba 100644 --- a/js/w3c/aria.js +++ b/js/w3c/aria.js @@ -23,20 +23,20 @@ define( } } // mark issues and notes with heading - var noteNum = 0, issueNum = 0; + var noteCount = 0 ; var issueCount = 0 ; $(".note-title, .issue-title", doc).each(function (i, item) { var $item = $(item) , isIssue = $item.hasClass("issue-title") , level = $item.parents("section").length+2 ; - $item.attr('aria-level', level); + $item.attr('aria-level', level) ; $item.attr('role', 'heading') ; if (isIssue) { - issueNum++; - $item.attr('id', 'h_issue_'+issueNum); + issueCount++; + $item.makeID('h', "issue" + issueCount) ; } else { - noteNum++; - $item.attr('id', 'h_note_'+noteNum); + noteCount++; + $item.makeID('h', "note" + noteCount) ; } }); msg.pub("end", "w3c/aria"); diff --git a/js/w3c/headers.js b/js/w3c/headers.js index 6a1dfd0b56..fb67bfcf4c 100644 --- a/js/w3c/headers.js +++ b/js/w3c/headers.js @@ -97,29 +97,37 @@ define( function (hb, utils, headersTmpl, sotdTmpl, cgbgHeadersTmpl, cgbgSotdTmpl) { Handlebars.registerHelper("showPeople", function (name, items) { // stuff to handle RDFa - var re = "", rp = "", rm = "", rn = "", rwu = "", rpu = ""; - if (this.doRDFa !== false) { + var re = "", rp = "", rm = "", rn = "", rwu = "", rpu = "", bn = ""; + if (this.doRDFa) { if (name === "Editor") { - re = " rel='bibo:editor'"; - if (this.doRDFa !== "1.0") re += " inlist=''"; + bn = "_:editor0"; + re = " property='bibo:editor' resource='" + bn + "'"; + rp = " property='rdf:first' typeof='foaf:Person'"; } else if (name === "Author") { - re = " rel='dcterms:contributor'"; + rp = " property='dc:contributor' typeof='foaf:Person'"; } rn = " property='foaf:name'"; - rm = " rel='foaf:mbox'"; - rp = " typeof='foaf:Person'"; - rwu = " rel='foaf:workplaceHomepage'"; - rpu = " rel='foaf:homepage'"; + rm = " property='foaf:mbox'"; + rwu = " property='foaf:workplaceHomepage'"; + rpu = " property='foaf:homepage'"; } var ret = ""; for (var i = 0, n = items.length; i < n; i++) { var p = items[i]; - if (this.doRDFa !== false ) ret += "
"; - else ret += "
"; + if (this.doRDFa) { + ret += "
"; + if (name === "Editor") { + // Update to next sequence in rdf:List + bn = (i < n - 1) ? ("_:editor" + (i + 1)) : "rdf:nil"; + re = " resource='" + bn + "'"; + } + } else { + ret += "
"; + } if (p.url) { - if (this.doRDFa !== false ) { - ret += "" + p.name + ""; + if (this.doRDFa) { + ret += ""+ p.name + ""; } else { ret += ""+ p.name + ""; @@ -137,7 +145,10 @@ define( ret += ", "; } if (p.note) ret += " (" + p.note + ")"; - if (this.doRDFa !== false ) ret += "\n"; + if (this.doRDFa) { + ret += "\n"; + if (name === "Editor") ret += "\n"; + } ret += "
\n"; } return new Handlebars.SafeString(ret); @@ -233,11 +244,8 @@ define( , run: function (conf, doc, cb, msg) { msg.pub("start", "w3c/headers"); - if (conf.doRDFa !== false) { - if (conf.doRDFa === undefined) { - conf.doRDFa = '1.1'; - } - } + // Default include RDFa document metadata + if (conf.doRDFa === undefined) conf.doRDFa = true; // validate configuration and derive new configuration values if (!conf.license) conf.license = "w3c"; // NOTE: this is currently only available to the HTML WG @@ -378,15 +386,9 @@ define( } else { $("html").attr("typeof", "bibo:Document ") ; } - $("html").attr("about", "") ; - $("html").attr("property", "dcterms:language") ; - $("html").attr("content", "en") ; var prefixes = "bibo: http://purl.org/ontology/bibo/ w3p: http://www.w3.org/2001/02pd/rec54#"; - if (conf.doRDFa != '1.1') { - $("html").attr("version", "XHTML+RDFa 1.0") ; - prefixes += " dcterms: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ xsd: http://www.w3.org/2001/XMLSchema#"; - } $("html").attr("prefix", prefixes); + $("html>head").prepend($("")) } // insert into document and mark with microformat $("body", doc).prepend($(conf.isCGBG ? cgbgHeadersTmpl(conf) : headersTmpl(conf))) diff --git a/js/w3c/templates/cgbg-headers.html b/js/w3c/templates/cgbg-headers.html index 591bb7f7f0..bb72536a7e 100644 --- a/js/w3c/templates/cgbg-headers.html +++ b/js/w3c/templates/cgbg-headers.html @@ -2,11 +2,11 @@

W3C

-

{{title}}

+

{{title}}

{{#if subtitle}}

{{subtitle}}

{{/if}} -

{{longStatus}}

+

{{longStatus}}

{{#if thisVersion}}
This version:
diff --git a/js/w3c/templates/headers.html b/js/w3c/templates/headers.html index fc7a5d7b33..699648f3e1 100644 --- a/js/w3c/templates/headers.html +++ b/js/w3c/templates/headers.html @@ -12,7 +12,7 @@

{{subtitle}}

{{/if}} -

{{#if prependW3C}}W3C {{/if}}{{textStatus}}

+

{{#if prependW3C}}W3C {{/if}}{{textStatus}}

{{#unless isNoTrack}}
This version:
diff --git a/js/w3c/templates/sotd.html b/js/w3c/templates/sotd.html index ed76bdd7a2..39c5f89469 100644 --- a/js/w3c/templates/sotd.html +++ b/js/w3c/templates/sotd.html @@ -111,7 +111,7 @@

{{#unless isIGNote}} This document was produced by a group operating under the - 5 February 2004 W3C Patent Policy. {{/unless}} diff --git a/tests/spec/core/fix-headers-spec.js b/tests/spec/core/fix-headers-spec.js index ce085f4e94..5254ade7a3 100644 --- a/tests/spec/core/fix-headers-spec.js +++ b/tests/spec/core/fix-headers-spec.js @@ -18,8 +18,8 @@ describe("Core - Fix headers", function () { expect($s.find("h1").length).toEqual(0); expect($s.find("h2").length).toEqual(1); expect($s.find("h2").text()).toMatch(/ONE/); - expect($s.find("h2").attr('resource')).toEqual('xhv:heading'); - expect($s.find("h2").attr('property')).toEqual('xhv:role'); + expect($s.find("h2 > span").attr('resource')).toEqual('xhv:heading'); + expect($s.find("h2 > span").attr('property')).toEqual('xhv:role'); expect($s.find("h3").length).toEqual(1); expect($s.find("h3").text()).toMatch(/TWO/); expect($s.find("h4").length).toEqual(1); diff --git a/tests/spec/core/issues-notes-spec.js b/tests/spec/core/issues-notes-spec.js index 967b9ac888..4af86a2803 100644 --- a/tests/spec/core/issues-notes-spec.js +++ b/tests/spec/core/issues-notes-spec.js @@ -77,6 +77,7 @@ describe("Core — Issues and Notes", function () { , $i11 = $("#i11", doc).parent('div') , $ixx = $("#ixx", doc).parent('div') ; + console.log($i10.innerHTML) ; expect($i10.find("div.issue-title").length).toEqual(1); expect($i10.find("div.issue-title").text()).toEqual("Issue 10"); diff --git a/tests/spec/core/structure-spec.js b/tests/spec/core/structure-spec.js index 76eac7e0fc..3a85a1bdb1 100644 --- a/tests/spec/core/structure-spec.js +++ b/tests/spec/core/structure-spec.js @@ -23,8 +23,8 @@ describe("Core - Structure", function () { var $toc = $("#toc", doc) ; expect($toc.find("h2").text()).toEqual("Table of Contents"); - expect($toc.find("h2").attr('resource')).toEqual('xhv:heading'); - expect($toc.find("h2").attr('property')).toEqual('xhv:role'); + expect($toc.find("h2 span").attr('resource')).toEqual('xhv:heading'); + expect($toc.find("h2 span").attr('property')).toEqual('xhv:role'); expect($toc.find("ul:first").attr('role')).toEqual('directory'); expect($toc.find("> ul > li").length).toEqual(3); expect($toc.find("li").length).toEqual(15); diff --git a/tests/spec/w3c/abstract-spec.js b/tests/spec/w3c/abstract-spec.js index a74212b662..19477ab6aa 100644 --- a/tests/spec/w3c/abstract-spec.js +++ b/tests/spec/w3c/abstract-spec.js @@ -14,8 +14,8 @@ describe("W3C — Abstract", function () { var $abs = $("#abstract", doc); expect($abs.find("h2").length).toBeTruthy(); expect($abs.find("h2").text()).toEqual("Abstract"); - expect($abs.find("h2").attr('resource')).toEqual('xhv:heading'); - expect($abs.find("h2").attr('property')).toEqual('xhv:role'); + expect($abs.find("h2 span").attr('resource')).toEqual('xhv:heading'); + expect($abs.find("h2 span").attr('property')).toEqual('xhv:role'); expect($abs.hasClass("introductory")).toBeTruthy(); expect($abs.find("p").length).toBeTruthy(); flushIframes(); diff --git a/tests/spec/w3c/rdfa-spec.js b/tests/spec/w3c/rdfa-spec.js index 3cc251cbb0..4be1957e05 100644 --- a/tests/spec/w3c/rdfa-spec.js +++ b/tests/spec/w3c/rdfa-spec.js @@ -32,29 +32,16 @@ describe("W3C — RDFa", function () { company: "COMPANY", companyURI: "http://COMPANY", mailto: "EMAIL", - note: "NOTE"}] - , shortName: "some-spec" - , publicationDate: "2013-06-25" - , previousPublishDate: "2012-06-07" - , previousMaturity: "REC" - , specStatus: "PER" - , wgPatentURI: "http://www.w3.org/fake-patent-uri" - , doRDFa: "1.1" - } - , oldConfig = { - editors: [{ name: "Shane McCarron", - url: "http://URI", - company: "COMPANY", - companyURI: "http://COMPANY", - mailto: "EMAIL", - note: "NOTE"}] + note: "NOTE"}, + { name: "Gregg Kellogg"}] + , authors: [{ name: "Gregg Kellogg"}, { name: "Shane McCarron"}] , shortName: "some-spec" , publicationDate: "2013-06-25" , previousPublishDate: "2012-06-07" , previousMaturity: "REC" , specStatus: "PER" , wgPatentURI: "http://www.w3.org/fake-patent-uri" - , doRDFa: "1.0" + , doRDFa: true } , noConfig = { editors: [{ name: "Shane McCarron", @@ -63,6 +50,7 @@ describe("W3C — RDFa", function () { companyURI: "http://COMPANY", mailto: "EMAIL", note: "NOTE"}] + , authors: [{ name: "Gregg Kellogg"}, { name: "Shane McCarron"}] , shortName: "some-spec" , publicationDate: "2013-06-25" , previousPublishDate: "2012-06-07" @@ -81,41 +69,60 @@ describe("W3C — RDFa", function () { var $c = $("html", doc); expect($c.attr('prefix')).toMatch(/bibo:/); expect($c.attr('prefix')).toMatch(/w3p:/); - expect($c.attr('prefix')).toNotMatch(/dcterms:/); + expect($c.attr('prefix')).toNotMatch(/dc:/); expect($c.attr('prefix')).toNotMatch(/foaf:/); expect($c.attr('prefix')).toNotMatch(/xsd:/); expect($c.attr('typeof')).toMatch(/w3p:PER/); expect($c.attr('typeof')).toMatch(/bibo:Document/); - expect($c.attr('property')).toEqual("dcterms:language") ; - expect($c.attr('content')).toEqual("en") ; - expect($c.attr('about')).toEqual("") ; + + var $lang = $("html>head>meta[property='dc:language']", doc) ; + expect($lang.attr('content')).toEqual("en") ; flushIframes(); }); }); - it("should set the 1.0 document information", function () { + it("should set RDFa information on editors", function () { var doc; runs(function () { - makeRSDoc({ config: oldConfig, body: $("

Some unique SOTD content
") }, + makeRSDoc({ config: basicConfig, body: $("
Some unique SOTD content
") }, function (rsdoc) { doc = rsdoc; }); }); waitsFor(function () { return doc; }, MAXOUT); runs(function () { - var $c = $("html", doc); - expect($c.attr('prefix')).toMatch(/bibo:/); - expect($c.attr('prefix')).toMatch(/w3p:/); - expect($c.attr('prefix')).toMatch(/dcterms:/); - expect($c.attr('prefix')).toMatch(/foaf:/); - expect($c.attr('prefix')).toMatch(/xsd:/); - expect($c.attr('typeof')).toMatch(/w3p:PER/); - expect($c.attr('typeof')).toMatch(/bibo:Document/); - expect($c.attr('property')).toEqual("dcterms:language") ; - expect($c.attr('content')).toEqual("en") ; - expect($c.attr('about')).toEqual("") ; - expect($c.attr('version')).toEqual("XHTML+RDFa 1.0") ; + var $dd = $("dt:contains('Editors:')", doc ).next("dd") ; + expect($dd.attr("property")).toEqual("bibo:editor") ; + expect($dd.attr("resource")).toEqual("_:editor0") ; + var $sp = $dd.children("span").first(); + expect($sp.attr("property")).toEqual('rdf:first') ; + expect($sp.attr("typeof")).toEqual('foaf:Person') ; + var $meta = $sp.children("meta") ; + expect($meta.attr("property")).toEqual('foaf:name') ; + expect($meta.attr("content")).toEqual('Shane McCarron') ; + var $a = $sp.children("a") ; + expect($a.attr("property")).toEqual('foaf:homepage') ; + expect($a.attr("href")).toEqual('http://URI') ; + $a = $sp.children("span").children("a"); + expect($a.attr("property")).toEqual('foaf:mbox') ; + expect($a.attr("href")).toEqual('mailto:EMAIL') ; + var $rest = $sp.next(); + expect($rest.attr("property")).toEqual("rdf:rest"); + expect($rest.attr("resource")).toEqual("_:editor1"); + + var $ddd = $dd.next("dd"); + expect($ddd.attr("property")).not.toBeDefined() ; + expect($ddd.attr("resource")).toEqual("_:editor1") ; + $sp = $ddd.children("span").first(); + expect($sp.attr("property")).toEqual('rdf:first') ; + expect($sp.attr("typeof")).toEqual('foaf:Person') ; + $spp = $sp.children("span") ; + expect($spp.attr("property")).toEqual('foaf:name') ; + expect($spp.text()).toEqual('Gregg Kellogg') ; + $rest = $sp.next(); + expect($rest.attr("property")).toEqual("rdf:rest"); + expect($rest.attr("resource")).toEqual("rdf:nil"); flushIframes(); }); }); - it("should set RDFa information on editors", function () { + it("should set RDFa information on authors", function () { var doc; runs(function () { makeRSDoc({ config: basicConfig, body: $("
Some unique SOTD content
") }, @@ -123,19 +130,21 @@ describe("W3C — RDFa", function () { }); waitsFor(function () { return doc; }, MAXOUT); runs(function () { - var $dd = $("dt:contains('Editor:')", doc ).next("dd") ; - expect($dd.attr("rel")).toEqual("bibo:editor") ; - expect($dd.attr("inlist")).toEqual("") ; - var $sp = $dd.children("span"); + var $dd = $("dt:contains('Authors:')", doc ).next("dd") ; + var $sp = $dd.children("span").first(); + expect($sp.attr("property")).toEqual("dc:contributor") ; expect($sp.attr("typeof")).toEqual('foaf:Person') ; - var $a = $sp.children("a") ; - expect($a.attr("property")).toEqual('foaf:name') ; - expect($a.attr("rel")).toEqual('foaf:homepage') ; - expect($a.attr("content")).toEqual('Shane McCarron') ; - expect($a.attr("href")).toEqual('http://URI') ; - $a = $sp.children("span").children("a"); - expect($a.attr("rel")).toEqual('foaf:mbox') ; - expect($a.attr("href")).toEqual('mailto:EMAIL') ; + var $spp = $sp.children("span") ; + expect($spp.attr("property")).toEqual('foaf:name') ; + expect($spp.text()).toEqual('Gregg Kellogg') ; + + var $ddd = $dd.next("dd"); + $sp = $ddd.children("span").first(); + expect($sp.attr("property")).toEqual('dc:contributor') ; + expect($sp.attr("typeof")).toEqual('foaf:Person') ; + $spp = $sp.children("span") ; + expect($spp.attr("property")).toEqual('foaf:name') ; + expect($spp.text()).toEqual('Shane McCarron') ; flushIframes(); }); }); @@ -148,11 +157,65 @@ describe("W3C — RDFa", function () { waitsFor(function () { return doc; }, MAXOUT); runs(function () { var $c = $("#sotd_patent", doc); - expect($c.attr('about')).toEqual(""); - expect($c.attr('rel')).toEqual("w3p:patentRules"); + expect($c.attr('property')).toEqual("w3p:patentRules"); flushIframes(); }); }); + it("should describe normative references", function () { + var doc; + runs(function () { + makeRSDoc({ config: basicConfig, body: $("

[[!DAHU]] [[REX]]

") }, + function (rsdoc) { doc = rsdoc; }); + }); + waitsFor(function () { return doc; }, MAXOUT); + runs(function () { + var $nr = $("#normative-references", doc) + , $ir = $("#informative-references", doc) + ; + expect($nr.attr('typeof')).toMatch(/bibo:Chapter/); + expect($nr.attr('resource')).toEqual("#normative-references"); + expect($nr.find("dl dt").length).toEqual(1); + expect($nr.find("dl dt:contains('[DAHU]')").length).toEqual(1); + expect($nr.find("dl>dd>a").attr('property')).toEqual('dc:requires'); + + expect($ir.attr('typeof')).toMatch(/bibo:Chapter/); + expect($ir.attr('resource')).toEqual("#informative-references"); + expect($ir.find("dl dt").length).toEqual(1); + expect($ir.find("dl dt:contains('[REX]')").length).toEqual(1); + expect($ir.find("dl>dd>a").attr('property')).toEqual('dc:references'); + flushIframes(); + }); + }); + it("should mark abstract using dc:abstract", function () { + var doc; + runs(function () { + makeRSDoc({ config: basicConfig, body: $("
test abstract
") }, + function (rsdoc) { doc = rsdoc; }); + }); + waitsFor(function () { return doc; }, MAXOUT); + runs(function () { + var $abs = $("#abstract", doc); + expect($abs.attr('property')).toEqual("dc:abstract"); + expect($abs.attr('typeof')).not.toBeDefined(); + expect($abs.attr('resource')).not.toBeDefined(); + flushIframes(); + }); + }); + it("should add bibo to chapters", function () { + var doc; + runs(function () { + makeRSDoc({ config: basicConfig, body: $("

Chapter

") }, + function (rsdoc) { doc = rsdoc; }); + }); + waitsFor(function () { return doc; }, MAXOUT); + runs(function () { + var $chap = $("#chap", doc); + expect($chap.attr('typeof')).toEqual("bibo:Chapter"); + expect($chap.attr('resource')).toEqual("#chap"); + expect($chap.attr('property')).toMatch(/bibo:hasPart/); + flushIframes(); + }); + }); it("should do nothing when disabled", function () { var doc; runs(function () { @@ -162,11 +225,11 @@ describe("W3C — RDFa", function () { waitsFor(function () { return doc; }, MAXOUT); runs(function () { var $c = $("html", doc); - expect($c.attr('prefix')).toEqual(undefined); - expect($c.attr('typeof')).toEqual(undefined); - expect($c.attr('property')).toEqual(undefined); - expect($c.attr('content')).toEqual(undefined) ; - expect($c.attr('about')).toEqual(undefined) ; + expect($c.attr('prefix')).not.toBeDefined(); + expect($c.attr('typeof')).not.toBeDefined(); + expect($c.attr('property')).not.toBeDefined(); + expect($c.attr('content')).not.toBeDefined(); + expect($c.attr('about')).not.toBeDefined(); flushIframes(); }); });