1function highlightClassicSubNavActiveLinks(subNavId) { 2 var subNavBarElm = document.getElementById(subNavId); 3 4 if (subNavBarElm) { 5 var currentUrlPathSlashesCount = window.location.pathname.split('/').length - 1; 6 7 // we expect at least one parent directory for each topic 8 if (currentUrlPathSlashesCount < 2) { 9 return; 10 } 11 12 var currentUrl = 'https://' + window.location.hostname + window.location.pathname; 13 var currentBaseUrlDirPath = 'https://' + window.location.hostname + '/'; 14 15 var subNavLinks = subNavBarElm.getElementsByTagName("A"); 16 17 var getDirPath = function (path) { 18 var pathChunks = path.split('/'); 19 pathChunks.pop(); 20 return pathChunks.join('/'); 21 } 22 23 for (var i = 0; i < subNavLinks.length; i++) { 24 var subNavLinkUrl = subNavLinks[i].href; 25 26 if (currentUrl === subNavLinkUrl) { 27 subNavLinks[i].classList.add('active'); 28 // break; 29 } else { 30 var subNavLinkDirPath = getDirPath(subNavLinkUrl) + '/'; 31 32 if (currentBaseUrlDirPath === subNavLinkDirPath) { 33 continue; 34 } 35 36 if (currentUrl.indexOf(subNavLinkDirPath) === 0) { 37 subNavLinks[i].classList.add('active'); 38 // break; 39 } 40 } 41 } 42 } 43} 44highlightClassicSubNavActiveLinks('topnav'); 45 46function w3sFindInnerElements(parentElement, queryStr, callback) { 47 var output = []; 48 49 var hasCallback = typeof callback !== 'undefined'; 50 51 var elements = parentElement.querySelectorAll(queryStr); 52 53 for (var index = 0; index < elements.length; index++) { 54 output.push(elements[index]); 55 56 if (hasCallback) { 57 callback(elements[index], index); 58 } 59 } 60 61 return output; 62}; 63 64function w3sElementAddClass(elm, className, context) { 65 // console.log("w3sElementAddClass: ", { 66 // elm, 67 // className, 68 // context, 69 // }); 70 71 if (!elm) { 72 return; 73 } 74 75 if (typeof elm.classList !== "undefined") { 76 elm.classList.add(className); 77 } else { 78 elm.className += " " + className; 79 } 80}; 81 82function w3sElementRemoveClass(elm, className) { 83 if (!elm) { 84 return; 85 } 86 87 if (typeof elm.classList !== "undefined") { 88 elm.classList.remove(className); 89 } else { 90 elm.className = elm.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); 91 } 92}; 93 94function w3sElementContainsClass(elm, className) { 95 if (!elm) { 96 return false; 97 } 98 99 if (typeof elm.classList !== "undefined") { 100 return elm.classList.contains(className); 101 } else { 102 var classes = elm.className.split(/\s+/); 103 return classes.indexOf(className) !== -1; 104 } 105}; 106 107function w3sElementTriggerCustomEvent(element, eventName, eventData) { 108 try { 109 // Check if the browser supports the CustomEvent constructor 110 if (typeof CustomEvent === "function") { 111 // Modern browsers 112 var event = new CustomEvent(eventName, { detail: eventData }); 113 element.dispatchEvent(event); 114 } else if (document.createEvent) { 115 // For IE9+ 116 var event = document.createEvent('CustomEvent'); 117 event.initCustomEvent(eventName, true, true, eventData); 118 element.dispatchEvent(event); 119 } else { 120 // IE8 and below 121 var event = document.createEventObject(); 122 event.detail = eventData; 123 element.fireEvent("on" + eventName, event); 124 } 125 } catch (exc) { 126 console.error("w3sElementTriggerCustomEvent: ", exc); 127 } 128}; 129 130function w3sScrollToMiddle(targetElm, scrollElm) { 131 if ( 132 !targetElm 133 || !scrollElm 134 ) { 135 return false; 136 } 137 138 // Target element's top position relative to its parent (scrollElm) 139 var teTop = targetElm.offsetTop; 140 var teHeight = targetElm.offsetHeight; 141 142 // Height of the scrollable element 143 var seHeight = scrollElm.clientHeight; 144 145 // Calculate the middle position of the target element 146 var teMiddle = teTop + (teHeight / 2); 147 148 // Calculate the new scroll position to bring the target element to the middle of the scrollable element 149 var newScrollTop = teMiddle - (seHeight / 2); 150 151 // Apply the new scroll position to the scrollable element 152 scrollElm.scrollTop = newScrollTop; 153 154 return true; 155}; 156 157function open_menu() { 158 var x, m; 159 m = (document.getElementById("leftmenu") || document.getElementById("sidenav")); 160 if (m && m.style.display == "block") { 161 close_menu(); 162 w3sElementTriggerCustomEvent(m, 'w3sSideNavClose', null); 163 } else { 164 w3_close_all_nav(); 165 if (m) { 166 m.style.display = "block"; 167 168 if (m.getAttribute("data-scrolled") !== "true") {
169 sidemenuitemintoview(); 170 } 171 } 172 173 if (document.getElementsByClassName) { 174 x = document.getElementsByClassName("chapter") 175 for (i = 0; i < x.length; i++) { 176 x[i].style.visibility = "hidden"; 177 } 178 x = document.getElementsByClassName("nav") 179 for (i = 0; i < x.length; i++) { 180 x[i].style.visibility = "hidden"; 181 } 182 x = document.getElementsByClassName("sharethis") 183 for (i = 0; i < x.length; i++) { 184 x[i].style.visibility = "hidden"; 185 } 186 } 187 fix_sidemenu(); 188 w3sElementTriggerCustomEvent(m, 'w3sSideNavOpen', null); 189 } 190} 191function close_menu() { 192 var m; 193 m = (document.getElementById("leftmenu") || document.getElementById("sidenav")); 194 if (m) m.style.display = "none"; 195 if (document.getElementsByClassName) { 196 x = document.getElementsByClassName("chapter") 197 for (i = 0; i < x.length; i++) { 198 x[i].style.visibility = "visible"; 199 } 200 x = document.getElementsByClassName("nav") 201 for (i = 0; i < x.length; i++) { 202 x[i].style.visibility = "visible"; 203 } 204 x = document.getElementsByClassName("sharethis") 205 for (i = 0; i < x.length; i++) { 206 x[i].style.visibility = "visible"; 207 } 208 } 209} 210if (window.addEventListener) { 211 window.addEventListener("scroll", function () {fix_sidemenu(); }); 212 window.addEventListener("resize", function () {fix_sidemenu(); }); 213 window.addEventListener("touchmove", function () {fix_sidemenu(); }); 214 window.addEventListener("load", function () {fix_sidemenu(); }); 215} else if (window.attachEvent) { 216 window.attachEvent("onscroll", function () {fix_sidemenu(); }); 217 window.attachEvent("onresize", function () {fix_sidemenu(); }); 218 window.attachEvent("ontouchmove", function () {fix_sidemenu(); }); 219 window.attachEvent("onload", function () {fix_sidemenu(); }); 220} 221function fix_sidemenu() { 222 const fw = document.getElementById("footerwrapper"); 223 if (fw) { 224 const iw = window.innerWidth; 225 if (iw < 992) { 226 const lmi = document.getElementById("leftmenuinner"); 227 if (lmi) {lmi.style.height = '';} 228 } else { 229 const ch = fw.getBoundingClientRect().top; 230 if (ch) { 231 let h = Math.min(window.innerHeight, ch); 232 h = Math.max(h, 0); 233 const lmi = document.getElementById("leftmenuinner"); 234 if (lmi) {lmi.style.height = h + "px";} 235 } 236 } 237 } 238 const srb = document.getElementById("scroll_right_btn"); 239 if (srb) { 240 let winwidth = document.documentElement.clientWidth; 241 let a = winwidth - 1750; 242 let b; 243 if (a <= 0) { 244 b = 0; 245 } else { 246 b = a / 2; 247 } 248 srb.style.right = b + "px"; 249 } 250 251return false; 252 var w, top; 253 w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 254 top = scrolltop() 255/* if (w < 993 && w > 600) { 256 if (top == 0) { 257 document.getElementById("sidenav").style.top = "144px"; 258 } 259 if (top > 0 && top < 100) { 260 document.getElementById("sidenav").style.top = (144 - top) + "px"; 261 } 262 if (top > 100) { 263 document.getElementById("sidenav").style.top = document.getElementById("topnav").offsetHeight + "px"; 264 document.getElementById("belowtopnav").style.paddingTop = "44px"; 265 document.getElementById("topnav").style.position = "fixed"; 266 document.getElementById("topnav").style.top = "0"; 267 } else { 268 document.getElementById("belowtopnav").style.paddingTop = "0"; 269 document.getElementById("topnav").style.position = "relative"; 270 } 271 document.getElementById("leftmenuinner").style.paddingTop = "0"; 272 } else {*/ 273 274 275 if (top == 0) { 276 document.getElementById("sidenav").style.top = "118px"; 277 } 278 if (top > 0 && top < 73) { 279 document.getElementById("sidenav").style.top = (118 - top) + "px"; 280 } 281 if (top > 73) { 282 document.getElementById("sidenav").style.top = "44px"; 283 if (w > 992) {document.getElementById("leftmenuinner").style.paddingTop = "44px";} 284 document.getElementById("belowtopnav").style.paddingTop = "44px"; 285 document.getElementById("topnav").style.position = "fixed"; 286 document.getElementById("topnav").style.top = "0"; 287 document.getElementById("myAccordion").style.paddingTop = "44px"; 288 } else { 289 if (w > 992) { 290 document.getElementById("leftmenuinner").style.paddingTop = (118 - top) + "px"; 291 } else { //ELSEN ER NY 292 document.getElementById("leftmenuinner").style.paddingTop = 0; 293 } 294 document.getElementById("belowtopnav").style.paddingTop = "0"; 295 document.getElementById("myAccordion").style.paddingTop = "0"; 296 document.getElementById("topnav").style.position = "relative"; 297 } 298/* }*/ 299} 300
301function sidemenuitemintoview() { 302 var a, b; 303 a = document.getElementById("leftmenuinnerinner"); 304 if (!a || !a.getElementsByClassName) {return false;} 305 b = a.getElementsByClassName("active"); 306 if (b.length < 1) {return false;} 307 308 var o = 0; // active element max offset top 309 var e = null; // active element ref with max offset top 310 311 for (var li = 0; li < b.length; li++) { 312 var le = b[li]; 313 314 if (le.offsetTop > o) { 315 o = le.offsetTop; 316 317 e = le; 318 } 319 } 320 321 var s = w3sScrollToMiddle(e, a); 322 323 var m = (document.getElementById("leftmenu") || document.getElementById("sidenav")); 324 325 if (m) { 326 m.setAttribute("data-scrolled", s ? "true" : "false"); 327 } 328}; 329 330function scrolltop() { 331 var top = 0; 332 if (typeof(window.pageYOffset) == "number") { 333 top = window.pageYOffset; 334 } else if (document.body && document.body.scrollTop) { 335 top = document.body.scrollTop; 336 } else if (document.documentElement && document.documentElement.scrollTop) { 337 top = document.documentElement.scrollTop; 338 } 339 return top; 340} 341 342function xxxchangecodetheme() { 343 var cc = document.body.className; 344 if (cc.indexOf("darktheme") > -1) { 345 document.body.className = cc.replace("darktheme", ""); 346 localStorage.setItem("preferredmode", "light"); 347 } else { 348 document.body.className += " darktheme"; 349 localStorage.setItem("preferredmode", "dark"); 350 } 351} 352function changecodetheme(n) { 353 var cc = document.body.className; 354 if (cc.indexOf("darktheme") > -1) { 355 document.body.className = cc.replace("darktheme", ""); 356 document.body.className = document.body.className.replace(" ", " "); 357 localStorage.setItem("preferredmode", "light"); 358 } else { 359 document.body.className += " darktheme"; 360 document.body.className = document.body.className.replace(" ", " "); 361 localStorage.setItem("preferredmode", "dark"); 362 } 363 if (n == 2) { 364 cc = document.body.className; 365 if (cc.indexOf("darkpagetheme") > -1) { 366 document.body.className = cc.replace("darkpagetheme", ""); 367 document.body.className = document.body.className.replace(" ", " "); 368 localStorage.setItem("preferredpagemode", "light"); 369 } else { 370 document.body.className += " darkpagetheme"; 371 document.body.className = document.body.className.replace(" ", " "); 372 localStorage.setItem("preferredpagemode", "dark"); 373 } 374 } 375} 376 377function click_login_btn() { 378 w3_open_nav("login"); 379} 380 381function w3_close_all_nav() { 382 w3_close_all_topnav(); 383 close_menu(); 384} 385 386(function () { 387 var x, y, i, a, aa, b, bb, c, cc, d, dd, m, tn, oa, ohe, obe; 388 m = (document.getElementById("leftmenu") || document.getElementById("sidenav")); 389 if (m) { 390 x = m.getElementsByTagName("A"); 391 dd = document.location.href; 392 if (dd.indexOf("quiztest") > -1) { 393 d = dd; 394 } else { 395 d = dd.split('?')[0]; // added split to show active regardless of parameters 396 } 397 for (i = 0; i < x.length; i++) { 398 if (dd.indexOf("quiztest") > -1) { 399 aa = x[i].href; 400 //console.log("Haystack: " + d); 401 //console.log("Needle: " + aa); 402 } else { 403 aa = x[i].href.split('?')[0]; // added split to show active regardless of parameters 404 } 405 bb = false; 406 if (d.substr(-1, 1) == "/" && (aa.indexOf("default.asp") > -1 || aa.indexOf("index.php") > -1)) bb = true; 407 if (d.indexOf(aa) >= 0 || bb) { 408 w3sElementAddClass(x[i], "active"); 409 y = x[i].nextElementSibling; 410 if (y && (y.className.indexOf("ref_overview") > -1 || y.className.indexOf("tut_overview") > -1)) { 411 ohe = x[i]; // overview header element 412 obe = y; // overview body element 413 y.style.display = "block"; 414 w3sElementAddClass(x[i], "active_overview"); 415 416 oa = y.getElementsByTagName("a")[0]; 417 418 if (oa && oa.href.split('?')[0].indexOf(aa) >= 0) { 419 w3sElementAddClass(oa, "active"); 420 } 421 422 if (x[i].addEventListener) { 423 cc = true; 424 var lessonGroupToggleElm = x[i]; 425 426 lessonGroupToggleElm.addEventListener("click", function () { 427 if (cc == true) { 428 w3sElementRemoveClass(lessonGroupToggleElm, "open"); 429 w3sElementAddClass(lessonGroupToggleElm, "closed"); 430 y.style.display = "none"; 431 event.preventDefault(); 432 cc = false;
433 } else { 434 w3sElementRemoveClass(lessonGroupToggleElm, "closed"); 435 w3sElementAddClass(lessonGroupToggleElm, "open"); 436 y.style.display = "block"; 437 cc = true; 438 event.preventDefault(); 439 } 440 }); 441 } 442 } else if (x[i].parentElement.className.indexOf("ref_overview") > -1) { 443 x[i].parentElement.style.display = "block"; 444 w3sElementAddClass(x[i].parentElement.previousElementSibling, "active"); 445 w3sElementAddClass(x[i].parentElement.previousElementSibling, "activesub"); 446 } else if (x[i].parentElement.className.indexOf("tut_overview") > -1) { 447 x[i].parentElement.style.display = "block"; 448 w3sElementAddClass(x[i].parentElement.previousElementSibling, "active"); 449 w3sElementAddClass(x[i].parentElement.previousElementSibling, "active_overview"); 450 } else if (x[i].parentElement.className.indexOf("step_bar") > -1 && x[i].parentElement.parentElement.className.indexOf("tut_overview") > -1) { 451 x[i].parentElement.parentElement.style.display = "block"; 452 w3sElementAddClass(x[i].parentElement.parentElement.previousElementSibling, "active"); 453 w3sElementAddClass(x[i].parentElement.parentElement.previousElementSibling, "active_overview"); 454 } 455 break; 456 } else if (d.indexOf("/tags/att_") > -1) { 457 c = d.substring(d.indexOf("/tags/att_") + 10, d.lastIndexOf("_")); 458 if (x[i].href == d.substr(0, d.indexOf("/tags/")) + "/tags/tag_" + c + ".asp") { 459 w3sElementAddClass(x[i], "active"); 460 } 461 } else if (d.indexOf("/howto/default_page") > -1) { 462 if (x[i].href.indexOf("default.asp") > -1) { 463 w3sElementAddClass(x[i], "active"); 464 } 465 } 466 } 467 468 if (ohe && obe) { 469 var activeOverviewElementLinks = w3sFindInnerElements(obe, "a.active"); 470 471 if (activeOverviewElementLinks.length > 0) { 472 w3sElementAddClass(ohe, "active-links-present"); 473 w3sElementAddClass(obe, "active-links-present"); 474 } else { 475 w3sElementAddClass(ohe, "active-links-absent"); 476 w3sElementAddClass(obe, "active-links-absent"); 477 } 478 } 479 480 sidemenuitemintoview(); 481 } 482 tn = (document.getElementById("topnav") || document.getElementById("subtopnav")); 483 x = tn.getElementsByTagName("A"); 484 for (i = 0; i < x.length; i++) { 485 a = document.location.pathname; 486 b = x[i].pathname; 487 if ((x[i].parentNode.tagName == "LI" || (a != "/" && x[i].parentNode.className.indexOf("w3-bar") > -1) && a.substr(0, a.indexOf("/",1)) == b.substr(0, b.indexOf("/",1)))) { 488 w3sElementAddClass(x[i], "active"); 489 } 490 } 491 if (window.addEventListener) { 492 document.getElementById("main").addEventListener("click", w3_close_all_nav, true); 493 if (m) m.addEventListener("click", w3_close_all_topnav, true); 494 document.getElementById("right").addEventListener("click", w3_close_all_nav, true); 495 document.getElementById("main").addEventListener("wheel", w3_close_all_nav, true); 496 document.getElementById("main").addEventListener("touchstart", w3_close_all_nav, true); 497 } else if (window.attachEvent) { 498 document.getElementById("main").attachEvent("onclick", w3_close_all_nav); 499 if (m) m.attachEvent("onclick", w3_close_all_topnav); 500 document.getElementById("right").attachEvent("onclick", w3_close_all_nav); 501 } 502 if ('ontouchstart' in window || 'onmsgesturechange' in window) { 503 if (document.getElementById("leftmenuinnerinner")) document.getElementById("leftmenuinnerinner").style.overflowY = "scroll"; 504 } 505 506 MyLearning.uiSidenavPatch(); 507})(); 508(function () { 509 var a, b, c, cc, d, e, l, ll, i, j, r, n; 510 a = document.getElementsByClassName("w3-example"); 511 l = a.length; 512 for (i = 0; i < l; i++) { 513 r = []; 514 b = a[i].querySelectorAll("[data-tab-header]"); 515 ll = b.length; 516 n = 0; 517 for (j = 0; j < ll; j++) { 518 if (b[j].getAttribute("data-active-tab") == "true") n = j; 519 r.push(b[j]); 520 } 521 ll = r.length; 522 if (ll > 0) { 523 c = document.createElement("DIV"); 524 c.classList.add("w3-example-tabs") 525 d = document.createElement("DIV"); 526 d.classList.add("w3-example-tabs-header-container"); 527 for (j = 0; j < ll; j++) { 528 e = document.createElement("DIV"); 529 e.classList.add("w3-example-tab-header") 530 if (j == n) { 531 e.classList.add("active-tab"); 532 r[n].style.display = "block"; 533 } 534 e.innerHTML = b[j].getAttribute("data-tab-header"); 535 e.addEventListener("click", activate_example_tab); 536 d.appendChild(e); 537 } 538 c.appendChild(d); 539 a[i].insertBefore(c, a[i].querySelectorAll("[data-tab-header]")[0]); 540 } 541 } 542})(); 543(function () { 544 var exercise = document.getElementById("exercisecontainer") 545 if (exercise) { 546 var src = exercise.getAttribute("src"); 547 if (!src) return; 548 var extensions = (exercise.getAttribute("data-extensions") || "asp"); 549 var s = document.createElement("script"); 550 s.src = src; 551 document.getElementById("exercisecontainer").appendChild(s); 552 var filename = src.replace(".js", "1"); 553 window.addEventListener("load", load_quiz); 554 } 555 function insert_exercise() { 556 var qobj, l, i = 0, a = ""; 557 qobj = qobjects[0]; 558 if (qobj.draganddroptext) { 559 var x, l, i = 0, a = "", b, cl = 2, ddquestion = qobj.draganddropquestion, ddtext = qobj.draganddroptext, resttxt; 560 a = "<h2>Exercise<span class='questionmark w3-tooltip'><span style='display:block;text-align:left;'>?</span>"; 561 a += "<span class='w3-text' style='padding:0 20px 30px 20px'><b>What is this?</b><br>"; 562 a += "Test your skills by answering a few questions about the topics of this page</span></span></h2>"; 563 a += "<div id='qobj_question'></div>"; 564 a += "<div id='qobj_drag_and_drop'></div>"; 565 a += "<div id='qobj_code_area'></div>"; 566 document.getElementById("exercisecontainer").innerHTML = a; 567 a = ""; 568 for (i = 0; i < qobj.options.length; i++) { 569 a += "<div"; 570 a += " class='dragoptioncontainer'"; 571 a += " id='dragoptioncontainer" + i + "'"; 572 a += " ondragenter='handleDragBackEnter(this, " + i + ")'"; 573 a += " ontouchmove='handleDragBackEnter(this, " + i + ")'"; 574 a += " ondragleave='handleDragBackLeave(this)'"; 575 a += " ondrop='handleDragBackDrop(this)'"; 576 a += " ontouchleave='handleDragBackLeave(this)'"; 577 a += " ontouchend='handleDragBackDrop(this)'"; 578 a += ">"; 579 a += "<div"; 580 a += " class='dragoption'"; 581 a += " id='dragoption" + i + "'"; 582 a += " draggable='true'"; 583 a += " ondragstart='handleDragStart(this, " + i + ")'"; 584 a += " ondragend='handleDragEnd(this, " + i + ")'"; 585 a += " onclick='click_drag_option(" + i + ")'"; 586 a += " ontouchstart='handleDragStart(this, " + i + ")'"; 587 a += " ontouchmove='touch_ttt_move(event)'"; 588 a += " ontouchend='handleDragEnd(this, " + i + ")'"; 589 a += " style='touch-action: none;'>"; 590 a += qobj.options[i]; 591 a += "</div></div>"; 592 } 593 document.getElementById("qobj_code_area").innerHTML = "<div id='qobj_drag_and_drop_options'>" + a + "</div>"; 594 x = document.getElementsByClassName("dragoption"); 595 l = x.length; 596 for (i = 0; i < l; i++) { 597 if (x[i].innerText.length > cl) cl = x[i].innerText.length; 598 } 599 cl = cl + 4; 600 resttxt = ddtext; 601 i = -1; 602 while (resttxt.indexOf("___") > -1) { 603 ddanswers.push(-1); 604 i++; 605 a = "<span"; 606 a += " class='ddcontainer'"; 607 a += " id='ddcontainer" + i + "'";
608 a += " style='width:" + cl + "ch;'"; 609 a += " ondragenter='handleDragEnter(this, " + i + ")'"; 610 a += " ondragleave='handleDragLeave(this)'"; 611 a += " ondrop='handleDragDrop(this)'"; 612 a += " ontouchleave='handleDragLeave(this)'"; 613 a += " ontouchend='handleDragDrop(this)'" 614 a += ">"; 615 a += " <span"; 616 a += " class='ddanswer'"; 617 a += " id='ddanswer" + i + "'"; 618 a += " onclick='remove_drag_option(" + i + ")'"; 619 a += " draggable='true'"; 620 a += " ondragstart='handleDragBackStart(this, " + i + ")'"; 621 a += " ondragend='handleDragBackEnd(this, " + i + ")'"; 622 a += " ondtouchstart='handleDragBackStart(this, " + i + ")'"; 623 a += " ontouchmove='touch_ttt_move_back(this, event)'"; 624 a += " ontouchend='handleDragBackEnd(this, " + i + ")'"; 625 a += " style='touch-action: none;'>"; 626 a += "</span></span>"; 627 ddtext = ddtext.replace("___", a); 628 resttxt = resttxt.substr(resttxt.indexOf("___") + 3); 629 } 630 document.getElementById("qobj_drag_and_drop").innerHTML = ddtext; 631 document.getElementById("qobj_drag_and_drop").style.display = "block"; 632 document.getElementById("qobj_question").innerHTML = ddquestion; 633 a = "<form action='exercise." + extensions + "?x=" + filename + "' method='post' target='_blank' rel='opener'>"; 634 a += "<input type='hidden' id='formanswer' name='formanswer'>"; 635 a += "<br><br><button type='submit' class='ws-btn' onclick='fill_dd_formanswer()'>Submit Answer »</button></form>"; 636 document.getElementById("exercisecontainer").innerHTML += a; 637 document.getElementById("exercisecontainer").addEventListener("dragover", (event) => { 638 event.preventDefault(); 639 }); 640 } else { 641 a = "<h2>Exercise<span class='questionmark w3-tooltip'><span style='display:block;text-align:left;'>?</span><span class='w3-text' style='padding:0 20px 30px 20px'><b>What is this?</b><br>Test your skills by answering a few questions about the topics of this page</span></span></h2>"; 642 a += "<p>" + qobj.question + "</p><br>"; 643 a += "<form action='exercise." + extensions + "?x=" + filename + "' method='post' target='_blank' rel='opener'>"; 644 l = qobj.options.length; 645 for (i = 0; i < l; i++) { 646 a += "<div class='quizoption'>"; 647 a += "<input type='radio' name='quizoption' id='quizoption" + i + "' value='" + i + "'>"; 648 a += "<label for='quizoption" + i + "'>" + qobj.options[i] + "</label>"; 649 a += "</div>"; 650 } 651 a += "<br><button type='submit' class='ws-btn'>Submit Answer »</button>"; 652 document.getElementById("exercisecontainer").innerHTML = a; 653 } 654 } 655 function click_option(event) { 656 var a, x = event.srcElement; 657 if (x.tagName != "DIV") return false; 658 a = x.getElementsByTagName("INPUT")[0]; 659 a.checked = true; 660 } 661 function load_quiz() { 662 insert_exercise() 663 var x, l, i = 0; 664 x = document.getElementsByClassName("quizoption"); 665 l = x.length; 666 for (i = 0; i < l; i++) { 667 x[i].addEventListener("click", click_option); 668 } 669 } 670})(); 671( 672function () { 673 if (!document.getElementsByClassName) {return;} 674 if (document.getElementsByClassName("track-progress-btn").length > 0) { 675 var cc = true; 676 if (document.getElementsByClassName("nextprev").length == 0) { 677 cc = false; 678 } else { 679 if (document.getElementsByClassName("nextprev")[0].children.length > 2) cc = false; 680 var dd = document.getElementsByClassName("nextprev")[0].children[0].innerText; 681 if (dd.indexOf("Previous") == -1 && dd.indexOf("Home") == -1) cc = false; 682 } 683 if (!cc) { 684 document.getElementsByClassName("track-progress-btn")[0].style.display = "none"; 685 } 686 } 687 window.addEventListener("load", function () { 688 var cc = 0; 689 if (!UserSession) { 690 cc = -1; 691 } else { 692 if (UserSession.loggedIn == true) cc = 1; 693 } 694 if (cc == 1) { 695 var a, i; 696 a = document.getElementsByClassName("ws-hide-on-logged-in"); 697 for (i = 0; i < a.length; i++) { 698 a[i].style.display = "none"; 699 } 700 } 701 }); 702})(); 703function fill_dd_formanswer() { 704 document.getElementById("formanswer").value = ddanswers; 705} 706var current_mode = "question"; 707var ttt_option_bottom = "none"; 708var ttt_option_top = "none"; 709var ttt_container_bottom = "none"; 710var ttt_container_top = "none"; 711var ttt_container_from_top = "none"; 712var active_ddcontainer = 0; 713var active_dragback_option = -1; 714var ddanswers = []; 715function set_no_dd() { 716 ttt_option_bottom = "none"; 717 ttt_option_top = "none"; 718 ttt_container_bottom = "none"; 719 ttt_container_top = "none"; 720 ttt_container_from_top = "none"; 721} 722//document.body.addEventListener('touchmove', function(e){ e.preventDefault(); }); 723function touch_ttt_move(e) { 724 var x, y, z, n; 725 x = e.touches[0].pageX; 726 y = e.touches[0].pageY; 727 z = document.elementFromPoint(x, y); 728 if (z.id && z.id.indexOf("ddcontainer") > -1) { 729 n = z.id.substr(11); 730 active_ddcontainer = n; 731 ttt_container_top = n; 732 } 733} 734function touch_ttt_move_back(elmnt, e) { 735 var x, y, z, n = -1, m = -1; 736 x = e.touches[0].pageX; 737 y = e.touches[0].pageY; 738 z = document.elementFromPoint(x, y); 739 if (z.id && z.id.indexOf("dragoptioncontainer") > -1) { 740 n = z.id.substr(19); 741 ttt_container_bottom = n; 742 } else if (z.id && z.id.indexOf("ddcontainer") > -1) { 743 n = z.id.substr(11); 744 m = elmnt.id.substr(8); 745 active_ddcontainer = n; 746 ttt_container_top = m; 747 ttt_container_from_top = m; 748 ttt_option_top = ddanswers[m]; 749 } 750} 751function remove_drag_option(i) { 752 var a, x = document.getElementById("ddanswer" + i); 753 x.style.visibility = "hidden"; 754 a = document.getElementsByClassName("dragoption")[ddanswers[i]];
755 ddanswers[i] = -1; 756 a.style.visibility = "visible"; 757 set_active_ddcontainer(); 758} 759function click_drag_option(i) { 760 if (active_ddcontainer == -1) return false; 761 var a, x = document.getElementById("dragoption" + i); 762 ddanswers[active_ddcontainer] = i; 763 a = document.getElementsByClassName("ddanswer")[active_ddcontainer]; 764 a.style.visibility = "visible"; 765 a.innerHTML = x.innerHTML; 766 x.style.visibility = "hidden"; 767 set_active_ddcontainer(); 768} 769function set_active_ddcontainer() { 770 var i; 771 for (i = 0; i < ddanswers.length; i++) { 772 if (ddanswers[i] == -1) { 773 active_ddcontainer = i; 774 return false; 775 } 776 } 777 active_ddcontainer = -1; 778} 779function handleDragStart(x, i) { 780 ttt_option_bottom = i; 781 ttt_container_bottom = i; 782 x.style.opacity = '0.4'; 783 event.dataTransfer.dropEffect = "move"; 784} 785function handleDragBackStart(x, i) { 786 ttt_container_from_top = i; 787 ttt_option_top = ddanswers[i]; 788 active_dragback_option = i; 789 x.style.opacity = '0.4'; 790 event.dataTransfer.dropEffect = "move"; 791} 792function handleDragEnd(x, i) { 793 x.style.opacity = '1'; 794 if (ttt_container_top == "none") { 795 } else { 796 if (ddanswers[ttt_container_top] == -1) click_drag_option(i); 797 } 798 set_active_ddcontainer(); 799 set_no_dd(); 800} 801function handleDragBackEnd(x, i) { 802 x.style.opacity = '1'; 803 if (ttt_container_bottom == "none" && ttt_container_top == "none") { 804 } else if (ttt_container_bottom != "none") { 805 remove_drag_option(i); 806 document.getElementById("dragoption" + ttt_container_bottom).style.opacity = '1'; 807 } else if (ttt_container_top != "none") { 808 if (ddanswers[ttt_container_top] == -1) { 809 click_drag_option(ttt_option_top); 810 document.getElementById("ddanswer" + ttt_container_from_top).style.visibility = "hidden"; 811 ddanswers[ttt_container_from_top] = -1; 812 } 813 } 814 set_active_ddcontainer(); 815 set_no_dd(); 816} 817function handleDragEnter(x, i) { 818 ttt_container_top = i; 819 active_ddcontainer = i; 820 if ((ttt_container_from_top != ttt_container_top) && ddanswers[ttt_container_top] == -1) { 821 x.style.outline = '1px solid #aaaaaa'; 822 } 823} 824function handleDragBackEnter(x, i) { 825 if (ttt_option_top == "none") return false; 826 ttt_container_bottom = i; 827 var dropcontainertext = document.getElementById("dragoption" + i).innerHTML; 828 var dropoptiontext = document.getElementById("ddanswer" + active_dragback_option).innerHTML; 829 if (dropcontainertext == dropoptiontext) { 830 x.style.outline = '1px solid #aaaaaa'; 831 } 832} 833function handleDragLeave(x) { 834 ttt_container_top = "none"; 835 x.style.outline = 'none'; 836} 837function handleDragBackLeave(x) { 838 ttt_container_bottom = "none"; 839 x.style.outline = 'none'; 840} 841function handleDragDrop(x) { 842 x.style.outline = 'none'; 843} 844function handleDragBackDrop(x) { 845 x.style.outline = 'none'; 846} 847function activate_example_tab(event) { 848 var a, b, c, d = -1, l, i; 849 a = event.target; 850 b = a.parentNode.parentNode.parentNode; 851 c = b.querySelectorAll("[data-tab-header]"); 852 l = c.length; 853 for (i = 0; i < l; i++) { 854 c[i].style.display = "none"; 855 if (b.getElementsByClassName("w3-example-tab-header")[i]) b.getElementsByClassName("w3-example-tab-header")[i].classList.remove("active-tab"); 856 if (a.innerText == c[i].getAttribute("data-tab-header")) d = i; 857 } 858 c[d].style.display = "block"; 859 a.classList.add("active-tab"); 860} 861 862// function gTra(el) { 863// var gtra = document.createElement('script'); gtra.id = 'gTra'; gtra.type = 'text/javascript'; gtra.async = true; 864// gtra.src = 'https://translate.google.com/translate_a/element.js?cb=googleTranslateElementInit'; 865// var el = document.getElementById('gTra'); 866// if (el == null) { 867// var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gtra, s); 868// } 869// open_translate(el); 870// }; 871function searchfield_focus(obj) { 872 obj.style.color = ""; 873 obj.style.fontStyle = ""; 874 if (obj.value == "Search w3schools.com") {obj.value = "";} 875} 876var addr = document.location.href; 877function displayError() { 878// document.getElementById("err_url").value = addr; 879 document.getElementById("err_form").style.display = "block"; 880// document.getElementById("err_email").focus(); 881// hideSent(); 882} 883function hideError() { 884 document.getElementById("err_form").style.display = "none"; 885} 886function reportError() { 887 if (document.getElementById("err_message").style.display == "block") { 888 document.getElementById("err_message").style.display = "none"; 889 } else { 890 document.getElementById("err_message").style.display = "block"; 891 } 892} 893function hideSent() { 894 document.getElementById("err_sent").style.display = "none"; 895} 896function sendErr() { 897 var xmlhttp; 898 var err_url = document.getElementById("err_url").value; 899 var err_email = document.getElementById("err_email").value; 900 var err_desc = document.getElementById("err_desc").value; 901 if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari 902 xmlhttp = new XMLHttpRequest(); 903 } else {// code for IE6, IE5 904 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 905 } 906 xmlhttp.open("POST", "/err_sup.asp", true); 907 xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 908 xmlhttp.send("err_url=" + err_url + "&err_email=" + err_email + "&err_desc=" + escape(err_desc)); 909 document.getElementById("err_desc").value = ""; 910 hideError(); 911 document.getElementById("err_sent").style.display = "block"; 912} 913function clickFBLike() { 914 document.getElementById("fblikeframe").style.display = 'block';
915 document.getElementById("popupDIV").innerHTML = "<iframe src='/fblike.asp?r=" + Math.random() + "' frameborder='no' style='height:200px;width:250px;'></iframe><br><button onclick='hideFBLike()' class='w3-btn w3-black'>Close</button>"; 916} 917function hideFBLike() { 918 document.getElementById("fblikeframe").style.display = 'none'; 919} 920 921function googleTranslateElementInit() { 922 new google.translate.TranslateElement({ 923 pageLanguage: 'en', 924 autoDisplay: false, 925 gaTrack: true, 926 gaId: 'UA-3855518-1', 927 layout: google.translate.TranslateElement.InlineLayout.SIMPLE 928 }, 'google_translate_element'); 929} 930function printPage() { 931 var content = document.getElementById("main").innerHTML; 932 var css = "", i, j, c = document.getElementById("main").cloneNode(true); 933 for (i = 0; i < c.childNodes.length; i++) { 934 if (c.childNodes[i].nodeType == 1 && (c.childNodes[i].getAttribute("id") == "mainLeaderboard" || c.childNodes[i].getAttribute("id") == "midcontentadcontainer")) { 935 c.removeChild(c.childNodes[i]); 936 content = c.innerHTML; 937 } 938 } 939 var head = document.getElementsByTagName("head")[0].innerHTML; 940 var myWindow=window.open('','',''); 941 myWindow.document.write("<html><head>"+head+"<style>body{padding:15px;}@media print {.printbtn {display:none;}}</style></head><body><button class='printbtn' onclick='window.print()'>Print Page</button><br><br>"+content+"<p><a href='/about/about_copyright.asp'>Copyright 1999-2019</a> by Refsnes Data. All Rights Reserved.</p></body></html>"); 942} 943 944/* w3codecolor ver 1.32 by w3schools.com */ 945( 946function w3CodeColor() { 947 var x, i, j, k, l, modes = ["html", "js", "java", "css", "sql", "python"]; 948 if (!document.getElementsByClassName) {return;} 949 k = modes.length; 950 for (j = 0; j < k; j++) { 951 x = document.getElementsByClassName(modes[j] + "High"); 952 l = x.length; 953 for (i = 0; i < l; i++) { 954// if (modes[j] == "react") { 955// codemirrorize(x[i]); 956// } else { 957 x[i].innerHTML = w3CodeColorize(x[i].innerHTML + " ", modes[j]); 958// } 959 } 960} 961/* 962function codemirrorize(x) { 963 var txt = x.innerText; 964 x.innerHTML = ""; 965 var myCodeMirror = CodeMirror(x, 966 { 967 mode: "jsx", 968 value: txt, 969 readOnly: true 970 }); 971 972} 973*/ 974function w3CodeColorize(x, lang) { 975 var tagcolor = "#999"; //mediumblue 976 var tagnamecolor = "#905"; //brown 977 var attributecolor = "#005cc5"; //red 978 var attributevaluecolor = "green"; //mediumblue 979 var commentcolor = "slategray"; //green 980 var doctypecolor = "slategray"; //green 981 var cssselectorcolor = "#07a"; //brown 982 var csspropertycolor = "#d73a49"; //red 983 var csspropertyvaluecolor = "green"; //"mediumblue" 984 var cssdelimitercolor = "#999"; //black 985 var cssimportantcolor = "#d73a49"; //"#DD4A68"; //red 986 987 var tagcolor = "#999"; //mediumblue 988 var tagnamecolor = "#905"; //brown 989 var attributecolor = "green"; //"#690" //red 990 var attributevaluecolor = "#005cc5"; //mediumblue 991 var commentcolor = "slategray"; //green 992 var cssselectorcolor = "green"; //brown 993 var csspropertycolor = "#905"; //red 994 var csspropertyvaluecolor = "black"; //"mediumblue" 995 var cssdelimitercolor = "#999"; //black 996 var cssimportantcolor = "#d73a49"; //red 997 998 var cssselectorcolor = "#905"; //brown 999 var csspropertycolor = "#d73a49"; //red 1000 var csspropertyvaluecolor = "#005cc5"; //"#07a"; //"mediumblue" 1001 var cssdelimitercolor = "#999"; //black 1002 var cssimportantcolor = "#d73a49"; //red 1003 1004 var doctypecolor = "slategray"; //green 1005 1006 var jscolor = "black"; 1007 var jskeywordcolor = "#005cc5"; //"mediumblue"; 1008 var jsstringcolor = "green"; //"brown"; 1009 var jsstringtempcolor = "#f50"; //orange 1010 var jsregexpcolor = "#e90"; //"#f50"; //orange 1011 var jsnumbercolor = "#905"; //red 1012 var jspropertycolor = "black"; 1013 1014 var javacolor = "black"; 1015 var javakeywordcolor = "#005cc5"; //"mediumblue"; 1016 var javastringcolor = "green"; //"brown"; 1017 var javanumbercolor = "#905"; //"red"; 1018 var javapropertycolor = "black"; 1019 1020 var kotlincolor = "black"; 1021 var kotlinkeywordcolor = "mediumblue"; 1022 var kotlinstringcolor = "brown"; 1023 var kotlinnumbercolor = "red"; 1024 var kotlinpropertycolor = "black"; 1025 1026 var phptagcolor = "#d73a49"; //red 1027 var phpcolor = "black"; 1028 var phpkeywordcolor = "#005cc5"; //mediumblue 1029 var phpglobalcolor = "goldenrod"; 1030 var phpstringcolor = "green"; //"brown 1031 var phpnumbercolor = "#905"; //red 1032 1033 var pythoncolor = "black"; 1034 var pythonkeywordcolor = "#005cc5"; //mediumblue 1035 var pythonstringcolor = "green" //"#22863a"; //brown 1036 var pythonnumbercolor = "#905"; //red 1037 1038 var angularstatementcolor = "#d73a49"; //red 1039 1040 var sqlcolor = "black"; 1041 var sqlkeywordcolor = "#005cc5"; //mediumblue
1042 var sqlstringcolor = "green"; //brown 1043 var sqlnumbercolor = "#905"; // 1044 1045 if (!lang) {lang = "html"; } 1046 if (lang == "html") {return htmlMode(x);} 1047 if (lang == "css") {return cssMode(x);} 1048 if (lang == "js") {return jsMode(x);} 1049 if (lang == "java") {return javaMode(x);} 1050 if (lang == "kotlin") {return kotlinMode(x);} 1051 if (lang == "php") {return phpMode(x);} 1052 if (lang == "sql") {return sqlMode(x);} 1053 if (lang == "python") {return pythonMode(x);} 1054 return x; 1055 function extract(str, start, end, func, repl) { 1056 var s, e, d = "", a = []; 1057 while (str.search(start) > -1) { 1058 s = str.search(start); 1059 e = str.indexOf(end, s); 1060 if (e == -1) {e = str.length;} 1061 if (repl) { 1062 a.push(func(str.substring(s, e + (end.length)))); 1063 str = str.substring(0, s) + repl + str.substr(e + (end.length)); 1064 } else { 1065 d += str.substring(0, s); 1066 d += func(str.substring(s, e + (end.length))); 1067 str = str.substr(e + (end.length)); 1068 } 1069 } 1070 this.rest = d + str; 1071 this.arr = a; 1072 } 1073 function htmlMode(txt) { 1074 var rest = txt, done = "", php, comment, dctype, angular, startpos, endpos, note, i; 1075 php = new extract(rest, "<\\?php", "?>", phpMode, "W3PHPPOS"); 1076 rest = php.rest; 1077 comment = new extract(rest, "<!--", "-->", commentMode, "W3HTMLCOMMENTPOS"); 1078 rest = comment.rest; 1079 dctype = new extract(rest, "<!DOCTYPE", ">", doctypeMode, "W3HTMLDOCTYPEPOS"); 1080 rest = dctype.rest; 1081 while (rest.indexOf("<") > -1) { 1082 note = ""; 1083 startpos = rest.indexOf("<"); 1084 if (rest.substr(startpos, 9).toUpperCase() == "<STYLE") {note = "css";} 1085 if (rest.substr(startpos, 10).toUpperCase() == "<SCRIPT") {note = "javascript";} 1086 endpos = rest.indexOf(">", startpos); 1087 if (endpos == -1) {endpos = rest.length;} 1088 done += rest.substring(0, startpos); 1089 done += tagMode(rest.substring(startpos, endpos + 4)); 1090 rest = rest.substr(endpos + 4); 1091 if (note == "css") { 1092 endpos = rest.indexOf("</style>"); 1093 if (endpos > -1) { 1094 done += cssMode(rest.substring(0, endpos)); 1095 rest = rest.substr(endpos); 1096 } 1097 } 1098 if (note == "javascript") { 1099 endpos = rest.indexOf("</script>"); 1100 if (endpos > -1) { 1101 done += jsMode(rest.substring(0, endpos)); 1102 rest = rest.substr(endpos); 1103 } 1104 } 1105 } 1106 rest = done + rest; 1107 angular = new extract(rest, "{{", "}}", angularMode); 1108 rest = angular.rest; 1109 for (i = 0; i < dctype.arr.length; i++) { 1110 rest = rest.replace("W3HTMLDOCTYPEPOS", dctype.arr[i]); 1111 } 1112 for (i = 0; i < comment.arr.length; i++) { 1113 rest = rest.replace("W3HTMLCOMMENTPOS", comment.arr[i]); 1114 } 1115 for (i = 0; i < php.arr.length; i++) { 1116 rest = rest.replace("W3PHPPOS", php.arr[i]); 1117 } 1118 return rest; 1119 } 1120 function tagMode(txt) { 1121 var rest = txt, done = "", startpos, endpos, result; 1122 while (rest.search(/(\s|<br>)/) > -1) { 1123 startpos = rest.search(/(\s|<br>)/); 1124 endpos = rest.indexOf(">"); 1125 if (endpos == -1) {endpos = rest.length;} 1126 done += rest.substring(0, startpos); 1127 done += attributeMode(rest.substring(startpos, endpos)); 1128 rest = rest.substr(endpos); 1129 } 1130 result = done + rest; 1131 result = "<span class='tagcolor' style=color:" + tagcolor + "><</span>" + result.substring(4); 1132 if (result.substr(result.length - 4, 4) == ">") { 1133 result = result.substring(0, result.length - 4) + "<span class='tagcolor' style=color:" + tagcolor + ">></span>"; 1134 } 1135 return "<span class='tagnamecolor' style=color:" + tagnamecolor + ">" + result + "</span>"; 1136 } 1137 function attributeMode(txt) { 1138 var rest = txt, done = "", startpos, endpos, singlefnuttpos, doublefnuttpos, spacepos; 1139 while (rest.indexOf("=") > -1) { 1140 endpos = -1; 1141 startpos = rest.indexOf("="); 1142 singlefnuttpos = rest.indexOf("'", startpos); 1143 doublefnuttpos = rest.indexOf('"', startpos); 1144 spacepos = rest.indexOf(" ", startpos + 2); 1145 if (spacepos > -1 && (spacepos < singlefnuttpos || singlefnuttpos == -1) && (spacepos < doublefnuttpos || doublefnuttpos == -1)) { 1146 endpos = rest.indexOf(" ", startpos); 1147 } else if (doublefnuttpos > -1 && (doublefnuttpos < singlefnuttpos || singlefnuttpos == -1) && (doublefnuttpos < spacepos || spacepos == -1)) { 1148 endpos = rest.indexOf('"', rest.indexOf('"', startpos) + 1); 1149 } else if (singlefnuttpos > -1 && (singlefnuttpos < doublefnuttpos || doublefnuttpos == -1) && (singlefnuttpos < spacepos || spacepos == -1)) { 1150 endpos = rest.indexOf("'", rest.indexOf("'", startpos) + 1); 1151 } 1152 if (!endpos || endpos == -1 || endpos < startpos) {endpos = rest.length;} 1153 done += rest.substring(0, startpos); 1154 done += attributeValueMode(rest.substring(startpos, endpos + 1)); 1155 rest = rest.substr(endpos + 1); 1156 } 1157 return "<span class='attributecolor' style=color:" + attributecolor + ">" + done + rest + "</span>"; 1158 } 1159 function attributeValueMode(txt) { 1160 return "<span class='attributevaluecolor' style=color:" + attributevaluecolor + ">" + txt + "</span>"; 1161 } 1162 function angularMode(txt) { 1163 return "<span class='angularstatementcolor' style=color:" + angularstatementcolor + ">" + txt + "</span>"; 1164 } 1165 function commentMode(txt) { 1166 return "<span class='commentcolor' style=color:" + commentcolor + ">" + txt + "</span>"; 1167 } 1168 function doctypeMode(txt) { 1169 return "<span class='doctypecolor' style=color:" + doctypecolor + ">" + txt + "</span>"; 1170 } 1171 function cssMode(txt) { 1172 var rest = txt, done = "", s, e, comment, i, midz, c, cc; 1173 comment = new extract(rest, /\/\*/, "*/", commentMode, "W3CSSCOMMENTPOS"); 1174 rest = comment.rest; 1175 while (rest.search("{") > -1) { 1176 s = rest.search("{"); 1177 midz = rest.substr(s + 1); 1178 cc = 1; 1179 c = 0; 1180 for (i = 0; i < midz.length; i++) { 1181 if (midz.substr(i, 1) == "{") {cc++; c++} 1182 if (midz.substr(i, 1) == "}") {cc--;} 1183 if (cc == 0) {break;} 1184 } 1185 if (cc != 0) {c = 0;} 1186 e = s; 1187 for (i = 0; i <= c; i++) { 1188 e = rest.indexOf("}", e + 1); 1189 } 1190 if (e == -1) {e = rest.length;} 1191 done += rest.substring(0, s + 1); 1192 done += cssPropertyMode(rest.substring(s + 1, e)); 1193 rest = rest.substr(e); 1194 } 1195 rest = done + rest; 1196 rest = rest.replace(/{/g, "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">
1196{</span>"); 1197 rest = rest.replace(/}/g, "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">}</span>"); 1198 for (i = 0; i < comment.arr.length; i++) { 1199 rest = rest.replace("W3CSSCOMMENTPOS", comment.arr[i]); 1200 } 1201 return "<span class='cssselectorcolor' style=color:" + cssselectorcolor + ">" + rest + "</span>"; 1202 } 1203 function cssPropertyMode(txt) { 1204 var rest = txt, done = "", s, e, n, loop; 1205 if (rest.indexOf("{") > -1 ) { return cssMode(rest); } 1206 while (rest.search(":") > -1) { 1207 s = rest.search(":"); 1208 loop = true; 1209 n = s; 1210 while (loop == true) { 1211 loop = false; 1212 e = rest.indexOf(";", n); 1213 if (rest.substring(e - 5, e + 1) == " ") { 1214 loop = true; 1215 n = e + 1; 1216 } 1217 } 1218 if (e == -1) {e = rest.length;} 1219 done += rest.substring(0, s); 1220 done += cssPropertyValueMode(rest.substring(s, e + 1)); 1221 rest = rest.substr(e + 1); 1222 } 1223 return "<span class='csspropertycolor' style=color:" + csspropertycolor + ">" + done + rest + "</span>"; 1224 } 1225 function cssPropertyValueMode(txt) { 1226 var rest = txt, done = "", s; 1227 rest = "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">:</span>" + rest.substring(1); 1228 while (rest.search(/!important/i) > -1) { 1229 s = rest.search(/!important/i); 1230 done += rest.substring(0, s); 1231 done += cssImportantMode(rest.substring(s, s + 10)); 1232 rest = rest.substr(s + 10); 1233 } 1234 result = done + rest; 1235 if (result.substr(result.length - 1, 1) == ";" && result.substr(result.length - 6, 6) != " " && result.substr(result.length - 4, 4) != "<" && result.substr(result.length - 4, 4) != ">" && result.substr(result.length - 5, 5) != "&") { 1236 result = result.substring(0, result.length - 1) + "<span class='cssdelimitercolor' style=color:" + cssdelimitercolor + ">;</span>"; 1237 } 1238 return "<span class='csspropertyvaluecolor' style=color:" + csspropertyvaluecolor + ">" + result + "</span>"; 1239 } 1240 function cssImportantMode(txt) { 1241 return "<span class='cssimportantcolor' style=color:" + cssimportantcolor + ";font-weight:bold;>" + txt + "</span>"; 1242 } 1243 function jsMode(txt) { 1244 var rest = txt, done = "", esc = [], i, cc, tt = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos, dotpos, y; 1245 for (i = 0; i < rest.length; i++) { 1246 cc = rest.substr(i, 1); 1247 if (cc == "\\") { 1248 esc.push(rest.substr(i, 2)); 1249 cc = "W3JSESCAPE"; 1250 i++; 1251 } 1252 tt += cc; 1253 } 1254 rest = tt; 1255 y = 1; 1256 while (y == 1) { 1257 regexppos = getRegExpPos(rest, jsRegExpMode); 1258 sfnuttpos = getPos(rest, "'", "'", jsStringMode); 1259 dfnuttpos = getPos(rest, '"', '"', jsStringMode); 1260 bfnuttpos = getPos(rest, '`', '`', jsStringTempMode); 1261 compos = getPos(rest, /\/\*/, "*/", commentMode); 1262 comlinepos = getPos(rest, /\/\//, "<br>", commentMode); 1263 numpos = getNumPos(rest, jsNumberMode); 1264 keywordpos = getKeywordPos("js", rest, jsKeywordMode); 1265 dotpos = getDotPos(rest, jsPropertyMode); 1266 if (Math.max(numpos[0], regexppos[0], sfnuttpos[0], dfnuttpos[0], bfnuttpos[0], compos[0], comlinepos[0], keywordpos[0], dotpos[0]) == -1) {break;} 1267 mypos = getMinPos(numpos, regexppos, sfnuttpos, dfnuttpos, bfnuttpos, compos, comlinepos, keywordpos, dotpos); 1268 if (mypos[0] == -1) {break;} 1269 if (mypos[0] > -1) { 1270 done += rest.substring(0, mypos[0]); 1271 done += mypos[2](rest.substring(mypos[0], mypos[1])); 1272 rest = rest.substr(mypos[1]); 1273 } 1274 } 1275 rest = done + rest; 1276 for (i = 0; i < esc.length; i++) { 1277 rest = rest.replace("W3JSESCAPE", esc[i]); 1278 } 1279 return "<span class='jscolor' style=color:" + jscolor + ">" + rest + "</span>"; 1280 } 1281 function jsRegExpMode(txt) { 1282 return "<span class='jsregexpcolor' style=color:" + jsregexpcolor + ">" + txt + "</span>"; 1283 } 1284 function jsStringMode(txt) { 1285 return "<span class='jsstringcolor' style=color:" + jsstringcolor + ">" + txt + "</span>"; 1286 } 1287 function jsStringTempMode(txt) { 1288 return "<span class='jsstringtempcolor' style=color:" + jsstringtempcolor + ">" + txt + "</span>"; 1289 } 1290 function jsKeywordMode(txt) { 1291 return "<span class='jskeywordcolor' style=color:" + jskeywordcolor + ">" + txt + "</span>"; 1292 } 1293 function jsNumberMode(txt) { 1294 return "<span class='jsnumbercolor' style=color:" + jsnumbercolor + ">" + txt + "</span>"; 1295 } 1296 function jsPropertyMode(txt) { 1297 return "<span class='jspropertycolor' style=color:" + jspropertycolor + ">" + txt + "</span>"; 1298 } 1299 function getRegExpPos(txt, func) { 1300 var pos1, cc, pos2 = 0, mArr, i, len, patt, modOK = false;
1301 pos1 = txt.search(/\/.+?\//); 1302 if (pos1 > -1) { 1303 len = txt.match(/\/.+?\//)[0].length; 1304 patt = /\W/g; 1305 cc = txt.match(/\/.+?\//)[0]; 1306 pos2 = cc.length; 1307 mArr = ["img", "igm", "mig", "mgi", "gim", "gmi", "im", "ig", "mi", "mg", "gi", "gm", "i", "m", "g", "d", "gs", "y", "u", "v", "s"]; 1308 for (i = 0; i < mArr.length; i++) { 1309 re = new RegExp(`\\b^${mArr[i]}\\b`, 'gi'); 1310 if (txt.substr(pos1+pos2).search(re) > -1) { 1311 modOK = true; 1312 pos2 = pos2 + mArr[i].length; 1313 } 1314 } 1315 //console.log(txt.substr(pos1 + len - 2,1)); 1316 //console.log((txt.substr(pos1 + len - 2,1)!= "<")); 1317 if ((cc.indexOf("<br>") == -1 && txt.substr(pos1 + len,1)!= "/" && txt.substr(pos1 + len,1).match(patt) && txt.substr(pos1 - 1,1).match(patt) && txt.substr(pos1 - 1,1) !="/") || modOK == true && txt.substr(pos1 + len - 2,1)!= "<") { 1318 } else { 1319 pos1 = -1; 1320 pos2 = 0; 1321 } 1322 } 1323 return [pos1, pos1 + pos2, func]; 1324 } 1325 function getDotPos(txt, func) { 1326 var x, i, j, s, e, arr = [".","<", " ", ";", "(", "+", ")", "[", "]", ",", "&", ":", "{", "}", "/" ,"-", "*", "|", "%"]; 1327 s = txt.indexOf("."); 1328 if (s > -1) { 1329 x = txt.substr(s + 1); 1330 for (j = 0; j < x.length; j++) { 1331 cc = x[j]; 1332 for (i = 0; i < arr.length; i++) { 1333 if (cc.indexOf(arr[i]) > -1) { 1334 e = j; 1335 return [s + 1, e + s + 1, func]; 1336 } 1337 } 1338 } 1339 } 1340 return [-1, -1, func]; 1341 } 1342 function getMinPos() { 1343 var i, arr = []; 1344 for (i = 0; i < arguments.length; i++) { 1345 if (arguments[i][0] > -1) { 1346 if (arr.length == 0 || arguments[i][0] < arr[0]) {arr = arguments[i];} 1347 } 1348 } 1349 if (arr.length == 0) {arr = arguments[i];} 1350 return arr; 1351 } 1352 function javaMode(txt) { 1353 var rest = txt, done = "", esc = [], i, cc, tt = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos, dotpos, y; 1354 for (i = 0; i < rest.length; i++) { 1355 cc = rest.substr(i, 1); 1356 if (cc == "\\") { 1357 esc.push(rest.substr(i, 2)); 1358 cc = "W3JSESCAPE"; 1359 i++; 1360 } 1361 tt += cc; 1362 } 1363 rest = tt; 1364 y = 1; 1365 while (y == 1) { 1366 sfnuttpos = getPos(rest, "'", "'", javaStringMode); 1367 dfnuttpos = getPos(rest, '"', '"', javaStringMode); 1368 compos = getPos(rest, /\/\*/, "*/", commentMode); 1369 comlinepos = getPos(rest, /\/\//, "<br>", commentMode); 1370 numpos = getNumPos(rest, javaNumberMode); 1371 keywordpos = getKeywordPos("java", rest, javaKeywordMode); 1372 dotpos = getDotPos(rest, javaPropertyMode); 1373 if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0], dotpos[0]) == -1) {break;} 1374 mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, dotpos); 1375 if (mypos[0] == -1) {break;} 1376 if (mypos[0] > -1) { 1377 done += rest.substring(0, mypos[0]); 1378 done += mypos[2](rest.substring(mypos[0], mypos[1])); 1379 rest = rest.substr(mypos[1]); 1380 } 1381 } 1382 rest = done + rest; 1383 for (i = 0; i < esc.length; i++) { 1384 rest = rest.replace("W3JSESCAPE", esc[i]); 1385 } 1386 return "<span class='javacolor' style=color:" + javacolor + ">" + rest + "</span>"; 1387 } 1388 function javaStringMode(txt) { 1389 return "<span class='javastringcolor' style=color:" + javastringcolor + ">" + txt + "</span>"; 1390 } 1391 function javaKeywordMode(txt) { 1392 return "<span class='javakeywordcolor' style=color:" + javakeywordcolor + ">" + txt + "</span>"; 1393 } 1394 function javaNumberMode(txt) { 1395 return "<span class='javanumbercolor' style=color:" + javanumbercolor + ">" + txt + "</span>"; 1396 } 1397 function javaPropertyMode(txt) { 1398 return "<span class='javapropertycolor' style=color:" + javapropertycolor + ">" + txt + "</span>"; 1399 } 1400 function kotlinMode(txt) { 1401 var rest = txt, done = "", esc = [], i, cc, tt = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos, dotpos, y; 1402 for (i = 0; i < rest.length; i++) { 1403 cc = rest.substr(i, 1); 1404 if (cc == "\\") { 1405 esc.push(rest.substr(i, 2)); 1406 cc = "W3JSESCAPE"; 1407 i++; 1408 } 1409 tt += cc; 1410 } 1411 rest = tt; 1412 y = 1; 1413 while (y == 1) { 1414 sfnuttpos = getPos(rest, "'", "'", kotlinStringMode); 1415 dfnuttpos = getPos(rest, '"', '"', kotlinStringMode); 1416 compos = getPos(rest, /\/\*/, "*/", commentMode); 1417 comlinepos = getPos(rest, /\/\//, "<br>", commentMode); 1418 numpos = getNumPos(rest, kotlinNumberMode); 1419 keywordpos = getKeywordPos("kotlin", rest, kotlinKeywordMode); 1420 dotpos = getDotPos(rest, kotlinPropertyMode); 1421 if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0], dotpos[0]) == -1) {break;} 1422 mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, dotpos); 1423 if (mypos[0] == -1) {break;} 1424 if (mypos[0] > -1) { 1425 done += rest.substring(0, mypos[0]); 1426 done += mypos[2](rest.substring(mypos[0], mypos[1])); 1427 rest = rest.substr(mypos[1]); 1428 } 1429 } 1430 rest = done + rest; 1431 for (i = 0; i < esc.length; i++) { 1432 rest = rest.replace("W3JSESCAPE", esc[i]); 1433 } 1434 return "<span class='kotlincolor' style=color:" + kotlincolor + ">" + rest + "</span>"; 1435 } 1436 function kotlinStringMode(txt) { 1437 return "<span class='kotlinstringcolor' style=color:" + kotlinstringcolor + ">" + txt + "</span>"; 1438 } 1439 function kotlinKeywordMode(txt) { 1440 return "<span class='kotlinkeywordcolor' style=color:" + kotlinkeywordcolor + ">" + txt + "</span>"; 1441 } 1442 function kotlinNumberMode(txt) { 1443 return "<span class='kotlinnumbercolor' style=color:" + kotlinnumbercolor + ">" + txt + "</span>"; 1444 } 1445 function kotlinPropertyMode(txt) { 1446 return "<span class='kotlinpropertycolor' style=color:" + kotlinpropertycolor + ">" + txt + "</span>"; 1447 } 1448 function sqlMode(txt) { 1449 var rest = txt, y, done = "", sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos, numpos, mypos; 1450 y = 1; 1451 while (y == 1) { 1452 sfnuttpos = getPos(rest, "'", "'", sqlStringMode); 1453 dfnuttpos = getPos(rest, '"', '"', sqlStringMode); 1454 compos = getPos(rest, /\/\*/, "*/", commentMode); 1455 comlinepos = getPos(rest, /--/, "<br>", commentMode); 1456 numpos = getNumPos(rest, sqlNumberMode); 1457 keywordpos = getKeywordPos("sql", rest, sqlKeywordMode); 1458 if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], keywordpos[0]) == -1) {break;} 1459 mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, keywordpos); 1460 if (mypos[0] == -1) {break;} 1461 if (mypos[0] > -1) { 1462 done += rest.substring(0, mypos[0]); 1463 done += mypos[2](rest.substring(mypos[0], mypos[1])); 1464 rest = rest.substr(mypos[1]); 1465 } 1466 } 1467 rest = done + rest; 1468 return "<span class='sqlcolor' style=color:" + sqlcolor + ">" + rest + "</span>"; 1469 } 1470 function sqlStringMode(txt) {
1471 return "<span class='sqlstringcolor' style=color:" + sqlstringcolor + ">" + txt + "</span>"; 1472 } 1473 function sqlKeywordMode(txt) { 1474 return "<span class='sqlkeywordcolor' style=color:" + sqlkeywordcolor + ">" + txt + "</span>"; 1475 } 1476 function sqlNumberMode(txt) { 1477 return "<span class='sqlnumbercolor' style=color:" + sqlnumbercolor + ">" + txt + "</span>"; 1478 } 1479 function phpMode(txt) { 1480 var rest = txt, done = "", sfnuttpos, dfnuttpos, compos, comlinepos, comhashpos, keywordpos, mypos, y; 1481 y = 1; 1482 while (y == 1) { 1483 sfnuttpos = getPos(rest, "'", "'", phpStringMode); 1484 dfnuttpos = getPos(rest, '"', '"', phpStringMode); 1485 compos = getPos(rest, /\/\*/, "*/", commentMode); 1486 comlinepos = getPos(rest, /\/\//, "<br>", commentMode); 1487 comhashpos = getPos(rest, "#", "<br>", commentMode); 1488 numpos = getNumPos(rest, phpNumberMode); 1489 keywordpos = getKeywordPos("php", rest, phpKeywordMode); 1490 if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comlinepos[0], comhashpos[0], keywordpos[0]) == -1) {break;} 1491 mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comlinepos, comhashpos, keywordpos); 1492 if (mypos[0] == -1) {break;} 1493 if (mypos[0] > -1) { 1494 done += rest.substring(0, mypos[0]); 1495 done += mypos[2](rest.substring(mypos[0], mypos[1])); 1496 rest = rest.substr(mypos[1]); 1497 } 1498 } 1499 rest = done + rest; 1500 rest = "<span class='phptagcolor' style=color:" + phptagcolor + "><" + rest.substr(4, 4) + "</span>" + rest.substring(8); 1501 if (rest.substr(rest.length - 5, 5) == "?>") { 1502 rest = rest.substring(0, rest.length - 5) + "<span class='phptagcolor' style=color:" + phptagcolor + ">?></span>"; 1503 } 1504 return "<span class='phpcolor' style=color:" + phpcolor + ">" + rest + "</span>"; 1505 } 1506 function phpStringMode(txt) { 1507 return "<span class='phpstringcolor' style=color:" + phpstringcolor + ">" + txt + "</span>"; 1508 } 1509 function phpNumberMode(txt) { 1510 return "<span class='phpnumbercolor' style=color:" + phpnumbercolor + ">" + txt + "</span>"; 1511 } 1512 function phpKeywordMode(txt) { 1513 var glb = ["$GLOBALS","$_SERVER","$_REQUEST","$_POST","$_GET","$_FILES","$_ENV","$_COOKIE","$_SESSION"]; 1514 if (glb.indexOf(txt.toUpperCase()) > -1) { 1515 if (glb.indexOf(txt) > -1) { 1516 return "<span class='phpglobalcolor' style=color:" + phpglobalcolor + ">" + txt + "</span>"; 1517 } else { 1518 return txt; 1519 } 1520 } else { 1521 return "<span class='phpkeywordcolor' style=color:" + phpkeywordcolor + ">" + txt + "</span>"; 1522 } 1523 } 1524 function pythonMode(txt) { 1525 var rest = txt, done = "", sfnuttpos, dfnuttpos, compos, comlinepos, comhashpos, keywordpos, mypos, y; 1526 y = 1; 1527 while (y == 1) { 1528 sfnuttpos = getPos(rest, "'", "'", pythonStringMode); 1529 dfnuttpos = getPos(rest, '"', '"', pythonStringMode); 1530 compos = getPos(rest, /\/\*/, "*/", commentMode); 1531 comhashpos = getPos(rest, "#", "<br>", commentMode); 1532 numpos = getNumPos(rest, pythonNumberMode); 1533 keywordpos = getKeywordPos("python", rest, pythonKeywordMode); 1534 if (Math.max(numpos[0], sfnuttpos[0], dfnuttpos[0], compos[0], comhashpos[0], keywordpos[0]) == -1) {break;} 1535 mypos = getMinPos(numpos, sfnuttpos, dfnuttpos, compos, comhashpos, keywordpos); 1536 if (mypos[0] == -1) {break;} 1537 if (mypos[0] > -1) { 1538 done += rest.substring(0, mypos[0]); 1539 done += mypos[2](rest.substring(mypos[0], mypos[1])); 1540 rest = rest.substr(mypos[1]); 1541 } 1542 } 1543 rest = done + rest; 1544 return "<span class='pythoncolor' style=color:" + pythoncolor + ">" + rest + "</span>"; 1545 } 1546 function pythonStringMode(txt) { 1547 return "<span class='pythonstringcolor' style=color:" + pythonstringcolor + ">" + txt + "</span>"; 1548 } 1549 function pythonNumberMode(txt) { 1550 return "<span class='pythonnumbercolor' style=color:" + pythonnumbercolor + ">" + txt + "</span>"; 1551 } 1552 function pythonKeywordMode(txt) { 1553 return "<span class='pythonkeywordcolor' style=color:" + pythonkeywordcolor + ">" + txt + "</span>"; 1554 } 1555 function getKeywordPos(typ, txt, func) { 1556 var words, i, pos, rpos = -1, rpos2 = -1, patt; 1557 if (typ == "js") { 1558 words = ["abstract","arguments","async","await","boolean","break","byte","case","catch","char","class","const","continue","debugger","default","delete", 1559 "do","double","else","enum","eval","event","export","extends","false","final","finally","float","for","function","goto","if","implements","import", 1560 "in","instanceof","int","interface","let","long","NaN","native","new","null","package","private","protected","public","return","short","static", 1561 "super","switch","synchronized","then","this","throw","throws","transient","true","try","typeof","undefined","var","void","volatile","while","with","yield"]; 1562 } else if (typ == "java") { 1563 words = ["abstract","arguments","boolean","break","byte","case","catch","char","class","const","continue","debugger","default","delete", 1564 "do","double","else","enum","eval","event","export","extends","false","final","finally","float","for","function","goto","if","implements","import", 1565 "in","instanceof","int","interface","let","long","NaN","native","new","null","package","private","protected","public","return","short","static", 1566 "super","switch","synchronized","this","throw","throws","transient","true","try","typeof","var","void","volatile","while","with","yield", 1567 "String"]; 1568 } else if (typ == "kotlin") { 1569 words = ['package','as','typealias','class','interface','this','super','val','operator','var','fun','for','is','in','This','throw','return', 1570 'annotation','break','continue','object','if','else','while','do','try','when','!in','!is','as?','file','import','where','by','get','
1570set', 1571 'abstract','enum','open','inner','override','private','public','internal','protected','catch','finally','out','final','vararg','reified', 1572 'dynamic','companion','constructor','init','sealed','field','property','receiver','param','sparam','lateinit','data','inline','noinline', 1573 'tailrec','external','annotation','crossinline','const','operator','infix','suspend','actual','expect','setparam','Boolean','Byte','Character', 1574 'CharSequence','Class','ClassLoader','Cloneable','Comparable','Compiler','Double','Exception','Float','Integer','Long','Math','Number','Object', 1575 'Package','Pair','Process','Runtime','Runnable','SecurityManager','Short','StackTraceElement','StrictMath','String','StringBuffer','System', 1576 'Thread','ThreadGroup','ThreadLocal','Throwable','Triple','Void','Annotation','Any','BooleanArray','ByteArray','Char','CharArray', 1577 'DeprecationLevel','DoubleArray','Enum','FloatArray','Function','Int','IntArray','Lazy','LazyThreadSafetyMode','LongArray','Nothing','ShortArray','Unit']; 1578 } else if (typ == "php") { 1579 words = ["$GLOBALS","$_SERVER","$_REQUEST","$_POST","$_GET","$_FILES","$_ENV","$_COOKIE","$_SESSION", 1580 "__halt_compiler","abstract","and","array","as","break","callable","case","catch","class","clone","const","continue","declare","default", 1581 "die","do","echo","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","eval","exit","extends","final","for", 1582 "foreach","function","global","goto","if","implements","include","include_once","instanceof","insteadof","interface","isset","list","namespace","new", 1583 "or","print","private","protected","public","require","require_once","return","static","switch","throw","trait","try","unset","use","var","while","xor"]; 1584 } else if (typ == "sql") { 1585 words = ["ADD","EXTERNAL","PROCEDURE","ALL","FETCH","PUBLIC","ALTER","FILE","RAISERROR","AND","FILLFACTOR","READ","ANY","READTEXT","AS","FOREIGN", 1586 "RECONFIGURE","ASC","FREETEXT","REFERENCES","AUTHORIZATION","FREETEXTTABLE","REPLICATION","BACKUP","FROM","RESTORE","BEGIN","FULL","RESTRICT","BETWEEN", 1587 "FUNCTION","RETURN","BREAK","GOTO","REVERT","BROWSE","GRANT","REVOKE","BULK","GROUP","RIGHT","BY","HAVING","ROLLBACK","CASCADE","HOLDLOCK","ROWCOUNT", 1588 "CASE","IDENTITY","ROWGUIDCOL","CHECK","IDENTITY_INSERT","RULE","CHECKPOINT","IDENTITYCOL","SAVE","CLOSE","IF","SCHEMA","CLUSTERED","IN", 1589 "SECURITYAUDIT","COALESCE","INDEX","SELECT","COLLATE","INNER","SEMANTICKEYPHRASETABLE","COLUMN","INSERT","SEMANTICSIMILARITYDETAILSTABLE","COMMIT", 1590 "INTERSECT","SEMANTICSIMILARITYTABLE","COMPUTE","INTO","SESSION_USER","CONSTRAINT","IS","SET","CONTAINS","JOIN","SETUSER","CONTAINSTABLE","KEY", 1591 "SHUTDOWN","CONTINUE","KILL","SOME","CONVERT","LEFT","STATISTICS","CREATE","LIKE","SYSTEM_USER","CROSS","LINENO","TABLE","CURRENT","LOAD","TABLESAMPLE", 1592 "CURRENT_DATE","MERGE","TEXTSIZE","CURRENT_TIME","NATIONAL","THEN","CURRENT_TIMESTAMP","NOCHECK","TO","CURRENT_USER","NONCLUSTERED","TOP","CURSOR", 1593 "NOT","TRAN","DATABASE","NULL","TRANSACTION","DBCC","NULLIF","TRIGGER","DEALLOCATE","OF","TRUNCATE","DECLARE","OFF","TRY_CONVERT","DEFAULT","OFFSETS", 1594 "TSEQUAL","DELETE","ON","UNION","DENY","OPEN","UNIQUE","DESC","OPENDATASOURCE","UNPIVOT","DISK","OPENQUERY","UPDATE","DISTINCT","OPENROWSET", 1595 "UPDATETEXT","DISTRIBUTED","OPENXML","USE","DOUBLE","OPTION","USER","DROP","OR","VALUES","DUMP","ORDER","VARYING","ELSE","OUTER","VIEW","END", 1596 "OVER","WAITFOR","ERRLVL","PERCENT","WHEN","ESCAPE","PIVOT","WHERE","EXCEPT","PLAN","WHILE","EXEC","PRECISION","WITH","EXECUTE","PRIMARY", 1597 "WITHIN GROUP","EXISTS","PRINT","WRITETEXT","EXIT","PROC","LIMIT","MODIFY","COUNT","REPLACE"]; 1598 } else if (typ == "python") { 1599 words = ["as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "False", "finally", "for", "from", "global", "if", "import", 1600 "lambda", "pass", "raise", "return", "try", "while", "with", "yield", "in", "abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", 1601 "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "filter", "float", "format", "frozenset", "getattr", 1602 "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", "list", "locals", "map", "max", 1603 "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "print", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice", 1604 "sorted", "staticmethod", "str", "sum", "super", "tuple", "True", "type", "vars", "zip", "__import__", "NotImplemented", "Ellipsis", "__debug__"]; 1605 } 1606 for (i = 0; i < words.length; i++) { 1607 if (typ == "php" || typ == "sql") { 1608 pos = txt.toLowerCase().indexOf(words[i].toLowerCase()); 1609 } else { 1610 pos = txt.indexOf(words[i]); 1611 } 1612 if (pos > -1) { 1613 patt = /\W/g; 1614 if (txt.substr(pos + words[i].length,1).match(patt) && txt.substr(pos - 1,1).match(patt)) { 1615 if (pos > -1 && (rpos == -1 || pos < rpos)) { 1616 rpos = pos; 1617 rpos2 = rpos + words[i].length; 1618 } 1619 } 1620 } 1621 } 1622 return [rpos, rpos2, func]; 1623 } 1624 function getPos(txt, start, end, func) { 1625 var s, e; 1626 s = txt.search(start); 1627 e = txt.indexOf(end, s + (end.length)); 1628 if (e == -1) {e = txt.length;} 1629 return [s, e + (end.length), func]; 1630 } 1631 function getNumPos(txt, func) { 1632 var arr = ["<br>", "n", " ", ";", "(", "+", ")", "[", "]", ",", "&", ":", "{", "}", "/" ,"-", "*", "|", "%", "="], i, j, c, startpos = 0, endpos, word, npos = -1; 1633 for (i = 0; i < txt.length; i++) { 1634 for (j = 0; j < arr.length; j++) { 1635 c = txt.substr(i, arr[j].length); 1636 if (c == "n") {npos = i;} 1637 if (c == arr[j]) { 1638 if (c == "-" && (txt.substr(i - 1, 1) == "e" || txt.substr(i - 1, 1) == "E")) { 1639 continue; 1640 } 1641 endpos = i; 1642 if (startpos < endpos) { 1643 word = txt.substring(startpos, endpos); 1644 if (c == "n") { 1645 if (isNaN(word)) break; 1646 } 1647 if (!isNaN(word)) { 1648 if (npos > -1 && startpos == (npos+1)) {continue;} 1649 return [startpos, endpos, func]; 1650 } 1651 } 1652 i += arr[j].length; 1653 startpos = i; 1654 i -= 1; 1655 break; 1656 } 1657 } 1658 } 1659 return [-1, -1, func]; 1660 } 1661} 1662} 1663)(); 1664/* 1665( 1666function setThemeMode() { 1667 var x = localStorage.getItem("preferredmode"); 1668 var y = localStorage.getItem("preferredpagemode"); 1669 if (x == "dark") { 1670 document.body.className += " darktheme"; 1671 } 1672 if (y == "dark") { 1673 document.body.className += " darkpagetheme"; 1674 } 1675})(); 1676*/ 1677 1678 1679 1680
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.