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-2012 The MathWorks, Inc.
paulcox 2:bbc155b0b886 2
paulcox 2:bbc155b0b886 3 function createHighlightSpanStart(num)
paulcox 2:bbc155b0b886 4 {
paulcox 2:bbc155b0b886 5 return "<span class=\"highlighted\" name=\"highlight" + num + "\">";
paulcox 2:bbc155b0b886 6 }
paulcox 2:bbc155b0b886 7
paulcox 2:bbc155b0b886 8 var str2pos; // This is a map between a tag stripped string and the original string.
paulcox 2:bbc155b0b886 9 function getTagStrippedStringAndMap(aString)
paulcox 2:bbc155b0b886 10 {
paulcox 2:bbc155b0b886 11 var tagStrippedString = new String();
paulcox 2:bbc155b0b886 12
paulcox 2:bbc155b0b886 13 str2pos = new Array();
paulcox 2:bbc155b0b886 14
paulcox 2:bbc155b0b886 15 var inTag = false;
paulcox 2:bbc155b0b886 16 var inScript = false;
paulcox 2:bbc155b0b886 17
paulcox 2:bbc155b0b886 18 for (var strPos = 0; strPos < aString.length; strPos++) {
paulcox 2:bbc155b0b886 19 if (inTag && aString.charAt(strPos) == '>') {
paulcox 2:bbc155b0b886 20 inTag = false;
paulcox 2:bbc155b0b886 21 if (inScript && (strPos > 8) && (aString.slice(strPos, strPos - 8) == '/script>')) {
paulcox 2:bbc155b0b886 22 inScript = false;
paulcox 2:bbc155b0b886 23 }
paulcox 2:bbc155b0b886 24 continue;
paulcox 2:bbc155b0b886 25 } else if (!inTag && aString.charAt(strPos) == '<') {
paulcox 2:bbc155b0b886 26 inTag = true;
paulcox 2:bbc155b0b886 27 if (!inScript && aString.slice(strPos, strPos + 7) == '<script') {
paulcox 2:bbc155b0b886 28 inScript = true;
paulcox 2:bbc155b0b886 29 strPos += 7;
paulcox 2:bbc155b0b886 30 }
paulcox 2:bbc155b0b886 31 continue;
paulcox 2:bbc155b0b886 32 }
paulcox 2:bbc155b0b886 33
paulcox 2:bbc155b0b886 34 if (inTag == false && inScript == false) {
paulcox 2:bbc155b0b886 35 tagStrippedString += aString.charAt(strPos);
paulcox 2:bbc155b0b886 36 str2pos.push(strPos);
paulcox 2:bbc155b0b886 37 }
paulcox 2:bbc155b0b886 38 }
paulcox 2:bbc155b0b886 39 return tagStrippedString;
paulcox 2:bbc155b0b886 40 }
paulcox 2:bbc155b0b886 41
paulcox 2:bbc155b0b886 42 function escapeSpecialChars(string)
paulcox 2:bbc155b0b886 43 {
paulcox 2:bbc155b0b886 44 // let the browser handle the escaping rather than doing a String.replace
paulcox 2:bbc155b0b886 45 // call
paulcox 2:bbc155b0b886 46 var div = document.createElement("div");
paulcox 2:bbc155b0b886 47 var text = document.createTextNode(string);
paulcox 2:bbc155b0b886 48 div.appendChild(text);
paulcox 2:bbc155b0b886 49 var escapedString = div.innerHTML;
paulcox 2:bbc155b0b886 50 delete div;
paulcox 2:bbc155b0b886 51 return escapedString;
paulcox 2:bbc155b0b886 52 }
paulcox 2:bbc155b0b886 53
paulcox 2:bbc155b0b886 54 // insert highlight tags into the body. Split it up into multiple sections if necessary
paulcox 2:bbc155b0b886 55 // (i.e. if there is a tag in the middle).
paulcox 2:bbc155b0b886 56 function insertHighlighting(bodyText, previ, i, length, highlightStartTag, highlightEndTag)
paulcox 2:bbc155b0b886 57 {
paulcox 2:bbc155b0b886 58 var newText = "";
paulcox 2:bbc155b0b886 59 newText = bodyText.slice(previ, str2pos[i]);
paulcox 2:bbc155b0b886 60
paulcox 2:bbc155b0b886 61 // insert start
paulcox 2:bbc155b0b886 62 newText += highlightStartTag;
paulcox 2:bbc155b0b886 63
paulcox 2:bbc155b0b886 64 var str2posprev = str2pos[i];
paulcox 2:bbc155b0b886 65 // deal with intermediate tags
paulcox 2:bbc155b0b886 66 for(var cnt = i; cnt < i+length; cnt++)
paulcox 2:bbc155b0b886 67 {
paulcox 2:bbc155b0b886 68 if (str2pos[cnt] > str2posprev+1) // we have jumped some text, so there must be a tag
paulcox 2:bbc155b0b886 69 {
paulcox 2:bbc155b0b886 70 // insert end tag
paulcox 2:bbc155b0b886 71 newText += highlightEndTag;
paulcox 2:bbc155b0b886 72
paulcox 2:bbc155b0b886 73 // insert intermediate body text tags
paulcox 2:bbc155b0b886 74 newText += bodyText.slice(str2posprev+1, str2pos[cnt]);
paulcox 2:bbc155b0b886 75
paulcox 2:bbc155b0b886 76 // insert start tag
paulcox 2:bbc155b0b886 77 newText += highlightStartTag;
paulcox 2:bbc155b0b886 78 }
paulcox 2:bbc155b0b886 79 newText += bodyText.charAt(str2pos[cnt]);
paulcox 2:bbc155b0b886 80 str2posprev=str2pos[cnt];
paulcox 2:bbc155b0b886 81 }
paulcox 2:bbc155b0b886 82
paulcox 2:bbc155b0b886 83 // insert end
paulcox 2:bbc155b0b886 84 newText += highlightEndTag;
paulcox 2:bbc155b0b886 85 return newText;
paulcox 2:bbc155b0b886 86
paulcox 2:bbc155b0b886 87 }
paulcox 2:bbc155b0b886 88
paulcox 2:bbc155b0b886 89 // check to see if the sequence at position 'i' in taglessString is actually in
paulcox 2:bbc155b0b886 90 // the middle of an escape sequence. We assume escape sequences follow the pattern
paulcox 2:bbc155b0b886 91 // &<sequenceText>;. We check for &nbsp;, &lt;, &gt; and &amp;
paulcox 2:bbc155b0b886 92 function isInEscapedSequence(i, taglessString, searchTerm)
paulcox 2:bbc155b0b886 93 {
paulcox 2:bbc155b0b886 94 var escapeSeq = /&nbsp;|&lt;|&gt;|&amp;/gi;
paulcox 2:bbc155b0b886 95 var maxEscapeSeqLength = 6;
paulcox 2:bbc155b0b886 96 var startPos = 0;
paulcox 2:bbc155b0b886 97 var endPos = 0;
paulcox 2:bbc155b0b886 98
paulcox 2:bbc155b0b886 99 // exit if the search term has an escape sequence inside it
paulcox 2:bbc155b0b886 100 if (escapeSeq.test(searchTerm)) {
paulcox 2:bbc155b0b886 101 return false;
paulcox 2:bbc155b0b886 102 }
paulcox 2:bbc155b0b886 103
paulcox 2:bbc155b0b886 104 // reset the escape sequence
paulcox 2:bbc155b0b886 105 escapeSeq = /&nbsp;|&lt;|&gt;|&amp;/gi;
paulcox 2:bbc155b0b886 106
paulcox 2:bbc155b0b886 107 // go back in the string until we find an ampersand or we hit maxEscapeSeqLength characters
paulcox 2:bbc155b0b886 108 tempI = i;
paulcox 2:bbc155b0b886 109 var bFound = false;
paulcox 2:bbc155b0b886 110 while (tempI >= 0 && tempI > (i-maxEscapeSeqLength)) {
paulcox 2:bbc155b0b886 111 if (taglessString.charAt(tempI) == "&") {
paulcox 2:bbc155b0b886 112 startPos = tempI;
paulcox 2:bbc155b0b886 113 bFound = true;
paulcox 2:bbc155b0b886 114 break;
paulcox 2:bbc155b0b886 115 }
paulcox 2:bbc155b0b886 116 tempI = tempI-1;
paulcox 2:bbc155b0b886 117
paulcox 2:bbc155b0b886 118 // if we hit a ';' in any position other than the first while searching
paulcox 2:bbc155b0b886 119 // for an ampersand, then we cannot be inside an escape sequence
paulcox 2:bbc155b0b886 120 if (tempI >= 0 && taglessString.charAt(tempI) == ";") {
paulcox 2:bbc155b0b886 121 return false;
paulcox 2:bbc155b0b886 122 }
paulcox 2:bbc155b0b886 123 }
paulcox 2:bbc155b0b886 124 if (!bFound) {
paulcox 2:bbc155b0b886 125 return false;
paulcox 2:bbc155b0b886 126 }
paulcox 2:bbc155b0b886 127 // reset the escape sequence
paulcox 2:bbc155b0b886 128 escapeSeq = /&nbsp;|&lt;|&gt;|&amp;/gi;
paulcox 2:bbc155b0b886 129
paulcox 2:bbc155b0b886 130 var subString = taglessString.substring(startPos, startPos + maxEscapeSeqLength);
paulcox 2:bbc155b0b886 131 return escapeSeq.test(subString);
paulcox 2:bbc155b0b886 132 }
paulcox 2:bbc155b0b886 133
paulcox 2:bbc155b0b886 134 // Adds highlighting to bodyText around searchTerm. Case sensitivity is optional.
paulcox 2:bbc155b0b886 135 // hitCount is used to a) count the number of search matches and b) Generate unique
paulcox 2:bbc155b0b886 136 // name strings for each highlighting SPAN element.
paulcox 2:bbc155b0b886 137 function addHighlight(bodyText, searchTerm, caseSensitive, hitCount)
paulcox 2:bbc155b0b886 138 {
paulcox 2:bbc155b0b886 139 var highlightStartTag = "";
paulcox 2:bbc155b0b886 140 var highlightEndTag = "</span>";
paulcox 2:bbc155b0b886 141
paulcox 2:bbc155b0b886 142 var newText = "";
paulcox 2:bbc155b0b886 143 var i = 0;
paulcox 2:bbc155b0b886 144 var previ = 0;
paulcox 2:bbc155b0b886 145 var bodyTextUC = bodyText.toUpperCase();
paulcox 2:bbc155b0b886 146
paulcox 2:bbc155b0b886 147 if (caseSensitive) {
paulcox 2:bbc155b0b886 148 var taglessString = getTagStrippedStringAndMap(bodyText);
paulcox 2:bbc155b0b886 149 } else {
paulcox 2:bbc155b0b886 150 var taglessString = getTagStrippedStringAndMap(bodyTextUC);
paulcox 2:bbc155b0b886 151 }
paulcox 2:bbc155b0b886 152
paulcox 2:bbc155b0b886 153 // escape the search term in case the user input '<' or '>' etc
paulcox 2:bbc155b0b886 154 searchTerm = escapeSpecialChars(searchTerm);
paulcox 2:bbc155b0b886 155
paulcox 2:bbc155b0b886 156 if (!caseSensitive) {
paulcox 2:bbc155b0b886 157 var searchTermUC = searchTerm.toUpperCase();
paulcox 2:bbc155b0b886 158 }
paulcox 2:bbc155b0b886 159
paulcox 2:bbc155b0b886 160 // search for subsequent matches
paulcox 2:bbc155b0b886 161 while (true) {
paulcox 2:bbc155b0b886 162 if (caseSensitive) {
paulcox 2:bbc155b0b886 163 i = taglessString.indexOf(searchTerm, i);
paulcox 2:bbc155b0b886 164 } else {
paulcox 2:bbc155b0b886 165 i = taglessString.indexOf(searchTermUC, i);
paulcox 2:bbc155b0b886 166 }
paulcox 2:bbc155b0b886 167 if (i < 0) break;
paulcox 2:bbc155b0b886 168
paulcox 2:bbc155b0b886 169 // we have a match!
paulcox 2:bbc155b0b886 170
paulcox 2:bbc155b0b886 171 // make sure that the match is not inside an escaped sequence of text
paulcox 2:bbc155b0b886 172 // such as &nbsp;
paulcox 2:bbc155b0b886 173 if (isInEscapedSequence(i, taglessString, searchTerm)) {
paulcox 2:bbc155b0b886 174 i=i+1;
paulcox 2:bbc155b0b886 175 continue;
paulcox 2:bbc155b0b886 176 }
paulcox 2:bbc155b0b886 177
paulcox 2:bbc155b0b886 178 // insert highlight tags that cross tag boundaries
paulcox 2:bbc155b0b886 179 highlightStartTag = createHighlightSpanStart(hitCount);
paulcox 2:bbc155b0b886 180 hitCount = hitCount+1;
paulcox 2:bbc155b0b886 181 newText += insertHighlighting(bodyText, previ, i, searchTerm.length, highlightStartTag, highlightEndTag);
paulcox 2:bbc155b0b886 182 previ = str2pos[i+searchTerm.length-1]+1;
paulcox 2:bbc155b0b886 183
paulcox 2:bbc155b0b886 184 i = i + searchTerm.length;
paulcox 2:bbc155b0b886 185 }
paulcox 2:bbc155b0b886 186
paulcox 2:bbc155b0b886 187 newText += bodyText.slice(previ, bodyText.length);
paulcox 2:bbc155b0b886 188 return [newText, hitCount];
paulcox 2:bbc155b0b886 189 }
paulcox 2:bbc155b0b886 190
paulcox 2:bbc155b0b886 191 function removeHighlight(bodyText)
paulcox 2:bbc155b0b886 192 {
paulcox 2:bbc155b0b886 193 // We use regular expressions here rather than a straight text search because
paulcox 2:bbc155b0b886 194 // some browsers actually insert double quotes and capitalize. Also, each highlight
paulcox 2:bbc155b0b886 195 // name is uniquely numbered in order of discovery
paulcox 2:bbc155b0b886 196 var highlightStartTag = /<span class=[\"]*highlighted(Current)*[\"]* name=[\"]*highlight[0-9]*[\"]*>/i;
paulcox 2:bbc155b0b886 197 var highlightEndTag = /<\/span>/i;
paulcox 2:bbc155b0b886 198
paulcox 2:bbc155b0b886 199 var newText = "";
paulcox 2:bbc155b0b886 200
paulcox 2:bbc155b0b886 201 var startPatternFirstIndex = -1;
paulcox 2:bbc155b0b886 202 var startPatternLastIndex = -1;
paulcox 2:bbc155b0b886 203
paulcox 2:bbc155b0b886 204 var endPatternFirstIndex = -1;
paulcox 2:bbc155b0b886 205 var endPatternLastIndex = -1;
paulcox 2:bbc155b0b886 206
paulcox 2:bbc155b0b886 207 while (highlightStartTag.test(bodyText) === true) {
paulcox 2:bbc155b0b886 208 startPatternFirstIndex = bodyText.search(highlightStartTag);
paulcox 2:bbc155b0b886 209 newText += bodyText.substring(0, startPatternFirstIndex);
paulcox 2:bbc155b0b886 210 startPatternLastIndex = bodyText.indexOf('>', startPatternFirstIndex+1);
paulcox 2:bbc155b0b886 211
paulcox 2:bbc155b0b886 212 bodyText = bodyText.substr(startPatternLastIndex+1);
paulcox 2:bbc155b0b886 213 endPatternFirstIndex = bodyText.search(highlightEndTag);
paulcox 2:bbc155b0b886 214 newText += bodyText.substring(0, endPatternFirstIndex);
paulcox 2:bbc155b0b886 215 endPatternLastIndex = endPatternFirstIndex+7;
paulcox 2:bbc155b0b886 216
paulcox 2:bbc155b0b886 217 bodyText = bodyText.substr(endPatternLastIndex);
paulcox 2:bbc155b0b886 218 }
paulcox 2:bbc155b0b886 219 if (startPatternFirstIndex < 0) {
paulcox 2:bbc155b0b886 220 return bodyText;
paulcox 2:bbc155b0b886 221 } else {
paulcox 2:bbc155b0b886 222 return newText+bodyText;
paulcox 2:bbc155b0b886 223 }
paulcox 2:bbc155b0b886 224 }
paulcox 2:bbc155b0b886 225
paulcox 2:bbc155b0b886 226 function removeHighlightInAllDocs()
paulcox 2:bbc155b0b886 227 {
paulcox 2:bbc155b0b886 228 if (top) {
paulcox 2:bbc155b0b886 229 for (var i = 0; i < top.frames.length; i++) {
paulcox 2:bbc155b0b886 230 if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") {
paulcox 2:bbc155b0b886 231 var currentDoc = top.frames[i].document;
paulcox 2:bbc155b0b886 232 if (typeof currentDoc.body !== "undefined" && currentDoc.body !== null)
paulcox 2:bbc155b0b886 233 currentDoc.body.innerHTML=removeHighlight(currentDoc.body.innerHTML);
paulcox 2:bbc155b0b886 234 }
paulcox 2:bbc155b0b886 235 }
paulcox 2:bbc155b0b886 236 }
paulcox 2:bbc155b0b886 237 }
paulcox 2:bbc155b0b886 238
paulcox 2:bbc155b0b886 239 function findInDoc(searchStringFromSubmitBox, doc, caseSensitive, hitCount)
paulcox 2:bbc155b0b886 240 {
paulcox 2:bbc155b0b886 241 var searchBody = doc.body.innerHTML;
paulcox 2:bbc155b0b886 242 // if the document is empty, or the documents is invalid, return
paulcox 2:bbc155b0b886 243 if (!doc.body || typeof(searchBody) === "undefined") {
paulcox 2:bbc155b0b886 244 return [false, hitCount];
paulcox 2:bbc155b0b886 245 }
paulcox 2:bbc155b0b886 246
paulcox 2:bbc155b0b886 247 // inject highlighting code into html
paulcox 2:bbc155b0b886 248 var result = addHighlight(searchBody, searchStringFromSubmitBox, caseSensitive, hitCount);
paulcox 2:bbc155b0b886 249 doc.body.innerHTML = result[0];
paulcox 2:bbc155b0b886 250
paulcox 2:bbc155b0b886 251 return [true, result[1]];
paulcox 2:bbc155b0b886 252 }
paulcox 2:bbc155b0b886 253
paulcox 2:bbc155b0b886 254 var currentlyHighlightedHit;
paulcox 2:bbc155b0b886 255
paulcox 2:bbc155b0b886 256 function getSpansByName(name)
paulcox 2:bbc155b0b886 257 {
paulcox 2:bbc155b0b886 258 var allSpans = [];
paulcox 2:bbc155b0b886 259 for (i = 0; i < top.frames.length; i++) {
paulcox 2:bbc155b0b886 260 if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") {
paulcox 2:bbc155b0b886 261 var currentDoc = top.frames[i].document;
paulcox 2:bbc155b0b886 262 var highlightedSpans = currentDoc.getElementsByName(name);
paulcox 2:bbc155b0b886 263 if (highlightedSpans && highlightedSpans.length && highlightedSpans.length > 0) {
paulcox 2:bbc155b0b886 264 for (j = 0; j < highlightedSpans.length; j++) {
paulcox 2:bbc155b0b886 265 allSpans = allSpans.concat(highlightedSpans[j]);
paulcox 2:bbc155b0b886 266 }
paulcox 2:bbc155b0b886 267 }
paulcox 2:bbc155b0b886 268 }
paulcox 2:bbc155b0b886 269 }
paulcox 2:bbc155b0b886 270 return allSpans;
paulcox 2:bbc155b0b886 271 }
paulcox 2:bbc155b0b886 272
paulcox 2:bbc155b0b886 273 function isVisibleElement(elementID)
paulcox 2:bbc155b0b886 274 {
paulcox 2:bbc155b0b886 275 if (elementID)
paulcox 2:bbc155b0b886 276 return elementID.offsetWidth > 0 || elementID.offsetHeight > 0;
paulcox 2:bbc155b0b886 277 else
paulcox 2:bbc155b0b886 278 return false;
paulcox 2:bbc155b0b886 279 }
paulcox 2:bbc155b0b886 280
paulcox 2:bbc155b0b886 281 function areAllSpansVisible(spans)
paulcox 2:bbc155b0b886 282 {
paulcox 2:bbc155b0b886 283 isVisible = true;
paulcox 2:bbc155b0b886 284 for (i = 0; i < highlightedSpans.length; i++) {
paulcox 2:bbc155b0b886 285 isVisible = isVisible && isVisibleElement(highlightedSpans[i]);
paulcox 2:bbc155b0b886 286 }
paulcox 2:bbc155b0b886 287 return isVisible;
paulcox 2:bbc155b0b886 288 }
paulcox 2:bbc155b0b886 289
paulcox 2:bbc155b0b886 290 function getNextVisible()
paulcox 2:bbc155b0b886 291 {
paulcox 2:bbc155b0b886 292 var isVisible = false;
paulcox 2:bbc155b0b886 293 var foundVisible = false;
paulcox 2:bbc155b0b886 294 while (!isVisible) {
paulcox 2:bbc155b0b886 295 currentlyHighlightedHit = currentlyHighlightedHit + 1;
paulcox 2:bbc155b0b886 296 highlightedSpans = setCurrentSearchMatchIfVisible(currentlyHighlightedHit);
paulcox 2:bbc155b0b886 297 if (highlightedSpans && highlightedSpans.length > 0) {
paulcox 2:bbc155b0b886 298 isVisible = true;
paulcox 2:bbc155b0b886 299 } else if (currentlyHighlightedHit < totalHits) {
paulcox 2:bbc155b0b886 300 continue;
paulcox 2:bbc155b0b886 301 } else {
paulcox 2:bbc155b0b886 302 // we have reached the end
paulcox 2:bbc155b0b886 303 isVisible = false;
paulcox 2:bbc155b0b886 304 currentlyHighlightedHit = 0;
paulcox 2:bbc155b0b886 305 highlightedSpans = null;
paulcox 2:bbc155b0b886 306 break;
paulcox 2:bbc155b0b886 307 }
paulcox 2:bbc155b0b886 308 }
paulcox 2:bbc155b0b886 309
paulcox 2:bbc155b0b886 310 return highlightedSpans;
paulcox 2:bbc155b0b886 311 }
paulcox 2:bbc155b0b886 312
paulcox 2:bbc155b0b886 313 function clearCurrentSearchMatch()
paulcox 2:bbc155b0b886 314 {
paulcox 2:bbc155b0b886 315 // clear prior highlighting
paulcox 2:bbc155b0b886 316 spanName = "highlight" + currentlyHighlightedHit;
paulcox 2:bbc155b0b886 317 highlightedSpans = getSpansByName(spanName);
paulcox 2:bbc155b0b886 318 if (highlightedSpans && highlightedSpans.length) {
paulcox 2:bbc155b0b886 319 for (i = 0; i < highlightedSpans.length; i++) {
paulcox 2:bbc155b0b886 320 if (highlightedSpans[i]) {
paulcox 2:bbc155b0b886 321 highlightedSpans[i].setAttribute("class", "highlighted");
paulcox 2:bbc155b0b886 322 }
paulcox 2:bbc155b0b886 323 }
paulcox 2:bbc155b0b886 324 }
paulcox 2:bbc155b0b886 325 }
paulcox 2:bbc155b0b886 326
paulcox 2:bbc155b0b886 327 function setCurrentSearchMatchIfVisible(hitNum){
paulcox 2:bbc155b0b886 328 currentlyHighlightedHit = hitNum;
paulcox 2:bbc155b0b886 329 var spanName = "highlight" + currentlyHighlightedHit;
paulcox 2:bbc155b0b886 330 var highlightedSpans = getSpansByName(spanName);
paulcox 2:bbc155b0b886 331 if (highlightedSpans && highlightedSpans.length) {
paulcox 2:bbc155b0b886 332 for (i = 0; i < highlightedSpans.length; i++) {
paulcox 2:bbc155b0b886 333 if (!isVisibleElement(highlightedSpans[i])) {
paulcox 2:bbc155b0b886 334 highlightedSpans = null;
paulcox 2:bbc155b0b886 335 break;
paulcox 2:bbc155b0b886 336 }
paulcox 2:bbc155b0b886 337 }
paulcox 2:bbc155b0b886 338 }
paulcox 2:bbc155b0b886 339 return highlightedSpans;
paulcox 2:bbc155b0b886 340 }
paulcox 2:bbc155b0b886 341
paulcox 2:bbc155b0b886 342 // this takes in an option integer 'hitNum'. If not specified, it scrolls
paulcox 2:bbc155b0b886 343 // to the next hit
paulcox 2:bbc155b0b886 344 function scrollToNextHit(hitNum)
paulcox 2:bbc155b0b886 345 {
paulcox 2:bbc155b0b886 346 var i = 0;
paulcox 2:bbc155b0b886 347 var found = false;
paulcox 2:bbc155b0b886 348 var spanName = "";
paulcox 2:bbc155b0b886 349 var highlightedSpans;
paulcox 2:bbc155b0b886 350 var searchBox = findElement('searchTxtBox');
paulcox 2:bbc155b0b886 351
paulcox 2:bbc155b0b886 352 clearCurrentSearchMatch();
paulcox 2:bbc155b0b886 353
paulcox 2:bbc155b0b886 354 if (hitNum) {
paulcox 2:bbc155b0b886 355 // if a number is provided, use it
paulcox 2:bbc155b0b886 356 highlightedSpans = setCurrentSearchMatchIfVisible(hitNum);
paulcox 2:bbc155b0b886 357 } else {
paulcox 2:bbc155b0b886 358 // start working on next element to highlight
paulcox 2:bbc155b0b886 359 highlightedSpans = getNextVisible();
paulcox 2:bbc155b0b886 360 }
paulcox 2:bbc155b0b886 361
paulcox 2:bbc155b0b886 362 // we found the current
paulcox 2:bbc155b0b886 363 if (highlightedSpans && highlightedSpans.length > 0) {
paulcox 2:bbc155b0b886 364 highlightedSpans[0].scrollIntoView();
paulcox 2:bbc155b0b886 365 for (i = 0; i < highlightedSpans.length; i++) {
paulcox 2:bbc155b0b886 366 highlightedSpans[i].setAttribute("class", "highlightedCurrent");
paulcox 2:bbc155b0b886 367 }
paulcox 2:bbc155b0b886 368 searchBox.setAttribute("class", "search");
paulcox 2:bbc155b0b886 369
paulcox 2:bbc155b0b886 370 // if highlightedSpans is invalid, then we did not find any valid, visible subsequent matches
paulcox 2:bbc155b0b886 371 // wrap to beginning or indicate no matches
paulcox 2:bbc155b0b886 372 } else {
paulcox 2:bbc155b0b886 373 // Element not found. Scroll to first visible element
paulcox 2:bbc155b0b886 374 currentlyHighlightedHit = 0;
paulcox 2:bbc155b0b886 375 var highlightedSpans = getNextVisible(currentlyHighlightedHit);
paulcox 2:bbc155b0b886 376 if (highlightedSpans && highlightedSpans.length > 0) {
paulcox 2:bbc155b0b886 377 highlightedSpans[0].scrollIntoView();
paulcox 2:bbc155b0b886 378 for (i = 0; i < highlightedSpans.length; i++) {
paulcox 2:bbc155b0b886 379 highlightedSpans[i].setAttribute("class", "highlightedCurrent");
paulcox 2:bbc155b0b886 380 }
paulcox 2:bbc155b0b886 381 searchBox.setAttribute("class", "search");
paulcox 2:bbc155b0b886 382 } else {
paulcox 2:bbc155b0b886 383 // there aren't any matches
paulcox 2:bbc155b0b886 384 searchBox.setAttribute("class", "failedSearch");
paulcox 2:bbc155b0b886 385 }
paulcox 2:bbc155b0b886 386 }
paulcox 2:bbc155b0b886 387 }
paulcox 2:bbc155b0b886 388
paulcox 2:bbc155b0b886 389 // find search box
paulcox 2:bbc155b0b886 390 function findElement(element)
paulcox 2:bbc155b0b886 391 {
paulcox 2:bbc155b0b886 392 var i = 0;
paulcox 2:bbc155b0b886 393 for (i = 0; i < top.frames.length; i++) {
paulcox 2:bbc155b0b886 394 if (top.frames[i].name === "rtwreport_contents_frame" || top.frames[i].name === "rtwreport_document_frame") {
paulcox 2:bbc155b0b886 395 var elem = top.frames[i].document.getElementById(element);
paulcox 2:bbc155b0b886 396 if (elem) {
paulcox 2:bbc155b0b886 397 return elem;
paulcox 2:bbc155b0b886 398 }
paulcox 2:bbc155b0b886 399 }
paulcox 2:bbc155b0b886 400 }
paulcox 2:bbc155b0b886 401 }
paulcox 2:bbc155b0b886 402
paulcox 2:bbc155b0b886 403 // Restore search term once form is submitted
paulcox 2:bbc155b0b886 404 function initSearchBox(strInitValue)
paulcox 2:bbc155b0b886 405 {
paulcox 2:bbc155b0b886 406 var txtBox = findElement('searchTxtBox');
paulcox 2:bbc155b0b886 407 if (txtBox) {
paulcox 2:bbc155b0b886 408 txtBox.value = strInitValue;
paulcox 2:bbc155b0b886 409 }
paulcox 2:bbc155b0b886 410 }
paulcox 2:bbc155b0b886 411
paulcox 2:bbc155b0b886 412 // Sets focus back on to the text box
paulcox 2:bbc155b0b886 413 function setFocusOnTxtBox()
paulcox 2:bbc155b0b886 414 {
paulcox 2:bbc155b0b886 415 var txtBox = findElement('searchTxtBox');
paulcox 2:bbc155b0b886 416 if (txtBox) {
paulcox 2:bbc155b0b886 417 txtBox.focus();
paulcox 2:bbc155b0b886 418 txtBox.select();
paulcox 2:bbc155b0b886 419 }
paulcox 2:bbc155b0b886 420 return txtBox;
paulcox 2:bbc155b0b886 421 }
paulcox 2:bbc155b0b886 422
paulcox 2:bbc155b0b886 423 var previousSearchString;
paulcox 2:bbc155b0b886 424 var totalHits;
paulcox 2:bbc155b0b886 425 function findInAllDocs(searchStringFromSubmitBox, caseSensitive)
paulcox 2:bbc155b0b886 426 {
paulcox 2:bbc155b0b886 427 if (previousSearchString != searchStringFromSubmitBox) {
paulcox 2:bbc155b0b886 428 // If the search string has changed or a new page has been loaded, do a new search
paulcox 2:bbc155b0b886 429 var hitCount = 1;
paulcox 2:bbc155b0b886 430 var i = 0;
paulcox 2:bbc155b0b886 431 var success = false;
paulcox 2:bbc155b0b886 432 previousSearchString = searchStringFromSubmitBox;
paulcox 2:bbc155b0b886 433
paulcox 2:bbc155b0b886 434 // start by removing traceinfo highlighting
paulcox 2:bbc155b0b886 435 rtwRemoveHighlighting();
paulcox 2:bbc155b0b886 436
paulcox 2:bbc155b0b886 437 // remove all previous search highlighting
paulcox 2:bbc155b0b886 438 removeHighlightInAllDocs();
paulcox 2:bbc155b0b886 439
paulcox 2:bbc155b0b886 440 // 1. Iterate through all frames in window and search
paulcox 2:bbc155b0b886 441 for (i = 0; i < top.frames.length; i++) {
paulcox 2:bbc155b0b886 442 var currentDoc = top.frames[i].document;
paulcox 2:bbc155b0b886 443
paulcox 2:bbc155b0b886 444 // if we have no search term, restore
paulcox 2:bbc155b0b886 445 if (searchStringFromSubmitBox !== "") {
paulcox 2:bbc155b0b886 446 // search and highlight in all frames
paulcox 2:bbc155b0b886 447 var srchResult = findInDoc(searchStringFromSubmitBox, currentDoc, caseSensitive, hitCount);
paulcox 2:bbc155b0b886 448 hitCount = srchResult[1];
paulcox 2:bbc155b0b886 449 totalHits = srchResult[1];
paulcox 2:bbc155b0b886 450 }
paulcox 2:bbc155b0b886 451 }
paulcox 2:bbc155b0b886 452
paulcox 2:bbc155b0b886 453 // 2. Restore search term once form is submitted and text highlighted
paulcox 2:bbc155b0b886 454 if (searchStringFromSubmitBox != "") {
paulcox 2:bbc155b0b886 455 strInitValue = searchStringFromSubmitBox;
paulcox 2:bbc155b0b886 456 }
paulcox 2:bbc155b0b886 457 initSearchBox(strInitValue);
paulcox 2:bbc155b0b886 458
paulcox 2:bbc155b0b886 459 // 3. Scroll to the first hit encountered
paulcox 2:bbc155b0b886 460 scrollToNextHit(1);
paulcox 2:bbc155b0b886 461
paulcox 2:bbc155b0b886 462 // 4. Set focus back to text box and select text
paulcox 2:bbc155b0b886 463 var txtBox = setFocusOnTxtBox();
paulcox 2:bbc155b0b886 464 if (txtBox) {
paulcox 2:bbc155b0b886 465 txtBox.select();
paulcox 2:bbc155b0b886 466 }
paulcox 2:bbc155b0b886 467
paulcox 2:bbc155b0b886 468 } else {
paulcox 2:bbc155b0b886 469 // If the search string is the same, then scroll to the next
paulcox 2:bbc155b0b886 470 // hit if the hit is valid. Else wrap back.
paulcox 2:bbc155b0b886 471 scrollToNextHit();
paulcox 2:bbc155b0b886 472 }
paulcox 2:bbc155b0b886 473 return false;
paulcox 2:bbc155b0b886 474 }
paulcox 2:bbc155b0b886 475
paulcox 2:bbc155b0b886 476 // if the search box is empty, clear highlighting
paulcox 2:bbc155b0b886 477 function clearIfEmpty()
paulcox 2:bbc155b0b886 478 {
paulcox 2:bbc155b0b886 479 txtBox = findElement('searchTxtBox');
paulcox 2:bbc155b0b886 480 if (txtBox.value == "") {
paulcox 2:bbc155b0b886 481 txtBox.setAttribute("class", "search");
paulcox 2:bbc155b0b886 482 removeHighlightInAllDocs();
paulcox 2:bbc155b0b886 483 previousSearchString="";
paulcox 2:bbc155b0b886 484 setFocusOnTxtBox();
paulcox 2:bbc155b0b886 485 }
paulcox 2:bbc155b0b886 486 }
paulcox 2:bbc155b0b886 487
paulcox 2:bbc155b0b886 488 function keyPressSwitchyard(keyPressEvent)
paulcox 2:bbc155b0b886 489 {
paulcox 2:bbc155b0b886 490 var kc;
paulcox 2:bbc155b0b886 491 keyPressEvent = (keyPressEvent == null ? window.keyPressEvent : keyPressEvent);
paulcox 2:bbc155b0b886 492
paulcox 2:bbc155b0b886 493 // typically IE does not support this
paulcox 2:bbc155b0b886 494 if (!keyPressEvent || (typeof keyPressEvent == "undefined")) {
paulcox 2:bbc155b0b886 495 return;
paulcox 2:bbc155b0b886 496 }
paulcox 2:bbc155b0b886 497
paulcox 2:bbc155b0b886 498 if (keyPressEvent.keyCode) {
paulcox 2:bbc155b0b886 499 kc=keyPressEvent.keyCode;
paulcox 2:bbc155b0b886 500 } else if (keyPressEvent.which) {
paulcox 2:bbc155b0b886 501 kc=keyPressEvent.which;
paulcox 2:bbc155b0b886 502 } else {
paulcox 2:bbc155b0b886 503 return;
paulcox 2:bbc155b0b886 504 }
paulcox 2:bbc155b0b886 505
paulcox 2:bbc155b0b886 506 // we do not care about the browser find appearing. If it does appear, then
paulcox 2:bbc155b0b886 507 // we are running an external browser and that is okay.
paulcox 2:bbc155b0b886 508
paulcox 2:bbc155b0b886 509 // handle Ctrl-Key combinations
paulcox 2:bbc155b0b886 510 if (keyPressEvent.ctrlKey) {
paulcox 2:bbc155b0b886 511 switch (kc) {
paulcox 2:bbc155b0b886 512 case 70: // Ctrl-F
paulcox 2:bbc155b0b886 513 {
paulcox 2:bbc155b0b886 514 setFocusOnTxtBox();
paulcox 2:bbc155b0b886 515 break;
paulcox 2:bbc155b0b886 516 }
paulcox 2:bbc155b0b886 517
paulcox 2:bbc155b0b886 518 default: break;
paulcox 2:bbc155b0b886 519 }
paulcox 2:bbc155b0b886 520 }
paulcox 2:bbc155b0b886 521 }
paulcox 2:bbc155b0b886 522
paulcox 2:bbc155b0b886 523 function installDocumentKeyPressHandler()
paulcox 2:bbc155b0b886 524 {
paulcox 2:bbc155b0b886 525 var i = 0;
paulcox 2:bbc155b0b886 526 for (i = 0; i < top.frames.length; i++) {
paulcox 2:bbc155b0b886 527 var currentDoc = top.frames[i].document;
paulcox 2:bbc155b0b886 528 currentDoc.onkeydown = keyPressSwitchyard;
paulcox 2:bbc155b0b886 529 }
paulcox 2:bbc155b0b886 530 top.document.onkeydown = keyPressSwitchyard;
paulcox 2:bbc155b0b886 531
paulcox 2:bbc155b0b886 532 // This also clears search related highlighting
paulcox 2:bbc155b0b886 533 removeHighlightInAllDocs();
paulcox 2:bbc155b0b886 534 currentlyHighlightedHit = 0;
paulcox 2:bbc155b0b886 535 if (previousSearchString) initSearchBox(previousSearchString);
paulcox 2:bbc155b0b886 536 previousSearchString = "";
paulcox 2:bbc155b0b886 537 }
paulcox 2:bbc155b0b886 538
paulcox 2:bbc155b0b886 539 // This function is a onresize callback for the rtwreport_contents_frame
paulcox 2:bbc155b0b886 540 // It is used to dynamically resize the searchbox based on the size of the frame.
paulcox 2:bbc155b0b886 541 function setWidthDynamic(frameID, elementID, extraSpace, minSize)
paulcox 2:bbc155b0b886 542 {
paulcox 2:bbc155b0b886 543 var frame = document.getElementById(frameID);
paulcox 2:bbc155b0b886 544
paulcox 2:bbc155b0b886 545 // sanity check input args
paulcox 2:bbc155b0b886 546 if (frame && extraSpace > 0 && minSize > 0) {
paulcox 2:bbc155b0b886 547 var frameWidth = frame.scrollWidth;
paulcox 2:bbc155b0b886 548 var newSize = extraSpace + minSize + 40; // 40 is the extra whitespace
paulcox 2:bbc155b0b886 549 var element = findElement(elementID);
paulcox 2:bbc155b0b886 550 if (element)
paulcox 2:bbc155b0b886 551 {
paulcox 2:bbc155b0b886 552 if (frameWidth < newSize) {
paulcox 2:bbc155b0b886 553 element.style.width = minSize;
paulcox 2:bbc155b0b886 554 } else {
paulcox 2:bbc155b0b886 555 element.style.width = frameWidth - extraSpace - 40;
paulcox 2:bbc155b0b886 556 }
paulcox 2:bbc155b0b886 557 }
paulcox 2:bbc155b0b886 558 }
paulcox 2:bbc155b0b886 559 }