Mercurial > hg > webaudioevaluationtool
comparison test_create/test_create.html @ 840:c17f3713fe56
test_create: Tool now builds using XML DOM to ensure capitalisation is consistent
author | Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk> |
---|---|
date | Fri, 04 Dec 2015 10:38:13 +0000 |
parents | 07b89feada77 |
children | 888292c88c33 |
comparison
equal
deleted
inserted
replaced
839:07b89feada77 | 840:c17f3713fe56 |
---|---|
1704 } | 1704 } |
1705 }; | 1705 }; |
1706 | 1706 |
1707 this.encode = function() | 1707 this.encode = function() |
1708 { | 1708 { |
1709 var root = document.createElement("BrowserEvalProjectDocument"); | 1709 var root = document.implementation.createDocument(null,"BrowserEvalProjectDocument"); |
1710 // First get all the <setup> tag compiled | 1710 // First get all the <setup> tag compiled |
1711 var setupNode = document.createElement("setup"); | 1711 var setupNode = root.createElement("setup"); |
1712 setupNode.setAttribute('interface',this.interfaceType); | 1712 setupNode.setAttribute('interface',this.interfaceType); |
1713 setupNode.setAttribute('projectReturn',this.projectReturn); | 1713 setupNode.setAttribute('projectReturn',this.projectReturn); |
1714 setupNode.setAttribute('randomiseOrder',this.randomiseOrder); | 1714 setupNode.setAttribute('randomiseOrder',this.randomiseOrder); |
1715 setupNode.setAttribute('collectMetrics',this.collectMetrics); | 1715 setupNode.setAttribute('collectMetrics',this.collectMetrics); |
1716 setupNode.setAttribute('testPages',this.testPages); | 1716 setupNode.setAttribute('testPages',this.testPages); |
1717 | 1717 |
1718 var setupPreTest = document.createElement("PreTest"); | 1718 var setupPreTest = root.createElement("PreTest"); |
1719 for (var i=0; i<this.preTest.options.length; i++) | 1719 for (var i=0; i<this.preTest.options.length; i++) |
1720 { | 1720 { |
1721 setupPreTest.appendChild(this.preTest.options.exportXML()); | 1721 setupPreTest.appendChild(this.preTest.options.exportXML(root)); |
1722 } | 1722 } |
1723 | 1723 |
1724 var setupPostTest = document.createElement("PostTest"); | 1724 var setupPostTest = root.createElement("PostTest"); |
1725 for (var i=0; i<this.preTest.options.length; i++) | 1725 for (var i=0; i<this.preTest.options.length; i++) |
1726 { | 1726 { |
1727 setupPostTest.appendChild(this.postTest.options.exportXML()); | 1727 setupPostTest.appendChild(this.postTest.options.exportXML(root)); |
1728 } | 1728 } |
1729 | 1729 |
1730 setupNode.appendChild(setupPreTest); | 1730 setupNode.appendChild(setupPreTest); |
1731 setupNode.appendChild(setupPostTest); | 1731 setupNode.appendChild(setupPostTest); |
1732 | 1732 |
1733 // <Metric> tag | 1733 // <Metric> tag |
1734 var Metric = document.createElement("Metric"); | 1734 var Metric = root.createElement("Metric"); |
1735 for (var i=0; i<this.metrics.length; i++) | 1735 for (var i=0; i<this.metrics.length; i++) |
1736 { | 1736 { |
1737 var metricEnable = document.createElement("metricEnable"); | 1737 var metricEnable = document.createElement("metricEnable"); |
1738 metricEnable.textContent = this.metrics[i].enabled; | 1738 metricEnable.textContent = this.metrics[i].enabled; |
1739 Metric.appendChild(metricEnable); | 1739 Metric.appendChild(metricEnable); |
1740 } | 1740 } |
1741 setupNode.appendChild(Metric); | 1741 setupNode.appendChild(Metric); |
1742 | 1742 |
1743 // <interface> tag | 1743 // <interface> tag |
1744 var CommonInterface = document.createElement("interface"); | 1744 var CommonInterface = root.createElement("interface"); |
1745 for (var i=0; i<this.commonInterface.options.length; i++) | 1745 for (var i=0; i<this.commonInterface.options.length; i++) |
1746 { | 1746 { |
1747 var CIObj = this.commonInterface.options[i]; | 1747 var CIObj = this.commonInterface.options[i]; |
1748 var CINode = document.createElement(CIObj.type); | 1748 var CINode = document.createElement(CIObj.type); |
1749 if (CIObj.type == "check") {CINode.setAttribute("name",CIObj.check);} | 1749 if (CIObj.type == "check") {CINode.setAttribute("name",CIObj.check);} |
1750 else {CINode.setAttribute("name",CIObj.name);} | 1750 else {CINode.setAttribute("name",CIObj.name);} |
1751 CommonInterface.appendChild(CINode); | 1751 CommonInterface.appendChild(CINode); |
1752 } | 1752 } |
1753 setupNode.appendChild(CommonInterface); | 1753 setupNode.appendChild(CommonInterface); |
1754 | 1754 |
1755 root.appendChild(setupNode); | 1755 root.getElementsByTagName("BrowserEvalProjectDocument")[0].appendChild(setupNode); |
1756 // Time for the <audioHolder> tags | 1756 // Time for the <audioHolder> tags |
1757 for (var ahIndex = 0; ahIndex < this.audioHolders.length; ahIndex++) | 1757 for (var ahIndex = 0; ahIndex < this.audioHolders.length; ahIndex++) |
1758 { | 1758 { |
1759 var AHObj = this.audioHolders[ahIndex]; | 1759 var AHObj = this.audioHolders[ahIndex]; |
1760 var AHNode = document.createElement("audioHolder"); | 1760 var AHNode = root.createElement("audioHolder"); |
1761 AHNode.id = AHObj.id; | 1761 AHNode.id = AHObj.id; |
1762 AHNode.setAttribute("hostURL",AHObj.hostURL); | 1762 AHNode.setAttribute("hostURL",AHObj.hostURL); |
1763 AHNode.setAttribute("sampleRate",AHObj.samplerate); | 1763 AHNode.setAttribute("sampleRate",AHObj.samplerate); |
1764 AHNode.setAttribute("randomiseOrder",AHObj.randomiseOrder); | 1764 AHNode.setAttribute("randomiseOrder",AHObj.randomiseOrder); |
1765 AHNode.setAttribute("repeatCount",AHObj.repeatCount); | 1765 AHNode.setAttribute("repeatCount",AHObj.repeatCount); |
1768 | 1768 |
1769 // Create <interface> tag | 1769 // Create <interface> tag |
1770 for (var i=0; i<AHObj.interfaces.length; i++) | 1770 for (var i=0; i<AHObj.interfaces.length; i++) |
1771 { | 1771 { |
1772 var AHObjInterface = AHObj.interfaces[i]; | 1772 var AHObjInterface = AHObj.interfaces[i]; |
1773 var AHinterface = document.createElement("interface"); | 1773 var AHinterface = root.createElement("interface"); |
1774 if (AHObjInterface.title != undefined) | 1774 if (AHObjInterface.title != undefined) |
1775 { | 1775 { |
1776 var title = document.createElement("title"); | 1776 var title = root.createElement("title"); |
1777 title.textContent = AHObjInterface.title; | 1777 title.textContent = AHObjInterface.title; |
1778 AHinterface.appendChild(title); | 1778 AHinterface.appendChild(title); |
1779 } | 1779 } |
1780 for (var j=0; j<AHObjInterface.options.length; j++) | 1780 for (var j=0; j<AHObjInterface.options.length; j++) |
1781 { | 1781 { |
1782 var CIObj = AHObjInterface.options[j]; | 1782 var CIObj = AHObjInterface.options[j]; |
1783 var CINode = document.createElement(CIObj.type); | 1783 var CINode = root.createElement(CIObj.type); |
1784 if (CIObj.type == "check") {CINode.setAttribute("name",CIObj.check);} | 1784 if (CIObj.type == "check") {CINode.setAttribute("name",CIObj.check);} |
1785 else {CINode.setAttribute("name",CIObj.name);} | 1785 else {CINode.setAttribute("name",CIObj.name);} |
1786 AHinterface.appendChild(CINode); | 1786 AHinterface.appendChild(CINode); |
1787 } | 1787 } |
1788 if (AHObjInterface.scale != undefined) | 1788 if (AHObjInterface.scale != undefined) |
1789 { | 1789 { |
1790 for (var j=0; j<AHObjInterface.scale.length; j++) | 1790 for (var j=0; j<AHObjInterface.scale.length; j++) |
1791 { | 1791 { |
1792 var CIObj = AHObjInterface.scale[j]; | 1792 var CIObj = AHObjInterface.scale[j]; |
1793 var CINode = document.createElement("scale"); | 1793 var CINode = root.createElement("scale"); |
1794 CINode.setAttribute("position",CIObj[0]); | 1794 CINode.setAttribute("position",CIObj[0]); |
1795 CINode.textContent = CIObj[1]; | 1795 CINode.textContent = CIObj[1]; |
1796 AHinterface.appendChild(CINode); | 1796 AHinterface.appendChild(CINode); |
1797 } | 1797 } |
1798 } | 1798 } |
1801 | 1801 |
1802 // Create <audioElements> | 1802 // Create <audioElements> |
1803 for (var aeIndex = 0; aeIndex < AHObj.audioElements.length; aeIndex++) | 1803 for (var aeIndex = 0; aeIndex < AHObj.audioElements.length; aeIndex++) |
1804 { | 1804 { |
1805 var AEObj = AHObj.audioElements[aeIndex]; | 1805 var AEObj = AHObj.audioElements[aeIndex]; |
1806 var AENode = document.createElement("audioElements"); | 1806 var AENode = root.createElement("audioElements"); |
1807 AENode.id = AEObj.id; | 1807 AENode.id = AEObj.id; |
1808 AENode.setAttribute("url",AEObj.url); | 1808 AENode.setAttribute("url",AEObj.url); |
1809 AENode.setAttribute("type",AEObj.type); | 1809 AENode.setAttribute("type",AEObj.type); |
1810 if (AEObj.marker != undefined && AEObj.enforce) | 1810 if (AEObj.marker != undefined && AEObj.enforce) |
1811 { | 1811 { |
1815 } | 1815 } |
1816 | 1816 |
1817 // Create <CommentQuestion> | 1817 // Create <CommentQuestion> |
1818 for (var i=0; i<AHObj.commentQuestions.length; i++) | 1818 for (var i=0; i<AHObj.commentQuestions.length; i++) |
1819 { | 1819 { |
1820 AHNode.appendChild(AHObj.commentQuestions[i].exportXML()); | 1820 AHNode.appendChild(AHObj.commentQuestions[i].exportXML(root)); |
1821 } | 1821 } |
1822 | 1822 |
1823 // Create <PreTest> | 1823 // Create <PreTest> |
1824 var AHPreTest = document.createElement("PreTest"); | 1824 var AHPreTest = document.createElement("PreTest"); |
1825 for (var i=0; i<AHObj.preTest.options.length; i++) | 1825 for (var i=0; i<AHObj.preTest.options.length; i++) |
1826 { | 1826 { |
1827 AHPreTest.appendChild(AHObj.preTest.options.exportXML()); | 1827 AHPreTest.appendChild(AHObj.preTest.options.exportXML(root)); |
1828 } | 1828 } |
1829 | 1829 |
1830 var AHPostTest = document.createElement("PostTest"); | 1830 var AHPostTest = document.createElement("PostTest"); |
1831 for (var i=0; i<AHObj.preTest.options.length; i++) | 1831 for (var i=0; i<AHObj.preTest.options.length; i++) |
1832 { | 1832 { |
1833 AHPostTest.appendChild(AHObj.postTest.options.exportXML()); | 1833 AHPostTest.appendChild(AHObj.postTest.options.exportXML(root)); |
1834 } | 1834 } |
1835 AHNode.appendChild(AHPreTest); | 1835 AHNode.appendChild(AHPreTest); |
1836 AHNode.appendChild(AHPostTest); | 1836 AHNode.appendChild(AHPostTest); |
1837 root.appendChild(AHNode); | 1837 root.getElementsByTagName("BrowserEvalProjectDocument")[0].appendChild(AHNode); |
1838 } | 1838 } |
1839 return root; | 1839 return root; |
1840 }; | 1840 }; |
1841 | 1841 |
1842 this.prepostNode = function(type) { | 1842 this.prepostNode = function(type) { |
1861 this.options = []; | 1861 this.options = []; |
1862 this.min = undefined; | 1862 this.min = undefined; |
1863 this.max = undefined; | 1863 this.max = undefined; |
1864 this.step = undefined; | 1864 this.step = undefined; |
1865 | 1865 |
1866 this.exportXML = function() | 1866 this.exportXML = function(root) |
1867 { | 1867 { |
1868 var node = document.createElement(this.type); | 1868 var node = root.createElement(this.type); |
1869 switch(this.type) | 1869 switch(this.type) |
1870 { | 1870 { |
1871 case "statement": | 1871 case "statement": |
1872 node.textContent = this.statement; | 1872 node.textContent = this.statement; |
1873 break; | 1873 break; |
1961 | 1961 |
1962 this.marker = undefined; | 1962 this.marker = undefined; |
1963 }; | 1963 }; |
1964 | 1964 |
1965 this.commentQuestionNode = function(xml) { | 1965 this.commentQuestionNode = function(xml) { |
1966 this.exportXML = function() | 1966 this.exportXML = function(root) |
1967 { | 1967 { |
1968 var CQNode = document.createElement("CommentQuestion"); | 1968 var CQNode = root.createElement("CommentQuestion"); |
1969 CQNode.id = this.id; | 1969 CQNode.id = this.id; |
1970 CQNode.setAttribute("type",this.type); | 1970 CQNode.setAttribute("type",this.type); |
1971 switch(this.type) | 1971 switch(this.type) |
1972 { | 1972 { |
1973 case "text": | 1973 case "text": |
2607 } | 2607 } |
2608 } | 2608 } |
2609 function exportToXML() | 2609 function exportToXML() |
2610 { | 2610 { |
2611 var xmlDoc = specificationNode.encode(); | 2611 var xmlDoc = specificationNode.encode(); |
2612 var oSerializer = new XMLSerializer(); | |
2613 xmlDoc = oSerializer.serializeToString(xmlDoc); | |
2612 var parent = document.createElement("div"); | 2614 var parent = document.createElement("div"); |
2613 parent.appendChild(xmlDoc); | 2615 var file = [xmlDoc]; |
2614 var file = [parent.innerHTML]; | |
2615 var bb = new Blob(file,{type : 'application/xml'}); | 2616 var bb = new Blob(file,{type : 'application/xml'}); |
2616 var dnlk = window.URL.createObjectURL(bb); | 2617 var dnlk = window.URL.createObjectURL(bb); |
2617 var a = document.createElement("a"); | 2618 var a = document.createElement("a"); |
2618 a.hidden = ''; | 2619 a.hidden = ''; |
2619 a.href = dnlk; | 2620 a.href = dnlk; |
2688 </style> | 2689 </style> |
2689 </head> | 2690 </head> |
2690 | 2691 |
2691 <body> | 2692 <body> |
2692 <div id="export"> | 2693 <div id="export"> |
2693 <button id="exportToXML" onclick="specificationNode.exportToXML();">Export XML</button> | 2694 <button id="exportToXML" onclick="exportToXML();">Export XML</button> |
2694 </div> | 2695 </div> |
2695 <div id="content"></div> | 2696 <div id="content"></div> |
2696 </body> | 2697 </body> |
2697 </html> | 2698 </html> |