An example of importing Embedded Coder code into the mbed IDE. Currently doesn't connect IO to PWM, ADC, and Encoder, instead provides random inputs and measures execution time.
Dependencies: mbed-dsp mbed Nucleo_pmsmfoc
html/html/rtwhilite.js@2:bbc155b0b886, 2014-11-25 (annotated)
- Committer:
- paulcox
- Date:
- Tue Nov 25 07:52:02 2014 +0000
- Revision:
- 2:bbc155b0b886
adding doc?
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
paulcox | 2:bbc155b0b886 | 1 | // Copyright 2007-2014 The MathWorks, Inc. |
paulcox | 2:bbc155b0b886 | 2 | |
paulcox | 2:bbc155b0b886 | 3 | // Class RTW_Hash ------------------------------------------------------------ |
paulcox | 2:bbc155b0b886 | 4 | // Internal web browser doesn't change window.location.hash if the link points |
paulcox | 2:bbc155b0b886 | 5 | // to the same page. |
paulcox | 2:bbc155b0b886 | 6 | // RTW_Hash remembers the hash value when the page is loaded in the first time |
paulcox | 2:bbc155b0b886 | 7 | // or a link is clicked. |
paulcox | 2:bbc155b0b886 | 8 | // removeHiliteByHash cleans the high lighted elements according to the stored |
paulcox | 2:bbc155b0b886 | 9 | // hash value |
paulcox | 2:bbc155b0b886 | 10 | function RTW_Hash(aHash) { |
paulcox | 2:bbc155b0b886 | 11 | if (aHash == null) { |
paulcox | 2:bbc155b0b886 | 12 | this.fHash = ""; |
paulcox | 2:bbc155b0b886 | 13 | } else { |
paulcox | 2:bbc155b0b886 | 14 | this.fHash = aHash; |
paulcox | 2:bbc155b0b886 | 15 | }; |
paulcox | 2:bbc155b0b886 | 16 | |
paulcox | 2:bbc155b0b886 | 17 | this.getHash = function() { |
paulcox | 2:bbc155b0b886 | 18 | return this.fHash; |
paulcox | 2:bbc155b0b886 | 19 | } |
paulcox | 2:bbc155b0b886 | 20 | |
paulcox | 2:bbc155b0b886 | 21 | this.setHash = function(aHash) { |
paulcox | 2:bbc155b0b886 | 22 | this.fHash = aHash; |
paulcox | 2:bbc155b0b886 | 23 | } |
paulcox | 2:bbc155b0b886 | 24 | } |
paulcox | 2:bbc155b0b886 | 25 | |
paulcox | 2:bbc155b0b886 | 26 | RTW_Hash.instance = null; |
paulcox | 2:bbc155b0b886 | 27 | |
paulcox | 2:bbc155b0b886 | 28 | // Class RTW_TraceInfo -------------------------------------------------------- |
paulcox | 2:bbc155b0b886 | 29 | function RTW_TraceInfo(aFileLinks) { |
paulcox | 2:bbc155b0b886 | 30 | this.fFileLinks = aFileLinks; |
paulcox | 2:bbc155b0b886 | 31 | this.fLines = new Array(); |
paulcox | 2:bbc155b0b886 | 32 | this.fTotalLines = 0; // total number of highlighted lines |
paulcox | 2:bbc155b0b886 | 33 | this.fNumLines = new Array(); |
paulcox | 2:bbc155b0b886 | 34 | this.fFileIdxCache = new Array(); |
paulcox | 2:bbc155b0b886 | 35 | this.fDisablePanel = false; |
paulcox | 2:bbc155b0b886 | 36 | this.fCurrFileIdx = 0; |
paulcox | 2:bbc155b0b886 | 37 | this.fCurrLineIdx = 0; |
paulcox | 2:bbc155b0b886 | 38 | this.fCurrCodeNode = null; |
paulcox | 2:bbc155b0b886 | 39 | this.getHtmlFileName = function(aIndex) { |
paulcox | 2:bbc155b0b886 | 40 | if (aIndex < this.fFileLinks.length) { |
paulcox | 2:bbc155b0b886 | 41 | var href = this.fFileLinks[aIndex].href; |
paulcox | 2:bbc155b0b886 | 42 | return href.substring(href.lastIndexOf('/')+1); |
paulcox | 2:bbc155b0b886 | 43 | } |
paulcox | 2:bbc155b0b886 | 44 | } |
paulcox | 2:bbc155b0b886 | 45 | this.getSrcFileName = function(aIndex) { |
paulcox | 2:bbc155b0b886 | 46 | var name = this.getHtmlFileName(aIndex); |
paulcox | 2:bbc155b0b886 | 47 | if (name) |
paulcox | 2:bbc155b0b886 | 48 | name = RTW_TraceInfo.toSrcFileName(name); |
paulcox | 2:bbc155b0b886 | 49 | return name; |
paulcox | 2:bbc155b0b886 | 50 | } |
paulcox | 2:bbc155b0b886 | 51 | this.getNumFileLinks = function() { |
paulcox | 2:bbc155b0b886 | 52 | return this.fFileLinks.length; |
paulcox | 2:bbc155b0b886 | 53 | } |
paulcox | 2:bbc155b0b886 | 54 | this.setFileLinkColor = function(aIndex, aColor) { |
paulcox | 2:bbc155b0b886 | 55 | var link = this.fFileLinks[aIndex]; |
paulcox | 2:bbc155b0b886 | 56 | if (link && link.parentNode && link.parentNode.style) |
paulcox | 2:bbc155b0b886 | 57 | link.parentNode.style.backgroundColor = aColor; |
paulcox | 2:bbc155b0b886 | 58 | } |
paulcox | 2:bbc155b0b886 | 59 | this.highlightFileLink = function(aIndex, aColor) { |
paulcox | 2:bbc155b0b886 | 60 | for (var i = 0; i < this.fFileLinks.length; ++i) { |
paulcox | 2:bbc155b0b886 | 61 | this.setFileLinkColor(i, i == aIndex ? aColor : ""); |
paulcox | 2:bbc155b0b886 | 62 | } |
paulcox | 2:bbc155b0b886 | 63 | } |
paulcox | 2:bbc155b0b886 | 64 | this.highlightCurrFileLink = function(aColor) { |
paulcox | 2:bbc155b0b886 | 65 | this.highlightFileLink(this.fCurrFileIdx); |
paulcox | 2:bbc155b0b886 | 66 | } |
paulcox | 2:bbc155b0b886 | 67 | this.highlightLines = function(aCodeNode,aColor) { |
paulcox | 2:bbc155b0b886 | 68 | this.fCurrCodeNode = aCodeNode; |
paulcox | 2:bbc155b0b886 | 69 | var lines = this.fLines[this.getHtmlFileName(this.fCurrFileIdx)]; |
paulcox | 2:bbc155b0b886 | 70 | if (lines && aCodeNode) { |
paulcox | 2:bbc155b0b886 | 71 | for (var i = 0; i < lines.length; ++i) { |
paulcox | 2:bbc155b0b886 | 72 | var lineObj = aCodeNode.childNodes[lines[i]-1]; |
paulcox | 2:bbc155b0b886 | 73 | if (lineObj) |
paulcox | 2:bbc155b0b886 | 74 | lineObj.style.backgroundColor=aColor; |
paulcox | 2:bbc155b0b886 | 75 | } |
paulcox | 2:bbc155b0b886 | 76 | } |
paulcox | 2:bbc155b0b886 | 77 | } |
paulcox | 2:bbc155b0b886 | 78 | this.getFileIdx = function(aFile) { |
paulcox | 2:bbc155b0b886 | 79 | if (this.fFileIdxCache[aFile] != null) |
paulcox | 2:bbc155b0b886 | 80 | return this.fFileIdxCache[aFile]; |
paulcox | 2:bbc155b0b886 | 81 | for (var i = 0; i < this.fFileLinks.length; ++i) { |
paulcox | 2:bbc155b0b886 | 82 | if (this.getHtmlFileName(i) == aFile) { |
paulcox | 2:bbc155b0b886 | 83 | this.fFileIdxCache[aFile] = i; |
paulcox | 2:bbc155b0b886 | 84 | return i; |
paulcox | 2:bbc155b0b886 | 85 | } |
paulcox | 2:bbc155b0b886 | 86 | } |
paulcox | 2:bbc155b0b886 | 87 | return null; |
paulcox | 2:bbc155b0b886 | 88 | } |
paulcox | 2:bbc155b0b886 | 89 | this.getCurrFileIdx = function() { return this.fCurrFileIdx; } |
paulcox | 2:bbc155b0b886 | 90 | this.setNumHighlightedLines = function(aFileIdx, aNumLines) { |
paulcox | 2:bbc155b0b886 | 91 | this.fNumLines[aFileIdx] = aNumLines; |
paulcox | 2:bbc155b0b886 | 92 | updateNumHighlightedLines(this.fFileLinks[aFileIdx], aNumLines); |
paulcox | 2:bbc155b0b886 | 93 | } |
paulcox | 2:bbc155b0b886 | 94 | this.getNumLines = function(aFileIdx) { |
paulcox | 2:bbc155b0b886 | 95 | return this.fNumLines[aFileIdx] != null ? this.fNumLines[aFileIdx] : 0; |
paulcox | 2:bbc155b0b886 | 96 | } |
paulcox | 2:bbc155b0b886 | 97 | this.getNumLinesAll = function() { |
paulcox | 2:bbc155b0b886 | 98 | var sum = 0; |
paulcox | 2:bbc155b0b886 | 99 | var len = this.fNumLines.length; |
paulcox | 2:bbc155b0b886 | 100 | for (var i = 0; i < len; ++i) { |
paulcox | 2:bbc155b0b886 | 101 | sum += this.getNumLines(i); |
paulcox | 2:bbc155b0b886 | 102 | } |
paulcox | 2:bbc155b0b886 | 103 | return sum; |
paulcox | 2:bbc155b0b886 | 104 | } |
paulcox | 2:bbc155b0b886 | 105 | this.getPrevButton = function() { |
paulcox | 2:bbc155b0b886 | 106 | var aFrame = getNavFrame(); |
paulcox | 2:bbc155b0b886 | 107 | if (typeof aFrame !== "undefined" && aFrame !== null) |
paulcox | 2:bbc155b0b886 | 108 | return aFrame.document.getElementById("rtwIdButtonPrev"); |
paulcox | 2:bbc155b0b886 | 109 | else |
paulcox | 2:bbc155b0b886 | 110 | return document.getElementById("rtwIdButtonPrev"); |
paulcox | 2:bbc155b0b886 | 111 | } |
paulcox | 2:bbc155b0b886 | 112 | this.getNextButton = function() { |
paulcox | 2:bbc155b0b886 | 113 | var aFrame = getNavFrame(); |
paulcox | 2:bbc155b0b886 | 114 | if (typeof aFrame !== "undefined" && aFrame !== null) |
paulcox | 2:bbc155b0b886 | 115 | return aFrame.document.getElementById("rtwIdButtonNext"); |
paulcox | 2:bbc155b0b886 | 116 | else |
paulcox | 2:bbc155b0b886 | 117 | return document.getElementById("rtwIdButtonNext"); |
paulcox | 2:bbc155b0b886 | 118 | } |
paulcox | 2:bbc155b0b886 | 119 | this.getPanel = function() { |
paulcox | 2:bbc155b0b886 | 120 | var aFrame = getNavFrame(); |
paulcox | 2:bbc155b0b886 | 121 | if (typeof aFrame !== "undefined" && aFrame !== null) |
paulcox | 2:bbc155b0b886 | 122 | return aFrame.document.getElementById("rtwIdTracePanel"); |
paulcox | 2:bbc155b0b886 | 123 | else |
paulcox | 2:bbc155b0b886 | 124 | return document.getElementById("rtwIdTracePanel"); |
paulcox | 2:bbc155b0b886 | 125 | } |
paulcox | 2:bbc155b0b886 | 126 | this.removeHighlighting = function() { |
paulcox | 2:bbc155b0b886 | 127 | for (var i = 0; i < this.fFileLinks.length; ++i) { |
paulcox | 2:bbc155b0b886 | 128 | this.setFileLinkColor(i, ""); |
paulcox | 2:bbc155b0b886 | 129 | this.setNumHighlightedLines(i, 0); |
paulcox | 2:bbc155b0b886 | 130 | } |
paulcox | 2:bbc155b0b886 | 131 | // remove highlight and reset current code node |
paulcox | 2:bbc155b0b886 | 132 | try { |
paulcox | 2:bbc155b0b886 | 133 | if (this.fCurrCodeNode != null) |
paulcox | 2:bbc155b0b886 | 134 | this.highlightLines(getCodeNode(),""); |
paulcox | 2:bbc155b0b886 | 135 | } catch (e) {}; |
paulcox | 2:bbc155b0b886 | 136 | this.fCurrCodeNode = null; |
paulcox | 2:bbc155b0b886 | 137 | if (this.getPrevButton()) { this.getPrevButton().disabled = true; } |
paulcox | 2:bbc155b0b886 | 138 | if (this.getNextButton()) { this.getNextButton().disabled = true; } |
paulcox | 2:bbc155b0b886 | 139 | if (this.getPanel()) { this.getPanel().style.display = "none"; } |
paulcox | 2:bbc155b0b886 | 140 | this.fCurrFileIdx = 0; |
paulcox | 2:bbc155b0b886 | 141 | this.fCurrLineIdx = 0; |
paulcox | 2:bbc155b0b886 | 142 | } |
paulcox | 2:bbc155b0b886 | 143 | this.setCurrLineIdx = function(aLineIdx) { |
paulcox | 2:bbc155b0b886 | 144 | this.fCurrLineIdx = aLineIdx; |
paulcox | 2:bbc155b0b886 | 145 | } |
paulcox | 2:bbc155b0b886 | 146 | this.getCurrLineIdx = function() { return this.fCurrLineIdx; } |
paulcox | 2:bbc155b0b886 | 147 | this.setCurrent = function(aFileIdx, aLineIdx) { |
paulcox | 2:bbc155b0b886 | 148 | this.fCurrFileIdx = aFileIdx; |
paulcox | 2:bbc155b0b886 | 149 | var numLines = this.getNumLines(aFileIdx); |
paulcox | 2:bbc155b0b886 | 150 | if (!numLines || aLineIdx >= numLines) |
paulcox | 2:bbc155b0b886 | 151 | this.fCurrLineIdx = -1; |
paulcox | 2:bbc155b0b886 | 152 | else |
paulcox | 2:bbc155b0b886 | 153 | this.fCurrLineIdx = aLineIdx; |
paulcox | 2:bbc155b0b886 | 154 | var allNumLines = this.getNumLinesAll(); |
paulcox | 2:bbc155b0b886 | 155 | if (this.getPrevButton()) { |
paulcox | 2:bbc155b0b886 | 156 | this.getPrevButton().disabled = (allNumLines <= 1 || !this.hasPrev()); |
paulcox | 2:bbc155b0b886 | 157 | } |
paulcox | 2:bbc155b0b886 | 158 | if (this.getNextButton()) { |
paulcox | 2:bbc155b0b886 | 159 | this.getNextButton().disabled = (allNumLines <= 1 || !this.hasNext()); |
paulcox | 2:bbc155b0b886 | 160 | } |
paulcox | 2:bbc155b0b886 | 161 | if (this.getPanel() && !this.fDisablePanel) { |
paulcox | 2:bbc155b0b886 | 162 | this.getPanel().style.display = 'block'; |
paulcox | 2:bbc155b0b886 | 163 | } |
paulcox | 2:bbc155b0b886 | 164 | } |
paulcox | 2:bbc155b0b886 | 165 | this.setDisablePanel = function(aDisable) { |
paulcox | 2:bbc155b0b886 | 166 | this.fDisablePanel = aDisable; |
paulcox | 2:bbc155b0b886 | 167 | } |
paulcox | 2:bbc155b0b886 | 168 | this.getPrevFileIdx = function() { |
paulcox | 2:bbc155b0b886 | 169 | if (this.fCurrLineIdx > 0) |
paulcox | 2:bbc155b0b886 | 170 | return this.fCurrFileIdx; |
paulcox | 2:bbc155b0b886 | 171 | for (var i = this.fCurrFileIdx - 1; i >= 0; --i) |
paulcox | 2:bbc155b0b886 | 172 | if (this.fNumLines[i] > 0) |
paulcox | 2:bbc155b0b886 | 173 | return i; |
paulcox | 2:bbc155b0b886 | 174 | return null; |
paulcox | 2:bbc155b0b886 | 175 | } |
paulcox | 2:bbc155b0b886 | 176 | // update the navigation bar state |
paulcox | 2:bbc155b0b886 | 177 | this.updateNavState = function() { |
paulcox | 2:bbc155b0b886 | 178 | if (this.getPrevButton()) |
paulcox | 2:bbc155b0b886 | 179 | this.getPrevButton().disabled = !this.hasPrev(); |
paulcox | 2:bbc155b0b886 | 180 | if (this.getNextButton()) |
paulcox | 2:bbc155b0b886 | 181 | this.getNextButton().disabled = !this.hasNext(); |
paulcox | 2:bbc155b0b886 | 182 | setTraceNumber(); |
paulcox | 2:bbc155b0b886 | 183 | } |
paulcox | 2:bbc155b0b886 | 184 | this.hasPrev = function() { |
paulcox | 2:bbc155b0b886 | 185 | return this.getPrevFileIdx() != null; |
paulcox | 2:bbc155b0b886 | 186 | } |
paulcox | 2:bbc155b0b886 | 187 | this.getFirstFileIdx = function() { |
paulcox | 2:bbc155b0b886 | 188 | for (var i = 0; i < this.getNumFileLinks(); ++i) |
paulcox | 2:bbc155b0b886 | 189 | if (this.fNumLines[i] > 0) |
paulcox | 2:bbc155b0b886 | 190 | return i; |
paulcox | 2:bbc155b0b886 | 191 | } |
paulcox | 2:bbc155b0b886 | 192 | this.getLastFileIdx = function() { |
paulcox | 2:bbc155b0b886 | 193 | for (var i = this.getNumFileLinks(); i >= 0; --i) |
paulcox | 2:bbc155b0b886 | 194 | if (this.fNumLines[i] > 0) |
paulcox | 2:bbc155b0b886 | 195 | return i; |
paulcox | 2:bbc155b0b886 | 196 | } |
paulcox | 2:bbc155b0b886 | 197 | this.goFirst = function() { |
paulcox | 2:bbc155b0b886 | 198 | this.fCurrFileIdx = this.getFirstFileIdx(); |
paulcox | 2:bbc155b0b886 | 199 | this.fCurrLineIdx = 0; |
paulcox | 2:bbc155b0b886 | 200 | this.updateNavState(); |
paulcox | 2:bbc155b0b886 | 201 | } |
paulcox | 2:bbc155b0b886 | 202 | this.goLast = function() { |
paulcox | 2:bbc155b0b886 | 203 | this.fCurrFileIdx = this.getLastFileIdx();; |
paulcox | 2:bbc155b0b886 | 204 | this.fCurrLineIdx = this.getNumLines(this.fCurrFileIdx) - 1; |
paulcox | 2:bbc155b0b886 | 205 | this.updateNavState(); |
paulcox | 2:bbc155b0b886 | 206 | } |
paulcox | 2:bbc155b0b886 | 207 | this.goPrev = function() { |
paulcox | 2:bbc155b0b886 | 208 | var fileIdx = this.getPrevFileIdx(); |
paulcox | 2:bbc155b0b886 | 209 | if (fileIdx == null) |
paulcox | 2:bbc155b0b886 | 210 | return; |
paulcox | 2:bbc155b0b886 | 211 | if (fileIdx == this.fCurrFileIdx) |
paulcox | 2:bbc155b0b886 | 212 | --this.fCurrLineIdx; |
paulcox | 2:bbc155b0b886 | 213 | else { |
paulcox | 2:bbc155b0b886 | 214 | this.fCurrFileIdx = fileIdx; |
paulcox | 2:bbc155b0b886 | 215 | this.fCurrLineIdx = this.getNumLines(fileIdx) - 1; |
paulcox | 2:bbc155b0b886 | 216 | } |
paulcox | 2:bbc155b0b886 | 217 | this.updateNavState(); |
paulcox | 2:bbc155b0b886 | 218 | } |
paulcox | 2:bbc155b0b886 | 219 | this.getNextFileIdx = function() { |
paulcox | 2:bbc155b0b886 | 220 | if (this.fCurrLineIdx < this.getNumLines(this.fCurrFileIdx) - 1 && this.getNumLines(this.fCurrFileIdx) > 0) |
paulcox | 2:bbc155b0b886 | 221 | return this.fCurrFileIdx; |
paulcox | 2:bbc155b0b886 | 222 | for (var i = this.fCurrFileIdx + 1; i < this.getNumFileLinks(); ++i) |
paulcox | 2:bbc155b0b886 | 223 | if (this.fNumLines[i] > 0) |
paulcox | 2:bbc155b0b886 | 224 | return i; |
paulcox | 2:bbc155b0b886 | 225 | return null; |
paulcox | 2:bbc155b0b886 | 226 | } |
paulcox | 2:bbc155b0b886 | 227 | this.hasNext = function() { |
paulcox | 2:bbc155b0b886 | 228 | return this.getNextFileIdx() != null; |
paulcox | 2:bbc155b0b886 | 229 | } |
paulcox | 2:bbc155b0b886 | 230 | this.goNext = function() { |
paulcox | 2:bbc155b0b886 | 231 | var fileIdx = this.getNextFileIdx(); |
paulcox | 2:bbc155b0b886 | 232 | if (fileIdx == null) |
paulcox | 2:bbc155b0b886 | 233 | return; |
paulcox | 2:bbc155b0b886 | 234 | if (fileIdx == this.fCurrFileIdx) |
paulcox | 2:bbc155b0b886 | 235 | ++this.fCurrLineIdx; |
paulcox | 2:bbc155b0b886 | 236 | else { |
paulcox | 2:bbc155b0b886 | 237 | this.fCurrFileIdx = fileIdx; |
paulcox | 2:bbc155b0b886 | 238 | this.fCurrLineIdx = 0; |
paulcox | 2:bbc155b0b886 | 239 | } |
paulcox | 2:bbc155b0b886 | 240 | this.updateNavState(); |
paulcox | 2:bbc155b0b886 | 241 | } |
paulcox | 2:bbc155b0b886 | 242 | this.setTotalLines = function(num) { |
paulcox | 2:bbc155b0b886 | 243 | this.fTotalLines = num; |
paulcox | 2:bbc155b0b886 | 244 | } |
paulcox | 2:bbc155b0b886 | 245 | this.getTotalLines = function() { return this.fTotalLines;} |
paulcox | 2:bbc155b0b886 | 246 | this.setLines = function(aFile, aLines) { |
paulcox | 2:bbc155b0b886 | 247 | this.fLines[aFile] = aLines; |
paulcox | 2:bbc155b0b886 | 248 | var index = this.getFileIdx(aFile); |
paulcox | 2:bbc155b0b886 | 249 | if (index != null) |
paulcox | 2:bbc155b0b886 | 250 | this.setNumHighlightedLines(index,aLines.length); |
paulcox | 2:bbc155b0b886 | 251 | } |
paulcox | 2:bbc155b0b886 | 252 | this.getLines = function(aFile) { |
paulcox | 2:bbc155b0b886 | 253 | return this.fLines[aFile]; |
paulcox | 2:bbc155b0b886 | 254 | } |
paulcox | 2:bbc155b0b886 | 255 | // get current on focus line number |
paulcox | 2:bbc155b0b886 | 256 | this.getCurrLine = function() { |
paulcox | 2:bbc155b0b886 | 257 | var file = this.getHtmlFileName(this.getCurrFileIdx()); |
paulcox | 2:bbc155b0b886 | 258 | var lines = this.fLines[file]; |
paulcox | 2:bbc155b0b886 | 259 | var line = null; |
paulcox | 2:bbc155b0b886 | 260 | if (lines) { |
paulcox | 2:bbc155b0b886 | 261 | var line = lines[this.fCurrLineIdx]; |
paulcox | 2:bbc155b0b886 | 262 | } |
paulcox | 2:bbc155b0b886 | 263 | return line; |
paulcox | 2:bbc155b0b886 | 264 | } |
paulcox | 2:bbc155b0b886 | 265 | this.getHRef = function(aFileIdx, aLineIdx, offset) { |
paulcox | 2:bbc155b0b886 | 266 | var file = this.getHtmlFileName(aFileIdx); |
paulcox | 2:bbc155b0b886 | 267 | var lines = this.fLines[file]; |
paulcox | 2:bbc155b0b886 | 268 | if (lines) { |
paulcox | 2:bbc155b0b886 | 269 | var line = lines[aLineIdx]; |
paulcox | 2:bbc155b0b886 | 270 | line = offset_line(line, offset); |
paulcox | 2:bbc155b0b886 | 271 | file = file+"#"+line; |
paulcox | 2:bbc155b0b886 | 272 | } |
paulcox | 2:bbc155b0b886 | 273 | return file; |
paulcox | 2:bbc155b0b886 | 274 | } |
paulcox | 2:bbc155b0b886 | 275 | |
paulcox | 2:bbc155b0b886 | 276 | this.getCurrentHRef = function(offset) { |
paulcox | 2:bbc155b0b886 | 277 | return this.getHRef(this.fCurrFileIdx, this.fCurrLineIdx, offset); |
paulcox | 2:bbc155b0b886 | 278 | } |
paulcox | 2:bbc155b0b886 | 279 | this.setInitLocation = function(aFile, aLine) { |
paulcox | 2:bbc155b0b886 | 280 | var fileIdx = this.getFileIdx(aFile); |
paulcox | 2:bbc155b0b886 | 281 | var lineIdx = null; |
paulcox | 2:bbc155b0b886 | 282 | if (fileIdx != null && aLine) { |
paulcox | 2:bbc155b0b886 | 283 | var lines = this.getLines(aFile); |
paulcox | 2:bbc155b0b886 | 284 | for (var i = 0; i < lines.length; ++i) { |
paulcox | 2:bbc155b0b886 | 285 | if (lines[i] == aLine) { |
paulcox | 2:bbc155b0b886 | 286 | lineIdx = i; |
paulcox | 2:bbc155b0b886 | 287 | break; |
paulcox | 2:bbc155b0b886 | 288 | } |
paulcox | 2:bbc155b0b886 | 289 | } |
paulcox | 2:bbc155b0b886 | 290 | } |
paulcox | 2:bbc155b0b886 | 291 | if (fileIdx == null || lineIdx == null) |
paulcox | 2:bbc155b0b886 | 292 | this.setCurrent(0,-1); |
paulcox | 2:bbc155b0b886 | 293 | else |
paulcox | 2:bbc155b0b886 | 294 | this.setCurrent(fileIdx,lineIdx); |
paulcox | 2:bbc155b0b886 | 295 | } |
paulcox | 2:bbc155b0b886 | 296 | } |
paulcox | 2:bbc155b0b886 | 297 | |
paulcox | 2:bbc155b0b886 | 298 | // Static methods in RTW_TraceInfo |
paulcox | 2:bbc155b0b886 | 299 | |
paulcox | 2:bbc155b0b886 | 300 | RTW_TraceInfo.getFileLinks = function(docObj) { |
paulcox | 2:bbc155b0b886 | 301 | var links; |
paulcox | 2:bbc155b0b886 | 302 | if (docObj && docObj.getElementsByName) |
paulcox | 2:bbc155b0b886 | 303 | links = docObj.getElementsByName("rtwIdGenFileLinks"); |
paulcox | 2:bbc155b0b886 | 304 | return links ? links : new Array(); |
paulcox | 2:bbc155b0b886 | 305 | } |
paulcox | 2:bbc155b0b886 | 306 | |
paulcox | 2:bbc155b0b886 | 307 | RTW_TraceInfo.toSrcFileName = function(aHtmlFileName) { |
paulcox | 2:bbc155b0b886 | 308 | aHtmlFileName = aHtmlFileName.replace(/_c.html$/,".c"); |
paulcox | 2:bbc155b0b886 | 309 | aHtmlFileName = aHtmlFileName.replace(/_h.html$/,".h"); |
paulcox | 2:bbc155b0b886 | 310 | aHtmlFileName = aHtmlFileName.replace(/_cpp.html$/,".cpp"); |
paulcox | 2:bbc155b0b886 | 311 | aHtmlFileName = aHtmlFileName.replace(/_hpp.html$/,".hpp"); |
paulcox | 2:bbc155b0b886 | 312 | aHtmlFileName = aHtmlFileName.replace(/_cc.html$/,".hpp"); |
paulcox | 2:bbc155b0b886 | 313 | return aHtmlFileName; |
paulcox | 2:bbc155b0b886 | 314 | } |
paulcox | 2:bbc155b0b886 | 315 | |
paulcox | 2:bbc155b0b886 | 316 | RTW_TraceInfo.instance = null; |
paulcox | 2:bbc155b0b886 | 317 | |
paulcox | 2:bbc155b0b886 | 318 | // Class RTW_TraceArgs -------------------------------------------------------- |
paulcox | 2:bbc155b0b886 | 319 | // file.c:10,20,30&file.h:10,20,30[&color=value] or |
paulcox | 2:bbc155b0b886 | 320 | // sid=model:1[&color=value] |
paulcox | 2:bbc155b0b886 | 321 | RTW_TraceArgs = function(aHash) { |
paulcox | 2:bbc155b0b886 | 322 | this.fColor = null; |
paulcox | 2:bbc155b0b886 | 323 | this.fFontSize = null; |
paulcox | 2:bbc155b0b886 | 324 | this.fInitFile = null; |
paulcox | 2:bbc155b0b886 | 325 | this.fInitLine = null; |
paulcox | 2:bbc155b0b886 | 326 | this.fSID = null; |
paulcox | 2:bbc155b0b886 | 327 | this.fFiles = new Array(); |
paulcox | 2:bbc155b0b886 | 328 | this.fLines = new Array(); |
paulcox | 2:bbc155b0b886 | 329 | this.fMessage = null; |
paulcox | 2:bbc155b0b886 | 330 | this.fBlock = null; |
paulcox | 2:bbc155b0b886 | 331 | this.fUseExternalBrowser = true; |
paulcox | 2:bbc155b0b886 | 332 | this.fModel2CodeSrc = null; |
paulcox | 2:bbc155b0b886 | 333 | this.fInCodeTrace = false; |
paulcox | 2:bbc155b0b886 | 334 | this.fTraceData = null; |
paulcox | 2:bbc155b0b886 | 335 | this.fFileIdx = []; // filename to fileId |
paulcox | 2:bbc155b0b886 | 336 | this.fRows = []; // highlighted rows indexed by fileId |
paulcox | 2:bbc155b0b886 | 337 | this.fIDs = []; // highlighted IDs indexed by fileId |
paulcox | 2:bbc155b0b886 | 338 | |
paulcox | 2:bbc155b0b886 | 339 | this.hasSid = function() { |
paulcox | 2:bbc155b0b886 | 340 | return !(this.fSID == null); |
paulcox | 2:bbc155b0b886 | 341 | } |
paulcox | 2:bbc155b0b886 | 342 | this.parseCommand = function(aHash) { |
paulcox | 2:bbc155b0b886 | 343 | var args = new Array(); |
paulcox | 2:bbc155b0b886 | 344 | args = aHash.split('&'); |
paulcox | 2:bbc155b0b886 | 345 | for (var i = 0; i < args.length; ++i) { |
paulcox | 2:bbc155b0b886 | 346 | var arg = args[i]; |
paulcox | 2:bbc155b0b886 | 347 | sep = arg.indexOf('='); |
paulcox | 2:bbc155b0b886 | 348 | if (sep != -1) { |
paulcox | 2:bbc155b0b886 | 349 | var cmd = arg.substring(0,sep); |
paulcox | 2:bbc155b0b886 | 350 | var opt = arg.substring(sep+1); |
paulcox | 2:bbc155b0b886 | 351 | switch (cmd.toLowerCase()) { |
paulcox | 2:bbc155b0b886 | 352 | case "color": |
paulcox | 2:bbc155b0b886 | 353 | this.fColor = opt; |
paulcox | 2:bbc155b0b886 | 354 | break; |
paulcox | 2:bbc155b0b886 | 355 | case "fontsize": |
paulcox | 2:bbc155b0b886 | 356 | this.fFontSize = opt; |
paulcox | 2:bbc155b0b886 | 357 | break; |
paulcox | 2:bbc155b0b886 | 358 | case "initfile": |
paulcox | 2:bbc155b0b886 | 359 | this.fInitFile = RTW_TraceArgs.toHtmlFileName(opt); |
paulcox | 2:bbc155b0b886 | 360 | break; |
paulcox | 2:bbc155b0b886 | 361 | case "initline": |
paulcox | 2:bbc155b0b886 | 362 | this.fInitLine = opt; |
paulcox | 2:bbc155b0b886 | 363 | break; |
paulcox | 2:bbc155b0b886 | 364 | case "msg": |
paulcox | 2:bbc155b0b886 | 365 | this.fMessage = opt; |
paulcox | 2:bbc155b0b886 | 366 | break; |
paulcox | 2:bbc155b0b886 | 367 | case "block": |
paulcox | 2:bbc155b0b886 | 368 | this.fBlock = unescape(opt); |
paulcox | 2:bbc155b0b886 | 369 | break; |
paulcox | 2:bbc155b0b886 | 370 | case "sid": |
paulcox | 2:bbc155b0b886 | 371 | this.fSID = opt; |
paulcox | 2:bbc155b0b886 | 372 | // convert sid to code location |
paulcox | 2:bbc155b0b886 | 373 | break; |
paulcox | 2:bbc155b0b886 | 374 | case "model2code_src": |
paulcox | 2:bbc155b0b886 | 375 | // model2code_src from model or webview |
paulcox | 2:bbc155b0b886 | 376 | this.fModel2CodeSrc = opt; |
paulcox | 2:bbc155b0b886 | 377 | break; |
paulcox | 2:bbc155b0b886 | 378 | case "useexternalbrowser": |
paulcox | 2:bbc155b0b886 | 379 | this.fUseExternalBrowser = (opt=="true"); |
paulcox | 2:bbc155b0b886 | 380 | break; |
paulcox | 2:bbc155b0b886 | 381 | case "incodetrace": |
paulcox | 2:bbc155b0b886 | 382 | this.fInCodeTrace = (opt=="true"); |
paulcox | 2:bbc155b0b886 | 383 | break; |
paulcox | 2:bbc155b0b886 | 384 | case "tracedata": |
paulcox | 2:bbc155b0b886 | 385 | this.fTraceData = decodeURI(opt); |
paulcox | 2:bbc155b0b886 | 386 | break; |
paulcox | 2:bbc155b0b886 | 387 | } |
paulcox | 2:bbc155b0b886 | 388 | } |
paulcox | 2:bbc155b0b886 | 389 | } |
paulcox | 2:bbc155b0b886 | 390 | } |
paulcox | 2:bbc155b0b886 | 391 | this.parseUrlHash = function(aHash) { |
paulcox | 2:bbc155b0b886 | 392 | var rows; |
paulcox | 2:bbc155b0b886 | 393 | if (aHash) { |
paulcox | 2:bbc155b0b886 | 394 | args = aHash.split('&'); |
paulcox | 2:bbc155b0b886 | 395 | for (var i = 0; i < args.length; ++i) { |
paulcox | 2:bbc155b0b886 | 396 | var arg = args[i]; |
paulcox | 2:bbc155b0b886 | 397 | sep = arg.indexOf(':'); |
paulcox | 2:bbc155b0b886 | 398 | if (sep != -1) { |
paulcox | 2:bbc155b0b886 | 399 | var fileLines = arg.split(':'); |
paulcox | 2:bbc155b0b886 | 400 | var htmlFileName = RTW_TraceArgs.toHtmlFileName(fileLines[0]); |
paulcox | 2:bbc155b0b886 | 401 | this.fFileIdx[htmlFileName] = i; |
paulcox | 2:bbc155b0b886 | 402 | this.fFiles.push(htmlFileName); |
paulcox | 2:bbc155b0b886 | 403 | if (fileLines[1]) { |
paulcox | 2:bbc155b0b886 | 404 | rows = fileLines[1].split(','); |
paulcox | 2:bbc155b0b886 | 405 | rows = uniqueRows(rows); |
paulcox | 2:bbc155b0b886 | 406 | this.fLines.push(rows); |
paulcox | 2:bbc155b0b886 | 407 | this.fRows[i] = rows; |
paulcox | 2:bbc155b0b886 | 408 | } |
paulcox | 2:bbc155b0b886 | 409 | } |
paulcox | 2:bbc155b0b886 | 410 | } |
paulcox | 2:bbc155b0b886 | 411 | if (this.fInitFile == null && this.fFiles.length > 0) { |
paulcox | 2:bbc155b0b886 | 412 | this.fInitFile = this.fFiles[0]; |
paulcox | 2:bbc155b0b886 | 413 | this.fInitLine = (this.fLines[0] == null ? -1 : this.fLines[0][0]); |
paulcox | 2:bbc155b0b886 | 414 | } |
paulcox | 2:bbc155b0b886 | 415 | } |
paulcox | 2:bbc155b0b886 | 416 | } |
paulcox | 2:bbc155b0b886 | 417 | this.parseUrlHash2 = function(aHash) { |
paulcox | 2:bbc155b0b886 | 418 | aHash = decodeURI(aHash); |
paulcox | 2:bbc155b0b886 | 419 | var rows; |
paulcox | 2:bbc155b0b886 | 420 | var ids; |
paulcox | 2:bbc155b0b886 | 421 | if (aHash && aHash.length > 0 && aHash[0] === "[") { |
paulcox | 2:bbc155b0b886 | 422 | var input = eval(aHash); |
paulcox | 2:bbc155b0b886 | 423 | var i; |
paulcox | 2:bbc155b0b886 | 424 | var j; |
paulcox | 2:bbc155b0b886 | 425 | // set highlight files from url |
paulcox | 2:bbc155b0b886 | 426 | for (i=0; i<input.length;i++) { |
paulcox | 2:bbc155b0b886 | 427 | rows = new Array(); |
paulcox | 2:bbc155b0b886 | 428 | ids = new Array(); |
paulcox | 2:bbc155b0b886 | 429 | this.fFileIdx[input[i].file] = i; |
paulcox | 2:bbc155b0b886 | 430 | this.fFiles.push(input[i].file); |
paulcox | 2:bbc155b0b886 | 431 | ids = input[i].id; |
paulcox | 2:bbc155b0b886 | 432 | for (j=0; j<ids.length;j++) { |
paulcox | 2:bbc155b0b886 | 433 | // get row number |
paulcox | 2:bbc155b0b886 | 434 | if (ids[j].indexOf("c") !== -1) |
paulcox | 2:bbc155b0b886 | 435 | rows.push(Number(ids[j].substring(0,ids[j].indexOf("c")))); |
paulcox | 2:bbc155b0b886 | 436 | else |
paulcox | 2:bbc155b0b886 | 437 | rows.push(Number(ids[j])); |
paulcox | 2:bbc155b0b886 | 438 | } |
paulcox | 2:bbc155b0b886 | 439 | rows = uniqueRows(rows); |
paulcox | 2:bbc155b0b886 | 440 | this.fRows[i] = rows; |
paulcox | 2:bbc155b0b886 | 441 | this.fIDs[i] = ids; |
paulcox | 2:bbc155b0b886 | 442 | } |
paulcox | 2:bbc155b0b886 | 443 | } else { |
paulcox | 2:bbc155b0b886 | 444 | // reset all states |
paulcox | 2:bbc155b0b886 | 445 | this.fFiles = []; |
paulcox | 2:bbc155b0b886 | 446 | this.fRows = []; |
paulcox | 2:bbc155b0b886 | 447 | this.fIDs = []; |
paulcox | 2:bbc155b0b886 | 448 | } |
paulcox | 2:bbc155b0b886 | 449 | return; |
paulcox | 2:bbc155b0b886 | 450 | } |
paulcox | 2:bbc155b0b886 | 451 | this.getFileIdx = function(aFileName) { |
paulcox | 2:bbc155b0b886 | 452 | if (aFileName) { |
paulcox | 2:bbc155b0b886 | 453 | return this.fFileIdx[aFileName]; |
paulcox | 2:bbc155b0b886 | 454 | } else { |
paulcox | 2:bbc155b0b886 | 455 | // return the fileIdx of the current display file |
paulcox | 2:bbc155b0b886 | 456 | var pathname = top.rtwreport_document_frame.location.pathname; |
paulcox | 2:bbc155b0b886 | 457 | pathname = pathname.substr(pathname.lastIndexOf("/")+1); |
paulcox | 2:bbc155b0b886 | 458 | // find the highlight file name |
paulcox | 2:bbc155b0b886 | 459 | return this.getFileIdx(pathname); |
paulcox | 2:bbc155b0b886 | 460 | } |
paulcox | 2:bbc155b0b886 | 461 | } |
paulcox | 2:bbc155b0b886 | 462 | |
paulcox | 2:bbc155b0b886 | 463 | this.getColor = function() { return this.fColor; } |
paulcox | 2:bbc155b0b886 | 464 | this.getFontSize = function() { return this.fFontSize; } |
paulcox | 2:bbc155b0b886 | 465 | this.getInitFile = function() { return this.fInitFile; } |
paulcox | 2:bbc155b0b886 | 466 | this.getInitLine = function() { return this.fInitLine; } |
paulcox | 2:bbc155b0b886 | 467 | this.getNumFiles = function() { return this.fFiles.length; } |
paulcox | 2:bbc155b0b886 | 468 | this.getSID = function() { return this.fSID; } |
paulcox | 2:bbc155b0b886 | 469 | this.getFile = function(aIdx) { if (isNaN(aIdx)) return this.fFiles; return this.fFiles[aIdx];} |
paulcox | 2:bbc155b0b886 | 470 | this.getLines = function(aIdx) { return this.fLines[aIdx]; } |
paulcox | 2:bbc155b0b886 | 471 | this.getUseExternalBrowser = function() { return this.fUseExternalBrowser; } |
paulcox | 2:bbc155b0b886 | 472 | this.getInCodeTrace = function() { return this.fInCodeTrace; } |
paulcox | 2:bbc155b0b886 | 473 | this.getTraceData = function() { return this.fTraceData; } |
paulcox | 2:bbc155b0b886 | 474 | this.getModel2CodeSrc = function() { return this.fModel2CodeSrc; } |
paulcox | 2:bbc155b0b886 | 475 | this.setUseExternalBrowser = function(val) { this.fUseExternalBrowser = val; } |
paulcox | 2:bbc155b0b886 | 476 | this.setInCodeTrace = function(val) { this.fInCodeTrace = val; } |
paulcox | 2:bbc155b0b886 | 477 | this.setTraceData = function(val) { this.fTraceData = val; } |
paulcox | 2:bbc155b0b886 | 478 | this.setModel2CodeSrc = function(val) { this.fModel2CodeSrc = val; } |
paulcox | 2:bbc155b0b886 | 479 | this.getRows = function(aIdx) { return this.fRows[aIdx];} |
paulcox | 2:bbc155b0b886 | 480 | this.getIDs = function(aIdx) { return this.fIDs[aIdx]; } |
paulcox | 2:bbc155b0b886 | 481 | this.getBlock = function() { return this.fBlock; } |
paulcox | 2:bbc155b0b886 | 482 | // constructor |
paulcox | 2:bbc155b0b886 | 483 | this.parseCommand(aHash); |
paulcox | 2:bbc155b0b886 | 484 | } |
paulcox | 2:bbc155b0b886 | 485 | |
paulcox | 2:bbc155b0b886 | 486 | // Static methods in RTW_TraceArgs |
paulcox | 2:bbc155b0b886 | 487 | |
paulcox | 2:bbc155b0b886 | 488 | RTW_TraceArgs.toHtmlFileName = function(aFile) { |
paulcox | 2:bbc155b0b886 | 489 | f = aFile; |
paulcox | 2:bbc155b0b886 | 490 | aFile = f.substring(0,f.lastIndexOf('.')) + '_' + f.substring(f.lastIndexOf('.')+1) + ".html"; |
paulcox | 2:bbc155b0b886 | 491 | return aFile; |
paulcox | 2:bbc155b0b886 | 492 | } |
paulcox | 2:bbc155b0b886 | 493 | |
paulcox | 2:bbc155b0b886 | 494 | RTW_TraceArgs.instance = null; |
paulcox | 2:bbc155b0b886 | 495 | |
paulcox | 2:bbc155b0b886 | 496 | RTW_MessageWindow = function(aWindow, aParagraph) { |
paulcox | 2:bbc155b0b886 | 497 | this.fWindow = aWindow; |
paulcox | 2:bbc155b0b886 | 498 | this.fParagraph = aParagraph; |
paulcox | 2:bbc155b0b886 | 499 | |
paulcox | 2:bbc155b0b886 | 500 | this.print = function(msg) { |
paulcox | 2:bbc155b0b886 | 501 | this.fParagraph.innerHTML = msg; |
paulcox | 2:bbc155b0b886 | 502 | if (msg) |
paulcox | 2:bbc155b0b886 | 503 | this.fWindow.style.display = "block"; |
paulcox | 2:bbc155b0b886 | 504 | else |
paulcox | 2:bbc155b0b886 | 505 | this.fWindow.style.display = "none"; |
paulcox | 2:bbc155b0b886 | 506 | } |
paulcox | 2:bbc155b0b886 | 507 | this.clear = function() { |
paulcox | 2:bbc155b0b886 | 508 | this.print(""); |
paulcox | 2:bbc155b0b886 | 509 | } |
paulcox | 2:bbc155b0b886 | 510 | } |
paulcox | 2:bbc155b0b886 | 511 | |
paulcox | 2:bbc155b0b886 | 512 | // RTW_MessageWindow factory |
paulcox | 2:bbc155b0b886 | 513 | RTW_MessageWindowFactory = function(aDocObj) { |
paulcox | 2:bbc155b0b886 | 514 | this.fDocObj = aDocObj; |
paulcox | 2:bbc155b0b886 | 515 | this.fInstance = null; |
paulcox | 2:bbc155b0b886 | 516 | |
paulcox | 2:bbc155b0b886 | 517 | this.getInstance = function() { |
paulcox | 2:bbc155b0b886 | 518 | if (this.fInstance) |
paulcox | 2:bbc155b0b886 | 519 | return this.fInstance; |
paulcox | 2:bbc155b0b886 | 520 | if (!this.fDocObj) |
paulcox | 2:bbc155b0b886 | 521 | return; |
paulcox | 2:bbc155b0b886 | 522 | |
paulcox | 2:bbc155b0b886 | 523 | var table = this.fDocObj.getElementById("rtwIdMsgWindow"); |
paulcox | 2:bbc155b0b886 | 524 | var paragraph = this.fDocObj.getElementById("rtwIdMsg"); |
paulcox | 2:bbc155b0b886 | 525 | var button = this.fDocObj.getElementById("rtwIdButtonMsg"); |
paulcox | 2:bbc155b0b886 | 526 | |
paulcox | 2:bbc155b0b886 | 527 | if (!table || !paragraph || !button) |
paulcox | 2:bbc155b0b886 | 528 | return null; |
paulcox | 2:bbc155b0b886 | 529 | |
paulcox | 2:bbc155b0b886 | 530 | obj = new RTW_MessageWindow(table,paragraph); |
paulcox | 2:bbc155b0b886 | 531 | button.onclick = function() { obj.clear(); } |
paulcox | 2:bbc155b0b886 | 532 | this.fInstance = obj; |
paulcox | 2:bbc155b0b886 | 533 | return this.fInstance; |
paulcox | 2:bbc155b0b886 | 534 | } |
paulcox | 2:bbc155b0b886 | 535 | } |
paulcox | 2:bbc155b0b886 | 536 | |
paulcox | 2:bbc155b0b886 | 537 | RTW_MessageWindowFactory.instance = null; |
paulcox | 2:bbc155b0b886 | 538 | RTW_MessageWindow.factory = function(aDocObj) { |
paulcox | 2:bbc155b0b886 | 539 | if (!RTW_MessageWindowFactory.instance) |
paulcox | 2:bbc155b0b886 | 540 | RTW_MessageWindowFactory.instance = new RTW_MessageWindowFactory(aDocObj); |
paulcox | 2:bbc155b0b886 | 541 | return RTW_MessageWindowFactory.instance.getInstance(); |
paulcox | 2:bbc155b0b886 | 542 | } |
paulcox | 2:bbc155b0b886 | 543 | |
paulcox | 2:bbc155b0b886 | 544 | // Callbacks and helper functions --------------------------------------------- |
paulcox | 2:bbc155b0b886 | 545 | |
paulcox | 2:bbc155b0b886 | 546 | // Helper functions |
paulcox | 2:bbc155b0b886 | 547 | function getCodeNode() { |
paulcox | 2:bbc155b0b886 | 548 | return rtwSrcFrame().document.getElementById("RTWcode"); |
paulcox | 2:bbc155b0b886 | 549 | } |
paulcox | 2:bbc155b0b886 | 550 | |
paulcox | 2:bbc155b0b886 | 551 | function rtwMidFrame() { |
paulcox | 2:bbc155b0b886 | 552 | return top.document.getElementById('rtw_midFrame'); |
paulcox | 2:bbc155b0b886 | 553 | } |
paulcox | 2:bbc155b0b886 | 554 | function rtwSrcFrame() { |
paulcox | 2:bbc155b0b886 | 555 | return top.rtwreport_document_frame; |
paulcox | 2:bbc155b0b886 | 556 | } |
paulcox | 2:bbc155b0b886 | 557 | function rtwTocFrame() { |
paulcox | 2:bbc155b0b886 | 558 | return top.rtwreport_contents_frame; |
paulcox | 2:bbc155b0b886 | 559 | } |
paulcox | 2:bbc155b0b886 | 560 | function rtwNavToolbarFrame() { |
paulcox | 2:bbc155b0b886 | 561 | return top.rtwreport_navToolbar_frame; // return rtwTocFrame(); |
paulcox | 2:bbc155b0b886 | 562 | } |
paulcox | 2:bbc155b0b886 | 563 | function rtwInspectFrame() { |
paulcox | 2:bbc155b0b886 | 564 | return top.rtwreport_inspect_frame; // return rtwTocFrame(); |
paulcox | 2:bbc155b0b886 | 565 | } |
paulcox | 2:bbc155b0b886 | 566 | function rtwGetFileName(url) { |
paulcox | 2:bbc155b0b886 | 567 | var slashIdx = url.lastIndexOf('/'); |
paulcox | 2:bbc155b0b886 | 568 | var hashIdx = url.indexOf('#', slashIdx); |
paulcox | 2:bbc155b0b886 | 569 | if (hashIdx == -1) |
paulcox | 2:bbc155b0b886 | 570 | return url.substring(slashIdx+1) |
paulcox | 2:bbc155b0b886 | 571 | else |
paulcox | 2:bbc155b0b886 | 572 | return url.substring(slashIdx+1,hashIdx); |
paulcox | 2:bbc155b0b886 | 573 | } |
paulcox | 2:bbc155b0b886 | 574 | |
paulcox | 2:bbc155b0b886 | 575 | // Help function to expand the file group |
paulcox | 2:bbc155b0b886 | 576 | function expandFileGroup(docObj, tagID) { |
paulcox | 2:bbc155b0b886 | 577 | if (docObj.getElementById) { |
paulcox | 2:bbc155b0b886 | 578 | var obj_table = docObj.getElementById(tagID); |
paulcox | 2:bbc155b0b886 | 579 | var o; |
paulcox | 2:bbc155b0b886 | 580 | while (obj_table.nodeName != "TABLE") { |
paulcox | 2:bbc155b0b886 | 581 | if (obj_table.parentNode) { |
paulcox | 2:bbc155b0b886 | 582 | obj_table = obj_table.parentNode; |
paulcox | 2:bbc155b0b886 | 583 | } else { |
paulcox | 2:bbc155b0b886 | 584 | return; |
paulcox | 2:bbc155b0b886 | 585 | } |
paulcox | 2:bbc155b0b886 | 586 | } |
paulcox | 2:bbc155b0b886 | 587 | if (obj_table.style.display == "none") { |
paulcox | 2:bbc155b0b886 | 588 | var category_table = obj_table.parentNode; |
paulcox | 2:bbc155b0b886 | 589 | while (category_table.nodeName != "TABLE") { |
paulcox | 2:bbc155b0b886 | 590 | if (category_table.parentNode) { |
paulcox | 2:bbc155b0b886 | 591 | category_table = category_table.parentNode; |
paulcox | 2:bbc155b0b886 | 592 | } else { |
paulcox | 2:bbc155b0b886 | 593 | return; |
paulcox | 2:bbc155b0b886 | 594 | } |
paulcox | 2:bbc155b0b886 | 595 | } |
paulcox | 2:bbc155b0b886 | 596 | var o = category_table.id + "_button"; |
paulcox | 2:bbc155b0b886 | 597 | o = docObj.getElementById(o); |
paulcox | 2:bbc155b0b886 | 598 | if (o && top.rtwreport_contents_frame.rtwFileListShrink) { |
paulcox | 2:bbc155b0b886 | 599 | top.rtwreport_contents_frame.rtwFileListShrink(o, category_table.id, 0); |
paulcox | 2:bbc155b0b886 | 600 | } |
paulcox | 2:bbc155b0b886 | 601 | } |
paulcox | 2:bbc155b0b886 | 602 | } |
paulcox | 2:bbc155b0b886 | 603 | } |
paulcox | 2:bbc155b0b886 | 604 | // Help function to set the background color based on Element's Id in a document |
paulcox | 2:bbc155b0b886 | 605 | // object |
paulcox | 2:bbc155b0b886 | 606 | function setBGColorByElementId(docObj, tagID, bgColor) { |
paulcox | 2:bbc155b0b886 | 607 | var status = false; |
paulcox | 2:bbc155b0b886 | 608 | if (bgColor == "") { |
paulcox | 2:bbc155b0b886 | 609 | bgColor = "TRANSPARENT"; |
paulcox | 2:bbc155b0b886 | 610 | } |
paulcox | 2:bbc155b0b886 | 611 | |
paulcox | 2:bbc155b0b886 | 612 | if (docObj.getElementById) { |
paulcox | 2:bbc155b0b886 | 613 | var obj2Hilite = docObj.getElementById(tagID); |
paulcox | 2:bbc155b0b886 | 614 | if (obj2Hilite && obj2Hilite.parentNode) { |
paulcox | 2:bbc155b0b886 | 615 | obj2Hilite.parentNode.style.backgroundColor = bgColor; |
paulcox | 2:bbc155b0b886 | 616 | status = true; |
paulcox | 2:bbc155b0b886 | 617 | } |
paulcox | 2:bbc155b0b886 | 618 | } |
paulcox | 2:bbc155b0b886 | 619 | return status; |
paulcox | 2:bbc155b0b886 | 620 | } |
paulcox | 2:bbc155b0b886 | 621 | |
paulcox | 2:bbc155b0b886 | 622 | // Help function to set the background color based on Element's name in a document |
paulcox | 2:bbc155b0b886 | 623 | // object |
paulcox | 2:bbc155b0b886 | 624 | function setBGColorByElementsName(docObj, tagName, bgColor) { |
paulcox | 2:bbc155b0b886 | 625 | if (bgColor == "") { |
paulcox | 2:bbc155b0b886 | 626 | bgColor = "TRANSPARENT"; |
paulcox | 2:bbc155b0b886 | 627 | } |
paulcox | 2:bbc155b0b886 | 628 | if (docObj.getElementsByName) { |
paulcox | 2:bbc155b0b886 | 629 | var objs2Hilite = docObj.getElementsByName(tagName); |
paulcox | 2:bbc155b0b886 | 630 | for (var objIndex = 0; objIndex < objs2Hilite.length; ++objIndex) { |
paulcox | 2:bbc155b0b886 | 631 | if (objs2Hilite[objIndex].parentNode) |
paulcox | 2:bbc155b0b886 | 632 | objs2Hilite[objIndex].parentNode.style.backgroundColor = bgColor; |
paulcox | 2:bbc155b0b886 | 633 | } |
paulcox | 2:bbc155b0b886 | 634 | } |
paulcox | 2:bbc155b0b886 | 635 | } |
paulcox | 2:bbc155b0b886 | 636 | |
paulcox | 2:bbc155b0b886 | 637 | // Help function to highlight lines in source file based on Element's name |
paulcox | 2:bbc155b0b886 | 638 | // Note: Name of docHiliteByElementsName would be better |
paulcox | 2:bbc155b0b886 | 639 | function hiliteByElementsName(winObj, tagName) { |
paulcox | 2:bbc155b0b886 | 640 | var hiliteColor = "#aaffff"; |
paulcox | 2:bbc155b0b886 | 641 | if (winObj.document) |
paulcox | 2:bbc155b0b886 | 642 | setBGColorByElementsName(winObj.document, tagName, hiliteColor); |
paulcox | 2:bbc155b0b886 | 643 | } |
paulcox | 2:bbc155b0b886 | 644 | |
paulcox | 2:bbc155b0b886 | 645 | // Help function to remove the highlight of lines in source file based on Element's name |
paulcox | 2:bbc155b0b886 | 646 | function removeHiliteByElementsName(winObj, tagName) { |
paulcox | 2:bbc155b0b886 | 647 | if (winObj.document) |
paulcox | 2:bbc155b0b886 | 648 | setBGColorByElementsName(winObj.document, tagName, ""); |
paulcox | 2:bbc155b0b886 | 649 | } |
paulcox | 2:bbc155b0b886 | 650 | |
paulcox | 2:bbc155b0b886 | 651 | // Help function to set the background color based on the URL's hash |
paulcox | 2:bbc155b0b886 | 652 | function setBGColorByHash(docObj, bgColor) { |
paulcox | 2:bbc155b0b886 | 653 | if (docObj.location) { |
paulcox | 2:bbc155b0b886 | 654 | var tagName = docObj.location.hash; |
paulcox | 2:bbc155b0b886 | 655 | // Use the stored hash value if it exists because the location.hash |
paulcox | 2:bbc155b0b886 | 656 | // may be wrong in internal web browser |
paulcox | 2:bbc155b0b886 | 657 | if (RTW_Hash.instance) |
paulcox | 2:bbc155b0b886 | 658 | tagName = RTW_Hash.instance.getHash(); |
paulcox | 2:bbc155b0b886 | 659 | if (tagName != null) |
paulcox | 2:bbc155b0b886 | 660 | tagName = tagName.substring(1); |
paulcox | 2:bbc155b0b886 | 661 | |
paulcox | 2:bbc155b0b886 | 662 | var codeNode = docObj.getElementById("RTWcode"); |
paulcox | 2:bbc155b0b886 | 663 | if (tagName != null && tagName != "") { |
paulcox | 2:bbc155b0b886 | 664 | if (!isNaN(tagName)) |
paulcox | 2:bbc155b0b886 | 665 | tagName = Number(tagName) + 10; |
paulcox | 2:bbc155b0b886 | 666 | setBGColorByElementsName(docObj, tagName, bgColor); |
paulcox | 2:bbc155b0b886 | 667 | } |
paulcox | 2:bbc155b0b886 | 668 | } |
paulcox | 2:bbc155b0b886 | 669 | } |
paulcox | 2:bbc155b0b886 | 670 | |
paulcox | 2:bbc155b0b886 | 671 | // Highlight the lines in document frame based on the URL's hash |
paulcox | 2:bbc155b0b886 | 672 | function hiliteByHash(docObj) { |
paulcox | 2:bbc155b0b886 | 673 | var hiliteColor = "#aaffff"; |
paulcox | 2:bbc155b0b886 | 674 | setBGColorByHash(docObj, hiliteColor); |
paulcox | 2:bbc155b0b886 | 675 | } |
paulcox | 2:bbc155b0b886 | 676 | |
paulcox | 2:bbc155b0b886 | 677 | // Remove highlight of lines in document frame based on the URL's hash |
paulcox | 2:bbc155b0b886 | 678 | function removeHiliteByHash(winObj) { |
paulcox | 2:bbc155b0b886 | 679 | if (winObj.document) |
paulcox | 2:bbc155b0b886 | 680 | setBGColorByHash(winObj.document, ""); |
paulcox | 2:bbc155b0b886 | 681 | } |
paulcox | 2:bbc155b0b886 | 682 | |
paulcox | 2:bbc155b0b886 | 683 | // Highlight the filename Element in TOC frame based on the URL's filename |
paulcox | 2:bbc155b0b886 | 684 | function hiliteByFileName(aHref) { |
paulcox | 2:bbc155b0b886 | 685 | var status = false; |
paulcox | 2:bbc155b0b886 | 686 | if (!top.rtwreport_contents_frame) |
paulcox | 2:bbc155b0b886 | 687 | return status; |
paulcox | 2:bbc155b0b886 | 688 | var hiliteColor = GlobalConfig.fileLinkHiliteColor; |
paulcox | 2:bbc155b0b886 | 689 | var fileName = rtwGetFileName(aHref); |
paulcox | 2:bbc155b0b886 | 690 | if (top.rtwreport_contents_frame.document) { |
paulcox | 2:bbc155b0b886 | 691 | removeHiliteFileList(top.rtwreport_contents_frame); |
paulcox | 2:bbc155b0b886 | 692 | status = setBGColorByElementId(top.rtwreport_contents_frame.document, fileName, hiliteColor); |
paulcox | 2:bbc155b0b886 | 693 | if (status) |
paulcox | 2:bbc155b0b886 | 694 | expandFileGroup(top.rtwreport_contents_frame.document, fileName); |
paulcox | 2:bbc155b0b886 | 695 | } |
paulcox | 2:bbc155b0b886 | 696 | return status; |
paulcox | 2:bbc155b0b886 | 697 | } |
paulcox | 2:bbc155b0b886 | 698 | |
paulcox | 2:bbc155b0b886 | 699 | // Clear the highlights in the code navigation frame. |
paulcox | 2:bbc155b0b886 | 700 | function removeHiliteCodeNav(winObj) { |
paulcox | 2:bbc155b0b886 | 701 | removeHiliteTOC(winObj); |
paulcox | 2:bbc155b0b886 | 702 | removeHiliteFileList(winObj); |
paulcox | 2:bbc155b0b886 | 703 | } |
paulcox | 2:bbc155b0b886 | 704 | // Clear the highlights in TOC frame. TOC links are named TOC_List |
paulcox | 2:bbc155b0b886 | 705 | function removeHiliteTOC(winObj) { |
paulcox | 2:bbc155b0b886 | 706 | removeHiliteByElementsName(winObj, "TOC_List"); |
paulcox | 2:bbc155b0b886 | 707 | } |
paulcox | 2:bbc155b0b886 | 708 | // Clear the highlights in Generated File List. |
paulcox | 2:bbc155b0b886 | 709 | // The filename links are named rtwIdGenFileLinks, |
paulcox | 2:bbc155b0b886 | 710 | function removeHiliteFileList(winObj) { |
paulcox | 2:bbc155b0b886 | 711 | removeHiliteByElementsName(winObj, "rtwIdGenFileLinks"); |
paulcox | 2:bbc155b0b886 | 712 | } |
paulcox | 2:bbc155b0b886 | 713 | |
paulcox | 2:bbc155b0b886 | 714 | // Highlight TOC hyperlinks by their Ids. |
paulcox | 2:bbc155b0b886 | 715 | function tocHiliteById(id) { |
paulcox | 2:bbc155b0b886 | 716 | hiliteColor = GlobalConfig.fileLinkHiliteColor; |
paulcox | 2:bbc155b0b886 | 717 | if (top && top.rtwreport_contents_frame && top.rtwreport_contents_frame.document) { |
paulcox | 2:bbc155b0b886 | 718 | removeHiliteCodeNav(top.rtwreport_contents_frame); |
paulcox | 2:bbc155b0b886 | 719 | setBGColorByElementId(top.rtwreport_contents_frame.document, id, hiliteColor); |
paulcox | 2:bbc155b0b886 | 720 | } |
paulcox | 2:bbc155b0b886 | 721 | } |
paulcox | 2:bbc155b0b886 | 722 | |
paulcox | 2:bbc155b0b886 | 723 | // onClick function to highlight the link itself |
paulcox | 2:bbc155b0b886 | 724 | function tocHiliteMe(winObj, linkObj, bCleanTrace) { |
paulcox | 2:bbc155b0b886 | 725 | hiliteColor = GlobalConfig.fileLinkHiliteColor; |
paulcox | 2:bbc155b0b886 | 726 | // remove the trace info (previous highlighted source code and the navigate |
paulcox | 2:bbc155b0b886 | 727 | // panel) |
paulcox | 2:bbc155b0b886 | 728 | // Clean Trace info only when links in TOC clicked. Links of filenames won't |
paulcox | 2:bbc155b0b886 | 729 | // clean trace info. |
paulcox | 2:bbc155b0b886 | 730 | if (bCleanTrace) { |
paulcox | 2:bbc155b0b886 | 731 | if (RTW_TraceInfo.instance) { |
paulcox | 2:bbc155b0b886 | 732 | RTW_TraceInfo.instance.setDisablePanel(true); |
paulcox | 2:bbc155b0b886 | 733 | rtwRemoveHighlighting(); |
paulcox | 2:bbc155b0b886 | 734 | } |
paulcox | 2:bbc155b0b886 | 735 | closeInspectWindow(); |
paulcox | 2:bbc155b0b886 | 736 | } |
paulcox | 2:bbc155b0b886 | 737 | removeHiliteCodeNav(winObj); |
paulcox | 2:bbc155b0b886 | 738 | if (linkObj.parentNode) { |
paulcox | 2:bbc155b0b886 | 739 | linkObj.parentNode.style.backgroundColor= hiliteColor; |
paulcox | 2:bbc155b0b886 | 740 | } |
paulcox | 2:bbc155b0b886 | 741 | } |
paulcox | 2:bbc155b0b886 | 742 | |
paulcox | 2:bbc155b0b886 | 743 | // onClick function to clean the currently highlighed lines in document frame |
paulcox | 2:bbc155b0b886 | 744 | // based on URL's hash |
paulcox | 2:bbc155b0b886 | 745 | // Then highlight lines in document frame based on Element's name |
paulcox | 2:bbc155b0b886 | 746 | // It works for links to some elements in the same page, otherwise, |
paulcox | 2:bbc155b0b886 | 747 | // rtwFileOnLoad() in loading page does the job. |
paulcox | 2:bbc155b0b886 | 748 | function docHiliteMe(winObj, elementName) { |
paulcox | 2:bbc155b0b886 | 749 | // First, remove the highlighted elements by stored hash value |
paulcox | 2:bbc155b0b886 | 750 | removeHiliteByHash(winObj); |
paulcox | 2:bbc155b0b886 | 751 | // Store the new hash value defined by elementName |
paulcox | 2:bbc155b0b886 | 752 | if (RTW_Hash.instance) { |
paulcox | 2:bbc155b0b886 | 753 | RTW_Hash.instance.setHash("#"+elementName); |
paulcox | 2:bbc155b0b886 | 754 | } else { |
paulcox | 2:bbc155b0b886 | 755 | RTW_Hash.instance = new RTW_Hash("#"+elementName); |
paulcox | 2:bbc155b0b886 | 756 | } |
paulcox | 2:bbc155b0b886 | 757 | hiliteByElementsName(winObj, elementName); |
paulcox | 2:bbc155b0b886 | 758 | } |
paulcox | 2:bbc155b0b886 | 759 | |
paulcox | 2:bbc155b0b886 | 760 | // Callback for generated file load callback |
paulcox | 2:bbc155b0b886 | 761 | function rtwFileOnLoad(docObj) { |
paulcox | 2:bbc155b0b886 | 762 | if (!docObj.location || !docObj.location.href) |
paulcox | 2:bbc155b0b886 | 763 | return; |
paulcox | 2:bbc155b0b886 | 764 | // Save the hash value when file is loaded in the first time |
paulcox | 2:bbc155b0b886 | 765 | if (!RTW_Hash.instance) { |
paulcox | 2:bbc155b0b886 | 766 | RTW_Hash.instance = new RTW_Hash(docObj.location.hash); |
paulcox | 2:bbc155b0b886 | 767 | } else { |
paulcox | 2:bbc155b0b886 | 768 | RTW_Hash.instance.setHash(docObj.location.hash); |
paulcox | 2:bbc155b0b886 | 769 | } |
paulcox | 2:bbc155b0b886 | 770 | |
paulcox | 2:bbc155b0b886 | 771 | updateHyperlinks(); |
paulcox | 2:bbc155b0b886 | 772 | // highlight lines in source code file according to the URL hash |
paulcox | 2:bbc155b0b886 | 773 | hiliteByHash(docObj); |
paulcox | 2:bbc155b0b886 | 774 | // highlight the filename in the TOC frame |
paulcox | 2:bbc155b0b886 | 775 | if (top.rtwreport_contents_frame) { |
paulcox | 2:bbc155b0b886 | 776 | if (hiliteByFileName(docObj.location.href)) { |
paulcox | 2:bbc155b0b886 | 777 | // remove the highlights in the TOC frame if filename is hilite successfully |
paulcox | 2:bbc155b0b886 | 778 | removeHiliteTOC(top.rtwreport_contents_frame); |
paulcox | 2:bbc155b0b886 | 779 | } |
paulcox | 2:bbc155b0b886 | 780 | } |
paulcox | 2:bbc155b0b886 | 781 | |
paulcox | 2:bbc155b0b886 | 782 | if (!RTW_TraceInfo.instance) |
paulcox | 2:bbc155b0b886 | 783 | return; |
paulcox | 2:bbc155b0b886 | 784 | if (!docObj.getElementById) |
paulcox | 2:bbc155b0b886 | 785 | return; |
paulcox | 2:bbc155b0b886 | 786 | if (rtwSrcFrame()) |
paulcox | 2:bbc155b0b886 | 787 | rtwSrcFrame().focus(); |
paulcox | 2:bbc155b0b886 | 788 | var fileName = rtwGetFileName(docObj.location.href); |
paulcox | 2:bbc155b0b886 | 789 | var fileIdx = RTW_TraceInfo.instance.getFileIdx(fileName); |
paulcox | 2:bbc155b0b886 | 790 | if (fileIdx != null) { |
paulcox | 2:bbc155b0b886 | 791 | if (fileIdx != RTW_TraceInfo.instance.getCurrFileIdx()) |
paulcox | 2:bbc155b0b886 | 792 | RTW_TraceInfo.instance.setCurrent(fileIdx,-1); |
paulcox | 2:bbc155b0b886 | 793 | var codeNode = docObj.getElementById("RTWcode"); |
paulcox | 2:bbc155b0b886 | 794 | var hiliteColor = RTW_TraceArgs.instance.getColor(); |
paulcox | 2:bbc155b0b886 | 795 | if (!hiliteColor) { |
paulcox | 2:bbc155b0b886 | 796 | hiliteColor = "#aaffff"; |
paulcox | 2:bbc155b0b886 | 797 | } |
paulcox | 2:bbc155b0b886 | 798 | var fontSize = RTW_TraceArgs.instance.getFontSize(); |
paulcox | 2:bbc155b0b886 | 799 | if (fontSize) { |
paulcox | 2:bbc155b0b886 | 800 | codeNode.style.fontSize = fontSize; |
paulcox | 2:bbc155b0b886 | 801 | } |
paulcox | 2:bbc155b0b886 | 802 | RTW_TraceInfo.instance.highlightLines(codeNode,hiliteColor); |
paulcox | 2:bbc155b0b886 | 803 | RTW_TraceInfo.instance.highlightFileLink(fileIdx, GlobalConfig.fileLinkHiliteColor); |
paulcox | 2:bbc155b0b886 | 804 | } |
paulcox | 2:bbc155b0b886 | 805 | } |
paulcox | 2:bbc155b0b886 | 806 | |
paulcox | 2:bbc155b0b886 | 807 | function Nav(fileIdx1, fileIdx2) { |
paulcox | 2:bbc155b0b886 | 808 | var filename = top.rtwreport_document_frame.location.pathname.split(/\//); |
paulcox | 2:bbc155b0b886 | 809 | filename = filename[filename.length-1]; |
paulcox | 2:bbc155b0b886 | 810 | var currentFileIdx = RTW_TraceInfo.instance.getFileIdx(filename); |
paulcox | 2:bbc155b0b886 | 811 | if (fileIdx1 === currentFileIdx) { |
paulcox | 2:bbc155b0b886 | 812 | top.rtwreport_document_frame.document.location.href = RTW_TraceInfo.instance.getCurrentHRef(); |
paulcox | 2:bbc155b0b886 | 813 | top.initLine = top.rtwreport_document_frame.document.location.hash.substr(1); |
paulcox | 2:bbc155b0b886 | 814 | addTagToCurrentLine(); |
paulcox | 2:bbc155b0b886 | 815 | if (top.rtwreport_contents_frame) { |
paulcox | 2:bbc155b0b886 | 816 | if (hiliteByFileName(top.rtwreport_document_frame.location.href)) |
paulcox | 2:bbc155b0b886 | 817 | removeHiliteTOC(top.rtwreport_contents_frame); |
paulcox | 2:bbc155b0b886 | 818 | } |
paulcox | 2:bbc155b0b886 | 819 | } else { |
paulcox | 2:bbc155b0b886 | 820 | var aUrl = RTW_TraceInfo.instance.getCurrentHRef(); |
paulcox | 2:bbc155b0b886 | 821 | if (hasWebviewFrame()) { |
paulcox | 2:bbc155b0b886 | 822 | top.rtwreport_document_frame.document.location.href=aUrl; |
paulcox | 2:bbc155b0b886 | 823 | } else { |
paulcox | 2:bbc155b0b886 | 824 | top.rtwreport_document_frame.document.location.href=aUrl + "+newPage"; |
paulcox | 2:bbc155b0b886 | 825 | } |
paulcox | 2:bbc155b0b886 | 826 | } |
paulcox | 2:bbc155b0b886 | 827 | } |
paulcox | 2:bbc155b0b886 | 828 | // Callback for "Prev" button |
paulcox | 2:bbc155b0b886 | 829 | function rtwGoPrev() { |
paulcox | 2:bbc155b0b886 | 830 | if (RTW_TraceInfo.instance && top.rtwreport_document_frame) { |
paulcox | 2:bbc155b0b886 | 831 | var prevfileIdx = RTW_TraceInfo.instance.getPrevFileIdx(); |
paulcox | 2:bbc155b0b886 | 832 | var currfileIdx = RTW_TraceInfo.instance.fCurrFileIdx; |
paulcox | 2:bbc155b0b886 | 833 | rmTagToCurrentLine(); |
paulcox | 2:bbc155b0b886 | 834 | RTW_TraceInfo.instance.goPrev(); |
paulcox | 2:bbc155b0b886 | 835 | Nav(prevfileIdx, currfileIdx); |
paulcox | 2:bbc155b0b886 | 836 | } |
paulcox | 2:bbc155b0b886 | 837 | } |
paulcox | 2:bbc155b0b886 | 838 | // Callback for "First" button |
paulcox | 2:bbc155b0b886 | 839 | function rtwGoFirst() { |
paulcox | 2:bbc155b0b886 | 840 | if (RTW_TraceInfo.instance && top.rtwreport_document_frame) { |
paulcox | 2:bbc155b0b886 | 841 | var prevfileIdx = RTW_TraceInfo.instance.getFirstFileIdx(); |
paulcox | 2:bbc155b0b886 | 842 | var currfileIdx = RTW_TraceInfo.instance.fCurrFileIdx; |
paulcox | 2:bbc155b0b886 | 843 | rmTagToCurrentLine(); |
paulcox | 2:bbc155b0b886 | 844 | RTW_TraceInfo.instance.goFirst(); |
paulcox | 2:bbc155b0b886 | 845 | Nav(prevfileIdx, currfileIdx); |
paulcox | 2:bbc155b0b886 | 846 | } |
paulcox | 2:bbc155b0b886 | 847 | } |
paulcox | 2:bbc155b0b886 | 848 | |
paulcox | 2:bbc155b0b886 | 849 | // Callback for navigation button onclick |
paulcox | 2:bbc155b0b886 | 850 | var navButtonStatus = (function() { |
paulcox | 2:bbc155b0b886 | 851 | var isclicked = false; |
paulcox | 2:bbc155b0b886 | 852 | return { |
paulcox | 2:bbc155b0b886 | 853 | clicked: function () { |
paulcox | 2:bbc155b0b886 | 854 | isclicked = true; |
paulcox | 2:bbc155b0b886 | 855 | return false; |
paulcox | 2:bbc155b0b886 | 856 | }, |
paulcox | 2:bbc155b0b886 | 857 | reset: function () { |
paulcox | 2:bbc155b0b886 | 858 | isclicked = false; |
paulcox | 2:bbc155b0b886 | 859 | }, |
paulcox | 2:bbc155b0b886 | 860 | isClicked: function () { |
paulcox | 2:bbc155b0b886 | 861 | return isclicked; |
paulcox | 2:bbc155b0b886 | 862 | } |
paulcox | 2:bbc155b0b886 | 863 | }; |
paulcox | 2:bbc155b0b886 | 864 | })(); |
paulcox | 2:bbc155b0b886 | 865 | |
paulcox | 2:bbc155b0b886 | 866 | // Callback for "Next" button |
paulcox | 2:bbc155b0b886 | 867 | function rtwGoNext() { |
paulcox | 2:bbc155b0b886 | 868 | if (RTW_TraceInfo.instance && top.rtwreport_document_frame) { |
paulcox | 2:bbc155b0b886 | 869 | var nextfileIdx = RTW_TraceInfo.instance.getNextFileIdx(); |
paulcox | 2:bbc155b0b886 | 870 | var currfileIdx = RTW_TraceInfo.instance.fCurrFileIdx; |
paulcox | 2:bbc155b0b886 | 871 | rmTagToCurrentLine(); |
paulcox | 2:bbc155b0b886 | 872 | RTW_TraceInfo.instance.goNext(); |
paulcox | 2:bbc155b0b886 | 873 | Nav(nextfileIdx, currfileIdx); |
paulcox | 2:bbc155b0b886 | 874 | } |
paulcox | 2:bbc155b0b886 | 875 | } |
paulcox | 2:bbc155b0b886 | 876 | // Callback for "Last" button |
paulcox | 2:bbc155b0b886 | 877 | function rtwGoLast() { |
paulcox | 2:bbc155b0b886 | 878 | if (RTW_TraceInfo.instance && top.rtwreport_document_frame) { |
paulcox | 2:bbc155b0b886 | 879 | var nextfileIdx = RTW_TraceInfo.instance.getLastFileIdx(); |
paulcox | 2:bbc155b0b886 | 880 | var currfileIdx = RTW_TraceInfo.instance.fCurrFileIdx; |
paulcox | 2:bbc155b0b886 | 881 | rmTagToCurrentLine(); |
paulcox | 2:bbc155b0b886 | 882 | RTW_TraceInfo.instance.goLast(); |
paulcox | 2:bbc155b0b886 | 883 | Nav(nextfileIdx, currfileIdx); |
paulcox | 2:bbc155b0b886 | 884 | } |
paulcox | 2:bbc155b0b886 | 885 | } |
paulcox | 2:bbc155b0b886 | 886 | |
paulcox | 2:bbc155b0b886 | 887 | function addTagToCurrentLine() { |
paulcox | 2:bbc155b0b886 | 888 | rmHiliteClickedToken(); |
paulcox | 2:bbc155b0b886 | 889 | tagCurrentLine(true); |
paulcox | 2:bbc155b0b886 | 890 | } |
paulcox | 2:bbc155b0b886 | 891 | function rmTagToCurrentLine() { |
paulcox | 2:bbc155b0b886 | 892 | tagCurrentLine(false); |
paulcox | 2:bbc155b0b886 | 893 | } |
paulcox | 2:bbc155b0b886 | 894 | // tag current line by changing the bacgkround color of the line |
paulcox | 2:bbc155b0b886 | 895 | function tagCurrentLine(addColor) { |
paulcox | 2:bbc155b0b886 | 896 | if (RTW_TraceInfo.instance) { |
paulcox | 2:bbc155b0b886 | 897 | var o = top.rtwreport_document_frame.document.getElementById(RTW_TraceInfo.instance.getCurrLine()); |
paulcox | 2:bbc155b0b886 | 898 | if (o) { |
paulcox | 2:bbc155b0b886 | 899 | if (addColor) { |
paulcox | 2:bbc155b0b886 | 900 | o.className = "hiliteCurrentLine"; |
paulcox | 2:bbc155b0b886 | 901 | } else { |
paulcox | 2:bbc155b0b886 | 902 | o.className = "hilite"; |
paulcox | 2:bbc155b0b886 | 903 | } |
paulcox | 2:bbc155b0b886 | 904 | } |
paulcox | 2:bbc155b0b886 | 905 | } |
paulcox | 2:bbc155b0b886 | 906 | } |
paulcox | 2:bbc155b0b886 | 907 | // Helper function for main document load callback |
paulcox | 2:bbc155b0b886 | 908 | function rtwMainOnLoadFcn(topDocObj,aLoc,aPanel,forceReload) { |
paulcox | 2:bbc155b0b886 | 909 | var loc; |
paulcox | 2:bbc155b0b886 | 910 | var aHash=""; |
paulcox | 2:bbc155b0b886 | 911 | var lastArgs = null; |
paulcox | 2:bbc155b0b886 | 912 | var tocDocObj = top.rtwreport_contents_frame.document; |
paulcox | 2:bbc155b0b886 | 913 | if (typeof forceReload === "undefined") { |
paulcox | 2:bbc155b0b886 | 914 | forceReload = false; |
paulcox | 2:bbc155b0b886 | 915 | } |
paulcox | 2:bbc155b0b886 | 916 | // get the hash value from location. |
paulcox | 2:bbc155b0b886 | 917 | if (!aLoc) { |
paulcox | 2:bbc155b0b886 | 918 | loc = topDocObj.location; |
paulcox | 2:bbc155b0b886 | 919 | if (loc.search || loc.hash) { |
paulcox | 2:bbc155b0b886 | 920 | if (loc.search) |
paulcox | 2:bbc155b0b886 | 921 | aHash = loc.search.substring(1); |
paulcox | 2:bbc155b0b886 | 922 | else |
paulcox | 2:bbc155b0b886 | 923 | aHash = loc.hash.substring(1); |
paulcox | 2:bbc155b0b886 | 924 | } |
paulcox | 2:bbc155b0b886 | 925 | } else { |
paulcox | 2:bbc155b0b886 | 926 | aHash = aLoc; |
paulcox | 2:bbc155b0b886 | 927 | if (RTW_TraceArgs.instance) |
paulcox | 2:bbc155b0b886 | 928 | lastArgs = RTW_TraceArgs.instance; |
paulcox | 2:bbc155b0b886 | 929 | } |
paulcox | 2:bbc155b0b886 | 930 | |
paulcox | 2:bbc155b0b886 | 931 | // parse URL hash value |
paulcox | 2:bbc155b0b886 | 932 | RTW_TraceArgs.instance = new RTW_TraceArgs(aHash); |
paulcox | 2:bbc155b0b886 | 933 | // load metrics |
paulcox | 2:bbc155b0b886 | 934 | load_metrics(); |
paulcox | 2:bbc155b0b886 | 935 | // use incode traceability |
paulcox | 2:bbc155b0b886 | 936 | if (RTW_TraceArgs.instance.getInCodeTrace()) { |
paulcox | 2:bbc155b0b886 | 937 | RTW_TraceArgs.instance.parseUrlHash2(RTW_TraceArgs.instance.getTraceData()); |
paulcox | 2:bbc155b0b886 | 938 | inCodeTraceOnload(); |
paulcox | 2:bbc155b0b886 | 939 | return; |
paulcox | 2:bbc155b0b886 | 940 | } |
paulcox | 2:bbc155b0b886 | 941 | if (lastArgs !== null) { |
paulcox | 2:bbc155b0b886 | 942 | RTW_TraceArgs.instance.setUseExternalBrowser(lastArgs.getUseExternalBrowser()); |
paulcox | 2:bbc155b0b886 | 943 | RTW_TraceArgs.instance.setModel2CodeSrc(lastArgs.getModel2CodeSrc()); |
paulcox | 2:bbc155b0b886 | 944 | } |
paulcox | 2:bbc155b0b886 | 945 | |
paulcox | 2:bbc155b0b886 | 946 | // get highlight url using sid |
paulcox | 2:bbc155b0b886 | 947 | if (RTW_TraceArgs.instance.hasSid()) { |
paulcox | 2:bbc155b0b886 | 948 | sid = RTW_TraceArgs.instance.getSID(); |
paulcox | 2:bbc155b0b886 | 949 | aHash = RTW_Sid2UrlHash.instance.getUrlHash(sid); |
paulcox | 2:bbc155b0b886 | 950 | } |
paulcox | 2:bbc155b0b886 | 951 | // parse hash to look for msg=...&block=... pattern |
paulcox | 2:bbc155b0b886 | 952 | RTW_TraceArgs.instance.parseCommand(aHash); |
paulcox | 2:bbc155b0b886 | 953 | // parse hash to look for file.c:10,12&file.h:10,12 |
paulcox | 2:bbc155b0b886 | 954 | RTW_TraceArgs.instance.parseUrlHash(aHash); |
paulcox | 2:bbc155b0b886 | 955 | |
paulcox | 2:bbc155b0b886 | 956 | // hide navigation buttons if not in MATLAB |
paulcox | 2:bbc155b0b886 | 957 | if (RTW_TraceArgs.instance.getUseExternalBrowser() && tocDocObj.getElementById) { |
paulcox | 2:bbc155b0b886 | 958 | var o = tocDocObj.getElementById("nav_buttons"); |
paulcox | 2:bbc155b0b886 | 959 | if (o != null) { |
paulcox | 2:bbc155b0b886 | 960 | o.style.display = "none"; |
paulcox | 2:bbc155b0b886 | 961 | } |
paulcox | 2:bbc155b0b886 | 962 | } |
paulcox | 2:bbc155b0b886 | 963 | |
paulcox | 2:bbc155b0b886 | 964 | // hide web view frameset if model2code_src is model |
paulcox | 2:bbc155b0b886 | 965 | if (RTW_TraceArgs.instance.getModel2CodeSrc() === "model") { |
paulcox | 2:bbc155b0b886 | 966 | var o = top.document.getElementById('rtw_webviewMidFrame'); |
paulcox | 2:bbc155b0b886 | 967 | if (o) { |
paulcox | 2:bbc155b0b886 | 968 | o.rows = "100%,0%"; |
paulcox | 2:bbc155b0b886 | 969 | } |
paulcox | 2:bbc155b0b886 | 970 | } |
paulcox | 2:bbc155b0b886 | 971 | |
paulcox | 2:bbc155b0b886 | 972 | // stop onload when it has been loaded |
paulcox | 2:bbc155b0b886 | 973 | if (window.location.search.indexOf("loaded=true") > 0 |
paulcox | 2:bbc155b0b886 | 974 | && top.rtwreport_document_frame.location.href !== "about:blank" && forceReload !== true) { |
paulcox | 2:bbc155b0b886 | 975 | updateHyperlinks(); |
paulcox | 2:bbc155b0b886 | 976 | return; |
paulcox | 2:bbc155b0b886 | 977 | } |
paulcox | 2:bbc155b0b886 | 978 | |
paulcox | 2:bbc155b0b886 | 979 | // modify modelref links |
paulcox | 2:bbc155b0b886 | 980 | update_modelref_report_link(top.rtwreport_contents_frame.document); |
paulcox | 2:bbc155b0b886 | 981 | try { |
paulcox | 2:bbc155b0b886 | 982 | // ignore browser security error |
paulcox | 2:bbc155b0b886 | 983 | update_modelref_report_link(top.rtwreport_document_frame.document); |
paulcox | 2:bbc155b0b886 | 984 | } catch(e) {}; |
paulcox | 2:bbc155b0b886 | 985 | |
paulcox | 2:bbc155b0b886 | 986 | // redirect the page based on the url |
paulcox | 2:bbc155b0b886 | 987 | var initPage = null; |
paulcox | 2:bbc155b0b886 | 988 | if (RTW_TraceArgs.instance.getNumFiles()) { |
paulcox | 2:bbc155b0b886 | 989 | var fileLinks = RTW_TraceInfo.getFileLinks(tocDocObj); |
paulcox | 2:bbc155b0b886 | 990 | RTW_TraceInfo.instance = new RTW_TraceInfo(fileLinks); |
paulcox | 2:bbc155b0b886 | 991 | RTW_TraceInfo.instance.removeHighlighting() |
paulcox | 2:bbc155b0b886 | 992 | var numFiles = RTW_TraceArgs.instance.getNumFiles(); |
paulcox | 2:bbc155b0b886 | 993 | var tLines = 0; |
paulcox | 2:bbc155b0b886 | 994 | for (var i = 0; i < numFiles; ++i) { |
paulcox | 2:bbc155b0b886 | 995 | RTW_TraceInfo.instance.setLines(RTW_TraceArgs.instance.getFile(i),RTW_TraceArgs.instance.getLines(i)); |
paulcox | 2:bbc155b0b886 | 996 | tLines += RTW_TraceArgs.instance.getLines(i).length; |
paulcox | 2:bbc155b0b886 | 997 | } |
paulcox | 2:bbc155b0b886 | 998 | RTW_TraceInfo.instance.setTotalLines(tLines); |
paulcox | 2:bbc155b0b886 | 999 | if (aPanel == false) { |
paulcox | 2:bbc155b0b886 | 1000 | RTW_TraceInfo.instance.setDisablePanel(true); |
paulcox | 2:bbc155b0b886 | 1001 | } |
paulcox | 2:bbc155b0b886 | 1002 | var initFile = RTW_TraceArgs.instance.getInitFile(); |
paulcox | 2:bbc155b0b886 | 1003 | RTW_TraceInfo.instance.setInitLocation(initFile,RTW_TraceArgs.instance.getInitLine()); |
paulcox | 2:bbc155b0b886 | 1004 | if (!hasInCodeTrace()) { |
paulcox | 2:bbc155b0b886 | 1005 | initPage = RTW_TraceInfo.instance.getCurrentHRef(); |
paulcox | 2:bbc155b0b886 | 1006 | } else { |
paulcox | 2:bbc155b0b886 | 1007 | initPage = initFile; |
paulcox | 2:bbc155b0b886 | 1008 | } |
paulcox | 2:bbc155b0b886 | 1009 | } else { |
paulcox | 2:bbc155b0b886 | 1010 | // catch error that document frame is in another domain |
paulcox | 2:bbc155b0b886 | 1011 | try { |
paulcox | 2:bbc155b0b886 | 1012 | var fileDocObj = top.rtwreport_document_frame.document; |
paulcox | 2:bbc155b0b886 | 1013 | if (fileDocObj.location && (!fileDocObj.location.href || fileDocObj.location.href == "about:blank")) { |
paulcox | 2:bbc155b0b886 | 1014 | var summaryPage = tocDocObj.getElementById("rtwIdSummaryPage"); |
paulcox | 2:bbc155b0b886 | 1015 | var tracePage = tocDocObj.getElementById("rtwIdTraceability"); |
paulcox | 2:bbc155b0b886 | 1016 | if (summaryPage) { |
paulcox | 2:bbc155b0b886 | 1017 | initPage = summaryPage.href; |
paulcox | 2:bbc155b0b886 | 1018 | } else if (tracePage) { |
paulcox | 2:bbc155b0b886 | 1019 | initPage = tracePage; |
paulcox | 2:bbc155b0b886 | 1020 | } |
paulcox | 2:bbc155b0b886 | 1021 | } |
paulcox | 2:bbc155b0b886 | 1022 | } catch(e) {}; |
paulcox | 2:bbc155b0b886 | 1023 | } |
paulcox | 2:bbc155b0b886 | 1024 | if (RTW_TraceArgs.instance && RTW_TraceArgs.instance.fMessage) { |
paulcox | 2:bbc155b0b886 | 1025 | // display diagnostic message |
paulcox | 2:bbc155b0b886 | 1026 | var linkId = "rtwIdMsgFileLink"; |
paulcox | 2:bbc155b0b886 | 1027 | var msgFile = tocDocObj.getElementById(linkId); |
paulcox | 2:bbc155b0b886 | 1028 | if (msgFile && msgFile.style) { |
paulcox | 2:bbc155b0b886 | 1029 | msgFile.style.display = "block"; |
paulcox | 2:bbc155b0b886 | 1030 | // Highlight the background of msg link |
paulcox | 2:bbc155b0b886 | 1031 | tocHiliteById(linkId); |
paulcox | 2:bbc155b0b886 | 1032 | } |
paulcox | 2:bbc155b0b886 | 1033 | initPage = "rtwmsg.html"; |
paulcox | 2:bbc155b0b886 | 1034 | } |
paulcox | 2:bbc155b0b886 | 1035 | if (initPage) { |
paulcox | 2:bbc155b0b886 | 1036 | var is_same_page = false; |
paulcox | 2:bbc155b0b886 | 1037 | try { |
paulcox | 2:bbc155b0b886 | 1038 | var fileDocObj = top.rtwreport_document_frame.document; |
paulcox | 2:bbc155b0b886 | 1039 | is_same_page = isSamePage(fileDocObj.location.href, initPage); |
paulcox | 2:bbc155b0b886 | 1040 | } catch(e) {}; |
paulcox | 2:bbc155b0b886 | 1041 | if (is_same_page) { |
paulcox | 2:bbc155b0b886 | 1042 | top.rtwreport_document_frame.location.href = initPage; |
paulcox | 2:bbc155b0b886 | 1043 | // Goto the same page won't trigger onload function. |
paulcox | 2:bbc155b0b886 | 1044 | // Call it manuelly to highligh new code location. |
paulcox | 2:bbc155b0b886 | 1045 | rtwFileOnLoad(top.rtwreport_document_frame.document); |
paulcox | 2:bbc155b0b886 | 1046 | } else { |
paulcox | 2:bbc155b0b886 | 1047 | // change current fileDocObj to initPage |
paulcox | 2:bbc155b0b886 | 1048 | top.rtwreport_document_frame.location.href = initPage; |
paulcox | 2:bbc155b0b886 | 1049 | } |
paulcox | 2:bbc155b0b886 | 1050 | } |
paulcox | 2:bbc155b0b886 | 1051 | } |
paulcox | 2:bbc155b0b886 | 1052 | |
paulcox | 2:bbc155b0b886 | 1053 | // Compare if href1(i.e. file:///path/file1.html#222) and href2(i.e.file2.html) are same pages. |
paulcox | 2:bbc155b0b886 | 1054 | // isSamePage return true if file1 == file2. |
paulcox | 2:bbc155b0b886 | 1055 | function isSamePage(href1, href2) { |
paulcox | 2:bbc155b0b886 | 1056 | var page1 = href1.substring(href1.lastIndexOf('/')+1,href1.lastIndexOf('.html')); |
paulcox | 2:bbc155b0b886 | 1057 | var page2 = href2.substring(href2.lastIndexOf('/')+1,href2.lastIndexOf('.html')); |
paulcox | 2:bbc155b0b886 | 1058 | return (page1 == page2); |
paulcox | 2:bbc155b0b886 | 1059 | } |
paulcox | 2:bbc155b0b886 | 1060 | |
paulcox | 2:bbc155b0b886 | 1061 | // Callback for main document loading |
paulcox | 2:bbc155b0b886 | 1062 | function rtwMainOnLoad() { |
paulcox | 2:bbc155b0b886 | 1063 | rtwMainOnLoadFcn(document,null,true, false); |
paulcox | 2:bbc155b0b886 | 1064 | var newUrl; |
paulcox | 2:bbc155b0b886 | 1065 | // modify history state to avoid reload from pressing back |
paulcox | 2:bbc155b0b886 | 1066 | if (RTW_TraceArgs.instance && !RTW_TraceArgs.instance.getUseExternalBrowser() && |
paulcox | 2:bbc155b0b886 | 1067 | typeof window.history.replaceState === "function") { |
paulcox | 2:bbc155b0b886 | 1068 | if (window.location.search.length > 0) { |
paulcox | 2:bbc155b0b886 | 1069 | if (window.location.search.indexOf("loaded=true") === -1) { |
paulcox | 2:bbc155b0b886 | 1070 | newUrl = document.location.pathname + window.location.search + '&loaded=true'; |
paulcox | 2:bbc155b0b886 | 1071 | } else { |
paulcox | 2:bbc155b0b886 | 1072 | newUrl = document.location.pathname + window.location.search; |
paulcox | 2:bbc155b0b886 | 1073 | } |
paulcox | 2:bbc155b0b886 | 1074 | } else { |
paulcox | 2:bbc155b0b886 | 1075 | newUrl = document.location.pathname + window.location.search + '?loaded=true'; |
paulcox | 2:bbc155b0b886 | 1076 | } |
paulcox | 2:bbc155b0b886 | 1077 | window.history.replaceState("","",newUrl); |
paulcox | 2:bbc155b0b886 | 1078 | } |
paulcox | 2:bbc155b0b886 | 1079 | } |
paulcox | 2:bbc155b0b886 | 1080 | |
paulcox | 2:bbc155b0b886 | 1081 | // Helper function for traceability report |
paulcox | 2:bbc155b0b886 | 1082 | function rtwMainReload(location) { |
paulcox | 2:bbc155b0b886 | 1083 | // remove highlight filename and lines before reloading the page |
paulcox | 2:bbc155b0b886 | 1084 | if (RTW_TraceInfo.instance) |
paulcox | 2:bbc155b0b886 | 1085 | RTW_TraceInfo.instance.removeHighlighting(); |
paulcox | 2:bbc155b0b886 | 1086 | rtwMainOnLoadFcn(document,location,true,true); |
paulcox | 2:bbc155b0b886 | 1087 | } |
paulcox | 2:bbc155b0b886 | 1088 | |
paulcox | 2:bbc155b0b886 | 1089 | function rtwMainReloadNoPanel(location) { |
paulcox | 2:bbc155b0b886 | 1090 | rtwMainOnLoadFcn(document,location,false,true); |
paulcox | 2:bbc155b0b886 | 1091 | } |
paulcox | 2:bbc155b0b886 | 1092 | |
paulcox | 2:bbc155b0b886 | 1093 | // Callback for hyperlink "Remove Highlighting" |
paulcox | 2:bbc155b0b886 | 1094 | function rtwRemoveHighlighting() { |
paulcox | 2:bbc155b0b886 | 1095 | if (RTW_TraceInfo.instance) |
paulcox | 2:bbc155b0b886 | 1096 | RTW_TraceInfo.instance.removeHighlighting(); |
paulcox | 2:bbc155b0b886 | 1097 | if (rtwSrcFrame()) { |
paulcox | 2:bbc155b0b886 | 1098 | rtwSrcFrame().focus(); |
paulcox | 2:bbc155b0b886 | 1099 | } |
paulcox | 2:bbc155b0b886 | 1100 | if (hasInCodeTrace()) { |
paulcox | 2:bbc155b0b886 | 1101 | removeInCodeTraceHighlight(); |
paulcox | 2:bbc155b0b886 | 1102 | } |
paulcox | 2:bbc155b0b886 | 1103 | } |
paulcox | 2:bbc155b0b886 | 1104 | |
paulcox | 2:bbc155b0b886 | 1105 | // Display diagnostic message in document frame |
paulcox | 2:bbc155b0b886 | 1106 | function rtwDisplayMessage() { |
paulcox | 2:bbc155b0b886 | 1107 | var docObj = top.rtwreport_document_frame.document; |
paulcox | 2:bbc155b0b886 | 1108 | var msg = docObj.getElementById(RTW_TraceArgs.instance.fMessage); |
paulcox | 2:bbc155b0b886 | 1109 | if (!msg) { |
paulcox | 2:bbc155b0b886 | 1110 | msg = docObj.getElementById("rtwMsg_notTraceable"); |
paulcox | 2:bbc155b0b886 | 1111 | } |
paulcox | 2:bbc155b0b886 | 1112 | if (msg && msg.style) { |
paulcox | 2:bbc155b0b886 | 1113 | msg.style.display = "block"; // make message visible |
paulcox | 2:bbc155b0b886 | 1114 | var msgstr = msg.innerHTML; |
paulcox | 2:bbc155b0b886 | 1115 | if (RTW_TraceArgs.instance.fBlock) { |
paulcox | 2:bbc155b0b886 | 1116 | // replace '%s' in message with block name |
paulcox | 2:bbc155b0b886 | 1117 | msgstr = msgstr.replace("%s",RTW_TraceArgs.instance.fBlock); |
paulcox | 2:bbc155b0b886 | 1118 | } |
paulcox | 2:bbc155b0b886 | 1119 | msg.innerHTML = msgstr; |
paulcox | 2:bbc155b0b886 | 1120 | } |
paulcox | 2:bbc155b0b886 | 1121 | } |
paulcox | 2:bbc155b0b886 | 1122 | |
paulcox | 2:bbc155b0b886 | 1123 | function updateHyperlinks() { |
paulcox | 2:bbc155b0b886 | 1124 | docObj = top.rtwreport_document_frame; |
paulcox | 2:bbc155b0b886 | 1125 | if (docObj && docObj.document) { |
paulcox | 2:bbc155b0b886 | 1126 | if (RTW_TraceArgs.instance === null || !RTW_TraceArgs.instance.getUseExternalBrowser()) { |
paulcox | 2:bbc155b0b886 | 1127 | var plain_link = docObj.document.getElementById("linkToText_plain"); |
paulcox | 2:bbc155b0b886 | 1128 | if (plain_link && plain_link.href && plain_link.href.indexOf("matlab:coder.internal.editUrlTextFile") === -1 ) { |
paulcox | 2:bbc155b0b886 | 1129 | plain_link.href = "matlab:coder.internal.editUrlTextFile('" + str2StrVar(plain_link.href) + "')"; |
paulcox | 2:bbc155b0b886 | 1130 | } |
paulcox | 2:bbc155b0b886 | 1131 | var alink = docObj.document.getElementById("linkToCS"); |
paulcox | 2:bbc155b0b886 | 1132 | var linkCmd = "matlab:coder.internal.viewCodeConfigsetFromReport"; |
paulcox | 2:bbc155b0b886 | 1133 | if (alink && alink.href && alink.href.indexOf(linkCmd) === -1) { |
paulcox | 2:bbc155b0b886 | 1134 | alink.href = linkCmd+ "('" + str2StrVar(alink.href) + "');"; |
paulcox | 2:bbc155b0b886 | 1135 | } |
paulcox | 2:bbc155b0b886 | 1136 | } else { |
paulcox | 2:bbc155b0b886 | 1137 | var alink = docObj.document.getElementById("linkToCS"); |
paulcox | 2:bbc155b0b886 | 1138 | if (alink && alink.style) { |
paulcox | 2:bbc155b0b886 | 1139 | alink.style.display = "none"; |
paulcox | 2:bbc155b0b886 | 1140 | hidden_link = docObj.document.getElementById("linkToCS_disabled"); |
paulcox | 2:bbc155b0b886 | 1141 | if (hidden_link) |
paulcox | 2:bbc155b0b886 | 1142 | hidden_link.style.display = ""; |
paulcox | 2:bbc155b0b886 | 1143 | } |
paulcox | 2:bbc155b0b886 | 1144 | if (typeof docObj.document.getElementsByClassName === "function") |
paulcox | 2:bbc155b0b886 | 1145 | alinks = docObj.document.getElementsByClassName("callMATLAB"); |
paulcox | 2:bbc155b0b886 | 1146 | else if (typeof docObj.document.getElementsByName === "function") |
paulcox | 2:bbc155b0b886 | 1147 | alinks = docObj.document.getElementsByName("callMATLAB"); |
paulcox | 2:bbc155b0b886 | 1148 | else |
paulcox | 2:bbc155b0b886 | 1149 | alinks = []; |
paulcox | 2:bbc155b0b886 | 1150 | for (i = 0; i < alinks.length; i++) { |
paulcox | 2:bbc155b0b886 | 1151 | alinks[i].href = "javascript:alert('This hyperlink is available only in MATLAB browser.');"; |
paulcox | 2:bbc155b0b886 | 1152 | alinks[i].style.color = "gray"; |
paulcox | 2:bbc155b0b886 | 1153 | } |
paulcox | 2:bbc155b0b886 | 1154 | alink = docObj.document.getElementById("CodeGenAdvCheck"); |
paulcox | 2:bbc155b0b886 | 1155 | if (alink && alink.href && alink.href.indexOf("externalweb=true")===-1) { |
paulcox | 2:bbc155b0b886 | 1156 | alink.href = alink.href + "?externalweb=true"; |
paulcox | 2:bbc155b0b886 | 1157 | } |
paulcox | 2:bbc155b0b886 | 1158 | |
paulcox | 2:bbc155b0b886 | 1159 | if (typeof docObj.document.getElementsByName === "function") |
paulcox | 2:bbc155b0b886 | 1160 | var objs = docObj.document.getElementsByName("MATLAB_link"); |
paulcox | 2:bbc155b0b886 | 1161 | else |
paulcox | 2:bbc155b0b886 | 1162 | objs = []; |
paulcox | 2:bbc155b0b886 | 1163 | for (var objIndex = 0; objIndex < objs.length; ++objIndex) { |
paulcox | 2:bbc155b0b886 | 1164 | objs[objIndex].style.display = "none"; |
paulcox | 2:bbc155b0b886 | 1165 | } |
paulcox | 2:bbc155b0b886 | 1166 | } |
paulcox | 2:bbc155b0b886 | 1167 | } |
paulcox | 2:bbc155b0b886 | 1168 | updateCode2ModelLinks(docObj.document); |
paulcox | 2:bbc155b0b886 | 1169 | // modify modelref links |
paulcox | 2:bbc155b0b886 | 1170 | update_modelref_report_link(top.rtwreport_contents_frame.document); |
paulcox | 2:bbc155b0b886 | 1171 | try { |
paulcox | 2:bbc155b0b886 | 1172 | // ignore browser security error |
paulcox | 2:bbc155b0b886 | 1173 | update_modelref_report_link(top.rtwreport_document_frame.document); |
paulcox | 2:bbc155b0b886 | 1174 | } catch(e) {}; |
paulcox | 2:bbc155b0b886 | 1175 | } |
paulcox | 2:bbc155b0b886 | 1176 | |
paulcox | 2:bbc155b0b886 | 1177 | function update_modelref_report_link(docObj) { |
paulcox | 2:bbc155b0b886 | 1178 | if (docObj.getElementsByName) { |
paulcox | 2:bbc155b0b886 | 1179 | var arg = ""; |
paulcox | 2:bbc155b0b886 | 1180 | if (RTW_TraceArgs.instance && !RTW_TraceArgs.instance.getUseExternalBrowser()) { |
paulcox | 2:bbc155b0b886 | 1181 | arg = "?useExternalBrowser=false"; |
paulcox | 2:bbc155b0b886 | 1182 | } |
paulcox | 2:bbc155b0b886 | 1183 | if (RTW_TraceArgs && RTW_TraceArgs.instance && RTW_TraceArgs.instance.getModel2CodeSrc() != null) { |
paulcox | 2:bbc155b0b886 | 1184 | if (arg.length > 0) |
paulcox | 2:bbc155b0b886 | 1185 | arg = arg + "&model2code_src=" + RTW_TraceArgs.instance.getModel2CodeSrc(); |
paulcox | 2:bbc155b0b886 | 1186 | else |
paulcox | 2:bbc155b0b886 | 1187 | arg = "?model2code_src=" + RTW_TraceArgs.instance.getModel2CodeSrc(); |
paulcox | 2:bbc155b0b886 | 1188 | } |
paulcox | 2:bbc155b0b886 | 1189 | if (arg.length > 0) { |
paulcox | 2:bbc155b0b886 | 1190 | links = docObj.getElementsByName('external_link'); |
paulcox | 2:bbc155b0b886 | 1191 | for (var link_idx = 0; link_idx < links.length; ++link_idx) { |
paulcox | 2:bbc155b0b886 | 1192 | links[link_idx].href = links[link_idx].href + arg; |
paulcox | 2:bbc155b0b886 | 1193 | } |
paulcox | 2:bbc155b0b886 | 1194 | } |
paulcox | 2:bbc155b0b886 | 1195 | } |
paulcox | 2:bbc155b0b886 | 1196 | } |
paulcox | 2:bbc155b0b886 | 1197 | |
paulcox | 2:bbc155b0b886 | 1198 | function rtwPageOnLoad(id) { |
paulcox | 2:bbc155b0b886 | 1199 | // highlight toc entry |
paulcox | 2:bbc155b0b886 | 1200 | tocHiliteById(id); |
paulcox | 2:bbc155b0b886 | 1201 | // restore elements state |
paulcox | 2:bbc155b0b886 | 1202 | if (top && top.restoreState) { |
paulcox | 2:bbc155b0b886 | 1203 | if (top.rtwreport_contents_frame && top.rtwreport_contents_frame.document) |
paulcox | 2:bbc155b0b886 | 1204 | top.restoreState(top.rtwreport_contents_frame.document); |
paulcox | 2:bbc155b0b886 | 1205 | if (top.rtwreport_document_frame && top.rtwreport_document_frame.document) |
paulcox | 2:bbc155b0b886 | 1206 | top.restoreState(top.rtwreport_document_frame.document); |
paulcox | 2:bbc155b0b886 | 1207 | } |
paulcox | 2:bbc155b0b886 | 1208 | updateHyperlinks(); |
paulcox | 2:bbc155b0b886 | 1209 | } |
paulcox | 2:bbc155b0b886 | 1210 | |
paulcox | 2:bbc155b0b886 | 1211 | // highlight code after changeSys |
paulcox | 2:bbc155b0b886 | 1212 | function rtwChangeSysCallback(sid) { |
paulcox | 2:bbc155b0b886 | 1213 | if (sid == "" || typeof RTW_Sid2UrlHash == "undefined" || !RTW_Sid2UrlHash.instance) |
paulcox | 2:bbc155b0b886 | 1214 | return false; |
paulcox | 2:bbc155b0b886 | 1215 | urlHash = RTW_Sid2UrlHash.instance.getUrlHash(sid); |
paulcox | 2:bbc155b0b886 | 1216 | if (urlHash != undefined) { |
paulcox | 2:bbc155b0b886 | 1217 | if (RTW_TraceArgs && RTW_TraceArgs.instance && |
paulcox | 2:bbc155b0b886 | 1218 | !RTW_TraceArgs.instance.getUseExternalBrowser()) |
paulcox | 2:bbc155b0b886 | 1219 | urlHash = (urlHash == "")? "?useExternalBrowser=false" : |
paulcox | 2:bbc155b0b886 | 1220 | urlHash+"&useExternalBrowser=false"; |
paulcox | 2:bbc155b0b886 | 1221 | rtwMainReload(urlHash, true); |
paulcox | 2:bbc155b0b886 | 1222 | return true; |
paulcox | 2:bbc155b0b886 | 1223 | } else { |
paulcox | 2:bbc155b0b886 | 1224 | // remove highlighting from traceinfo |
paulcox | 2:bbc155b0b886 | 1225 | rtwRemoveHighlighting(); |
paulcox | 2:bbc155b0b886 | 1226 | return false; |
paulcox | 2:bbc155b0b886 | 1227 | } |
paulcox | 2:bbc155b0b886 | 1228 | } |
paulcox | 2:bbc155b0b886 | 1229 | |
paulcox | 2:bbc155b0b886 | 1230 | // eml file onload function: highlight line in eml file |
paulcox | 2:bbc155b0b886 | 1231 | function emlFileOnload(docObj) { |
paulcox | 2:bbc155b0b886 | 1232 | var loc = docObj.location; |
paulcox | 2:bbc155b0b886 | 1233 | if (loc.hash) { |
paulcox | 2:bbc155b0b886 | 1234 | var line = loc.hash.substring(1); |
paulcox | 2:bbc155b0b886 | 1235 | hiliteEmlLine(docObj, line); |
paulcox | 2:bbc155b0b886 | 1236 | } |
paulcox | 2:bbc155b0b886 | 1237 | } |
paulcox | 2:bbc155b0b886 | 1238 | |
paulcox | 2:bbc155b0b886 | 1239 | // highlight line in an eml file. Ynhighlight previously highligted line first. |
paulcox | 2:bbc155b0b886 | 1240 | function hiliteEmlLine(docObj, line) { |
paulcox | 2:bbc155b0b886 | 1241 | var bgColor; |
paulcox | 2:bbc155b0b886 | 1242 | if (top.HiliteCodeStatus) |
paulcox | 2:bbc155b0b886 | 1243 | bgColor = "#66CCFF"; |
paulcox | 2:bbc155b0b886 | 1244 | else |
paulcox | 2:bbc155b0b886 | 1245 | bgColor = "#E8D152"; |
paulcox | 2:bbc155b0b886 | 1246 | // unhighlight |
paulcox | 2:bbc155b0b886 | 1247 | if (typeof docObj.HiliteLine != "undefined") { |
paulcox | 2:bbc155b0b886 | 1248 | trObj = docObj.getElementById("LN_"+docObj.HiliteLine); |
paulcox | 2:bbc155b0b886 | 1249 | if (trObj != null) { |
paulcox | 2:bbc155b0b886 | 1250 | trObj.style.backgroundColor = ""; |
paulcox | 2:bbc155b0b886 | 1251 | } |
paulcox | 2:bbc155b0b886 | 1252 | } |
paulcox | 2:bbc155b0b886 | 1253 | // hilighlight |
paulcox | 2:bbc155b0b886 | 1254 | trObj = docObj.getElementById("LN_"+line); |
paulcox | 2:bbc155b0b886 | 1255 | if (trObj != null) { |
paulcox | 2:bbc155b0b886 | 1256 | trObj.style.backgroundColor = bgColor; |
paulcox | 2:bbc155b0b886 | 1257 | docObj.HiliteLine = line; |
paulcox | 2:bbc155b0b886 | 1258 | } |
paulcox | 2:bbc155b0b886 | 1259 | } |
paulcox | 2:bbc155b0b886 | 1260 | // eml line onclick callback: highlight C code and current line in eml file |
paulcox | 2:bbc155b0b886 | 1261 | function emlLineOnClick(docObj,sid,line) { |
paulcox | 2:bbc155b0b886 | 1262 | if (top) { |
paulcox | 2:bbc155b0b886 | 1263 | top.HiliteCodeStatus = top.rtwChangeSysCallback(sid); |
paulcox | 2:bbc155b0b886 | 1264 | } |
paulcox | 2:bbc155b0b886 | 1265 | hiliteEmlLine(docObj, line); |
paulcox | 2:bbc155b0b886 | 1266 | } |
paulcox | 2:bbc155b0b886 | 1267 | |
paulcox | 2:bbc155b0b886 | 1268 | function updateCode2ModelLinks(docObj) { |
paulcox | 2:bbc155b0b886 | 1269 | var webviewFrame = top.document.getElementById('rtw_webviewMidFrame'); |
paulcox | 2:bbc155b0b886 | 1270 | if (webviewFrame) { |
paulcox | 2:bbc155b0b886 | 1271 | if (RTW_TraceArgs.instance && |
paulcox | 2:bbc155b0b886 | 1272 | (RTW_TraceArgs.instance.getModel2CodeSrc() !== "model" || |
paulcox | 2:bbc155b0b886 | 1273 | RTW_TraceArgs.instance.getUseExternalBrowser()) |
paulcox | 2:bbc155b0b886 | 1274 | ) { |
paulcox | 2:bbc155b0b886 | 1275 | hiliteCmd = "javascript:top.rtwHilite("; |
paulcox | 2:bbc155b0b886 | 1276 | } else { |
paulcox | 2:bbc155b0b886 | 1277 | hiliteCmd = "matlab:coder.internal.code2model("; |
paulcox | 2:bbc155b0b886 | 1278 | } |
paulcox | 2:bbc155b0b886 | 1279 | var objs = docObj.getElementsByName('code2model'); |
paulcox | 2:bbc155b0b886 | 1280 | var o = null; |
paulcox | 2:bbc155b0b886 | 1281 | var str = ''; |
paulcox | 2:bbc155b0b886 | 1282 | var pattern = "'code2model',"; |
paulcox | 2:bbc155b0b886 | 1283 | for (var objIndex = 0; objIndex < objs.length; ++objIndex) { |
paulcox | 2:bbc155b0b886 | 1284 | o = objs[objIndex]; |
paulcox | 2:bbc155b0b886 | 1285 | str = o.href.substring(o.href.indexOf('(')+1); |
paulcox | 2:bbc155b0b886 | 1286 | if (str.indexOf(pattern) > -1) { |
paulcox | 2:bbc155b0b886 | 1287 | str = str.substring(str.indexOf(pattern) + pattern.length); |
paulcox | 2:bbc155b0b886 | 1288 | } |
paulcox | 2:bbc155b0b886 | 1289 | o.href = hiliteCmd + str; |
paulcox | 2:bbc155b0b886 | 1290 | } |
paulcox | 2:bbc155b0b886 | 1291 | } |
paulcox | 2:bbc155b0b886 | 1292 | } |
paulcox | 2:bbc155b0b886 | 1293 | |
paulcox | 2:bbc155b0b886 | 1294 | function rtwHilite(aBlock,aParentSID) { |
paulcox | 2:bbc155b0b886 | 1295 | if (aBlock.indexOf('-') !== -1) { |
paulcox | 2:bbc155b0b886 | 1296 | // remove sid range: model:sid:2-10 => model:sid |
paulcox | 2:bbc155b0b886 | 1297 | var s; |
paulcox | 2:bbc155b0b886 | 1298 | s = aBlock.split(':'); |
paulcox | 2:bbc155b0b886 | 1299 | if (s.length > 0) { |
paulcox | 2:bbc155b0b886 | 1300 | s = s[s.length-1]; |
paulcox | 2:bbc155b0b886 | 1301 | if (s.indexOf('-') != -1) { |
paulcox | 2:bbc155b0b886 | 1302 | aBlock = aBlock.substring(0, aBlock.lastIndexOf(':')); |
paulcox | 2:bbc155b0b886 | 1303 | } |
paulcox | 2:bbc155b0b886 | 1304 | } |
paulcox | 2:bbc155b0b886 | 1305 | } |
paulcox | 2:bbc155b0b886 | 1306 | if (typeof aParentSID === "undefined") { |
paulcox | 2:bbc155b0b886 | 1307 | if (top.RTW_SidParentMap && top.RTW_SidParentMap.instance) |
paulcox | 2:bbc155b0b886 | 1308 | aParentSID = top.RTW_SidParentMap.instance.getParentSid(aBlock); |
paulcox | 2:bbc155b0b886 | 1309 | else |
paulcox | 2:bbc155b0b886 | 1310 | aParentSID = aBlock; |
paulcox | 2:bbc155b0b886 | 1311 | } |
paulcox | 2:bbc155b0b886 | 1312 | top.HiliteCodeStatus = true; |
paulcox | 2:bbc155b0b886 | 1313 | if (hiliteBlockForRTWReport(aBlock,aParentSID) === false) { |
paulcox | 2:bbc155b0b886 | 1314 | if (hiliteBlockForRTWReport(aBlock, aBlock) === false) { |
paulcox | 2:bbc155b0b886 | 1315 | rtwHilite(aParentSID); |
paulcox | 2:bbc155b0b886 | 1316 | } |
paulcox | 2:bbc155b0b886 | 1317 | } |
paulcox | 2:bbc155b0b886 | 1318 | } |
paulcox | 2:bbc155b0b886 | 1319 | |
paulcox | 2:bbc155b0b886 | 1320 | function str2StrVar(str) { |
paulcox | 2:bbc155b0b886 | 1321 | return str.replace(/'/g,"''"); |
paulcox | 2:bbc155b0b886 | 1322 | } |
paulcox | 2:bbc155b0b886 | 1323 | window.onload=rtwMainOnLoad; |
paulcox | 2:bbc155b0b886 | 1324 | |
paulcox | 2:bbc155b0b886 | 1325 | // handle incode traceability highlighting |
paulcox | 2:bbc155b0b886 | 1326 | function inCodeTraceOnload() { |
paulcox | 2:bbc155b0b886 | 1327 | var tocDocObj = top.rtwreport_contents_frame.document; |
paulcox | 2:bbc155b0b886 | 1328 | if (!top.RTW_TraceArgs.instance) { |
paulcox | 2:bbc155b0b886 | 1329 | var summaryPage = tocDocObj.getElementById("rtwIdSummaryPage"); |
paulcox | 2:bbc155b0b886 | 1330 | top.rtwreport_document_frame.location.href = summaryPage.href; |
paulcox | 2:bbc155b0b886 | 1331 | return; |
paulcox | 2:bbc155b0b886 | 1332 | } |
paulcox | 2:bbc155b0b886 | 1333 | |
paulcox | 2:bbc155b0b886 | 1334 | var files = top.RTW_TraceArgs.instance.getFile(); |
paulcox | 2:bbc155b0b886 | 1335 | if (files.length === 0) { |
paulcox | 2:bbc155b0b886 | 1336 | if (top.RTW_TraceArgs.instance) { |
paulcox | 2:bbc155b0b886 | 1337 | var block = top.RTW_TraceArgs.instance.getBlock(); |
paulcox | 2:bbc155b0b886 | 1338 | block = block.replace("<", "<").replace(">", ">"); |
paulcox | 2:bbc155b0b886 | 1339 | } |
paulcox | 2:bbc155b0b886 | 1340 | top.rtwreport_document_frame.document.write("<pre>No traceability information for block " + block + ".</pre>"); |
paulcox | 2:bbc155b0b886 | 1341 | return; |
paulcox | 2:bbc155b0b886 | 1342 | }; |
paulcox | 2:bbc155b0b886 | 1343 | |
paulcox | 2:bbc155b0b886 | 1344 | var fileLinks = RTW_TraceInfo.getFileLinks(tocDocObj); |
paulcox | 2:bbc155b0b886 | 1345 | RTW_TraceInfo.instance = new RTW_TraceInfo(fileLinks); |
paulcox | 2:bbc155b0b886 | 1346 | |
paulcox | 2:bbc155b0b886 | 1347 | // update filelist with num of highlighted lines |
paulcox | 2:bbc155b0b886 | 1348 | var tocDoc = top.rtwreport_contents_frame.document; |
paulcox | 2:bbc155b0b886 | 1349 | var tLines = 0; |
paulcox | 2:bbc155b0b886 | 1350 | for (var i=0; i<files.length;i++) { |
paulcox | 2:bbc155b0b886 | 1351 | var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(files[i]); |
paulcox | 2:bbc155b0b886 | 1352 | if (typeof fileIdx !== "undefined") { |
paulcox | 2:bbc155b0b886 | 1353 | var rows = top.RTW_TraceArgs.instance.getRows(fileIdx); |
paulcox | 2:bbc155b0b886 | 1354 | var linkNode = tocDoc.getElementById(files[i]); |
paulcox | 2:bbc155b0b886 | 1355 | updateNumHighlightedLines(linkNode, rows.length); |
paulcox | 2:bbc155b0b886 | 1356 | RTW_TraceInfo.instance.setLines(files[i], rows); |
paulcox | 2:bbc155b0b886 | 1357 | tLines += rows.length; |
paulcox | 2:bbc155b0b886 | 1358 | } |
paulcox | 2:bbc155b0b886 | 1359 | } |
paulcox | 2:bbc155b0b886 | 1360 | // set number of total lines |
paulcox | 2:bbc155b0b886 | 1361 | RTW_TraceInfo.instance.setTotalLines(tLines); |
paulcox | 2:bbc155b0b886 | 1362 | // update highligthed from |
paulcox | 2:bbc155b0b886 | 1363 | var node = tocDoc.getElementById("rtwIdTraceBlock"); |
paulcox | 2:bbc155b0b886 | 1364 | if (node) node.textContent = RTW_TraceArgs.instance.getBlock(); |
paulcox | 2:bbc155b0b886 | 1365 | // set the initial file and line |
paulcox | 2:bbc155b0b886 | 1366 | fileIdx = top.RTW_TraceArgs.instance.getFileIdx(files[0]); |
paulcox | 2:bbc155b0b886 | 1367 | rows = top.RTW_TraceArgs.instance.getRows(fileIdx); |
paulcox | 2:bbc155b0b886 | 1368 | RTW_TraceInfo.instance.setInitLocation(files[0],rows[0]); |
paulcox | 2:bbc155b0b886 | 1369 | |
paulcox | 2:bbc155b0b886 | 1370 | // highlight first file |
paulcox | 2:bbc155b0b886 | 1371 | top.rtwreport_document_frame.location.href = files[0]; |
paulcox | 2:bbc155b0b886 | 1372 | return; |
paulcox | 2:bbc155b0b886 | 1373 | } |
paulcox | 2:bbc155b0b886 | 1374 | |
paulcox | 2:bbc155b0b886 | 1375 | function updateNumHighlightedLines(linkObj, aNumLines) { |
paulcox | 2:bbc155b0b886 | 1376 | var parent = linkObj.parentNode; |
paulcox | 2:bbc155b0b886 | 1377 | if (parent && parent.childNodes && parent.childNodes.length > 1) { |
paulcox | 2:bbc155b0b886 | 1378 | var spanNodes = parent.getElementsByTagName('span'); |
paulcox | 2:bbc155b0b886 | 1379 | var len = spanNodes.length; |
paulcox | 2:bbc155b0b886 | 1380 | if (len > 0) { |
paulcox | 2:bbc155b0b886 | 1381 | if (aNumLines > 0) { |
paulcox | 2:bbc155b0b886 | 1382 | /* display number of matches */ |
paulcox | 2:bbc155b0b886 | 1383 | spanNodes.item(len-1).innerHTML = " ("+aNumLines+")"; |
paulcox | 2:bbc155b0b886 | 1384 | } else { |
paulcox | 2:bbc155b0b886 | 1385 | /* clear number of matches */ |
paulcox | 2:bbc155b0b886 | 1386 | spanNodes.item(len-1).innerHTML = ""; |
paulcox | 2:bbc155b0b886 | 1387 | } |
paulcox | 2:bbc155b0b886 | 1388 | } |
paulcox | 2:bbc155b0b886 | 1389 | } |
paulcox | 2:bbc155b0b886 | 1390 | } |
paulcox | 2:bbc155b0b886 | 1391 | |
paulcox | 2:bbc155b0b886 | 1392 | function toggleNavSideBar(val) { |
paulcox | 2:bbc155b0b886 | 1393 | if (top.main) { |
paulcox | 2:bbc155b0b886 | 1394 | var tmp = top.main.cols.split(","); |
paulcox | 2:bbc155b0b886 | 1395 | |
paulcox | 2:bbc155b0b886 | 1396 | if (val === "on") { |
paulcox | 2:bbc155b0b886 | 1397 | tmp[tmp.length-1] = "15px"; |
paulcox | 2:bbc155b0b886 | 1398 | } else { |
paulcox | 2:bbc155b0b886 | 1399 | tmp[tmp.length-1] = "0"; |
paulcox | 2:bbc155b0b886 | 1400 | } |
paulcox | 2:bbc155b0b886 | 1401 | top.main.cols = tmp.join(); |
paulcox | 2:bbc155b0b886 | 1402 | if (top.rtwreport_nav_frame) |
paulcox | 2:bbc155b0b886 | 1403 | top.rtwreport_nav_frame.location.href = "nav.html"; |
paulcox | 2:bbc155b0b886 | 1404 | } |
paulcox | 2:bbc155b0b886 | 1405 | }; |
paulcox | 2:bbc155b0b886 | 1406 | |
paulcox | 2:bbc155b0b886 | 1407 | function toggleNavToolBar(val) |
paulcox | 2:bbc155b0b886 | 1408 | { |
paulcox | 2:bbc155b0b886 | 1409 | var midFrame = rtwMidFrame(); |
paulcox | 2:bbc155b0b886 | 1410 | if (midFrame) { |
paulcox | 2:bbc155b0b886 | 1411 | var tmp1 = midFrame.rows.split(","); |
paulcox | 2:bbc155b0b886 | 1412 | var frameIdx = getNavToolbarFrameIdx(); |
paulcox | 2:bbc155b0b886 | 1413 | if (val === "on") { |
paulcox | 2:bbc155b0b886 | 1414 | tmp1[frameIdx] = "40px"; |
paulcox | 2:bbc155b0b886 | 1415 | } else { |
paulcox | 2:bbc155b0b886 | 1416 | tmp1[frameIdx] = "0"; |
paulcox | 2:bbc155b0b886 | 1417 | } |
paulcox | 2:bbc155b0b886 | 1418 | midFrame.rows = tmp1.join(); |
paulcox | 2:bbc155b0b886 | 1419 | if (top.rtwreport_navToolbar_frame) { |
paulcox | 2:bbc155b0b886 | 1420 | top.rtwreport_navToolbar_frame.location.href = "navToolbar.html"; |
paulcox | 2:bbc155b0b886 | 1421 | } |
paulcox | 2:bbc155b0b886 | 1422 | } |
paulcox | 2:bbc155b0b886 | 1423 | }; |
paulcox | 2:bbc155b0b886 | 1424 | |
paulcox | 2:bbc155b0b886 | 1425 | var GlobalConfig = { |
paulcox | 2:bbc155b0b886 | 1426 | navHiliteColor: "#0000ff", |
paulcox | 2:bbc155b0b886 | 1427 | fileLinkHiliteColor: "#ffff99", |
paulcox | 2:bbc155b0b886 | 1428 | navToolbarBgcolor: "#aaffff", |
paulcox | 2:bbc155b0b886 | 1429 | offset: 10, |
paulcox | 2:bbc155b0b886 | 1430 | hiliteToken: false |
paulcox | 2:bbc155b0b886 | 1431 | }; |
paulcox | 2:bbc155b0b886 | 1432 | var NavSideBarState = { |
paulcox | 2:bbc155b0b886 | 1433 | calLineHeight: 0, |
paulcox | 2:bbc155b0b886 | 1434 | overLink: false, |
paulcox | 2:bbc155b0b886 | 1435 | linkTarget: null, |
paulcox | 2:bbc155b0b886 | 1436 | lastLinkTarget: null, |
paulcox | 2:bbc155b0b886 | 1437 | linkTargetIdx: 0 |
paulcox | 2:bbc155b0b886 | 1438 | } |
paulcox | 2:bbc155b0b886 | 1439 | function drawNavSideBar() { |
paulcox | 2:bbc155b0b886 | 1440 | var rectHeight = 1; |
paulcox | 2:bbc155b0b886 | 1441 | if (!top || !top.rtwreport_document_frame || !top.rtwreport_nav_frame) return; |
paulcox | 2:bbc155b0b886 | 1442 | |
paulcox | 2:bbc155b0b886 | 1443 | if (!top.RTW_TraceArgs.instance) return; |
paulcox | 2:bbc155b0b886 | 1444 | var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(); |
paulcox | 2:bbc155b0b886 | 1445 | if (fileIdx === undefined) return; |
paulcox | 2:bbc155b0b886 | 1446 | var rows = top.RTW_TraceArgs.instance.getRows(fileIdx); |
paulcox | 2:bbc155b0b886 | 1447 | if (rows.length === 0) return; // no highlighted line |
paulcox | 2:bbc155b0b886 | 1448 | |
paulcox | 2:bbc155b0b886 | 1449 | var codeTbl = top.rtwreport_document_frame.document.getElementById("codeTbl"); |
paulcox | 2:bbc155b0b886 | 1450 | if (!codeTbl) return; // no code table |
paulcox | 2:bbc155b0b886 | 1451 | |
paulcox | 2:bbc155b0b886 | 1452 | var nRows = codeTbl.rows.length + 1; |
paulcox | 2:bbc155b0b886 | 1453 | var canvas = top.rtwreport_nav_frame.document.getElementById("canvas"); |
paulcox | 2:bbc155b0b886 | 1454 | canvas.width = top.rtwreport_nav_frame.innerWidth; |
paulcox | 2:bbc155b0b886 | 1455 | canvas.height = top.rtwreport_nav_frame.innerHeight-2; |
paulcox | 2:bbc155b0b886 | 1456 | NavSideBarState.calLineHeight = canvas.height/nRows; |
paulcox | 2:bbc155b0b886 | 1457 | if (canvas.getContext) { |
paulcox | 2:bbc155b0b886 | 1458 | var ctx = canvas.getContext("2d"); |
paulcox | 2:bbc155b0b886 | 1459 | ctx.clearRect(0, 0, canvas.width, canvas.height); |
paulcox | 2:bbc155b0b886 | 1460 | // fill background |
paulcox | 2:bbc155b0b886 | 1461 | ctx.fillStyle = GlobalConfig.navToolbarBgcolor; |
paulcox | 2:bbc155b0b886 | 1462 | ctx.fillRect(0, 0, canvas.width, canvas.height); |
paulcox | 2:bbc155b0b886 | 1463 | ctx.fillStyle = GlobalConfig.navHiliteColor; |
paulcox | 2:bbc155b0b886 | 1464 | for (var i=0;i<rows.length;i++) { |
paulcox | 2:bbc155b0b886 | 1465 | ctx.fillRect(0, Number(rows[i])*NavSideBarState.calLineHeight, canvas.width, rectHeight); |
paulcox | 2:bbc155b0b886 | 1466 | } |
paulcox | 2:bbc155b0b886 | 1467 | if (canvas.addEventListener) { |
paulcox | 2:bbc155b0b886 | 1468 | canvas.addEventListener("mousemove", navBarOnMousemove, false); |
paulcox | 2:bbc155b0b886 | 1469 | canvas.addEventListener("click", navBarOnClick, false); |
paulcox | 2:bbc155b0b886 | 1470 | } else if (canvas.attachEvent) { |
paulcox | 2:bbc155b0b886 | 1471 | canvas.attachEvent("mousemove", navBarOnMousemove); |
paulcox | 2:bbc155b0b886 | 1472 | canvas.attachEvent("click", navBarOnClick); |
paulcox | 2:bbc155b0b886 | 1473 | } |
paulcox | 2:bbc155b0b886 | 1474 | } |
paulcox | 2:bbc155b0b886 | 1475 | } |
paulcox | 2:bbc155b0b886 | 1476 | |
paulcox | 2:bbc155b0b886 | 1477 | function navBarOnMousemove(e) { |
paulcox | 2:bbc155b0b886 | 1478 | var y = e.clientY; |
paulcox | 2:bbc155b0b886 | 1479 | var tolerable_range = 5; |
paulcox | 2:bbc155b0b886 | 1480 | if (!top.RTW_TraceArgs.instance || !top.rtwreport_nav_frame) return; |
paulcox | 2:bbc155b0b886 | 1481 | var fileIdx = top.RTW_TraceArgs.instance.getFileIdx(); |
paulcox | 2:bbc155b0b886 | 1482 | var rows = top.RTW_TraceArgs.instance.getRows(fileIdx); |
paulcox | 2:bbc155b0b886 | 1483 | var lineLoc,nextLineLoc; |
paulcox | 2:bbc155b0b886 | 1484 | top.rtwreport_nav_frame.document.body.style.cursor=""; |
paulcox | 2:bbc155b0b886 | 1485 | NavSideBarState.overLink = false; |
paulcox | 2:bbc155b0b886 | 1486 | NavSideBarState.linkTarget = null; |
paulcox | 2:bbc155b0b886 | 1487 | NavSideBarState.linkTargetIdx = null; |
paulcox | 2:bbc155b0b886 | 1488 | for (var i=0;i<rows.length;i++) { |
paulcox | 2:bbc155b0b886 | 1489 | loc = rows[i]*NavSideBarState.calLineHeight; |
paulcox | 2:bbc155b0b886 | 1490 | // if within the tolerable range |
paulcox | 2:bbc155b0b886 | 1491 | if (Math.abs(y-loc) <= tolerable_range) { |
paulcox | 2:bbc155b0b886 | 1492 | top.rtwreport_nav_frame.document.body.style.cursor="pointer"; |
paulcox | 2:bbc155b0b886 | 1493 | var canvas = top.rtwreport_nav_frame.document.getElementById("canvas"); |
paulcox | 2:bbc155b0b886 | 1494 | canvas.title = "navigate to line " + rows[i]; |
paulcox | 2:bbc155b0b886 | 1495 | NavSideBarState.overLink = true; |
paulcox | 2:bbc155b0b886 | 1496 | NavSideBarState.linkTarget = rows[i]; |
paulcox | 2:bbc155b0b886 | 1497 | NavSideBarState.linkTargetIdx = i; |
paulcox | 2:bbc155b0b886 | 1498 | break; |
paulcox | 2:bbc155b0b886 | 1499 | } |
paulcox | 2:bbc155b0b886 | 1500 | } |
paulcox | 2:bbc155b0b886 | 1501 | } |
paulcox | 2:bbc155b0b886 | 1502 | |
paulcox | 2:bbc155b0b886 | 1503 | function navBarOnClick(e) { |
paulcox | 2:bbc155b0b886 | 1504 | if (NavSideBarState.overLink && top.rtwreport_document_frame) { |
paulcox | 2:bbc155b0b886 | 1505 | rmTagToCurrentLine(); // remove current line tag |
paulcox | 2:bbc155b0b886 | 1506 | top.RTW_TraceInfo.instance.setCurrLineIdx(NavSideBarState.linkTargetIdx); |
paulcox | 2:bbc155b0b886 | 1507 | top.rtwreport_document_frame.document.location.href=RTW_TraceInfo.instance.getCurrentHRef(); |
paulcox | 2:bbc155b0b886 | 1508 | top.addTagToCurrentLine(); // add current line tag |
paulcox | 2:bbc155b0b886 | 1509 | RTW_TraceInfo.instance.updateNavState(); |
paulcox | 2:bbc155b0b886 | 1510 | } |
paulcox | 2:bbc155b0b886 | 1511 | } |
paulcox | 2:bbc155b0b886 | 1512 | |
paulcox | 2:bbc155b0b886 | 1513 | function removeInCodeTraceHighlight() { |
paulcox | 2:bbc155b0b886 | 1514 | var docObj = top.rtwreport_document_frame.document; |
paulcox | 2:bbc155b0b886 | 1515 | toggleNavSideBar("off"); |
paulcox | 2:bbc155b0b886 | 1516 | toggleNavToolBar("off"); |
paulcox | 2:bbc155b0b886 | 1517 | var nodes = docObj.getElementsByClassName("hilite"); |
paulcox | 2:bbc155b0b886 | 1518 | // nodes is a live nodeList. Changing className modifies the list. |
paulcox | 2:bbc155b0b886 | 1519 | while(nodes.length) { |
paulcox | 2:bbc155b0b886 | 1520 | nodes[0].className = nodes[0].className.replace("hilite", ""); |
paulcox | 2:bbc155b0b886 | 1521 | } |
paulcox | 2:bbc155b0b886 | 1522 | var nodes = docObj.getElementsByClassName("hiliteCurrentLine"); |
paulcox | 2:bbc155b0b886 | 1523 | // nodes is a live nodeList. Changing className modifies the list. |
paulcox | 2:bbc155b0b886 | 1524 | while(nodes.length) { |
paulcox | 2:bbc155b0b886 | 1525 | nodes[0].className = nodes[0].className.replace("hiliteCurrentLine", ""); |
paulcox | 2:bbc155b0b886 | 1526 | } |
paulcox | 2:bbc155b0b886 | 1527 | // reset RTW_TraceArgs.instance |
paulcox | 2:bbc155b0b886 | 1528 | RTW_TraceArgs.instance = null; |
paulcox | 2:bbc155b0b886 | 1529 | // remove highlight in content panel except the filelink |
paulcox | 2:bbc155b0b886 | 1530 | if (RTW_TraceInfo && RTW_TraceInfo.instance) { |
paulcox | 2:bbc155b0b886 | 1531 | var currFileIdx = RTW_TraceInfo.instance.getCurrFileIdx(); |
paulcox | 2:bbc155b0b886 | 1532 | RTW_TraceInfo.instance.removeHighlighting(); |
paulcox | 2:bbc155b0b886 | 1533 | RTW_TraceInfo.instance.highlightFileLink(currFileIdx); |
paulcox | 2:bbc155b0b886 | 1534 | } |
paulcox | 2:bbc155b0b886 | 1535 | } |
paulcox | 2:bbc155b0b886 | 1536 | |
paulcox | 2:bbc155b0b886 | 1537 | function getInspectWindow() { |
paulcox | 2:bbc155b0b886 | 1538 | var divObj = document.createElement("div"); |
paulcox | 2:bbc155b0b886 | 1539 | divObj.id = "popup_window"; |
paulcox | 2:bbc155b0b886 | 1540 | return divObj; |
paulcox | 2:bbc155b0b886 | 1541 | } |
paulcox | 2:bbc155b0b886 | 1542 | function getInspectData(file, anchorObj) { |
paulcox | 2:bbc155b0b886 | 1543 | var metricsData = null; |
paulcox | 2:bbc155b0b886 | 1544 | var propObj = null; |
paulcox | 2:bbc155b0b886 | 1545 | var type = null; |
paulcox | 2:bbc155b0b886 | 1546 | var size = null; |
paulcox | 2:bbc155b0b886 | 1547 | var cm; |
paulcox | 2:bbc155b0b886 | 1548 | if (top.rtwreport_nav_frame && top.rtwreport_nav_frame.CodeMetrics && |
paulcox | 2:bbc155b0b886 | 1549 | top.rtwreport_nav_frame.CodeMetrics.instance && |
paulcox | 2:bbc155b0b886 | 1550 | top.RTW_TraceArgs && top.RTW_TraceArgs.instance && |
paulcox | 2:bbc155b0b886 | 1551 | !top.RTW_TraceArgs.instance.getUseExternalBrowser()) { |
paulcox | 2:bbc155b0b886 | 1552 | cm = top.rtwreport_nav_frame.CodeMetrics.instance; |
paulcox | 2:bbc155b0b886 | 1553 | } |
paulcox | 2:bbc155b0b886 | 1554 | if (cm && cm.getMetrics) { |
paulcox | 2:bbc155b0b886 | 1555 | metricsData = cm.getMetrics(anchorObj.text); |
paulcox | 2:bbc155b0b886 | 1556 | if (!metricsData) { |
paulcox | 2:bbc155b0b886 | 1557 | // try static token |
paulcox | 2:bbc155b0b886 | 1558 | metricsData = cm.getMetrics(RTW_TraceInfo.toSrcFileName(file) + ":" + anchorObj.text); |
paulcox | 2:bbc155b0b886 | 1559 | } |
paulcox | 2:bbc155b0b886 | 1560 | if (metricsData) { |
paulcox | 2:bbc155b0b886 | 1561 | type = metricsData.type; |
paulcox | 2:bbc155b0b886 | 1562 | if (type === "var") { |
paulcox | 2:bbc155b0b886 | 1563 | type = "Global Variable"; |
paulcox | 2:bbc155b0b886 | 1564 | size = "(" + metricsData.size + " byte)"; |
paulcox | 2:bbc155b0b886 | 1565 | } else if (type === "fcn") { |
paulcox | 2:bbc155b0b886 | 1566 | type = "Function"; |
paulcox | 2:bbc155b0b886 | 1567 | size = "(stack: " + metricsData.stack + " byte, total stack: " |
paulcox | 2:bbc155b0b886 | 1568 | + metricsData.stackTotal + " byte)"; |
paulcox | 2:bbc155b0b886 | 1569 | } |
paulcox | 2:bbc155b0b886 | 1570 | } |
paulcox | 2:bbc155b0b886 | 1571 | } |
paulcox | 2:bbc155b0b886 | 1572 | if (type === null) { |
paulcox | 2:bbc155b0b886 | 1573 | var defObj = top.CodeDefine.instance.def[anchorObj.text]; |
paulcox | 2:bbc155b0b886 | 1574 | if (defObj) { |
paulcox | 2:bbc155b0b886 | 1575 | type = defObj.type; |
paulcox | 2:bbc155b0b886 | 1576 | if (type === "var") { |
paulcox | 2:bbc155b0b886 | 1577 | type = "Variable"; |
paulcox | 2:bbc155b0b886 | 1578 | } else if (type === "fcn") { |
paulcox | 2:bbc155b0b886 | 1579 | type = "Function"; |
paulcox | 2:bbc155b0b886 | 1580 | } else if (type === "type") { |
paulcox | 2:bbc155b0b886 | 1581 | type = "Type"; |
paulcox | 2:bbc155b0b886 | 1582 | } |
paulcox | 2:bbc155b0b886 | 1583 | size = ""; |
paulcox | 2:bbc155b0b886 | 1584 | } |
paulcox | 2:bbc155b0b886 | 1585 | } |
paulcox | 2:bbc155b0b886 | 1586 | var propObj = document.createElement("div"); |
paulcox | 2:bbc155b0b886 | 1587 | propObj.id = "token_property"; |
paulcox | 2:bbc155b0b886 | 1588 | |
paulcox | 2:bbc155b0b886 | 1589 | var ulObj = document.createElement("ul"); |
paulcox | 2:bbc155b0b886 | 1590 | ulObj.className = "popup_attrib_list"; |
paulcox | 2:bbc155b0b886 | 1591 | ulObj.innerHTML = "<li>" + type + ": <var>" + anchorObj.text + "</var></li><li>"+ |
paulcox | 2:bbc155b0b886 | 1592 | size + "</li>"; |
paulcox | 2:bbc155b0b886 | 1593 | propObj.appendChild(ulObj); |
paulcox | 2:bbc155b0b886 | 1594 | |
paulcox | 2:bbc155b0b886 | 1595 | return propObj; |
paulcox | 2:bbc155b0b886 | 1596 | } |
paulcox | 2:bbc155b0b886 | 1597 | function getInspectLink(file, pathname, anchorObj) { |
paulcox | 2:bbc155b0b886 | 1598 | var model = top.reportModel; |
paulcox | 2:bbc155b0b886 | 1599 | var tokenId = anchorObj.id; |
paulcox | 2:bbc155b0b886 | 1600 | var navObj = document.createElement("div"); |
paulcox | 2:bbc155b0b886 | 1601 | navObj.id = "token_usage_nav"; |
paulcox | 2:bbc155b0b886 | 1602 | ulObj = document.createElement("ul"); |
paulcox | 2:bbc155b0b886 | 1603 | ulObj.id = "token_nav_links"; |
paulcox | 2:bbc155b0b886 | 1604 | ulObj.className="popup_attrib_list"; |
paulcox | 2:bbc155b0b886 | 1605 | var defObj = top.CodeDefine.instance.def[anchorObj.text]; |
paulcox | 2:bbc155b0b886 | 1606 | var line = anchorObj.id.substring(0,anchorObj.id.indexOf("c")); |
paulcox | 2:bbc155b0b886 | 1607 | // link to model |
paulcox | 2:bbc155b0b886 | 1608 | if (top.TraceInfoFlag && top.TraceInfoFlag.instance && |
paulcox | 2:bbc155b0b886 | 1609 | top.TraceInfoFlag.instance.traceFlag[RTW_TraceInfo.toSrcFileName(file)+":"+anchorObj.id]) { |
paulcox | 2:bbc155b0b886 | 1610 | ulObj.innerHTML += "<li><a href=\"matlab:rtw.report.code2model(\'" + top.reportModel |
paulcox | 2:bbc155b0b886 | 1611 | + "\',\'"+pathname+"\',\'" + tokenId + "');\">Navigate to model</a></li>"; |
paulcox | 2:bbc155b0b886 | 1612 | } |
paulcox | 2:bbc155b0b886 | 1613 | // link to def/decl |
paulcox | 2:bbc155b0b886 | 1614 | if (defObj) { |
paulcox | 2:bbc155b0b886 | 1615 | var filename = defObj.file.split(/\//); |
paulcox | 2:bbc155b0b886 | 1616 | filename = filename[filename.length-1]; |
paulcox | 2:bbc155b0b886 | 1617 | ulObj.innerHTML += "<li><i>" + anchorObj.text + "</i> defined at <a target='rtwreport_document_frame' onclick=\"top.tokenLinkOnClick(event)\" href='" + defObj.file + "#" + defObj.line + |
paulcox | 2:bbc155b0b886 | 1618 | "'>" + RTW_TraceInfo.toSrcFileName(filename) + " line " + defObj.line + "</a></li>"; |
paulcox | 2:bbc155b0b886 | 1619 | } |
paulcox | 2:bbc155b0b886 | 1620 | navObj.appendChild(ulObj); |
paulcox | 2:bbc155b0b886 | 1621 | return navObj; |
paulcox | 2:bbc155b0b886 | 1622 | } |
paulcox | 2:bbc155b0b886 | 1623 | |
paulcox | 2:bbc155b0b886 | 1624 | var LastHiliteTokenId = null; |
paulcox | 2:bbc155b0b886 | 1625 | function rmHiliteClickedToken() { |
paulcox | 2:bbc155b0b886 | 1626 | if (LastHiliteTokenId) { |
paulcox | 2:bbc155b0b886 | 1627 | var o = top.rtwreport_document_frame.document.getElementById(LastHiliteTokenId); |
paulcox | 2:bbc155b0b886 | 1628 | if (o) { |
paulcox | 2:bbc155b0b886 | 1629 | o.className = o.className.replace("hiliteToken", ""); |
paulcox | 2:bbc155b0b886 | 1630 | } |
paulcox | 2:bbc155b0b886 | 1631 | } |
paulcox | 2:bbc155b0b886 | 1632 | } |
paulcox | 2:bbc155b0b886 | 1633 | function hiliteClickedToken(elem) { |
paulcox | 2:bbc155b0b886 | 1634 | rmHiliteClickedToken(); |
paulcox | 2:bbc155b0b886 | 1635 | LastHiliteTokenId = elem.id; |
paulcox | 2:bbc155b0b886 | 1636 | elem.className += " hiliteToken"; |
paulcox | 2:bbc155b0b886 | 1637 | } |
paulcox | 2:bbc155b0b886 | 1638 | |
paulcox | 2:bbc155b0b886 | 1639 | var initLine = null; |
paulcox | 2:bbc155b0b886 | 1640 | function scrollToInitLine() { |
paulcox | 2:bbc155b0b886 | 1641 | if (initLine) { |
paulcox | 2:bbc155b0b886 | 1642 | var lineElem = top.rtwreport_document_frame.document.getElementById(initLine); |
paulcox | 2:bbc155b0b886 | 1643 | if (lineElem) { |
paulcox | 2:bbc155b0b886 | 1644 | lineElem.scrollIntoView(); |
paulcox | 2:bbc155b0b886 | 1645 | } |
paulcox | 2:bbc155b0b886 | 1646 | } |
paulcox | 2:bbc155b0b886 | 1647 | } |
paulcox | 2:bbc155b0b886 | 1648 | |
paulcox | 2:bbc155b0b886 | 1649 | function scrollToLineBasedOnHash(hashValue) { |
paulcox | 2:bbc155b0b886 | 1650 | // move to the current highlight line if the hash is not empty |
paulcox | 2:bbc155b0b886 | 1651 | if (hashValue === "") { |
paulcox | 2:bbc155b0b886 | 1652 | if (top.RTW_TraceInfo.instance && top.RTW_TraceInfo.instance.getCurrLine() !== null) { |
paulcox | 2:bbc155b0b886 | 1653 | top.rtwreport_document_frame.document.location.href=top.RTW_TraceInfo.instance.getCurrentHRef(); |
paulcox | 2:bbc155b0b886 | 1654 | top.initLine = top.rtwreport_document_frame.document.location.hash.substr(1); |
paulcox | 2:bbc155b0b886 | 1655 | } |
paulcox | 2:bbc155b0b886 | 1656 | } else { |
paulcox | 2:bbc155b0b886 | 1657 | // scroll and hilite line |
paulcox | 2:bbc155b0b886 | 1658 | hashValue = hashValue.substr(1); |
paulcox | 2:bbc155b0b886 | 1659 | if (isNaN(hashValue)) { |
paulcox | 2:bbc155b0b886 | 1660 | // #fcn_name |
paulcox | 2:bbc155b0b886 | 1661 | var pattern = "+newPage"; |
paulcox | 2:bbc155b0b886 | 1662 | if (hashValue.indexOf(pattern) != -1) { |
paulcox | 2:bbc155b0b886 | 1663 | hashValue = hashValue.replace(pattern, ''); |
paulcox | 2:bbc155b0b886 | 1664 | var lineElem = top.rtwreport_document_frame.document.getElementById(hashValue); |
paulcox | 2:bbc155b0b886 | 1665 | initLine = hashValue; // save initLine in case the dom is updated later by anootation |
paulcox | 2:bbc155b0b886 | 1666 | if (lineElem) { |
paulcox | 2:bbc155b0b886 | 1667 | lineElem.scrollIntoView(); |
paulcox | 2:bbc155b0b886 | 1668 | addTagToCurrentLine(); |
paulcox | 2:bbc155b0b886 | 1669 | } |
paulcox | 2:bbc155b0b886 | 1670 | |
paulcox | 2:bbc155b0b886 | 1671 | } else { |
paulcox | 2:bbc155b0b886 | 1672 | var token = null; |
paulcox | 2:bbc155b0b886 | 1673 | pattern = ["var_", "fcn_", "type_"]; |
paulcox | 2:bbc155b0b886 | 1674 | for (var i =0; i < pattern.length; i++) { |
paulcox | 2:bbc155b0b886 | 1675 | if (hashValue.indexOf(pattern[i]) === 0) { |
paulcox | 2:bbc155b0b886 | 1676 | token = hashValue.substr(pattern[i].length); |
paulcox | 2:bbc155b0b886 | 1677 | break; |
paulcox | 2:bbc155b0b886 | 1678 | } |
paulcox | 2:bbc155b0b886 | 1679 | } |
paulcox | 2:bbc155b0b886 | 1680 | if (token !== null && top.CodeDefine && top.CodeDefine.instance) { |
paulcox | 2:bbc155b0b886 | 1681 | var addr = top.CodeDefine.instance.def[token]; |
paulcox | 2:bbc155b0b886 | 1682 | if (addr) { |
paulcox | 2:bbc155b0b886 | 1683 | hilite_line(addr.line); |
paulcox | 2:bbc155b0b886 | 1684 | } |
paulcox | 2:bbc155b0b886 | 1685 | } else { // token id like #line"c"#col |
paulcox | 2:bbc155b0b886 | 1686 | if (hashValue.indexOf("c") !== -1) { |
paulcox | 2:bbc155b0b886 | 1687 | hilite_line(hashValue.substr(0, hashValue.indexOf("c")), hashValue); |
paulcox | 2:bbc155b0b886 | 1688 | } |
paulcox | 2:bbc155b0b886 | 1689 | } |
paulcox | 2:bbc155b0b886 | 1690 | } |
paulcox | 2:bbc155b0b886 | 1691 | } else { // #line |
paulcox | 2:bbc155b0b886 | 1692 | hilite_line(hashValue); |
paulcox | 2:bbc155b0b886 | 1693 | } |
paulcox | 2:bbc155b0b886 | 1694 | } |
paulcox | 2:bbc155b0b886 | 1695 | return false; |
paulcox | 2:bbc155b0b886 | 1696 | // hilite line number and scroll with an offset |
paulcox | 2:bbc155b0b886 | 1697 | function hilite_line(line, tokenId) { |
paulcox | 2:bbc155b0b886 | 1698 | if (isNaN(line)) return; |
paulcox | 2:bbc155b0b886 | 1699 | if (!tokenId) { |
paulcox | 2:bbc155b0b886 | 1700 | tokenId = line; |
paulcox | 2:bbc155b0b886 | 1701 | } |
paulcox | 2:bbc155b0b886 | 1702 | var elem = top.rtwreport_document_frame.document.getElementById(tokenId); |
paulcox | 2:bbc155b0b886 | 1703 | hiliteClickedToken(elem); |
paulcox | 2:bbc155b0b886 | 1704 | initLine = offset_line(line); |
paulcox | 2:bbc155b0b886 | 1705 | scrollToInitLine(); |
paulcox | 2:bbc155b0b886 | 1706 | } |
paulcox | 2:bbc155b0b886 | 1707 | } |
paulcox | 2:bbc155b0b886 | 1708 | |
paulcox | 2:bbc155b0b886 | 1709 | function tokenLinkOnClick(event) { |
paulcox | 2:bbc155b0b886 | 1710 | var alink = event.currentTarget; |
paulcox | 2:bbc155b0b886 | 1711 | if (alink.pathname === top.rtwreport_document_frame.location.pathname) { |
paulcox | 2:bbc155b0b886 | 1712 | event.preventDefault(); |
paulcox | 2:bbc155b0b886 | 1713 | scrollToLineBasedOnHash(alink.hash); |
paulcox | 2:bbc155b0b886 | 1714 | } |
paulcox | 2:bbc155b0b886 | 1715 | return false; |
paulcox | 2:bbc155b0b886 | 1716 | } |
paulcox | 2:bbc155b0b886 | 1717 | function inspectToken(file, pathname, event) { |
paulcox | 2:bbc155b0b886 | 1718 | var height = "70px"; |
paulcox | 2:bbc155b0b886 | 1719 | // show inspect data |
paulcox | 2:bbc155b0b886 | 1720 | if (top.rtwreport_inspect_frame) { |
paulcox | 2:bbc155b0b886 | 1721 | var windowObj = getInspectWindow(); |
paulcox | 2:bbc155b0b886 | 1722 | var propObj = getInspectData(file, event.currentTarget); |
paulcox | 2:bbc155b0b886 | 1723 | var navObj = getInspectLink(file, pathname, event.currentTarget); |
paulcox | 2:bbc155b0b886 | 1724 | if (propObj === null) { |
paulcox | 2:bbc155b0b886 | 1725 | height = "50px"; |
paulcox | 2:bbc155b0b886 | 1726 | } else { |
paulcox | 2:bbc155b0b886 | 1727 | windowObj.appendChild(propObj); |
paulcox | 2:bbc155b0b886 | 1728 | } |
paulcox | 2:bbc155b0b886 | 1729 | windowObj.appendChild(navObj); |
paulcox | 2:bbc155b0b886 | 1730 | var data = top.rtwreport_inspect_frame.document.getElementById("popup_window"); |
paulcox | 2:bbc155b0b886 | 1731 | if (data) { |
paulcox | 2:bbc155b0b886 | 1732 | data.parentNode.replaceChild(windowObj.cloneNode(true), data); |
paulcox | 2:bbc155b0b886 | 1733 | } |
paulcox | 2:bbc155b0b886 | 1734 | } |
paulcox | 2:bbc155b0b886 | 1735 | setInspectWindow(height); |
paulcox | 2:bbc155b0b886 | 1736 | return false; |
paulcox | 2:bbc155b0b886 | 1737 | } |
paulcox | 2:bbc155b0b886 | 1738 | function setInspectWindow(height) { |
paulcox | 2:bbc155b0b886 | 1739 | // show inspect code frame |
paulcox | 2:bbc155b0b886 | 1740 | var midFrame = rtwMidFrame(); |
paulcox | 2:bbc155b0b886 | 1741 | var tmp = midFrame.rows.split(","); |
paulcox | 2:bbc155b0b886 | 1742 | tmp[getInspectFrameIdx()] = height; |
paulcox | 2:bbc155b0b886 | 1743 | midFrame.rows = tmp.join(); |
paulcox | 2:bbc155b0b886 | 1744 | } |
paulcox | 2:bbc155b0b886 | 1745 | function closeInspectWindow() { |
paulcox | 2:bbc155b0b886 | 1746 | setInspectWindow(0); |
paulcox | 2:bbc155b0b886 | 1747 | return false; |
paulcox | 2:bbc155b0b886 | 1748 | } |
paulcox | 2:bbc155b0b886 | 1749 | |
paulcox | 2:bbc155b0b886 | 1750 | // set the trace number in the navigation toolbar |
paulcox | 2:bbc155b0b886 | 1751 | function setTraceNumber() { |
paulcox | 2:bbc155b0b886 | 1752 | if (RTW_TraceInfo.instance) { |
paulcox | 2:bbc155b0b886 | 1753 | var aFrame = rtwNavToolbarFrame(); |
paulcox | 2:bbc155b0b886 | 1754 | if (aFrame) { |
paulcox | 2:bbc155b0b886 | 1755 | var node = aFrame.document.getElementById("rtwIdTraceNumber"); |
paulcox | 2:bbc155b0b886 | 1756 | // calculate current line index over total highlighted lines |
paulcox | 2:bbc155b0b886 | 1757 | var currNum = RTW_TraceInfo.instance.getCurrLineIdx(); |
paulcox | 2:bbc155b0b886 | 1758 | for (var idx=0;idx<RTW_TraceInfo.instance.getCurrFileIdx();idx++) { |
paulcox | 2:bbc155b0b886 | 1759 | currNum += RTW_TraceInfo.instance.getNumLines(idx); |
paulcox | 2:bbc155b0b886 | 1760 | } |
paulcox | 2:bbc155b0b886 | 1761 | if (node) { |
paulcox | 2:bbc155b0b886 | 1762 | node.innerHTML = String(currNum+1) + " of " + String(RTW_TraceInfo.instance.getTotalLines()); |
paulcox | 2:bbc155b0b886 | 1763 | } |
paulcox | 2:bbc155b0b886 | 1764 | } |
paulcox | 2:bbc155b0b886 | 1765 | } |
paulcox | 2:bbc155b0b886 | 1766 | } |
paulcox | 2:bbc155b0b886 | 1767 | |
paulcox | 2:bbc155b0b886 | 1768 | function offset_line(line, offset) { |
paulcox | 2:bbc155b0b886 | 1769 | if (offset == undefined) |
paulcox | 2:bbc155b0b886 | 1770 | offset = GlobalConfig.offset; |
paulcox | 2:bbc155b0b886 | 1771 | if (offset > 0) |
paulcox | 2:bbc155b0b886 | 1772 | line = (line > GlobalConfig.offset ? line - GlobalConfig.offset : 1); |
paulcox | 2:bbc155b0b886 | 1773 | return line; |
paulcox | 2:bbc155b0b886 | 1774 | } |
paulcox | 2:bbc155b0b886 | 1775 | |
paulcox | 2:bbc155b0b886 | 1776 | function load_js(frame, file) { |
paulcox | 2:bbc155b0b886 | 1777 | var h = frame.document.getElementsByTagName("head")[0]; |
paulcox | 2:bbc155b0b886 | 1778 | var o = h.getElementsByTagName('script'); |
paulcox | 2:bbc155b0b886 | 1779 | for (var i=0;i<o.length;++i) { |
paulcox | 2:bbc155b0b886 | 1780 | if (o[i].getAttribute("src") === file) { |
paulcox | 2:bbc155b0b886 | 1781 | h.removeChild(o[i]); |
paulcox | 2:bbc155b0b886 | 1782 | } |
paulcox | 2:bbc155b0b886 | 1783 | } |
paulcox | 2:bbc155b0b886 | 1784 | var s = top.document.createElement("script"); |
paulcox | 2:bbc155b0b886 | 1785 | s.type = "text/javascript"; |
paulcox | 2:bbc155b0b886 | 1786 | s.src = file; |
paulcox | 2:bbc155b0b886 | 1787 | h.appendChild(s); |
paulcox | 2:bbc155b0b886 | 1788 | } |
paulcox | 2:bbc155b0b886 | 1789 | |
paulcox | 2:bbc155b0b886 | 1790 | function reqOnClick(event) { |
paulcox | 2:bbc155b0b886 | 1791 | top.hiliteClickedToken(event.currentTarget); |
paulcox | 2:bbc155b0b886 | 1792 | return true; |
paulcox | 2:bbc155b0b886 | 1793 | } |
paulcox | 2:bbc155b0b886 | 1794 | function resize_NavToolbar_frame() { |
paulcox | 2:bbc155b0b886 | 1795 | resize_frame(getNavToolbarFrameIdx(), rtwNavToolbarFrame().document.height); |
paulcox | 2:bbc155b0b886 | 1796 | } |
paulcox | 2:bbc155b0b886 | 1797 | function resize_Inspect_frame() { |
paulcox | 2:bbc155b0b886 | 1798 | resize_frame(getInspectFrameIdx(), rtwInspectFrame().document.height); |
paulcox | 2:bbc155b0b886 | 1799 | } |
paulcox | 2:bbc155b0b886 | 1800 | function resize_frame(id, height) { |
paulcox | 2:bbc155b0b886 | 1801 | if (height) { |
paulcox | 2:bbc155b0b886 | 1802 | var midFrame = top.rtwMidFrame(); |
paulcox | 2:bbc155b0b886 | 1803 | var tmp = midFrame.rows.split(","); |
paulcox | 2:bbc155b0b886 | 1804 | if (tmp[id] !== "0%" && tmp[id] !== "0") { |
paulcox | 2:bbc155b0b886 | 1805 | tmp[id] = "" + height - 8 + "px"; |
paulcox | 2:bbc155b0b886 | 1806 | midFrame.rows = tmp.join(); |
paulcox | 2:bbc155b0b886 | 1807 | } |
paulcox | 2:bbc155b0b886 | 1808 | } |
paulcox | 2:bbc155b0b886 | 1809 | } |
paulcox | 2:bbc155b0b886 | 1810 | function getNavToolbarFrameIdx() { |
paulcox | 2:bbc155b0b886 | 1811 | return 0; |
paulcox | 2:bbc155b0b886 | 1812 | } |
paulcox | 2:bbc155b0b886 | 1813 | function getInspectFrameIdx() { |
paulcox | 2:bbc155b0b886 | 1814 | return 2; |
paulcox | 2:bbc155b0b886 | 1815 | } |
paulcox | 2:bbc155b0b886 | 1816 | function load_metrics() { |
paulcox | 2:bbc155b0b886 | 1817 | var alink = top.document.createElement("a"); |
paulcox | 2:bbc155b0b886 | 1818 | alink.href = "metrics.js"; |
paulcox | 2:bbc155b0b886 | 1819 | if (top.RTW_TraceArgs && top.RTW_TraceArgs.instance && !top.RTW_TraceArgs.instance.getUseExternalBrowser()) { |
paulcox | 2:bbc155b0b886 | 1820 | try { |
paulcox | 2:bbc155b0b886 | 1821 | load_js(top.rtwreport_nav_frame, alink.href); |
paulcox | 2:bbc155b0b886 | 1822 | } catch (err) {}; |
paulcox | 2:bbc155b0b886 | 1823 | } |
paulcox | 2:bbc155b0b886 | 1824 | } |
paulcox | 2:bbc155b0b886 | 1825 | |
paulcox | 2:bbc155b0b886 | 1826 | function getNavFrame() { |
paulcox | 2:bbc155b0b886 | 1827 | if (hasWebviewFrame()) { |
paulcox | 2:bbc155b0b886 | 1828 | return rtwTocFrame(); |
paulcox | 2:bbc155b0b886 | 1829 | } else { |
paulcox | 2:bbc155b0b886 | 1830 | return rtwNavToolbarFrame(); |
paulcox | 2:bbc155b0b886 | 1831 | } |
paulcox | 2:bbc155b0b886 | 1832 | } |
paulcox | 2:bbc155b0b886 | 1833 | |
paulcox | 2:bbc155b0b886 | 1834 | function hasWebviewFrame() { |
paulcox | 2:bbc155b0b886 | 1835 | if (top.document.getElementById('rtw_webviewMidFrame')) { |
paulcox | 2:bbc155b0b886 | 1836 | return true; |
paulcox | 2:bbc155b0b886 | 1837 | } else { |
paulcox | 2:bbc155b0b886 | 1838 | return false; |
paulcox | 2:bbc155b0b886 | 1839 | } |
paulcox | 2:bbc155b0b886 | 1840 | } |
paulcox | 2:bbc155b0b886 | 1841 | function hasInCodeTrace() { |
paulcox | 2:bbc155b0b886 | 1842 | return (typeof(Html2SrcLink) === "function") && !hasWebviewFrame(); |
paulcox | 2:bbc155b0b886 | 1843 | } |
paulcox | 2:bbc155b0b886 | 1844 | function uniqueRows(rows) { |
paulcox | 2:bbc155b0b886 | 1845 | return rows.sort(function(a,b) {return a-b}).filter( |
paulcox | 2:bbc155b0b886 | 1846 | function(el,idx, arr) { |
paulcox | 2:bbc155b0b886 | 1847 | if (idx===arr.indexOf(el)) return true; return false; |
paulcox | 2:bbc155b0b886 | 1848 | } |
paulcox | 2:bbc155b0b886 | 1849 | ); |
paulcox | 2:bbc155b0b886 | 1850 | } |