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>