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

Dependents:   Nucleo_pmsmfoc

Committer:
paulcox
Date:
Tue Nov 25 07:52:02 2014 +0000
Revision:
2:bbc155b0b886
adding doc?

Who changed what in which revision?

UserRevisionLine numberNew 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("<", "&lt;").replace(">", "&gt;");
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 = "&nbsp;("+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 }