[{"data":1,"prerenderedAt":4536},["ShallowReactive",2],{"content-page:\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability":3,"content-page-quiz:none":3050,"content-navigation-index":3066},{"id":4,"title":5,"audience":6,"body":7,"contentType":3039,"course":3040,"description":3041,"estimateBasis":3042,"estimatedDiscussionMinutes":2619,"estimatedLiveMinutes":3043,"estimatedTotalMinutes":2625,"extension":278,"meta":3044,"module":3045,"navigation":3046,"order":2619,"path":3047,"presentationRole":3048,"promptAssist":3049,"revision":3050,"semester":3050,"seo":3051,"status":3052,"stem":3053,"syllabus":3050,"tags":3054,"updated":3050,"videoDuration":3061,"videoId":3062,"videoLink":3063,"videoTitle":3064,"week":3045,"__hash__":3065},"content\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability.md","Milestone 2 Bootstrap And Reusability","student",{"type":8,"value":9,"toc":2983},"minimark",[10,42,82,108,192,250,301,397,547,593,816,950,1046,1104,1155,1182,1237,1278,1322,1357,1411,1446,1514,1552,1628,1670,1698,1724,1750,1780,1811,1873,1898,1944,1984,2054,2206,2251,2319,2355,2381,2447,2489,2532,2577,2642,2684,2724,2765,2794,2820,2893,2949],[11,12,15,19,23],"slide",{"id":13,"level":14},"main-idea","2",[16,17,18],"h2",{"id":13},"Main Idea",[20,21,22],"p",{},"Bootstrap provides a shared visual vocabulary, while generic PHP rendering helpers give every project a reusable component layer",[24,25,26,30,33,36,39],"ul",{},[27,28,29],"li",{},"Load Bootstrap and project assets once through shared partials",[27,31,32],{},"Copy the generic input, button, and table helpers into the project",[27,34,35],{},"Preserve validation, authorization, and database behavior in project pages",[27,37,38],{},"Apply the helpers to account pages, role pages, and your project's entities",[27,40,41],{},"Use the StarCraft Guides workflow as an implementation reference",[11,43,45,48],{"id":44,"level":14},"practice-workspace",[16,46,47],{"id":44},"Practice Workspace",[24,49,50,57,63,66,76,79],{},[27,51,52,53],{},"Continue inside the existing repository and ",[54,55,56],"code",{},"public_html\u002Fproject\u002F",[27,58,59,60],{},"Lesson branch: ",[54,61,62],{},"Milestone2-Part04-Bootstrap-Reusability",[27,64,65],{},"Keep all prior imports, validation, flash, role, API, and database helpers",[27,67,68,69,72,73],{},"Copy shared markup under ",[54,70,71],{},"partials\u002F"," and rendering functions under ",[54,74,75],{},"lib\u002F",[27,77,78],{},"Continue building the API and entities selected for your project",[27,80,81],{},"Use the later StarCraft Guides slides to compare one complete example against that project work",[11,83,85,88,91],{"id":84,"level":14},"why-bootstrap",[16,86,87],{"id":84},"Why Bootstrap?",[20,89,90],{},"Bootstrap is a mobile-first frontend framework with a responsive grid, utility classes, prebuilt components, and optional JavaScript behaviors",[24,92,93,96,99,102,105],{},[27,94,95],{},"Gives common interface elements a consistent visual starting point",[27,97,98],{},"Uses documented class names instead of requiring every common style to be written from scratch",[27,100,101],{},"Adapts layouts across screen sizes with responsive breakpoints and grid classes",[27,103,104],{},"Improves presentation and layout without replacing validation, authorization, database, or API logic",[27,106,107],{},"See the slide below for how Bootstrap evolved from an internal Twitter toolkit into the current framework",[11,109,112,116],{"id":110,"level":111},"bootstrap-history","3",[16,113,115],{"id":114},"a-short-bootstrap-history","A Short Bootstrap History",[117,118,121,157],"two-col",{"gap":119,"left-width":120,"right-width":120},"lg","1fr",[122,123,125,130],"template",{"v-slot:left":124},"",[126,127,129],"h3",{"id":128},"origins-to-v3","Origins To V3",[24,131,132,139,145,151],{},[27,133,134,138],{},[135,136,137],"strong",{},"2010:"," Mark Otto and Jacob Thornton created Twitter Blueprint to unify interface patterns across Twitter's internal tools",[27,140,141,144],{},[135,142,143],{},"2011:"," The toolkit was released publicly as Bootstrap",[27,146,147,150],{},[135,148,149],{},"V2:"," Responsive layouts became available through an optional stylesheet",[27,152,153,156],{},[135,154,155],{},"V3:"," Bootstrap was rewritten around a mobile-first, responsive-by-default approach",[122,158,159,163],{"v-slot:right":124},[126,160,162],{"id":161},"v4-to-v5","V4 To V5",[24,164,165,176,181,187],{},[27,166,167,170,171],{},[135,168,169],{},"V4:"," Moved its source styles from Less to Sass\n",[24,172,173],{},[27,174,175],{},"Less and Sass are CSS preprocessors that add features such as variables, nesting, and reusable mixins before producing regular CSS",[27,177,178,180],{},[135,179,169],{}," Rebuilt its grid and many components around Flexbox and introduced cards in place of several older component types",[27,182,183,186],{},[135,184,185],{},"V5:"," Removed the jQuery dependency and support for Internet Explorer",[27,188,189,191],{},[135,190,185],{}," Moved component plugins to modern JavaScript with fewer dependencies",[11,193,195,199,205],{"id":194,"level":14},"load-bootstrap",[16,196,198],{"id":197},"load-bootstrap-53","Load Bootstrap 5.3",[200,201],"code-snippet",{"language":202,"src":203,"max-height":204},"html","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fbootstrap-cdn-01.html","15rem",[24,206,207,213,223,226,237,247],{},[27,208,209,210],{},"The official Bootstrap site currently supplies version ",[54,211,212],{},"5.3.8",[27,214,215,216],{},"Get the current CDN tags from ",[217,218,222],"a",{"href":219,"rel":220},"https:\u002F\u002Fgetbootstrap.com\u002Fdocs\u002F5.3\u002Fgetting-started\u002Fintroduction\u002F#quick-start",[221],"nofollow","Bootstrap Quick Start",[27,224,225],{},"Copy both tags from the official documentation when the patch version changes",[27,227,228,229,232,233,236],{},"Keep each ",[54,230,231],{},"integrity"," value with its matching URL and ",[54,234,235],{},"crossorigin"," attribute",[27,238,239,240,243,244],{},"Load CSS in ",[54,241,242],{},"\u003Chead>"," and the JavaScript bundle near the end of ",[54,245,246],{},"\u003Cbody>",[27,248,249],{},"The next slides will introduce different Bootstrap concepts and components",[11,251,253,256,297,300],{"id":252,"level":14},"grid-system",[16,254,255],{"id":252},"Grid System",[117,257,258,263],{"gap":119,"left-width":120,"right-width":120},[122,259,260],{"v-slot:left":124},[200,261],{"language":202,"src":262},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fgrid-system-02.html",[122,264,265],{"v-slot:right":124},[24,266,267,270,273,284,294],{},[27,268,269],{},"Bootstrap's mobile-first grid is built with Flexbox",[27,271,272],{},"Each row provides 12 available column units across six responsive tiers",[27,274,275,276,279,280,283],{},"Below the ",[54,277,278],{},"md"," breakpoint (",[54,281,282],{},"768px","), both sections use the full row width and stack vertically",[27,285,286,287,289,290,293],{},"At ",[54,288,278],{}," and above, each ",[54,291,292],{},"col-md-6"," occupies 6 of 12 units, placing the two sections side by side",[27,295,296],{},"Grid classes describe page layout without replacing the content's semantic HTML",[298,299],"br",{},"\nSee the slides below for the required hierarchy, sizing choices, gutters, and breakpoints",[11,302,304,307],{"id":303,"level":111},"grid-anatomy",[16,305,306],{"id":303},"Grid Anatomy",[117,308,309,344],{"gap":119,"left-width":120,"right-width":120},[122,310,311,315],{"v-slot:left":124},[126,312,314],{"id":313},"required-hierarchy","Required Hierarchy",[24,316,317,323,329,335,338],{},[27,318,319,322],{},[54,320,321],{},".container"," centers content and supplies responsive width and horizontal padding",[27,324,325,328],{},[54,326,327],{},".container-fluid"," remains full-width at every viewport size",[27,330,331,334],{},[54,332,333],{},".row"," is the Flexbox wrapper for a group of columns",[27,336,337],{},"Column elements should be immediate children of a row",[27,339,340,341,343],{},"A nested grid starts with a new ",[54,342,333],{}," inside an existing column",[122,345,346,350],{"v-slot:right":124},[126,347,349],{"id":348},"width-and-spacing","Width And Spacing",[24,351,352,358,364,373,376,390],{},[27,353,354,357],{},[54,355,356],{},".col"," lets sibling columns divide the available width evenly",[27,359,360,363],{},[54,361,362],{},".col-6"," occupies 6 of 12 units at every viewport size",[27,365,366,369,370,372],{},[54,367,368],{},".col-md-6"," occupies 6 units from the ",[54,371,278],{}," breakpoint upward",[27,374,375],{},"Columns that exceed 12 units continue on a new line",[27,377,378,381,382,385,386,389],{},[54,379,380],{},"g-*",", ",[54,383,384],{},"gx-*",", and ",[54,387,388],{},"gy-*"," control all, horizontal, and vertical gutters",[27,391,392,393,396],{},"Use ",[54,394,395],{},"g-0"," only when the design intentionally needs no gutter",[11,398,400,404],{"id":399,"level":111},"grid-breakpoints",[16,401,403],{"id":402},"mobile-first-breakpoints","Mobile-First Breakpoints",[117,405,406,517],{"gap":119,"left-width":120,"right-width":120},[122,407,408],{"v-slot:left":124},[409,410,411,428],"table",{},[412,413,414],"thead",{},[415,416,417,421,424],"tr",{},[418,419,420],"th",{},"Tier",[418,422,423],{},"Class Infix",[418,425,427],{"align":426},"right","Starts At",[429,430,431,445,460,473,487,502],"tbody",{},[415,432,433,437,440],{},[434,435,436],"td",{},"Extra small",[434,438,439],{},"none",[434,441,442],{"align":426},[54,443,444],{},"0",[415,446,447,450,455],{},[434,448,449],{},"Small",[434,451,452],{},[54,453,454],{},"sm",[434,456,457],{"align":426},[54,458,459],{},"576px",[415,461,462,465,469],{},[434,463,464],{},"Medium",[434,466,467],{},[54,468,278],{},[434,470,471],{"align":426},[54,472,282],{},[415,474,475,478,482],{},[434,476,477],{},"Large",[434,479,480],{},[54,481,119],{},[434,483,484],{"align":426},[54,485,486],{},"992px",[415,488,489,492,497],{},[434,490,491],{},"Extra large",[434,493,494],{},[54,495,496],{},"xl",[434,498,499],{"align":426},[54,500,501],{},"1200px",[415,503,504,507,512],{},[434,505,506],{},"Extra extra large",[434,508,509],{},[54,510,511],{},"xxl",[434,513,514],{"align":426},[54,515,516],{},"1400px",[122,518,519],{"v-slot:right":124},[24,520,521,528,535,538,544],{},[27,522,523,524,527],{},"Bootstrap breakpoint classes use ",[54,525,526],{},"min-width",", so a rule continues through larger tiers",[27,529,530,531,534],{},"A class without an infix, such as ",[54,532,533],{},"col-12",", applies from the smallest viewport upward",[27,536,537],{},"Start with the narrow-screen layout, then add only the changes needed at larger tiers",[27,539,540,543],{},[54,541,542],{},"col-12 col-md-6 col-xl-4"," means full-width, then one-half, then one-third",[27,545,546],{},"Choose breakpoints based on when the content needs more room, not a specific device name",[11,548,550,553,556,590],{"id":549,"level":14},"components-and-utilities",[16,551,552],{"id":549},"Components And Utilities",[20,554,555],{},"Bootstrap provides focused utility classes and documented component patterns that can be combined on semantic HTML.",[24,557,558,561,564,567,570,573,587],{},[27,559,560],{},"Utilities handle focused presentation needs such as spacing, borders, text, display, and Flexbox layout",[27,562,563],{},"Components provide reusable interface patterns with documented HTML structures and class names",[27,565,566],{},"Theme variants communicate common purposes such as primary, success, warning, and danger",[27,568,569],{},"Responsive class infixes let presentation choices change at Bootstrap's standard breakpoints",[27,571,572],{},"JavaScript plugins add behaviors such as collapsing, dropdowns, and modal dialogs",[27,574,575,576,579,580,579,583,586],{},"ARIA (Accessible Rich Internet Applications, pronounced \"",[54,577,578],{},"AR-ee-uh"," or ",[54,581,582],{},"AH-ree-uh",[54,584,585],{},"AIR-ee-uh","\") attributes work with semantic HTML to label controls and expose interactive state to assistive technology",[27,588,589],{},"Project CSS can extend or override Bootstrap while retaining its shared vocabulary",[20,591,592],{},"See the slides below for representative utility groups, a button, and a modal.",[11,594,596,600],{"id":595,"level":111},"spacing-border-utilities",[16,597,599],{"id":598},"spacing-and-border-utilities","Spacing And Border Utilities",[117,601,602,693],{"gap":119,"left-width":120,"right-width":120},[122,603,604,608],{"v-slot:left":124},[126,605,607],{"id":606},"read-a-spacing-class","Read A Spacing Class",[24,609,610,616,622,628,631,648,663,678],{},[27,611,612,613],{},"Pattern: ",[54,614,615],{},"{property}{side}-{size}",[27,617,618,621],{},[54,619,620],{},"p-*"," utilities add padding inside the border",[27,623,624,627],{},[54,625,626],{},"m-*"," utilities add margin outside the border",[27,629,630],{},"No side marker applies the value to all sides",[27,632,633,636,637,640,641,636,644,647],{},[54,634,635],{},"pt-*","\u002F",[54,638,639],{},"mt-*"," and ",[54,642,643],{},"pb-*",[54,645,646],{},"mb-*"," select the top and bottom",[27,649,650,636,653,640,656,636,659,662],{},[54,651,652],{},"ps-*",[54,654,655],{},"ms-*",[54,657,658],{},"pe-*",[54,660,661],{},"me-*"," select the logical start and end",[27,664,665,636,668,640,671,636,674,677],{},[54,666,667],{},"px-*",[54,669,670],{},"mx-*",[54,672,673],{},"py-*",[54,675,676],{},"my-*"," select both horizontal or vertical sides",[27,679,680,681,381,684,381,687,385,690],{},"Examples: ",[54,682,683],{},"p-3",[54,685,686],{},"mt-4",[54,688,689],{},"px-2",[54,691,692],{},"mb-0",[122,694,695,699,781],{"v-slot:right":124},[126,696,698],{"id":697},"size-scale-and-borders","Size Scale And Borders",[409,700,701,711],{},[412,702,703],{},[415,704,705,708],{},[418,706,707],{},"Size",[418,709,710],{"align":426},"Default Value",[429,712,713,723,735,746,757,769],{},[415,714,715,719],{},[434,716,717],{},[54,718,444],{},[434,720,721],{"align":426},[54,722,444],{},[415,724,725,730],{},[434,726,727],{},[54,728,729],{},"1",[434,731,732],{"align":426},[54,733,734],{},"0.25rem",[415,736,737,741],{},[434,738,739],{},[54,740,14],{},[434,742,743],{"align":426},[54,744,745],{},"0.5rem",[415,747,748,752],{},[434,749,750],{},[54,751,111],{},[434,753,754],{"align":426},[54,755,756],{},"1rem",[415,758,759,764],{},[434,760,761],{},[54,762,763],{},"4",[434,765,766],{"align":426},[54,767,768],{},"1.5rem",[415,770,771,776],{},[434,772,773],{},[54,774,775],{},"5",[434,777,778],{"align":426},[54,779,780],{},"3rem",[24,782,783,792,804],{},[27,784,785,788,789],{},[54,786,787],{},"auto"," is available for margin, such as ",[54,790,791],{},"ms-auto",[27,793,794,381,797,385,800,803],{},[54,795,796],{},"border",[54,798,799],{},"border-top",[54,801,802],{},"border-0"," add or remove borders",[27,805,806,381,809,385,812,815],{},[54,807,808],{},"border-primary",[54,810,811],{},"border-2",[54,813,814],{},"rounded"," modify color, width, and radius",[11,817,819,822],{"id":818,"level":111},"text-utilities",[16,820,821],{"id":818},"Text Utilities",[117,823,824,910],{"gap":119,"left-width":120,"right-width":120},[122,825,826],{"v-slot:left":124},[409,827,828,838],{},[412,829,830],{},[415,831,832,835],{},[418,833,834],{},"Utility",[418,836,837],{},"Purpose",[429,839,840,850,860,870,880,890,900],{},[415,841,842,847],{},[434,843,844],{},[54,845,846],{},"text-start",[434,848,849],{},"Align text to the start",[415,851,852,857],{},[434,853,854],{},[54,855,856],{},"text-center",[434,858,859],{},"Center text",[415,861,862,867],{},[434,863,864],{},[54,865,866],{},"text-end",[434,868,869],{},"Align text to the end",[415,871,872,877],{},[434,873,874],{},[54,875,876],{},"fw-bold",[434,878,879],{},"Use bold font weight",[415,881,882,887],{},[434,883,884],{},[54,885,886],{},"fst-italic",[434,888,889],{},"Use italic font style",[415,891,892,897],{},[434,893,894],{},[54,895,896],{},"text-nowrap",[434,898,899],{},"Prevent wrapping",[415,901,902,907],{},[434,903,904],{},[54,905,906],{},"text-break",[434,908,909],{},"Break long text when needed",[122,911,912],{"v-slot:right":124},[24,913,914,920,932,938,944,947],{},[27,915,916,917],{},"Alignment can be responsive, such as ",[54,918,919],{},"text-md-center",[27,921,922,381,925,385,928,931],{},[54,923,924],{},"text-primary",[54,926,927],{},"text-success",[54,929,930],{},"text-danger"," use semantic theme colors",[27,933,934,937],{},[54,935,936],{},"text-body-secondary"," reduces emphasis while following the active color mode",[27,939,940,943],{},[54,941,942],{},"text-decoration-none"," removes an underline when that choice remains accessible",[27,945,946],{},"Text utilities change presentation, not the meaning of the content",[27,948,949],{},"Do not rely on color alone to communicate success, warnings, or errors",[11,951,953,957],{"id":952,"level":111},"display-flex-utilities",[16,954,956],{"id":955},"display-and-flex-utilities","Display And Flex Utilities",[117,958,959,997],{"gap":119,"left-width":120,"right-width":120},[122,960,961,965],{"v-slot:left":124},[126,962,964],{"id":963},"display","Display",[24,966,967,973,979,991,994],{},[27,968,969,972],{},[54,970,971],{},"d-none"," removes an element from layout",[27,974,975,978],{},[54,976,977],{},"d-block"," displays an element as a block",[27,980,981,984,985,987,988,990],{},[54,982,983],{},"d-none d-md-block"," hides it below ",[54,986,278],{}," and shows it from ",[54,989,278],{}," upward",[27,992,993],{},"Display utilities support the same responsive breakpoint infixes as the grid",[27,995,996],{},"Hidden navigation does not replace server-side authorization",[122,998,999,1003],{"v-slot:right":124},[126,1000,1002],{"id":1001},"flexbox-and-gap","Flexbox And Gap",[24,1004,1005,1011,1017,1023,1029,1039],{},[27,1006,1007,1010],{},[54,1008,1009],{},"d-flex"," makes an element a Flexbox parent",[27,1012,1013,1016],{},[54,1014,1015],{},"flex-column"," changes the main direction from row to column",[27,1018,1019,1022],{},[54,1020,1021],{},"justify-content-*"," aligns items along the main axis",[27,1024,1025,1028],{},[54,1026,1027],{},"align-items-*"," aligns items along the cross axis",[27,1030,1031,1034,1035,1038],{},[54,1032,1033],{},"gap-0"," through ",[54,1036,1037],{},"gap-5"," add consistent space between children",[27,1040,1041,1042,1045],{},"Prefer ",[54,1043,1044],{},"gap"," on the parent over separate margins on every flex child",[11,1047,1049,1053],{"id":1048,"level":111},"read-component-classes",[16,1050,1052],{"id":1051},"button-component","Button Component",[117,1054,1055,1060],{"gap":119,"left-width":120,"right-width":120},[122,1056,1057],{"v-slot:left":124},[200,1058],{"language":202,"src":1059},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fbutton-03.html",[122,1061,1062],{"v-slot:right":124},[24,1063,1064,1070,1076,1082,1095,1101],{},[27,1065,1066,1069],{},[54,1067,1068],{},"\u003Cbutton>"," keeps its normal HTML meaning and behavior",[27,1071,1072,1075],{},[54,1073,1074],{},"btn"," supplies the shared button shape, spacing, and states",[27,1077,1078,1081],{},[54,1079,1080],{},"btn-primary"," applies the primary semantic variant",[27,1083,1084,1085,381,1088,381,1091,1094],{},"Other variants include ",[54,1086,1087],{},"btn-secondary",[54,1089,1090],{},"btn-success",[54,1092,1093],{},"btn-danger",", and outline forms",[27,1096,1097,1098],{},"Multiple classes combine without changing the button's ",[54,1099,1100],{},"type",[27,1102,1103],{},"Use the variant that communicates the command's purpose; Bootstrap does not decide that purpose",[11,1105,1107,1111],{"id":1106,"level":111},"interactive-components",[16,1108,1110],{"id":1109},"modal-component","Modal Component",[117,1112,1115,1121],{"gap":119,"left-width":1113,"right-width":1114},"1.2fr","0.8fr",[122,1116,1117],{"v-slot:left":124},[200,1118],{"language":202,"src":1119,"max-height":1120},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fmodal-06.html","19rem",[122,1122,1123],{"v-slot:right":124},[24,1124,1125,1131,1140,1146,1149,1152],{},[27,1126,1127,1130],{},[54,1128,1129],{},"data-bs-toggle=\"modal\""," selects the Bootstrap behavior",[27,1132,1133,1136,1137],{},[54,1134,1135],{},"data-bs-target"," must match the modal's unique ",[54,1138,1139],{},"id",[27,1141,1142,1145],{},[54,1143,1144],{},"data-bs-dismiss=\"modal\""," closes the active modal",[27,1147,1148],{},"The Bootstrap bundle supplies the JavaScript behavior and Popper dependency",[27,1150,1151],{},"Headings and ARIA labels keep the control understandable beyond its visual styling",[27,1153,1154],{},"Project PHP still decides what data and commands belong inside the modal",[11,1156,1158,1162,1165],{"id":1157,"level":14},"why-reusability",[16,1159,1161],{"id":1160},"why-refactor-markup","Why Refactor Markup?",[20,1163,1164],{},"Repeated markup becomes harder to keep consistent as the project grows",[24,1166,1167,1170,1173,1176,1179],{},[27,1168,1169],{},"Login, registration, profile, and admin forms repeat the same field structure",[27,1171,1172],{},"List pages repeat responsive tables and action buttons",[27,1174,1175],{},"Shared partials keep Bootstrap classes and escaping in one place",[27,1177,1178],{},"Project pages still own validation, SQL, API calls, redirects, and authorization",[27,1180,1181],{},"Refactor only after the concrete page behavior already works",[11,1183,1185,1189],{"id":1184,"level":14},"helper-boundaries",[16,1186,1188],{"id":1187},"small-helper-boundaries","Small Helper Boundaries",[117,1190,1191,1214],{"gap":119,"left-width":120,"right-width":120},[122,1192,1193,1197],{"v-slot:left":124},[126,1194,1196],{"id":1195},"shared-helpers-own","Shared Helpers Own",[24,1198,1199,1202,1205,1208,1211],{},[27,1200,1201],{},"Escaped labels and values",[27,1203,1204],{},"Standard Bootstrap classes",[27,1206,1207],{},"Common input\u002Fselect\u002Ftextarea markup",[27,1209,1210],{},"Button variants",[27,1212,1213],{},"Table structure and action rendering",[122,1215,1216,1220],{"v-slot:right":124},[126,1217,1219],{"id":1218},"project-pages-own","Project Pages Own",[24,1221,1222,1225,1228,1231,1234],{},[27,1223,1224],{},"Submitted values and validation",[27,1226,1227],{},"Sticky safe values",[27,1229,1230],{},"Database and API calls",[27,1232,1233],{},"Role checks",[27,1235,1236],{},"Which row actions the current user may see",[11,1238,1240,1243,1250,1255],{"id":1239,"level":14},"shared-layout-partials",[16,1241,1242],{"id":1239},"Shared Layout Partials",[20,1244,1245,1246,1249],{},"Move shared assets out of ",[54,1247,1248],{},"partials\u002Fnav.php"," so each partial has one clear layout responsibility.",[200,1251],{"language":1252,"src":1253,"max-height":1254},"php","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fshared-head-07.php","18rem",[24,1256,1257,1263,1269,1272,1275],{},[27,1258,1259,1262],{},[54,1260,1261],{},"partials\u002Fhead.php"," owns document metadata, Bootstrap CSS, and project CSS",[27,1264,1265,1268],{},[54,1266,1267],{},"partials\u002Fscripts.php"," owns the Bootstrap bundle and shared project scripts",[27,1270,1271],{},"Project CSS follows Bootstrap CSS so project rules can override framework defaults",[27,1273,1274],{},"Project JavaScript follows the Bootstrap bundle",[27,1276,1277],{},"See the below slides for the separate scripts partial and matching Bootstrap navigation update",[11,1279,1281,1285,1291,1294],{"id":1280,"level":111},"render-scripts",[16,1282,1284],{"id":1283},"shared-scripts-partial","Shared Scripts Partial",[20,1286,1287,1288,1290],{},"Create ",[54,1289,1267],{},".",[200,1292],{"language":1252,"src":1293},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fscripts-partial-08.php",[24,1295,1296,1301,1312,1315],{},[27,1297,1298,1300],{},[54,1299,1267],{}," keeps Bootstrap and shared project JavaScript in one place",[27,1302,1303,1304,1307,1308,1311],{},"Call ",[54,1305,1306],{},"render_scripts()"," immediately before the closing ",[54,1309,1310],{},"\u003C\u002Fbody>"," tag",[27,1313,1314],{},"Loading the Bootstrap bundle before project JavaScript keeps Bootstrap components available to project code",[27,1316,1317,1318,1321],{},"The existing ",[54,1319,1320],{},"render_nav()"," and flash helpers stay where previous lessons placed them",[11,1323,1325,1329,1335,1339,1346],{"id":1324,"level":111},"bootstrap-navigation",[16,1326,1328],{"id":1327},"bootstrap-navigation-partial","Bootstrap Navigation Partial",[20,1330,1331,1332,1334],{},"Update the existing root ",[54,1333,1248],{}," after moving its asset tags into the new partials.",[200,1336],{"language":1252,"src":1337,"max-height":1338},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fbootstrap-navigation-07.php","20rem",[1340,1341,1343],"admonition",{"type":1342},"note",[20,1344,1345],{},"Replace UCID in the navigation brand with your own UCID.",[24,1347,1348,1351,1354],{},[27,1349,1350],{},"Keep all of the relevant links",[27,1352,1353],{},"The goal is to structure everything the Bootstrap way",[27,1355,1356],{},"This gives us a nice mobile and desktop navbar",[11,1358,1360,1364,1371,1375],{"id":1359,"level":14},"render-functions",[16,1361,1363],{"id":1362},"rendering-functions","Rendering Functions",[20,1365,1366,1367,1370],{},"Open ",[54,1368,1369],{},"lib\u002Frender_functions.php"," and append the new functions after the existing render helpers.",[200,1372],{"language":1252,"src":1373,"max-height":1374},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Frender-functions-08.php","17rem",[24,1376,1377,1386,1389,1392,1395,1401,1408],{},[27,1378,1379,1380,640,1382,1385],{},"Keep the existing ",[54,1381,1320],{},[54,1383,1384],{},"render_flash_messages()"," functions in place",[27,1387,1388],{},"Add the Module 08 functions together at the end of the file",[27,1390,1391],{},"Each function gives project pages a small, named interface",[27,1393,1394],{},"Each partial still owns its HTML",[27,1396,1397,1400],{},[54,1398,1399],{},"render_html_attributes()"," escapes configured HTML attributes in one place",[27,1402,1403,1404,1407],{},"The reference adds ",[54,1405,1406],{},"render_guide_search($filters, $limit)"," after the generic helpers so its public and Admin list pages share one domain-specific form",[27,1409,1410],{},"See the slides below for the three focused component partials",[11,1412,1414,1417,1422,1425],{"id":1413,"level":111},"input-helper",[16,1415,1416],{"id":1413},"Input Helper",[20,1418,1287,1419,1290],{},[54,1420,1421],{},"partials\u002Finput.php",[200,1423],{"language":1252,"src":1424,"max-height":1338},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Finput-partial-09.php",[24,1426,1427,1430,1433,1436,1443],{},[27,1428,1429],{},"Supports common inputs, hidden values, textareas, selects, checkboxes, and switches",[27,1431,1432],{},"Callers pass sticky values and validation attributes",[27,1434,1435],{},"Generates a unique field ID when one is omitted and uses it for both the control and label",[27,1437,1438,1439,1442],{},"Password callers omit ",[54,1440,1441],{},"value",", so passwords remain clear after an error",[27,1444,1445],{},"Checkbox and switch callers can use wrapper and label classes for page-specific layout",[11,1447,1449,1452,1457,1461],{"id":1448,"level":111},"button-helper",[16,1450,1451],{"id":1448},"Button Helper",[20,1453,1287,1454,1290],{},[54,1455,1456],{},"partials\u002Fbutton.php",[200,1458],{"language":1252,"src":1459,"max-height":1460},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fbutton-partial-10.php","16rem",[24,1462,1463,1469,1472,1486,1493,1504,1511],{},[27,1464,1465,1466,1468],{},"Always renders a semantic ",[54,1467,1068],{}," element",[27,1470,1471],{},"Allowlists button types and Bootstrap color variants",[27,1473,1474,1475,381,1478,381,1480,381,1482,1485],{},"Accepts ordinary attributes such as ",[54,1476,1477],{},"name",[54,1479,1441],{},[54,1481,1139],{},[54,1483,1484],{},"data-*",", and extra classes",[27,1487,1488,1489,1492],{},"The attribute map technically supports ",[54,1490,1491],{},"onclick",", but inline JavaScript mixes behavior into generated markup",[27,1494,1041,1495,579,1497,1499,1500,1503],{},[54,1496,1139],{},[54,1498,1484],{}," attributes and attach behavior with ",[54,1501,1502],{},"addEventListener()"," in a shared or page-specific script",[27,1505,1506,1507,1510],{},"Use Bootstrap's ",[54,1508,1509],{},"data-bs-*"," attributes for behaviors already supplied by Bootstrap",[27,1512,1513],{},"Escapes visible text and attributes before output",[11,1515,1517,1520,1525,1528],{"id":1516,"level":111},"table-helper",[16,1518,1519],{"id":1516},"Table Helper",[20,1521,1287,1522,1290],{},[54,1523,1524],{},"partials\u002Ftable.php",[200,1526],{"language":1252,"src":1527,"max-height":1338},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Ftable-partial-11.php",[24,1529,1530,1537,1540,1543,1546,1549],{},[27,1531,1532,1533,1536],{},"Uses explicit ",[54,1534,1535],{},"column_key => Heading"," choices instead of guessing from every database column",[27,1538,1539],{},"Escapes every displayed cell instead of accepting raw HTML columns",[27,1541,1542],{},"The usage example configures View and Edit as GET links and Delete as a POST form",[27,1544,1545],{},"Receives only the actions the calling page has already authorized",[27,1547,1548],{},"Logs missing row or column definitions and supplies a readable empty-state fallback",[27,1550,1551],{},"Keeps the helper flexible without requiring a larger configuration surface",[11,1553,1555,1558,1625],{"id":1554,"level":14},"required-project-integration",[16,1556,1557],{"id":1554},"Required Project Integration",[117,1559,1560,1599],{"gap":119,"left-width":120,"right-width":120},[122,1561,1562,1566],{"v-slot:left":124},[126,1563,1565],{"id":1564},"copy-into-the-project","Copy Into The Project",[24,1567,1568,1572,1576,1580,1584,1588,1594],{},[27,1569,1570],{},[54,1571,1261],{},[27,1573,1574],{},[54,1575,1267],{},[27,1577,1578],{},[54,1579,1421],{},[27,1581,1582],{},[54,1583,1456],{},[27,1585,1586],{},[54,1587,1524],{},[27,1589,1590,1593],{},[54,1591,1592],{},"partials\u002Fguide_search.php"," for the reference guide pages",[27,1595,1596,1597],{},"Updated ",[54,1598,1369],{},[122,1600,1601,1605],{"v-slot:right":124},[126,1602,1604],{"id":1603},"adapt-to-the-proposal","Adapt To The Proposal",[24,1606,1607,1610,1613,1616,1619,1622],{},[27,1608,1609],{},"Account and role pages",[27,1611,1612],{},"API-specific wrapper and mapped fields",[27,1614,1615],{},"API import and manual creation",[27,1617,1618],{},"Public list and details pages",[27,1620,1621],{},"Admin edit and delete behavior",[27,1623,1624],{},"Project-relevant filtering and sorting",[20,1626,1627],{},"The generic helper files are course infrastructure. The data, content, and presentation must match your project decisions while satisfying the provided project proposal requirements.",[11,1629,1631,1634,1637,1640],{"id":1630,"level":14},"shared-page-shell",[16,1632,1633],{"id":1630},"Shared Page Shell",[20,1635,1636],{},"Use the same shell on every updated page.",[200,1638],{"language":1252,"src":1639,"max-height":1374},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fpage-shell-13.php",[24,1641,1642,1650,1655,1662,1667],{},[27,1643,1644,1647,1648],{},[54,1645,1646],{},"render_head()"," loads shared metadata and styles inside ",[54,1649,242],{},[27,1651,1652,1654],{},[54,1653,1320],{}," remains the first shared body component",[27,1656,1657,1659,1660],{},[54,1658,1384],{}," remains near the end of ",[54,1661,246],{},[27,1663,1664,1666],{},[54,1665,1306],{}," loads shared JavaScript last",[27,1668,1669],{},"We can apply this shape to our files before moving on",[11,1671,1673,1677],{"id":1672,"level":14},"apply-account-helpers",[16,1674,1676],{"id":1675},"apply-helpers-to-account-pages","Apply Helpers To Account Pages",[24,1678,1679,1686,1689,1692,1695],{},[27,1680,1681,1682,1685],{},"Keep the existing PHP request handling and JavaScript ",[54,1683,1684],{},"validate()"," functions",[27,1687,1688],{},"Replace only the repeated form markup",[27,1690,1691],{},"Keep field names, IDs, attributes, sticky safe values, and autocomplete behavior aligned",[27,1693,1694],{},"Use the shared page shell around each updated form",[27,1696,1697],{},"See the slides below for login, registration, and profile replacements",[11,1699,1701,1704,1710,1713],{"id":1700,"level":111},"login-helper-usage",[16,1702,1703],{"id":1700},"Login Helper Usage",[20,1705,1706,1707,1290],{},"Replace only the form in ",[54,1708,1709],{},"public_html\u002Fproject\u002Flogin.php",[200,1711],{"language":1252,"src":1712,"max-height":1254},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Flogin-helper-14.php",[24,1714,1715,1718,1721],{},[27,1716,1717],{},"The identifier keeps its combined username-or-email pattern",[27,1719,1720],{},"The password remains blank after any validation error",[27,1722,1723],{},"Existing server and JavaScript validation still use the same field names",[11,1725,1727,1731,1736,1739],{"id":1726,"level":111},"register-helper-usage",[16,1728,1730],{"id":1729},"registration-helper-usage","Registration Helper Usage",[20,1732,1706,1733,1290],{},[54,1734,1735],{},"public_html\u002Fproject\u002Fregister.php",[200,1737],{"language":1252,"src":1738,"max-height":1120},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fregister-helper-15.php",[24,1740,1741,1744,1747],{},[27,1742,1743],{},"Email and username remain sticky",[27,1745,1746],{},"Password fields intentionally receive no value",[27,1748,1749],{},"HTML attributes continue to complement JavaScript and PHP validation",[11,1751,1753,1756,1762,1765],{"id":1752,"level":111},"profile-helper-usage",[16,1754,1755],{"id":1752},"Profile Helper Usage",[20,1757,1758,1759,1290],{},"Replace the two forms in ",[54,1760,1761],{},"public_html\u002Fproject\u002Fprofile.php",[200,1763],{"language":1252,"src":1764,"max-height":1338},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fprofile-helper-16.php",[24,1766,1767,1770,1777],{},[27,1768,1769],{},"The Bootstrap grid shows one form per column on larger screens",[27,1771,1772,1773,1776],{},"Hidden ",[54,1774,1775],{},"action"," values still select the correct server-side workflow",[27,1778,1779],{},"The existing detail and password validation branches remain unchanged",[11,1781,1783,1787],{"id":1782,"level":14},"apply-admin-helpers",[16,1784,1786],{"id":1785},"apply-helpers-to-existing-admin-pages","Apply Helpers To Existing Admin Pages",[24,1788,1789,1796,1799,1802,1805,1808],{},[27,1790,1791,1792,1795],{},"Keep each page's existing ",[54,1793,1794],{},"require_role(\"Admin\")",", request handling, validation, database work, flashes, redirects, and access checks",[27,1797,1798],{},"Replace only repeated form, button, table, and page-shell markup",[27,1800,1801],{},"Use input and button helpers on create and search forms",[27,1803,1804],{},"Use the table helper for ordinary role and API-data lists",[27,1806,1807],{},"Keep the assignment checkbox matrix custom because it has a specialized workflow",[27,1809,1810],{},"See the slides below for focused replacements, not rewritten page logic",[11,1812,1814,1818,1827,1849],{"id":1813,"level":111},"role-create-list-usage",[16,1815,1817],{"id":1816},"create-and-list-roles","Create And List Roles",[20,1819,1820,1821,640,1824,1290],{},"Replace the form\u002Ftable blocks in ",[54,1822,1823],{},"create_role.php",[54,1825,1826],{},"list_roles.php",[117,1828,1829,1839],{"gap":119,"left-width":120,"right-width":120},[122,1830,1831,1836],{"v-slot:left":124},[126,1832,1834],{"id":1833},"create_rolephp",[54,1835,1823],{},[200,1837],{"language":1252,"src":1838,"max-height":1120},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Frole-create-17.php",[122,1840,1841,1846],{"v-slot:right":124},[126,1842,1844],{"id":1843},"list_rolesphp",[54,1845,1826],{},[200,1847],{"language":1252,"src":1848,"max-height":1120},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Frole-list-17.php",[24,1850,1851,1860,1867],{},[27,1852,1853,1855,1856,1859],{},[54,1854,1826],{}," converts ",[54,1857,1858],{},"is_active"," into readable display text before rendering",[27,1861,1862,1863,1866],{},"The inputs get replaced with compatible ",[54,1864,1865],{},"render_input()"," calls",[27,1868,1869,1870],{},"The table data gets restructured to utilize ",[54,1871,1872],{},"render_table()",[11,1874,1876,1880,1883,1887],{"id":1875,"level":111},"assign-role-usage",[16,1877,1879],{"id":1878},"assign-roles","Assign Roles",[20,1881,1882],{},"Reuse helpers around the existing custom checkbox workflow.",[200,1884],{"language":1252,"src":1885,"max-height":1886},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fassign-roles-18.php","26rem",[24,1888,1889],{},[27,1890,1891,1892,636,1894,1897],{},"Main goal is replacing the inputs\u002Fbuttons with the ",[54,1893,1865],{},[54,1895,1896],{},"render_button()"," equivalents and applying Bootstrap classes to the forms and HTML content",[11,1899,1901,1905,1908,1915,1939],{"id":1900,"level":14},"new-guided-domain",[16,1902,1904],{"id":1903},"reference-example-starcraft-guides","Reference Example: StarCraft Guides",[20,1906,1907],{},"This StarCraft guide reference implementation demonstrates how the generic helpers support project requirements from API testing through role-aware CRUD.",[20,1909,1910],{},[217,1911,1914],{"href":1912,"rel":1913},"https:\u002F\u002Frapidapi.com\u002Fmatt-OKcGPRhfo\u002Fapi\u002Funofficial-starcraft-guides-api",[221],"Unofficial StarCraft Guides API on RapidAPI",[24,1916,1917,1920,1927,1930,1933,1936],{},[27,1918,1919],{},"Reuse of the API and database helpers established in Module 07",[27,1921,1922,1923,1926],{},"Testing RapidAPI's ",[54,1924,1925],{},"getGameGuides()"," endpoint before writing database rows",[27,1928,1929],{},"Mapping provider JSON keys into stable project field names",[27,1931,1932],{},"Support for API imports and manual guide creation",[27,1934,1935],{},"A public guide list and public detail page",[27,1937,1938],{},"Admin-only guide creation, editing, and deletion",[1340,1940,1941],{"type":1342},[20,1942,1943],{},"The StarCraft Guides code is a reference implementation. Apply the same decisions to the API, entities, fields, and page names chosen for your project; the generic rendering helpers are the files intended to be copied directly.",[11,1945,1947,1951,1954,1971,1979],{"id":1946,"level":14},"build-sc2-guides",[16,1948,1950],{"id":1949},"starcraft-guides-reference-implementation","StarCraft Guides Reference Implementation",[20,1952,1953],{},"The following vertical slides document one linear reference implementation that connects the generic helpers to an API domain.",[1955,1956,1957,1960,1963,1966],"ol",{},[27,1958,1959],{},"Environment names and expected response documentation",[27,1961,1962],{},"A table design based on the API data",[27,1964,1965],{},"A direct API test without database inserts",[27,1967,1968,1969],{},"An API-specific wrapper and shared-app wiring\n",[298,1970],{},[24,1972,1973,1976],{},[27,1974,1975],{},"Apply the equivalent pattern to the API, entities, and fields selected for your project",[27,1977,1978],{},"See the slides below for each reference file in implementation order",[1340,1980,1981],{"type":1342},[20,1982,1983],{},"These slides extend the prior lesson's API steps using the reference API and guide entity.",[11,1985,1987,1991,1994,2036],{"id":1986,"level":111},"sc2-environment",[16,1988,1990],{"id":1989},"starcraft-environment-settings-example","StarCraft Environment Settings Example",[20,1992,1993],{},"The reference extends the environment names already loaded in Module 07 for the StarCraft Guides API.",[117,1995,1996,2007],{"gap":119,"left-width":120,"right-width":120},[122,1997,1998,2004],{"v-slot:left":124},[126,1999,2001],{"id":2000},"libload_api_keysphp",[54,2002,2003],{},"lib\u002Fload_api_keys.php",[200,2005],{"language":1252,"src":2006},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fsc2-env-19.php",[122,2008,2009,2017,2021],{"v-slot:right":124},[126,2010,2012,2013,2016],{"id":2011},"example-libenv-entries","Example ",[54,2014,2015],{},"lib\u002F.env"," Entries",[200,2018],{"language":2019,"src":2020},"text","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fsc2-local-env-19.txt",[24,2022,2023,2033],{},[27,2024,2025,2026,2029,2030],{},"Your project uses equivalent names for its chosen API in local, Render ",[54,2027,2028],{},"qa",", and Render ",[54,2031,2032],{},"prod",[27,2034,2035],{},"Never commit the real API secret key",[24,2037,2038,2045],{},[27,2039,2040,2041,2044],{},"The reference changes only the ",[54,2042,2043],{},"$env_keys"," assignment and keeps the loader logic below it unchanged",[27,2046,2047,2048,640,2051],{},"Earlier API settings retained or removed as needed alongside ",[54,2049,2050],{},"STARCRAFT_API_KEY",[54,2052,2053],{},"STARCRAFT_API_HOST",[11,2055,2057,2061,2075,2199,2201],{"id":2056,"level":111},"sc2-response-shape",[16,2058,2060],{"id":2059},"starcraft-guides-response-and-table","StarCraft Guides Response And Table",[20,2062,2063,2067,2068,2070,2071,2074],{},[217,2064,2066],{"href":1912,"rel":2065},[221],"StarCraft Guides API"," response from ",[54,2069,1925],{}," is mapped into normalized rows for the ",[54,2072,2073],{},"Guides"," table.",[117,2076,2077,2143],{"gap":119,"left-width":120,"right-width":120},[122,2078,2079,2084,2089,2094],{"v-slot:left":124},[20,2080,2081],{},[135,2082,2083],{},"Response",[20,2085,2086],{},[54,2087,2088],{},"\u002Fapi\u002Fv1\u002Fgames\u002F{game}\u002Fguides\u002Findex.json",[200,2090],{"language":2091,"src":2092,"max-height":2093},"json","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fguides-response-20.json","12rem",[24,2095,2096,2112,2130,2137],{},[27,2097,2098,2099,2101,2102,2105,2106,640,2109],{},"Identity: ",[54,2100,1139],{}," -> ",[54,2103,2104],{},"api_id","; ",[54,2107,2108],{},"game",[54,2110,2111],{},"title",[27,2113,2114,2115,381,2118,381,2121,381,2124,385,2127],{},"Content: ",[54,2116,2117],{},"excerpt.text",[54,2119,2120],{},"summary.text",[54,2122,2123],{},"primaryCategory",[54,2125,2126],{},"slug",[54,2128,2129],{},"status",[27,2131,2132,2133,2136],{},"Source\u002Fmatchup: ",[54,2134,2135],{},"source.author",", source URL fallback, media URL, races, and matchup",[27,2138,2139,2140],{},"Missing optional values become ",[54,2141,2142],{},"null",[122,2144,2145,2150,2156,2160],{"v-slot:right":124},[20,2146,2147],{},[135,2148,2149],{},"Table",[20,2151,2152,2153],{},"File: ",[54,2154,2155],{},"sql\u002F009_create_table_sc_guides.sql",[200,2157],{"language":2158,"src":2159,"max-height":2093},"sql","\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fcreate-guides-table-24.sql",[24,2161,2162,2173,2182,2185,2191],{},[27,2163,2164,2165,381,2167,385,2170],{},"Metadata: ",[54,2166,1139],{},[54,2168,2169],{},"created",[54,2171,2172],{},"modified",[27,2174,2175,2176,381,2178,385,2180],{},"Imported identity: nullable ",[54,2177,2104],{},[54,2179,2108],{},[54,2181,2126],{},[27,2183,2184],{},"Content, source, and matchup fields match the mapped response values",[27,2186,2187,2188,2190],{},"A null ",[54,2189,2104],{}," identifies a manually created row",[27,2192,2193,2194,640,2196,2198],{},"The composite ",[54,2195,2104],{},[54,2197,2111],{}," key identifies an imported guide; an API guide and a manual guide may share a title",[298,2200],{},[24,2202,2203],{},[27,2204,2205],{},"You make equivalent mapping and table-design decisions for your chosen API",[11,2207,2209,2213,2219,2222],{"id":2208,"level":111},"test-api-starcraft",[16,2210,2212],{"id":2211},"direct-starcraft-api-test-example","Direct StarCraft API Test Example",[20,2214,2215,2216,1290],{},"Reference file: ",[54,2217,2218],{},"public_html\u002Fproject\u002FtestApi-starcraft.php",[200,2220],{"language":1252,"src":2221,"max-height":1338},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Ftest-api-starcraft-23.php",[24,2223,2224,2231,2245,2248],{},[27,2225,2226,2227,2230],{},"A plain form selects StarCraft or StarCraft II before sending the direct ",[54,2228,2229],{},"api_get()"," request",[27,2232,2233,2236,2237,2240,2241,2244],{},[54,2234,2235],{},"decode_api_response()"," confirms the top-level ",[54,2238,2239],{},"guides"," JSON key, then ",[54,2242,2243],{},"var_dump()"," shows the raw decoded response",[27,2246,2247],{},"The wrapper on the following slide extracts and normalizes fields from this verified response",[27,2249,2250],{},"Your project should use a similar small test page to inspect the chosen API before designing a wrapper",[11,2252,2254,2258,2263,2266],{"id":2253,"level":111},"sc2-api-wrapper",[16,2255,2257],{"id":2256},"starcraft-guides-api-wrapper-example","StarCraft Guides API Wrapper Example",[20,2259,2215,2260,1290],{},[54,2261,2262],{},"lib\u002Fstarcraft_api.php",[200,2264],{"language":1252,"src":2265,"max-height":1338},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fsc2-api-21.php",[24,2267,2268,2281,2287,2293,2303,2309,2316],{},[27,2269,2270,2273,2274,579,2277,2280],{},[54,2271,2272],{},"fetch_starcraft_guides($game, $errors)"," accepts either ",[54,2275,2276],{},"sc1",[54,2278,2279],{},"sc2"," and builds the matching endpoint path",[27,2282,2283,2286],{},[54,2284,2285],{},"map_sc_guide()"," converts nested and camelCase JSON keys into stable snake_case fields",[27,2288,2289,2290,2292],{},"The reference preserves optional strings as ",[54,2291,2142],{}," and limits source URLs to HTTP(S)",[27,2294,2295,2296,2299,2300],{},"Its source URL falls back from ",[54,2297,2298],{},"source.url"," to ",[54,2301,2302],{},"source.canonicalUrl",[27,2304,2305,2306,2308],{},"Returned rows already match ",[54,2307,2073],{}," table column names",[27,2310,2311,2312,2315],{},"API errors join the same ",[54,2313,2314],{},"$errors"," list used by project pages",[27,2317,2318],{},"Your project wrapper provides the same boundary using its own JSON keys and table fields",[11,2320,2322,2326,2332,2335],{"id":2321,"level":111},"wire-sc2-wrapper",[16,2323,2325],{"id":2324},"api-wrapper-wiring-example","API Wrapper Wiring Example",[20,2327,2328,2329,1290],{},"The reference implementation loads its API-specific wrapper with the other API imports in ",[54,2330,2331],{},"lib\u002Fapp.php",[200,2333],{"language":1252,"src":2334},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fwire-sc2-api-22.php",[24,2336,2337,2343,2346,2349,2352],{},[27,2338,2339,2342],{},[54,2340,2341],{},"api_helper.php"," and the earlier API wrapper imports remain unchanged",[27,2344,2345],{},"Add only the new API-specific wrapper beside those existing imports",[27,2347,2348],{},"Keep every other shared import in its current position",[27,2350,2351],{},"Project pages do not require the API-specific wrapper separately",[27,2353,2354],{},"Wire your own API wrapper in the same location",[11,2356,2358,2361,2364],{"id":2357,"level":14},"starcraft-guide-page-changes",[16,2359,2360],{"id":2357},"StarCraft Guide Page Changes",[20,2362,2363],{},"With the API response and wrapper established, the reference applies the shared helpers to the StarCraft guide pages.",[24,2365,2366,2369,2372,2375,2378],{},[27,2367,2368],{},"Admin creation supports both selected-game API imports and manual guide rows",[27,2370,2371],{},"Public list and detail pages make guides available to every visitor",[27,2373,2374],{},"Admin-only actions provide guide editing and POST-based deletion",[27,2376,2377],{},"Navigation exposes public guides to all visitors and management links to Admin users",[27,2379,2380],{},"The slides below show the focused changes for each page; adapt the same page roles to your project's entities",[11,2382,2384,2388,2394,2414],{"id":2383,"level":111},"create-guide-logic",[16,2385,2387],{"id":2386},"admin-create-example","Admin Create Example",[20,2389,2390,2391,1290],{},"Both snippets belong to ",[54,2392,2393],{},"public_html\u002Fproject\u002Fadmin\u002Fcreate_guide.php",[117,2395,2396,2405],{"gap":119,"left-width":120,"right-width":120},[122,2397,2398,2402],{"v-slot:left":124},[126,2399,2401],{"id":2400},"processing","Processing",[200,2403],{"language":1252,"src":2404,"max-height":1374},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fcreate-guide-logic-25.php",[122,2406,2407,2411],{"v-slot:right":124},[126,2408,2410],{"id":2409},"forms-and-toggle","Forms And Toggle",[200,2412],{"language":1252,"src":2413,"max-height":1374},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fcreate-guide-form-26.php",[24,2415,2416,2423,2431,2434,2440],{},[27,2417,2418,2419,2422],{},"The ",[54,2420,2421],{},"import_guides"," path fetches mapped rows for the selected game and intentionally updates duplicates",[27,2424,2418,2425,2428,2429],{},[54,2426,2427],{},"create_guide"," path validates one manual row and leaves provider-only values ",[54,2430,2142],{},[27,2432,2433],{},"Buttons show one workflow at a time; JavaScript changes visibility without replacing normal POST submissions",[27,2435,2436,2439],{},[54,2437,2438],{},"$active_form"," keeps the manual form visible after its validation errors",[27,2441,2442,2443,2446],{},"Both paths use ",[54,2444,2445],{},"insert()",", log technical failures, and redirect back to the create page with a flash message",[11,2448,2450,2454,2459,2462],{"id":2449,"level":111},"admin-guides-list",[16,2451,2453],{"id":2452},"admin-list-example","Admin List Example",[20,2455,2215,2456,1290],{},[54,2457,2458],{},"public_html\u002Fproject\u002Fadmin\u002Flist_guides.php",[200,2460],{"language":1252,"src":2461,"max-height":1338},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fadmin-guides-list-32.php",[24,2463,2464,2469,2479,2482],{},[27,2465,2466,2468],{},[54,2467,1794],{}," protects the management list",[27,2470,2471,2472,2474,2475,2478],{},"Reuses the same ",[54,2473,1406],{}," helper and ",[54,2476,2477],{},"limit"," range as the public list",[27,2480,2481],{},"Every row includes View, Edit, and POST Delete actions for an Admin user",[27,2483,2484,2485,2488],{},"Delete sends the allowlisted ",[54,2486,2487],{},"return_to=admin\u002Flist_guides.php"," value so the user returns here",[11,2490,2492,2496,2501,2504],{"id":2491,"level":111},"admin-edit-guide",[16,2493,2495],{"id":2494},"admin-edit-example","Admin Edit Example",[20,2497,2215,2498,1290],{},[54,2499,2500],{},"public_html\u002Fproject\u002Fadmin\u002Fedit_guide.php",[200,2502],{"language":1252,"src":2503,"max-height":1338},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fedit-guide-29.php",[24,2505,2506,2511,2514,2517,2520,2523,2526,2529],{},[27,2507,2508,2510],{},[54,2509,1794],{}," protects both the form and update",[27,2512,2513],{},"Safe values remain sticky after validation errors",[27,2515,2516],{},"The lookup selects only the columns needed by the editable form",[27,2518,2519],{},"The reference updates title, category, races, matchup, summary, and source URL",[27,2521,2522],{},"Provider identity, source flags, and course metadata are not editable",[27,2524,2525],{},"A later API import may replace edited fields on an imported row",[27,2527,2528],{},"Your project should define its own editable-field allowlist",[27,2530,2531],{},"The complete page shell keeps shared head, navigation, flash messages, and scripts in their standard locations",[11,2533,2535,2539,2544,2547],{"id":2534,"level":111},"admin-delete-guide",[16,2536,2538],{"id":2537},"admin-delete-example","Admin Delete Example",[20,2540,2215,2541,1290],{},[54,2542,2543],{},"public_html\u002Fproject\u002Fadmin\u002Fdelete_guide.php",[200,2545],{"language":1252,"src":2546,"max-height":1254},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fdelete-guide-30.php",[24,2548,2549,2552,2555,2562,2565,2571,2574],{},[27,2550,2551],{},"The table helper places the guide ID in the POST form's query string",[27,2553,2554],{},"The destination reads that ID through GET, while deletion itself remains POST-only",[27,2556,2557,2558,2561],{},"An allowlisted ",[54,2559,2560],{},"return_to"," value sends the user back to the originating public or Admin guide list",[27,2563,2564],{},"A repeated Admin guard on the destination page",[27,2566,2567,2568],{},"A prepared statement with ",[54,2569,2570],{},"LIMIT 1",[27,2572,2573],{},"Redirect back to the requested allowlisted list with a flash result",[27,2575,2576],{},"Your delete handler must repeat the authorized role guard",[11,2578,2580,2584,2589,2609],{"id":2579,"level":111},"public-guides-list",[16,2581,2583],{"id":2582},"public-list-example","Public List Example",[20,2585,2215,2586,1290],{},[54,2587,2588],{},"public_html\u002Fproject\u002Fguides.php",[117,2590,2591,2600],{"gap":119,"left-width":120,"right-width":120},[122,2592,2593,2597],{"v-slot:left":124},[126,2594,2596],{"id":2595},"page","Page",[200,2598],{"language":1252,"src":2599,"max-height":1254},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fguides-list-27.php",[122,2601,2602,2606],{"v-slot:right":124},[126,2603,2605],{"id":2604},"shared-search-form","Shared Search Form",[200,2607],{"language":1252,"src":2608,"max-height":1254},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fguide-search-form-27a.php",[24,2610,2611,2614,2627,2634,2637],{},[27,2612,2613],{},"No login guard, so any visitor can browse guides",[27,2615,2616,2617,2620,2621,1034,2623,2626],{},"Shared GET filters default to a limit of ",[54,2618,2619],{},"10",", accept ",[54,2622,729],{},[54,2624,2625],{},"100",", and provide a Reset link",[27,2628,2629,2630,2633],{},"Each populated filter adds an ",[54,2631,2632],{},"AND"," condition to narrow the results",[27,2635,2636],{},"Every visitor receives View; Admin users also receive Edit and POST Delete",[27,2638,2639,2640],{},"The page decides authorized actions before passing them to ",[54,2641,1872],{},[11,2643,2645,2649,2654,2657],{"id":2644,"level":111},"public-guide-view",[16,2646,2648],{"id":2647},"public-view-one-example","Public View One Example",[20,2650,2215,2651,1290],{},[54,2652,2653],{},"public_html\u002Fproject\u002Fguide.php",[200,2655],{"language":1252,"src":2656,"max-height":1338},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fguide-view-28.php",[24,2658,2659,2662,2672,2675,2678,2681],{},[27,2660,2661],{},"Validates the requested primary key before querying",[27,2663,2664,2665,2668,2669,2671],{},"Uses ",[54,2666,2667],{},"select()"," with ",[54,2670,2570],{}," for one matching row",[27,2673,2674],{},"Escapes required and nullable guide values",[27,2676,2677],{},"Uses source URLs validated before storage and revalidates the optional video URL before rendering links",[27,2679,2680],{},"Provides one clear path back to the public list",[27,2682,2683],{},"A detail page should show more useful information than its list summary",[11,2685,2687,2691,2697,2700],{"id":2686,"level":111},"guide-navigation",[16,2688,2690],{"id":2689},"navigation-link-changes","Navigation Link Changes",[20,2692,2693,2694,2696],{},"Update only these links in ",[54,2695,1248],{},"; keep the prior lesson's brand, toggle, account links, login state, and surrounding navigation markup.",[200,2698],{"language":1252,"src":2699,"max-height":1374},"\u002Fgenerated-snippets\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability\u002Fguide-navigation-31.php",[24,2701,2702,2705,2708,2715,2718,2721],{},[27,2703,2704],{},"Add public Guides access for logged-out and logged-in visitors",[27,2706,2707],{},"Replace the generic Admin dropdown with Manage Roles and Manage Guides",[27,2709,2710,2711,2714],{},"Keep both management dropdowns inside the existing ",[54,2712,2713],{},"has_role(\"Admin\")"," condition",[27,2716,2717],{},"Keep role creation, listing, and assignment under Manage Roles",[27,2719,2720],{},"Keep guide creation and listing under Manage Guides",[27,2722,2723],{},"Add equivalent entity-management links for your own project",[11,2725,2727,2730],{"id":2726,"level":14},"check-your-work",[16,2728,2729],{"id":2726},"Check Your Work",[1955,2731,2732,2735,2738,2741,2744,2747,2756,2759,2762],{},[27,2733,2734],{},"Confirm the generic head, scripts, input, button, and table partials are in the project",[27,2736,2737],{},"Load login, registration, profile, and all three role-admin pages",[27,2739,2740],{},"Confirm labels, sticky values, validation, flashes, and passwords behave as before",[27,2742,2743],{},"Test your chosen API and inspect mapped project fields before a database write",[27,2745,2746],{},"Confirm API import and manual creation save the chosen entity's shared table shape",[27,2748,2749,2750,381,2752,385,2754],{},"Test public and Admin list filters individually and in combination, plus limits of ",[54,2751,729],{},[54,2753,2619],{},[54,2755,2625],{},[27,2757,2758],{},"Open the entity list page as a non-admin and confirm only details\u002Fview actions appear",[27,2760,2761],{},"Log in as Admin and confirm the entity's create, edit, and delete behavior",[27,2763,2764],{},"Test responsive navigation, forms, grids, and tables at narrow and wide browser widths",[11,2766,2768,2771],{"id":2767,"level":14},"customization-cautions",[16,2769,2770],{"id":2767},"Customization Cautions",[24,2772,2773,2776,2782,2785,2788,2791],{},[27,2774,2775],{},"Load project CSS after Bootstrap",[27,2777,392,2778,2781],{},[54,2779,2780],{},"!important"," sparingly because it makes later overrides harder",[27,2783,2784],{},"Do not move validation into presentation helpers",[27,2786,2787],{},"Do not let generic render helpers decide authorization",[27,2789,2790],{},"Keep output escaping at the shared component boundary",[27,2792,2793],{},"Use custom markup when a reusable helper makes a workflow harder to understand",[11,2795,2797,2800],{"id":2796,"level":14},"knowledge-check",[16,2798,2799],{"id":2796},"Knowledge Check",[24,2801,2802,2805,2808,2811,2814,2817],{},[27,2803,2804],{},"Why is project CSS loaded after Bootstrap CSS?",[27,2806,2807],{},"Why does the table helper require an explicit column map?",[27,2809,2810],{},"Where is authorization decided for guide row actions?",[27,2812,2813],{},"Why does the API wrapper map JSON keys before pages receive guide data?",[27,2815,2816],{},"Which parts of the StarCraft Guides reference should change for your project domain?",[27,2818,2819],{},"Which generic helper files should remain reusable across domains?",[11,2821,2823,2827],{"id":2822,"level":14},"terms-and-learning",[16,2824,2826],{"id":2825},"key-terms-and-further-learning","Key Terms And Further Learning",[117,2828,2829,2859],{"gap":119,"left-width":120,"right-width":120},[122,2830,2831,2835,2841,2847,2853],{"v-slot:left":124},[126,2832,2834],{"id":2833},"key-terms","Key Terms",[20,2836,2837,2840],{},[135,2838,2839],{},"Breakpoint"," - Screen-width threshold used by responsive classes",[20,2842,2843,2846],{},[135,2844,2845],{},"Component"," - Reusable interface pattern with established markup and styles",[20,2848,2849,2852],{},[135,2850,2851],{},"Partial"," - Shared PHP file that renders a reusable markup fragment",[20,2854,2855,2858],{},[135,2856,2857],{},"Mapping"," - Converting provider JSON keys into stable project field names",[122,2860,2861,2865],{"v-slot:right":124},[126,2862,2864],{"id":2863},"further-learning","Further Learning",[24,2866,2867,2874,2881,2888],{},[27,2868,2869],{},[217,2870,2873],{"href":2871,"rel":2872},"https:\u002F\u002Fgetbootstrap.com\u002Fdocs\u002F5.3\u002Fgetting-started\u002Fintroduction\u002F",[221],"Bootstrap 5.3 documentation",[27,2875,2876],{},[217,2877,2880],{"href":2878,"rel":2879},"https:\u002F\u002Fgetbootstrap.com\u002Fdocs\u002F5.3\u002Flayout\u002Fgrid\u002F",[221],"Bootstrap grid",[27,2882,2883],{},[217,2884,2887],{"href":2885,"rel":2886},"https:\u002F\u002Fgetbootstrap.com\u002Fdocs\u002F5.3\u002Fforms\u002Foverview\u002F",[221],"Bootstrap forms",[27,2889,2890],{},[217,2891,1914],{"href":1912,"rel":2892},[221],[11,2894,2896,2900],{"id":2895,"level":14},"finish-lesson-branch",[16,2897,2899],{"id":2898},"finish-the-lesson-branch","Finish The Lesson Branch",[1955,2901,2902,2908,2914,2917,2923,2929,2938],{},[27,2903,2904,2905],{},"Check the final file list with ",[54,2906,2907],{},"git status",[27,2909,2910,2911],{},"Stage shared and project changes with ",[54,2912,2913],{},"git add lib\u002F partials\u002F sql\u002F public_html\u002Fproject\u002F",[27,2915,2916],{},"Commit Bootstrap, rendering helpers, and project-domain page updates in focused pieces",[27,2918,2919,2920],{},"Push with ",[54,2921,2922],{},"git push origin Milestone2-Part04-Bootstrap-Reusability",[27,2924,2925,2926,2928],{},"Open and merge a pull request into ",[54,2927,2028],{},", then review the deployed project",[27,2930,2931,2932,2934,2935,2937],{},"Promote tested ",[54,2933,2028],{}," work to ",[54,2936,2032],{}," when required",[27,2939,2940,2941,2668,2943,640,2946],{},"Return to ",[54,2942,2028],{},[54,2944,2945],{},"git checkout qa",[54,2947,2948],{},"git pull origin qa",[11,2950,2952,2955,2975],{"id":2951,"level":14},"summary",[16,2953,2954],{"id":2951},"Summary",[24,2956,2957,2960,2963,2966,2969,2972],{},[27,2958,2959],{},"Bootstrap 5.3 supplies responsive layout, components, utilities, and optional JavaScript behavior",[27,2961,2962],{},"Shared head and scripts partials keep current CDN assets in the correct document locations",[27,2964,2965],{},"Students copy the generic input, button, and table helpers as shared project infrastructure",[27,2967,2968],{},"Account and role pages reuse the helpers while preserving validation and authorization",[27,2970,2971],{},"The StarCraft Guides workflow is a reference showing API, database, rendering, and role patterns in linear order",[27,2973,2974],{},"Each project applies those patterns to its chosen API, entities, fields, and workflows while satisfying the provided project proposal requirements",[20,2976,2977,2978],{},"GitHub reference checkpoint: ",[217,2979,2982],{"href":2980,"rel":2981},"https:\u002F\u002Fgithub.com\u002FMattToegel\u002FIT202-2026\u002Ftree\u002FMilestone2-Part04-Bootstrap-Reusability",[221],"Milestone2-Part04-Bootstrap-Reusability branch",{"title":124,"searchDepth":2984,"depth":2984,"links":2985},2,[2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038],{"id":13,"depth":2984,"text":18},{"id":44,"depth":2984,"text":47},{"id":84,"depth":2984,"text":87},{"id":114,"depth":2984,"text":115},{"id":197,"depth":2984,"text":198},{"id":252,"depth":2984,"text":255},{"id":303,"depth":2984,"text":306},{"id":402,"depth":2984,"text":403},{"id":549,"depth":2984,"text":552},{"id":598,"depth":2984,"text":599},{"id":818,"depth":2984,"text":821},{"id":955,"depth":2984,"text":956},{"id":1051,"depth":2984,"text":1052},{"id":1109,"depth":2984,"text":1110},{"id":1160,"depth":2984,"text":1161},{"id":1187,"depth":2984,"text":1188},{"id":1239,"depth":2984,"text":1242},{"id":1283,"depth":2984,"text":1284},{"id":1327,"depth":2984,"text":1328},{"id":1362,"depth":2984,"text":1363},{"id":1413,"depth":2984,"text":1416},{"id":1448,"depth":2984,"text":1451},{"id":1516,"depth":2984,"text":1519},{"id":1554,"depth":2984,"text":1557},{"id":1630,"depth":2984,"text":1633},{"id":1675,"depth":2984,"text":1676},{"id":1700,"depth":2984,"text":1703},{"id":1729,"depth":2984,"text":1730},{"id":1752,"depth":2984,"text":1755},{"id":1785,"depth":2984,"text":1786},{"id":1816,"depth":2984,"text":1817},{"id":1878,"depth":2984,"text":1879},{"id":1903,"depth":2984,"text":1904},{"id":1949,"depth":2984,"text":1950},{"id":1989,"depth":2984,"text":1990},{"id":2059,"depth":2984,"text":2060},{"id":2211,"depth":2984,"text":2212},{"id":2256,"depth":2984,"text":2257},{"id":2324,"depth":2984,"text":2325},{"id":2357,"depth":2984,"text":2360},{"id":2386,"depth":2984,"text":2387},{"id":2452,"depth":2984,"text":2453},{"id":2494,"depth":2984,"text":2495},{"id":2537,"depth":2984,"text":2538},{"id":2582,"depth":2984,"text":2583},{"id":2647,"depth":2984,"text":2648},{"id":2689,"depth":2984,"text":2690},{"id":2726,"depth":2984,"text":2729},{"id":2767,"depth":2984,"text":2770},{"id":2796,"depth":2984,"text":2799},{"id":2825,"depth":2984,"text":2826},{"id":2898,"depth":2984,"text":2899},{"id":2951,"depth":2984,"text":2954},"presentation","Internet Applications","Add Bootstrap 5.3, copy generic rendering helpers into the project, and study a StarCraft Guides reference implementation before adapting the patterns to meet the provided project proposal requirements.","Face-to-face class of about 40 students; preserves the legacy Bootstrap and helper workflow, includes required generic project integration, and uses vertical StarCraft Guides slides only as a reference for proposal-domain implementation.","90",{},"8",true,"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability","Core",false,null,{"title":5,"description":3041},"published","internet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability",[3055,3056,3057,3058,3059,3060],"bootstrap","css","partials","helpers","milestone-2","starcraft-guides","1:55:55","1FA0A0HkSL8","https:\u002F\u002Fyoutu.be\u002F1FA0A0HkSL8","Bootstrap and Reusability","sBDbQaonHAT8zz41IGrx7tcV3Vblyaf3EICSJ2mngfk",[3067,3070,3074,3077,3081,3084,3087,3090,3093,3096,3099,3103,3106,3109,3113,3116,3119,3122,3125,3128,3131,3133,3135,3137,3139,3141,3143,3145,3148,3151,3154,3157,3160,3162,3165,3168,3172,3176,3180,3184,3187,3190,3193,3197,3201,3204,3207,3210,3213,3217,3221,3224,3226,3228,3231,3234,3237,3240,3243,3246,3249,3253,3257,3260,3263,3266,3269,3272,3275,3278,3281,3284,3287,3290,3293,3296,3299,3302,3305,3308,3311,3315,3318,3321,3323,3326,3329,3332,3335,3338,3341,3344,3348,3351,3354,3357,3360,3363,3366,3369,3372,3375,3378,3381,3384,3387,3390,3393,3396,3399,3402,3405,3408,3411,3414,3417,3420,3423,3426,3429,3432,3435,3438,3441,3444,3447,3450,3453,3456,3459,3462,3465,3468,3471,3474,3477,3480,3483,3486,3489,3492,3495,3498,3501,3504,3507,3510,3513,3516,3519,3522,3525,3528,3531,3534,3537,3540,3543,3546,3549,3552,3555,3558,3561,3564,3567,3570,3573,3576,3579,3582,3585,3588,3591,3594,3597,3600,3603,3606,3609,3612,3615,3618,3621,3624,3627,3630,3633,3636,3639,3642,3645,3648,3651,3654,3657,3660,3663,3666,3669,3672,3675,3678,3681,3684,3687,3690,3693,3696,3699,3702,3706,3709,3712,3715,3718,3721,3724,3727,3730,3733,3736,3739,3742,3745,3748,3751,3754,3757,3760,3763,3766,3769,3772,3775,3778,3781,3784,3787,3790,3793,3796,3799,3802,3805,3808,3811,3814,3817,3820,3823,3826,3829,3832,3835,3838,3841,3844,3847,3850,3853,3856,3859,3862,3865,3868,3871,3874,3877,3880,3883,3886,3889,3892,3895,3898,3901,3904,3907,3910,3913,3916,3919,3922,3925,3928,3931,3934,3937,3940,3943,3946,3949,3952,3955,3958,3961,3964,3967,3970,3973,3976,3979,3982,3985,3988,3991,3994,3997,4000,4003,4006,4009,4012,4015,4018,4021,4024,4027,4030,4033,4036,4039,4042,4045,4048,4051,4054,4057,4060,4063,4066,4069,4072,4075,4078,4081,4084,4087,4091,4094,4097,4100,4103,4106,4109,4111,4113,4115,4117,4119,4121,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4156,4158,4160,4162,4164,4166,4168,4170,4171,4173,4175,4177,4179,4181,4183,4185,4189,4193,4197,4200,4204,4208,4211,4214,4217,4220,4223,4226,4230,4233,4236,4239,4242,4244,4246,4248,4250,4253,4256,4259,4262,4265,4268,4271,4274,4277,4280,4283,4286,4289,4292,4295,4298,4301,4304,4307,4310,4313,4316,4319,4322,4325,4328,4331,4334,4337,4340,4343,4346,4349,4352,4355,4358,4361,4364,4367,4370,4373,4376,4379,4382,4385,4388,4391,4394,4397,4400,4403,4406,4409,4412,4415,4417,4419,4421,4423,4425,4427,4429,4431,4433,4435,4437,4439,4441,4443,4445,4447,4449,4451,4454,4456,4458,4460,4462,4464,4466,4468,4470,4472,4474,4476,4478,4480,4482,4484,4486,4488,4490,4492,4494,4496,4499,4502,4505,4508,4511,4513,4515,4518,4521,4524,4527,4530,4533],{"path":3068,"title":3069,"order":3050,"module":3050,"status":3050},"\u002Fabout","About Content Version 3",{"path":3071,"title":3072,"order":775,"module":729,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-first-concept","First Concept","draft",{"path":3075,"title":3076,"order":2619,"module":729,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game","What is a Game?",{"path":3078,"title":3079,"order":3080,"module":729,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay","What is Gameplay?","20",{"path":3082,"title":3083,"order":2619,"module":14,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F02-game-balance\u002F01-game-balance","Game Balance",{"path":3085,"title":3086,"order":2619,"module":111,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory","Game Design: Color Theory",{"path":3088,"title":3089,"order":3080,"module":111,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel","Game Design - Look and Feel",{"path":3091,"title":3092,"order":2619,"module":763,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics","Game Mechanics",{"path":3094,"title":3095,"order":3080,"module":763,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F04-game-mechanics\u002F02-decks","Technical: Decks and Cards",{"path":3097,"title":3098,"order":2619,"module":775,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth, Complexity, And Randomness",{"path":3100,"title":3101,"order":3080,"module":3102,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning From Concept To Prototype","6",{"path":3104,"title":3105,"order":2619,"module":3045,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts And Design",{"path":3107,"title":3108,"order":3080,"module":3045,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Engine Features And Browser Feasibility",{"path":3110,"title":3111,"order":2619,"module":3112,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs","Entity-Based Systems","9",{"path":3114,"title":3115,"order":2619,"module":2619,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F01-spatial-rules-levels-and-interface","Spatial Rules, Levels, And Interface",{"path":3117,"title":3118,"order":3080,"module":2619,"status":3073},"\u002Fgame-architecture-and-design\u002F2e\u002Fpresentations\u002F10-player-facing-feature-systems\u002F02-actors-behavior-and-effects","Actors, Behavior, And Effects",{"path":3120,"title":3121,"order":729,"module":444,"status":3052},"\u002Fgame-architecture-and-design\u002F2e\u002Fsyllabus\u002Ffall-2026","Course Syllabus: IT265 - Game Architecture and Design",{"path":3123,"title":3124,"order":729,"module":444,"status":3073},"\u002Fgame-architecture-and-design","Game Architecture and Design",{"path":3126,"title":3127,"order":3050,"module":3050,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F00-revision-plan","Game Architecture And Design Presentation Revision Plan",{"path":3129,"title":3130,"order":3050,"module":3050,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Game Architecture And Design Twenty-Minute Recording Plan",{"path":3132,"title":3076,"order":2619,"module":729,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F01-what-is-a-game",{"path":3134,"title":3079,"order":3080,"module":729,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F01-introduction\u002F02-what-is-gameplay",{"path":3136,"title":3083,"order":2619,"module":14,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F02-game-balance\u002F01-game-balance",{"path":3138,"title":3086,"order":2619,"module":111,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F01-color-theory",{"path":3140,"title":3089,"order":3080,"module":111,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F03-look-and-feel\u002F02-look-and-feel",{"path":3142,"title":3092,"order":2619,"module":763,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F01-game-mechanics",{"path":3144,"title":3095,"order":3080,"module":763,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F04-game-mechanics\u002F02-decks",{"path":3146,"title":3147,"order":2619,"module":775,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F05-depth-complexity-and-randomness\u002F01-depth-vs-complexity-and-randomness","Depth vs Complexity and Randomness",{"path":3149,"title":3150,"order":2619,"module":3102,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F01-first-concept","First Concept: Updated Lesson",{"path":3152,"title":3153,"order":3080,"module":3102,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F06-first-game-planning\u002F02-planning-and-management","Planning and Management",{"path":3155,"title":3156,"order":2619,"module":3045,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F01-concepts-and-design","Game Architecture: Concepts and Design",{"path":3158,"title":3159,"order":3080,"module":3045,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F08-game-architecture\u002F02-features-of-a-game-engine","Game Architecture: Features of a Game Engine",{"path":3161,"title":3111,"order":2619,"module":3112,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F09-entity-based-systems\u002F01-ecs",{"path":3163,"title":3164,"order":2619,"module":2619,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F01-level-mechanics","Game Design: Introduction to Level Mechanics",{"path":3166,"title":3167,"order":3080,"module":2619,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F10-level-mechanics\u002F02-grids","Technical: Square vs Hex Grids in Board Games",{"path":3169,"title":3170,"order":2619,"module":3171,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F11-user-interfaces\u002F01-user-interfaces","Game Design: User Interfaces","11",{"path":3173,"title":3174,"order":2619,"module":3175,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F12-actor-representations\u002F01-actors","Game Design: Actor Representations","12",{"path":3177,"title":3178,"order":2619,"module":3179,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F13-artificial-intelligence\u002F01-ai","Game Design: AI","13",{"path":3181,"title":3182,"order":2619,"module":3183,"status":3073},"\u002Fgame-architecture-and-design\u002Fpresentations\u002F14-particles-and-physics\u002F01-particles-and-physics","IT265: Particle Systems and Physics Engine","14",{"path":3185,"title":3186,"order":729,"module":444,"status":3073},"\u002Fgame-architecture-and-design\u002Fsyllabus\u002Fspring-2026","Course Syllabus: IT265 - Game Architecture",{"path":3188,"title":3189,"order":2619,"module":444,"status":3073},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fcase-study-1-atari-worksheet","Case Study 1 - Atari",{"path":3191,"title":3192,"order":3080,"module":444,"status":3073},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-color-theory-worksheet","IT265 Case Study - Color Theory",{"path":3194,"title":3195,"order":3196,"module":444,"status":3073},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-case-study-personal-choice-worksheet","IT265 Case Study - Personal Choice","40",{"path":3198,"title":3199,"order":3200,"module":444,"status":3073},"\u002Fgame-architecture-and-design\u002Fworksheets\u002Fit265-design-treatment-checkpoint-worksheet","IT265 Design Treatment Checkpoint","30",{"path":3202,"title":3203,"order":2619,"module":729,"status":3073},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F01-git-and-terminal-setup","Git And Terminal Setup",{"path":3205,"title":3206,"order":3080,"module":729,"status":3073},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F02-cli-foundations","CLI Foundations",{"path":3208,"title":3209,"order":3200,"module":729,"status":3073},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F03-github-setup-and-ssh","GitHub Setup And SSH",{"path":3211,"title":3212,"order":3196,"module":729,"status":3073},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F04-local-git-workflow-and-course-repositories","Local Git Workflow And Course Repositories",{"path":3214,"title":3215,"order":3216,"module":729,"status":3073},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F05-vscode-setup-and-course-extensions","VS Code Setup And Course Extensions","50",{"path":3218,"title":3219,"order":3220,"module":729,"status":3073},"\u002Fgeneral\u002F2e\u002Fpresentations\u002F06-trace-learning-journal","TRACE Learning Journal Foundations","60",{"path":3222,"title":3223,"order":3050,"module":3050,"status":3050},"\u002Fgeneral\u002Fbasic-cli","Basic Command Line",{"path":3225,"title":3223,"order":2619,"module":729,"status":3050},"\u002Fgeneral\u002Fbasic-command-line",{"path":636,"title":3227,"order":3050,"module":3050,"status":3052},"Ethereal Lab Course Materials",{"path":3229,"title":3230,"order":444,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord","Learn Courses Platform And Discord",{"path":3232,"title":3233,"order":2619,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands","Basic CLI Commands",{"path":3235,"title":3236,"order":3080,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools","Git Tools",{"path":3238,"title":3239,"order":3200,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh","Set Up GitHub SSH",{"path":3241,"title":3242,"order":3196,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs","Git Commands And Pull Requests",{"path":3244,"title":3245,"order":3216,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment","Local Development Environment Setup",{"path":3247,"title":3248,"order":3220,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository","Add Instructor Template To Your Repository",{"path":3250,"title":3251,"order":3252,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches","QA And Prod Branches","70",{"path":3254,"title":3255,"order":3256,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup","Render Setup","80",{"path":3258,"title":3259,"order":3043,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox","Local Ubuntu Web Server With VirtualBox",{"path":3261,"title":3262,"order":2625,"module":729,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware","Local Ubuntu Web Server With VMware",{"path":3264,"title":3265,"order":2619,"module":14,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript","Compare PHP And JavaScript",{"path":3267,"title":3268,"order":3080,"module":14,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions","Use Conditions Loops And Functions",{"path":3270,"title":3271,"order":2619,"module":111,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html","Intro To HTML",{"path":3273,"title":3274,"order":3080,"module":111,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post","Intro To Forms And GET\u002FPOST",{"path":3276,"title":3277,"order":3200,"module":111,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F03-understanding-css-js-selectors-and-dom-updates","Understanding CSS\u002FJS Selectors And DOM Updates",{"path":3279,"title":3280,"order":2619,"module":763,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql","Intro To SQL",{"path":3282,"title":3283,"order":3080,"module":763,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup","Project Database Setup",{"path":3285,"title":3286,"order":3200,"module":763,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration","User Registration",{"path":3288,"title":3289,"order":3196,"module":763,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login","User Login",{"path":3291,"title":3292,"order":2619,"module":775,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex","Intro To Regex",{"path":3294,"title":3295,"order":3080,"module":775,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers","Project Shared Helpers",{"path":3297,"title":3298,"order":3200,"module":775,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","User Feedback After Redirects",{"path":3300,"title":3301,"order":3196,"module":775,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile","User Profile",{"path":3303,"title":3304,"order":2619,"module":3102,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization","User Roles Authorization",{"path":3306,"title":3307,"order":3080,"module":3102,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement","User Login Enhancement",{"path":3309,"title":3310,"order":3200,"module":3102,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content","Dynamic Content",{"path":3312,"title":3313,"order":2619,"module":3314,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data","Working With API Data","7",{"path":3316,"title":3317,"order":3080,"module":3314,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration","API Integration",{"path":3319,"title":3320,"order":3200,"module":3314,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions","Database Utility Functions",{"path":3322,"title":5,"order":2619,"module":3045,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F01-milestone-2-bootstrap-and-reusability",{"path":3324,"title":3325,"order":3080,"module":3045,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro","jQuery Brief Intro",{"path":3327,"title":3328,"order":3200,"module":3045,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax","Intro To AJAX",{"path":3330,"title":3331,"order":2619,"module":3112,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations","Add User Associations",{"path":3333,"title":3334,"order":3080,"module":3112,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination","Add Association Views And Pagination",{"path":3336,"title":3337,"order":2619,"module":2619,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles","Association Management And Public Profiles",{"path":3339,"title":3340,"order":3080,"module":2619,"status":3073},"\u002Finternet-applications\u002F2e\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection","Reusable CSRF Protection",{"path":3342,"title":3343,"order":729,"module":444,"status":3052},"\u002Finternet-applications\u002F2e\u002Fsyllabus\u002Ffall-2026","IT202 - Internet Applications Syllabus",{"path":3345,"title":3346,"order":3196,"module":2619,"status":3347},"\u002Finternet-applications\u002Fassignments\u002Ffinal-project-submission","Final Project Submission","review",{"path":3349,"title":3350,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F01-account-access-and-profile-system","Milestone 1: Account, Access, And Profile System",{"path":3352,"title":3353,"order":3080,"module":3045,"status":3347},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F02-api-data-and-project-crud","Milestone 2: API Data And Project CRUD",{"path":3355,"title":3356,"order":3200,"module":3112,"status":3347},"\u002Finternet-applications\u002Fassignments\u002Fmilestones\u002F03-user-associations-search-and-summary","Milestone 3: User Associations, Search, And Summary Views",{"path":3358,"title":3359,"order":775,"module":763,"status":3052},"\u002Finternet-applications\u002Fassignments\u002Fproject-proposal","IT 202 Project Proposal",{"path":3361,"title":3362,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F01-what-this-course-is-building","What Internet Applications Build",{"path":3364,"title":3365,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02-files-folders-and-project-structure","Files, Folders, And Project Structure",{"path":3367,"title":3368,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02a-basic-cli-commands-for-course-work","Basic CLI Commands For Web Development",{"path":3370,"title":3371,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02b-install-git-and-terminal-tools","Install Git And Terminal Tools",{"path":3373,"title":3374,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03-version-control-with-git-and-github","Version Control With Git And GitHub",{"path":3376,"title":3377,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Set Up A Local Development Environment",{"path":3379,"title":3380,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F04-adding-the-instructor-template-to-your-repository","Starting From A Starter Template",{"path":3382,"title":3383,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F05-editing-locally-and-seeing-changes-run","Editing Locally And Seeing Changes Run",{"path":3385,"title":3386,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F06-building-a-local-ubuntu-web-server","Building A Local Ubuntu Web Server",{"path":3388,"title":3389,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F07-git-recovery-and-common-mistakes","Git Recovery And Common Mistakes",{"path":3391,"title":3392,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Installing Apache, PHP, And MySQL",{"path":3394,"title":3395,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F09-your-first-php-page-through-apache","Your First PHP Page Through Apache",{"path":3397,"title":3398,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F10-how-http-works-requests-and-responses","How HTTP Works: Requests And Responses",{"path":3400,"title":3401,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F11-http-methods-get-post-and-status-codes","HTTP Methods: GET, POST, And Status Codes",{"path":3403,"title":3404,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F12-local-qa-and-production-environments","Local, QA, And Production Environments",{"path":3406,"title":3407,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F01-how-php-runs-on-the-server","How PHP Runs On The Server",{"path":3409,"title":3410,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Displaying Output With PHP",{"path":3412,"title":3413,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Displaying Output With JavaScript",{"path":3415,"title":3416,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F04-variables-storing-and-naming-values","Variables: Storing And Naming Values",{"path":3418,"title":3419,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F05-data-types-strings-numbers-booleans-and-null","Data Types: Strings, Numbers, Booleans, And Null",{"path":3421,"title":3422,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F06-arrays-storing-lists-of-values","Arrays: Storing Lists Of Values",{"path":3424,"title":3425,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Conditional Statements: Making Decisions",{"path":3427,"title":3428,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Loops: Repeating Actions",{"path":3430,"title":3431,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F09-functions-reusable-blocks-of-logic","Functions: Reusable Blocks Of Logic",{"path":3433,"title":3434,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F10-reading-and-debugging-error-messages","Reading And Debugging Error Messages",{"path":3436,"title":3437,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","HTML: Structure And Meaning",{"path":3439,"title":3440,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F02-writing-a-valid-html-document","Writing A Valid HTML Document",{"path":3442,"title":3443,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F03-common-html-elements-and-semantic-tags","Common HTML Elements And Semantic Tags",{"path":3445,"title":3446,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F04-building-forms-inputs-labels-and-buttons","Building Forms: Inputs, Labels, And Buttons",{"path":3448,"title":3449,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F05-get-requests-and-query-string-data","GET Requests And Query String Data",{"path":3451,"title":3452,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F06-post-requests-and-form-body-data","POST Requests And Form Body Data",{"path":3454,"title":3455,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F07-css-fundamentals-selectors-properties-and-values","CSS Fundamentals: Selectors, Properties, And Values",{"path":3457,"title":3458,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F08-the-box-model-margin-border-padding-and-content","The Box Model: Margin, Border, Padding, And Content",{"path":3460,"title":3461,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Page Layout With Flexbox",{"path":3463,"title":3464,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09a-css-positioning-fixed-headers-and-body-offsets","CSS Positioning: Fixed Headers And Body Offsets",{"path":3466,"title":3467,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F10-selecting-and-changing-elements-with-javascript","Selecting And Changing Elements With JavaScript",{"path":3469,"title":3470,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F11-inline-validation-and-client-side-feedback","Inline Validation And Client-Side Feedback",{"path":3472,"title":3473,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Basic Web Accessibility Habits",{"path":3475,"title":3476,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F01-why-web-applications-need-a-database","Why Web Applications Need A Database",{"path":3478,"title":3479,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F02-relational-concepts-tables-rows-columns-and-primary-keys","Relational Concepts: Tables, Rows, Columns, And Primary Keys",{"path":3481,"title":3482,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F03-writing-sql-create-insert-select-update-delete","Writing SQL: CREATE, INSERT, SELECT, UPDATE, DELETE",{"path":3484,"title":3485,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Creating Tables With SQL Scripts",{"path":3487,"title":3488,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F05-connecting-php-to-mysql-with-pdo","Connecting PHP To MySQL With PDO",{"path":3490,"title":3491,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F06-parameterized-queries-and-sql-injection-prevention","Parameterized Queries And SQL Injection Prevention",{"path":3493,"title":3494,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Building A Registration Page",{"path":3496,"title":3497,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Hashing Passwords With password_hash()",{"path":3499,"title":3500,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Building A Login Page",{"path":3502,"title":3503,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F10-sessions-remembering-the-logged-in-user","Sessions: Remembering The Logged-In User",{"path":3505,"title":3506,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Cookies: Persistent Client-Side State",{"path":3508,"title":3509,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F04-databases-and-user-accounts\u002F12-navigation-that-responds-to-login-state","Navigation That Responds To Login State",{"path":3511,"title":3512,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F01-why-client-side-validation-is-not-enough","Why Client-Side Validation Is Not Enough",{"path":3514,"title":3515,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F02-sanitizing-and-escaping-user-input","Sanitizing And Escaping User Input",{"path":3517,"title":3518,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F03-required-fields-and-length-rules","Required Fields And Length Rules",{"path":3520,"title":3521,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F04-regular-expressions-for-pattern-matching","Regular Expressions For Pattern Matching",{"path":3523,"title":3524,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F05-server-side-validation-in-php","Server-Side Validation In PHP",{"path":3526,"title":3527,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F06-cross-site-scripting-xss-prevention","Cross-Site Scripting (XSS) Prevention",{"path":3529,"title":3530,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F07-flash-messages-and-persistent-feedback","Flash Messages And Persistent Feedback",{"path":3532,"title":3533,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F08-allowing-login-by-username-or-email","Allowing Login By Username Or Email",{"path":3535,"title":3536,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F09-building-a-profile-edit-page","Building A Profile Edit Page",{"path":3538,"title":3539,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F10-debugging-account-and-authentication-problems","Debugging Account And Authentication Problems",{"path":3541,"title":3542,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F11-review-the-full-account-system-so-far","Review: The Full Account System So Far",{"path":3544,"title":3545,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Role-Based Access Control",{"path":3547,"title":3548,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Storing Roles In The Database",{"path":3550,"title":3551,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F03-protecting-a-page-with-an-access-check","Protecting A Page With An Access Check",{"path":3553,"title":3554,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F04-safe-redirects-after-login-and-logout","Safe Redirects After Login And Logout",{"path":3556,"title":3557,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Listing Records From The Database",{"path":3559,"title":3560,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F06-creating-new-records-with-a-form","Creating New Records With A Form",{"path":3562,"title":3563,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Editing Existing Records",{"path":3565,"title":3566,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Deleting Records Safely",{"path":3568,"title":3569,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Ownership: Linking Records To Users",{"path":3571,"title":3572,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","First Project Milestone Checklist",{"path":3574,"title":3575,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Organizing Growing PHP Applications",{"path":3577,"title":3578,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Reading A Growing PHP Application",{"path":3580,"title":3581,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F01-what-asynchronous-requests-ajax-solve","What Asynchronous Requests (AJAX) Solve",{"path":3583,"title":3584,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F02-json-a-common-data-format-for-the-web","JSON: A Common Data Format For The Web",{"path":3586,"title":3587,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F03-building-a-php-endpoint-that-returns-json","Building A PHP Endpoint That Returns JSON",{"path":3589,"title":3590,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F04-sending-requests-from-javascript-with-fetch","Sending Requests From JavaScript With Fetch",{"path":3592,"title":3593,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F05-handling-fetch-responses-and-errors","Handling Fetch Responses And Errors",{"path":3595,"title":3596,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F06-updating-the-page-with-returned-data","Updating The Page With Returned Data",{"path":3598,"title":3599,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Introduction To REST APIs",{"path":3601,"title":3602,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Reading API Documentation",{"path":3604,"title":3605,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F09-making-authenticated-api-calls-from-php","Making Authenticated API Calls From PHP",{"path":3607,"title":3608,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F10-storing-and-caching-api-responses","Storing And Caching API Responses",{"path":3610,"title":3611,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F11-cors-and-cross-origin-request-basics","CORS And Cross-Origin Request Basics",{"path":3613,"title":3614,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F12-browser-devtools-for-web-application-debugging","Browser DevTools For Web Application Debugging",{"path":3616,"title":3617,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F01-jquery-simplified-dom-and-event-work","jQuery: Simplified DOM And Event Work",{"path":3619,"title":3620,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Selecting Elements With jQuery",{"path":3622,"title":3623,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F03-responding-to-events-clicks-inputs-and-submissions","Responding To Events: Clicks, Inputs, And Submissions",{"path":3625,"title":3626,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F04-updating-the-dom-after-a-user-action","Updating The DOM After A User Action",{"path":3628,"title":3629,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Sending AJAX Requests With jQuery",{"path":3631,"title":3632,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F06-saving-external-api-data-through-php","Saving External API Data Through PHP",{"path":3634,"title":3635,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Saving User-Created Records",{"path":3637,"title":3638,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Building A Project Listing Page",{"path":3640,"title":3641,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Inline Editing And Detail Views",{"path":3643,"title":3644,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Second Project Milestone Checklist",{"path":3646,"title":3647,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Foreign Keys And Referential Integrity",{"path":3649,"title":3650,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F02-joining-tables-inner-join-left-join","Joining Tables: INNER JOIN, LEFT JOIN",{"path":3652,"title":3653,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F03-user-owned-records-and-access-enforcement","User-Owned Records And Access Enforcement",{"path":3655,"title":3656,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F04-connecting-api-data-to-user-records","Connecting API Data To User Records",{"path":3658,"title":3659,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Searching And Filtering With SQL",{"path":3661,"title":3662,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Pagination: Displaying Records In Pages",{"path":3664,"title":3665,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Aggregate Functions: COUNT, SUM, AVG",{"path":3667,"title":3668,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Simple Analytics And Summary Views",{"path":3670,"title":3671,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Third Project Milestone Checklist",{"path":3673,"title":3674,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Public Pages And Unauthenticated Views",{"path":3676,"title":3677,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","User Profile And Activity Pages",{"path":3679,"title":3680,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F03-refreshing-and-expiring-external-api-data","Refreshing And Expiring External API Data",{"path":3682,"title":3683,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Application-Wide Security Audit",{"path":3685,"title":3686,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F05-cross-site-request-forgery-csrf-protection","Cross-Site Request Forgery (CSRF) Protection",{"path":3688,"title":3689,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","QA Testing And Collecting Evidence",{"path":3691,"title":3692,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Production Environment Checklist",{"path":3694,"title":3695,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Writing A Project README",{"path":3697,"title":3698,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Final Presentation And Code Walkthrough",{"path":3700,"title":3701,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Configuration Drift And Secrets Checks",{"path":3703,"title":3704,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F01-what-this-course-is-building","Quiz - What Internet Applications Build","ready",{"path":3707,"title":3708,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02-files-folders-and-project-structure","Quiz - Files, Folders, And Project Structure",{"path":3710,"title":3711,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02a-basic-cli-commands-for-course-work","Quiz - Basic CLI Commands For Web Development",{"path":3713,"title":3714,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F02b-install-git-and-terminal-tools","Quiz - Install Git And Terminal Tools",{"path":3716,"title":3717,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03-version-control-with-git-and-github","Quiz - Version Control With Git And GitHub",{"path":3719,"title":3720,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F03a-local-development-environment","Quiz - Set Up A Local Development Environment",{"path":3722,"title":3723,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F04-adding-the-instructor-template-to-your-repository","Quiz - Starting From A Starter Template",{"path":3725,"title":3726,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F05-editing-locally-and-seeing-changes-run","Quiz - Editing Locally And Seeing Changes Run",{"path":3728,"title":3729,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F06-building-a-local-ubuntu-web-server","Quiz - Building A Local Ubuntu Web Server",{"path":3731,"title":3732,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F07-git-recovery-and-common-mistakes","Quiz - Git Recovery And Common Mistakes",{"path":3734,"title":3735,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F08-installing-apache-and-php","Quiz - Installing Apache, PHP, And MySQL",{"path":3737,"title":3738,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F09-your-first-php-page-through-apache","Quiz - Your First PHP Page Through Apache",{"path":3740,"title":3741,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F10-how-http-works-requests-and-responses","Quiz - How HTTP Works: Requests And Responses",{"path":3743,"title":3744,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F11-http-methods-get-post-and-status-codes","Quiz - HTTP Methods: GET, POST, And Status Codes",{"path":3746,"title":3747,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F01-course-workflow-files-and-web-server\u002F12-local-qa-and-production-environments","Quiz - Local, QA, And Production Environments",{"path":3749,"title":3750,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F01-how-php-runs-on-the-server","Quiz - How PHP Runs On The Server",{"path":3752,"title":3753,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F02-displaying-output-with-php","Quiz - Displaying Output With PHP",{"path":3755,"title":3756,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F03-displaying-output-with-javascript","Quiz - Displaying Output With JavaScript",{"path":3758,"title":3759,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F04-variables-storing-and-naming-values","Quiz - Variables: Storing And Naming Values",{"path":3761,"title":3762,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F05-data-types-strings-numbers-booleans-and-null","Quiz - Data Types: Strings, Numbers, Booleans, And Null",{"path":3764,"title":3765,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F06-arrays-storing-lists-of-values","Quiz - Arrays: Storing Lists Of Values",{"path":3767,"title":3768,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F07-conditional-statements-making-decisions","Quiz - Conditional Statements: Making Decisions",{"path":3770,"title":3771,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F08-loops-repeating-actions","Quiz - Loops: Repeating Actions",{"path":3773,"title":3774,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F09-functions-reusable-blocks-of-logic","Quiz - Functions: Reusable Blocks Of Logic",{"path":3776,"title":3777,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F02-programming-fundamentals-in-php-and-javascript\u002F10-reading-and-debugging-error-messages","Quiz - Reading And Debugging Error Messages",{"path":3779,"title":3780,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F01-html-structure-and-meaning","Quiz - HTML: Structure And Meaning",{"path":3782,"title":3783,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F02-writing-a-valid-html-document","Quiz - Writing A Valid HTML Document",{"path":3785,"title":3786,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F03-common-html-elements-and-semantic-tags","Quiz - Common HTML Elements And Semantic Tags",{"path":3788,"title":3789,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F04-building-forms-inputs-labels-and-buttons","Quiz - Building Forms: Inputs, Labels, And Buttons",{"path":3791,"title":3792,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F05-get-requests-and-query-string-data","Quiz - GET Requests And Query String Data",{"path":3794,"title":3795,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F06-post-requests-and-form-body-data","Quiz - POST Requests And Form Body Data",{"path":3797,"title":3798,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F07-css-fundamentals-selectors-properties-and-values","Quiz - CSS Fundamentals: Selectors, Properties, And Values",{"path":3800,"title":3801,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F08-the-box-model-margin-border-padding-and-content","Quiz - The Box Model: Margin, Border, Padding, And Content",{"path":3803,"title":3804,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09-page-layout-with-flexbox","Quiz - Page Layout With Flexbox",{"path":3806,"title":3807,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F09a-css-positioning-fixed-headers-and-body-offsets","Quiz - CSS Positioning: Fixed Headers And Body Offsets",{"path":3809,"title":3810,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F10-selecting-and-changing-elements-with-javascript","Quiz - Selecting And Changing Elements With JavaScript",{"path":3812,"title":3813,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F11-inline-validation-and-client-side-feedback","Quiz - Inline Validation And Client-Side Feedback",{"path":3815,"title":3816,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F03-html-forms-css-and-the-dom\u002F12-basic-web-accessibility-habits","Quiz - Basic Web Accessibility Habits",{"path":3818,"title":3819,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F01-why-web-applications-need-a-database","Quiz - Why Web Applications Need A Database",{"path":3821,"title":3822,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F02-relational-concepts-tables-rows-columns-and-primary-keys","Quiz - Relational Concepts: Tables, Rows, Columns, And Primary Keys",{"path":3824,"title":3825,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F03-writing-sql-create-insert-select-update-delete","Quiz - Writing SQL: CREATE, INSERT, SELECT, UPDATE, DELETE",{"path":3827,"title":3828,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F04-creating-tables-with-sql-scripts","Quiz - Creating Tables With SQL Scripts",{"path":3830,"title":3831,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F05-connecting-php-to-mysql-with-pdo","Quiz - Connecting PHP To MySQL With PDO",{"path":3833,"title":3834,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F06-parameterized-queries-and-sql-injection-prevention","Quiz - Parameterized Queries And SQL Injection Prevention",{"path":3836,"title":3837,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F07-building-a-registration-page","Quiz - Building A Registration Page",{"path":3839,"title":3840,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F08-hashing-passwords-with-password-hash","Quiz - Hashing Passwords With password_hash()",{"path":3842,"title":3843,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F09-building-a-login-page","Quiz - Building A Login Page",{"path":3845,"title":3846,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F10-sessions-remembering-the-logged-in-user","Quiz - Sessions: Remembering The Logged-In User",{"path":3848,"title":3849,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F11-cookies-persistent-client-side-state","Quiz - Cookies: Persistent Client-Side State",{"path":3851,"title":3852,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F04-databases-and-user-accounts\u002F12-navigation-that-responds-to-login-state","Quiz - Navigation That Responds To Login State",{"path":3854,"title":3855,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F01-why-client-side-validation-is-not-enough","Quiz - Why Client-Side Validation Is Not Enough",{"path":3857,"title":3858,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F02-sanitizing-and-escaping-user-input","Quiz - Sanitizing And Escaping User Input",{"path":3860,"title":3861,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F03-required-fields-and-length-rules","Quiz - Required Fields And Length Rules",{"path":3863,"title":3864,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F04-regular-expressions-for-pattern-matching","Quiz - Regular Expressions For Pattern Matching",{"path":3866,"title":3867,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F05-server-side-validation-in-php","Quiz - Server-Side Validation In PHP",{"path":3869,"title":3870,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F06-cross-site-scripting-xss-prevention","Quiz - Cross-Site Scripting (XSS) Prevention",{"path":3872,"title":3873,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F07-flash-messages-and-persistent-feedback","Quiz - Flash Messages And Persistent Feedback",{"path":3875,"title":3876,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F08-allowing-login-by-username-or-email","Quiz - Allowing Login By Username Or Email",{"path":3878,"title":3879,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F09-building-a-profile-edit-page","Quiz - Building A Profile Edit Page",{"path":3881,"title":3882,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F10-debugging-account-and-authentication-problems","Quiz - Debugging Account And Authentication Problems",{"path":3884,"title":3885,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F05-input-validation-security-and-user-profiles\u002F11-review-the-full-account-system-so-far","Quiz - Review: The Full Account System So Far",{"path":3887,"title":3888,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F01-role-based-access-control","Quiz - Role-Based Access Control",{"path":3890,"title":3891,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F02-storing-roles-in-the-database","Quiz - Storing Roles In The Database",{"path":3893,"title":3894,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F03-protecting-a-page-with-an-access-check","Quiz - Protecting A Page With An Access Check",{"path":3896,"title":3897,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F04-safe-redirects-after-login-and-logout","Quiz - Safe Redirects After Login And Logout",{"path":3899,"title":3900,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F05-listing-records-from-the-database","Quiz - Listing Records From The Database",{"path":3902,"title":3903,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F06-creating-new-records-with-a-form","Quiz - Creating New Records With A Form",{"path":3905,"title":3906,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F07-editing-existing-records","Quiz - Editing Existing Records",{"path":3908,"title":3909,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F08-deleting-records-safely","Quiz - Deleting Records Safely",{"path":3911,"title":3912,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F09-ownership-linking-records-to-users","Quiz - Ownership: Linking Records To Users",{"path":3914,"title":3915,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F10-first-project-milestone-checklist","Quiz - First Project Milestone Checklist",{"path":3917,"title":3918,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F11-organizing-growing-php-applications","Quiz - Organizing Growing PHP Applications",{"path":3920,"title":3921,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F06-roles-permissions-and-crud-pages\u002F12-reading-a-growing-php-application","Quiz - Reading A Growing PHP Application",{"path":3923,"title":3924,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F01-what-asynchronous-requests-ajax-solve","Quiz - What Asynchronous Requests (AJAX) Solve",{"path":3926,"title":3927,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F02-json-a-common-data-format-for-the-web","Quiz - JSON: A Common Data Format For The Web",{"path":3929,"title":3930,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F03-building-a-php-endpoint-that-returns-json","Quiz - Building A PHP Endpoint That Returns JSON",{"path":3932,"title":3933,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F04-sending-requests-from-javascript-with-fetch","Quiz - Sending Requests From JavaScript With Fetch",{"path":3935,"title":3936,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F05-handling-fetch-responses-and-errors","Quiz - Handling Fetch Responses And Errors",{"path":3938,"title":3939,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F06-updating-the-page-with-returned-data","Quiz - Updating The Page With Returned Data",{"path":3941,"title":3942,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F07-introduction-to-rest-apis","Quiz - Introduction To REST APIs",{"path":3944,"title":3945,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F08-reading-api-documentation","Quiz - Reading API Documentation",{"path":3947,"title":3948,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F09-making-authenticated-api-calls-from-php","Quiz - Making Authenticated API Calls From PHP",{"path":3950,"title":3951,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F10-storing-and-caching-api-responses","Quiz - Storing And Caching API Responses",{"path":3953,"title":3954,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F11-cors-and-cross-origin-request-basics","Quiz - CORS And Cross-Origin Request Basics",{"path":3956,"title":3957,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F07-asynchronous-requests-json-and-external-apis\u002F12-browser-devtools-for-web-application-debugging","Quiz - Browser DevTools For Web Application Debugging",{"path":3959,"title":3960,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F01-jquery-simplified-dom-and-event-work","Quiz - jQuery: Simplified DOM And Event Work",{"path":3962,"title":3963,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F02-selecting-elements-with-jquery","Quiz - Selecting Elements With jQuery",{"path":3965,"title":3966,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F03-responding-to-events-clicks-inputs-and-submissions","Quiz - Responding To Events: Clicks, Inputs, And Submissions",{"path":3968,"title":3969,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F04-updating-the-dom-after-a-user-action","Quiz - Updating The DOM After A User Action",{"path":3971,"title":3972,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F05-sending-ajax-requests-with-jquery","Quiz - Sending AJAX Requests With jQuery",{"path":3974,"title":3975,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F06-saving-external-api-data-through-php","Quiz - Saving External API Data Through PHP",{"path":3977,"title":3978,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F07-saving-user-created-records","Quiz - Saving User-Created Records",{"path":3980,"title":3981,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F08-building-a-project-listing-page","Quiz - Building A Project Listing Page",{"path":3983,"title":3984,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F09-inline-editing-and-detail-views","Quiz - Inline Editing And Detail Views",{"path":3986,"title":3987,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F08-dynamic-interfaces-and-project-data\u002F10-second-project-milestone-checklist","Quiz - Second Project Milestone Checklist",{"path":3989,"title":3990,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F01-foreign-keys-and-referential-integrity","Quiz - Foreign Keys And Referential Integrity",{"path":3992,"title":3993,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F02-joining-tables-inner-join-left-join","Quiz - Joining Tables: INNER JOIN, LEFT JOIN",{"path":3995,"title":3996,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F03-user-owned-records-and-access-enforcement","Quiz - User-Owned Records And Access Enforcement",{"path":3998,"title":3999,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F04-connecting-api-data-to-user-records","Quiz - Connecting API Data To User Records",{"path":4001,"title":4002,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F05-searching-and-filtering-with-sql","Quiz - Searching And Filtering With SQL",{"path":4004,"title":4005,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F06-pagination-displaying-records-in-pages","Quiz - Pagination: Displaying Records In Pages",{"path":4007,"title":4008,"order":3050,"module":3050,"status":3050},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F07-aggregate-functions-count-sum-avg","Quiz - Aggregate Functions: COUNT, SUM, AVG",{"path":4010,"title":4011,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F08-simple-analytics-and-summary-views","Quiz - Simple Analytics And Summary Views",{"path":4013,"title":4014,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F09-relational-data-search-and-pagination\u002F09-third-project-milestone-checklist","Quiz - Third Project Milestone Checklist",{"path":4016,"title":4017,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F01-public-pages-and-unauthenticated-views","Quiz - Public Pages And Unauthenticated Views",{"path":4019,"title":4020,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F02-user-profile-and-activity-pages","Quiz - User Profile And Activity Pages",{"path":4022,"title":4023,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F03-refreshing-and-expiring-external-api-data","Quiz - Refreshing And Expiring External API Data",{"path":4025,"title":4026,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F04-application-wide-security-audit","Quiz - Application-Wide Security Audit",{"path":4028,"title":4029,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F05-cross-site-request-forgery-csrf-protection","Quiz - Cross-Site Request Forgery (CSRF) Protection",{"path":4031,"title":4032,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F06-qa-testing-and-collecting-evidence","Quiz - QA Testing And Collecting Evidence",{"path":4034,"title":4035,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F07-production-environment-checklist","Quiz - Production Environment Checklist",{"path":4037,"title":4038,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F08-writing-a-project-readme","Quiz - Writing A Project README",{"path":4040,"title":4041,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F09-final-presentation-and-code-walkthrough","Quiz - Final Presentation And Code Walkthrough",{"path":4043,"title":4044,"order":3050,"module":3050,"status":3705},"\u002Finternet-applications\u002Fbook\u002Fquizzes\u002Fmodules\u002F10-final-integration-testing-and-deployment\u002F10-configuration-drift-and-secrets-checks","Quiz - Configuration Drift And Secrets Checks",{"path":4046,"title":4047,"order":729,"module":444,"status":3073},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fa-command-line-basics","Command Line Basics",{"path":4049,"title":4050,"order":14,"module":444,"status":3073},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fb-git-and-github-recovery","Git And GitHub Recovery",{"path":4052,"title":4053,"order":111,"module":444,"status":3073},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fc-apache-and-php-troubleshooting","Apache And PHP Troubleshooting",{"path":4055,"title":4056,"order":763,"module":444,"status":3073},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fd-mysql-troubleshooting","MySQL Troubleshooting",{"path":4058,"title":4059,"order":775,"module":444,"status":3073},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fe-http-request-and-response-reference","HTTP Request And Response Reference",{"path":4061,"title":4062,"order":3102,"module":444,"status":3073},"\u002Finternet-applications\u002Fbook\u002Freference\u002Ff-common-security-mistakes","Common Security Mistakes",{"path":4064,"title":4065,"order":3314,"module":444,"status":3073},"\u002Finternet-applications\u002Fbook\u002Freference\u002Fg-ai-collaboration-and-disclosure","AI Collaboration And Disclosure",{"path":4067,"title":4068,"order":444,"module":444,"status":3073},"\u002Finternet-applications\u002Fbook\u002Ftoc","Internet Applications: Table of Contents",{"path":4070,"title":4071,"order":2619,"module":729,"status":3073},"\u002Finternet-applications\u002Flabs\u002F01-git-recovery-and-submission-evidence","Lab 1: Git Recovery And Submission Evidence",{"path":4073,"title":4074,"order":3080,"module":14,"status":3073},"\u002Finternet-applications\u002Flabs\u002F02-php-output-and-error-reading","Lab 2: PHP Output And Error Reading",{"path":4076,"title":4077,"order":3200,"module":111,"status":3073},"\u002Finternet-applications\u002Flabs\u002F03-form-methods-and-sticky-values","Lab 3: Form Methods And Sticky Values",{"path":4079,"title":4080,"order":3196,"module":763,"status":3073},"\u002Finternet-applications\u002Flabs\u002F04-pdo-query-and-sql-evidence","Lab 4: PDO Query And SQL Evidence",{"path":4082,"title":4083,"order":3216,"module":775,"status":3073},"\u002Finternet-applications\u002Flabs\u002F05-validation-debugging-and-friendly-errors","Lab 5: Validation, Debugging, And Friendly Errors",{"path":4085,"title":4086,"order":3220,"module":3102,"status":3073},"\u002Finternet-applications\u002Flabs\u002F06-role-protected-crud-check","Lab 6: Role-Protected CRUD Check",{"path":4088,"title":4089,"order":4090,"module":3102,"status":3073},"\u002Finternet-applications\u002Flabs\u002F06a-relative-paths-includes-and-feature-trace","Lab 6A: Relative Paths, Includes, And Feature Tracing","61",{"path":4092,"title":4093,"order":3252,"module":3314,"status":3073},"\u002Finternet-applications\u002Flabs\u002F07-json-endpoint-and-fetch-check","Lab 7: JSON Endpoint And Fetch Check",{"path":4095,"title":4096,"order":3256,"module":3045,"status":3073},"\u002Finternet-applications\u002Flabs\u002F08-jquery-ajax-interface-check","Lab 8: jQuery AJAX Interface Check",{"path":4098,"title":4099,"order":3043,"module":3112,"status":3073},"\u002Finternet-applications\u002Flabs\u002F09-search-pagination-and-summary-check","Lab 9: Search, Pagination, And Summary Check",{"path":4101,"title":4102,"order":2625,"module":2619,"status":3073},"\u002Finternet-applications\u002Flabs\u002F10-final-security-and-readme-check","Lab 10: Final Security And README Check",{"path":4104,"title":4105,"order":3050,"module":3050,"status":3073},"\u002Finternet-applications\u002Fpresentations-revised\u002F00-revision-plan","Internet Applications Presentation Revision Plan",{"path":4107,"title":4108,"order":3050,"module":3050,"status":3073},"\u002Finternet-applications\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Internet Applications Twenty-Minute Recording Plan",{"path":4110,"title":3230,"order":444,"module":729,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F00-learn-courses-and-discord",{"path":4112,"title":3233,"order":2619,"module":729,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F01-basic-cli-commands",{"path":4114,"title":3236,"order":3080,"module":729,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F02-install-git-tools",{"path":4116,"title":3239,"order":3200,"module":729,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F03-setup-github-ssh",{"path":4118,"title":3242,"order":3196,"module":729,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F04-git-commands-prs",{"path":4120,"title":3245,"order":3216,"module":729,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F05-setup-local-development-environment",{"path":4122,"title":3248,"order":3220,"module":729,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F06-add-instructor-template-to-your-repository",{"path":4124,"title":3251,"order":3252,"module":729,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F07-qa-prod-branches",{"path":4126,"title":3255,"order":3256,"module":729,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F08-render-setup",{"path":4128,"title":3259,"order":3043,"module":729,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F09-local-ubuntu-web-server-virtualbox",{"path":4130,"title":3262,"order":2625,"module":729,"status":3073},"\u002Finternet-applications\u002Fpresentations\u002F01-git-github-and-course-workflow\u002F10-local-ubuntu-web-server-vmware",{"path":4132,"title":3265,"order":2619,"module":14,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F01-compare-php-and-javascript",{"path":4134,"title":3268,"order":3080,"module":14,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F02-php-and-javascript-basics\u002F02-conditions-loops-functions",{"path":4136,"title":3271,"order":2619,"module":111,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F01-intro-to-html",{"path":4138,"title":3274,"order":3080,"module":111,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F02-intro-to-forms-and-get-post",{"path":4140,"title":3277,"order":3200,"module":111,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F03-html-forms-css-and-dom\u002F03-understanding-css-js-selectors-and-dom-updates",{"path":4142,"title":3280,"order":2619,"module":763,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F01-intro-to-sql",{"path":4144,"title":3283,"order":3080,"module":763,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F02-project-database-setup",{"path":4146,"title":3286,"order":3200,"module":763,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F03-user-registration",{"path":4148,"title":3289,"order":3196,"module":763,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F04-databases-and-user-accounts\u002F04-user-login",{"path":4150,"title":3292,"order":2619,"module":775,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F01-intro-to-regex",{"path":4152,"title":3295,"order":3080,"module":775,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F02-project-shared-helpers",{"path":4154,"title":4155,"order":3200,"module":775,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F03-flash-messages-and-redirect-feedback","Flash Messages And Redirect Feedback",{"path":4157,"title":3301,"order":3196,"module":775,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F05-validation-and-user-profiles\u002F04-user-profile",{"path":4159,"title":3304,"order":2619,"module":3102,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F01-user-roles-authorization",{"path":4161,"title":3307,"order":3080,"module":3102,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F02-user-login-enhancement",{"path":4163,"title":3310,"order":3200,"module":3102,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F06-roles-and-crud-pages\u002F03-dynamic-content",{"path":4165,"title":3313,"order":2619,"module":3314,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F01-working-with-api-data",{"path":4167,"title":3317,"order":3080,"module":3314,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F02-api-integration",{"path":4169,"title":3320,"order":3200,"module":3314,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F07-api-data-and-database-helpers\u002F03-database-utility-functions",{"path":3047,"title":5,"order":2619,"module":3045,"status":3052},{"path":4172,"title":3325,"order":3080,"module":3045,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F02-jquery-brief-intro",{"path":4174,"title":3328,"order":3200,"module":3045,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F08-reusable-components-jquery-and-ajax\u002F03-intro-to-ajax",{"path":4176,"title":3331,"order":2619,"module":3112,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F01-user-associations",{"path":4178,"title":3334,"order":3080,"module":3112,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F09-relational-data-search-and-pagination\u002F02-association-views-and-pagination",{"path":4180,"title":3337,"order":2619,"module":2619,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F01-association-assignment-and-public-profiles",{"path":4182,"title":3340,"order":3080,"module":2619,"status":3052},"\u002Finternet-applications\u002Fpresentations\u002F10-association-assignment-and-security\u002F02-reusable-csrf-protection",{"path":4184,"title":3343,"order":729,"module":444,"status":3052},"\u002Finternet-applications\u002Fsyllabus\u002Fsummer-2026",{"path":4186,"title":4187,"order":4188,"module":2619,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Ffinal-project-submission-worksheet","Final Project Submission Worksheet","110",{"path":4190,"title":4191,"order":4192,"module":3102,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-milestone-01-worksheet","Legacy Milestone 1 Worksheet","118",{"path":4194,"title":4195,"order":4196,"module":3102,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Flegacy-multi-dimension-php-problems-worksheet","Legacy Multi-Dimension PHP Problems Worksheet","119",{"path":4198,"title":4199,"order":4188,"module":3102,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-01-account-access-and-profile-worksheet","IT202 Milestone 1 - 2026",{"path":4201,"title":4202,"order":4203,"module":3045,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-02-api-data-and-crud-worksheet","IT202 Milestone 2 - 2026","120",{"path":4205,"title":4206,"order":4207,"module":3112,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmilestone-03-user-associations-worksheet","IT202 Milestone 3 - 2026","130",{"path":4209,"title":4210,"order":2619,"module":729,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-01-git-and-local-server-worksheet","Module 1 Worksheet: Git, GitHub, And Local Server Evidence",{"path":4212,"title":4213,"order":3080,"module":14,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-02-php-and-debugging-worksheet","Module 2 Worksheet: PHP Challenge Scenarios",{"path":4215,"title":4216,"order":3200,"module":111,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-03-forms-css-and-dom-worksheet","Module 3 Worksheet: HTML, CSS, JS Challenges",{"path":4218,"title":4219,"order":3196,"module":763,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-04-database-auth-and-sessions-worksheet","Module 4 Worksheet: SQL Todo Challenge",{"path":4221,"title":4222,"order":3216,"module":775,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-05-validation-and-debugging-worksheet","Module 5 Worksheet: Validation And Debugging Evidence",{"path":4224,"title":4225,"order":3220,"module":3102,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-authorization-and-crud-worksheet","Module 6 Worksheet: Authorization And CRUD Evidence",{"path":4227,"title":4228,"order":4229,"module":3102,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-06-multi-dimensional-php-arrays-worksheet","Module 06 Worksheet: Multi-Dimensional PHP Arrays","62",{"path":4231,"title":4232,"order":3252,"module":3314,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-07-api-testing-worksheet","Module 07 Worksheet: Project API Testing",{"path":4234,"title":4235,"order":3256,"module":3045,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-08-jquery-and-dynamic-ui-worksheet","Module 8 Worksheet: jQuery And Dynamic UI Evidence",{"path":4237,"title":4238,"order":3043,"module":3112,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-09-search-pagination-and-summary-worksheet","Module 9 Worksheet: Search, Pagination, And Summary Evidence",{"path":4240,"title":4241,"order":2625,"module":2619,"status":3073},"\u002Finternet-applications\u002Fworksheets\u002Fmodule-10-final-project-readiness-worksheet","Module 10 Worksheet: Final Project Readiness Evidence",{"path":4243,"title":3233,"order":2619,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":4245,"title":3236,"order":3080,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":4247,"title":3239,"order":3200,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":4249,"title":3242,"order":3196,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":4251,"title":4252,"order":3216,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup","Course Repository Setup",{"path":4254,"title":4255,"order":3220,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup","Java Development Environment Setup",{"path":4257,"title":4258,"order":2619,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics","Java Basics",{"path":4260,"title":4261,"order":3080,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control","Java Flow Control",{"path":4263,"title":4264,"order":3200,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops","Java Loops",{"path":4266,"title":4267,"order":3196,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections","Java Arrays, Queue, Stack, ArrayList",{"path":4269,"title":4270,"order":2619,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input","Java User Input",{"path":4272,"title":4273,"order":3080,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers","Java Intro to OOP - Modifiers",{"path":4275,"title":4276,"order":3200,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io","Java File I\u002FO",{"path":4278,"title":4279,"order":3196,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees","Java Recursion and Trees",{"path":4281,"title":4282,"order":2619,"module":763,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview","Java Sockets: Overview",{"path":4284,"title":4285,"order":3080,"module":763,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate","Java OOP Intermediate",{"path":4287,"title":4288,"order":3200,"module":763,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F03-multi-client-chat-part-1","Java Sockets: Multi-Client Chat Server Part 1",{"path":4290,"title":4291,"order":2619,"module":775,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F05-module-5-multi-client-sockets\u002F01-multi-client-chat-part-2","Java Sockets: Multi-Client Chat Server Part 2",{"path":4293,"title":4294,"order":3080,"module":3102,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026","Java Advanced Programming Preparing for Milestone 2",{"path":4296,"title":4297,"order":3200,"module":3102,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check","Java Advanced Programming Milestone 2: GameServer Ready Check",{"path":4299,"title":4300,"order":2619,"module":3314,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F01-game-rooms-ready-check","Java Advanced Programming Milestone 2: GameRooms and Ready Check",{"path":4302,"title":4303,"order":3080,"module":3314,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F02-round-robin-turns","Java Advanced Programming Milestone 2: Turn-based Turns (Round-Robin)",{"path":4305,"title":4306,"order":3200,"module":3314,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F03-phase-based-turns","Java Advanced Programming Milestone 2: Phase-based Turns",{"path":4308,"title":4309,"order":3196,"module":3314,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns","Java Advanced Programming Milestone 2: Simultaneous Turns",{"path":4311,"title":4312,"order":3216,"module":3314,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns","Java Advanced Programming Milestone 2: Individual Turns",{"path":4314,"title":4315,"order":2619,"module":3045,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration","Java Advanced Programming Milestone 2: Grid Integration",{"path":4317,"title":4318,"order":3080,"module":3045,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration","Java Advanced Programming Milestone 2: Cards Integration",{"path":4320,"title":4321,"order":3200,"module":3045,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F03-equals-6-mini-project","Java Advanced Programming Milestone 2: Equals 6 Mini Project",{"path":4323,"title":4324,"order":3196,"module":3045,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F04-nice-day-for-fishin","Java Advanced Programming Milestone 2: Project \"Nice Day For Fishin'\"",{"path":4326,"title":4327,"order":3216,"module":3045,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro","Java Advanced Programming Java UI 2025",{"path":4329,"title":4330,"order":2619,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026","UI Integration 2026",{"path":4332,"title":4333,"order":3080,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing","UI Drawing",{"path":4335,"title":4336,"order":3200,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration","Baseline UI Integration",{"path":4338,"title":4339,"order":3196,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration","NDFF UI Integration",{"path":4341,"title":4342,"order":3216,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui","Equals 6 UI",{"path":4344,"title":4345,"order":3220,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project","Popularity Mini Project",{"path":4347,"title":4348,"order":2619,"module":2619,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup","Milestone 3 Wrapup",{"path":4350,"title":4351,"order":3080,"module":2619,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps","Deploying Java Apps",{"path":4353,"title":4354,"order":3200,"module":2619,"status":3073},"\u002Fjava-advanced-programming\u002F2e\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator","NDFF Away Spectator",{"path":4356,"title":4357,"order":729,"module":444,"status":3052},"\u002Fjava-advanced-programming\u002F2e\u002Fsyllabus\u002Ffall-2026","IT114 - Advanced Programming for Information Technology",{"path":4359,"title":4360,"order":2619,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F01-course-tools-and-workflow","Course Tools And Workflow",{"path":4362,"title":4363,"order":3080,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F02-terminal-git-and-github","Terminal, Git, And GitHub Basics",{"path":4365,"title":4366,"order":3200,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F01-course-setup-and-workflow\u002F03-java-development-environment","Java Development Environment",{"path":4368,"title":4369,"order":2619,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F01-java-program-shape","The Shape Of A Java Program",{"path":4371,"title":4372,"order":3080,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F02-values-types-and-expressions","Values, Types, And Expressions",{"path":4374,"title":4375,"order":3200,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F02-java-basics\u002F03-conditions-loops-and-collections","Conditions, Loops, And Collections",{"path":4377,"title":4378,"order":2619,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F01-user-input-and-output","User Input And Program Output",{"path":4380,"title":4381,"order":3080,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F02-classes-objects-and-modifiers","Classes, Objects, And Modifiers",{"path":4383,"title":4384,"order":3200,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F03-file-io-paths-and-exceptions","File I\u002FO, Paths, And Exceptions",{"path":4386,"title":4387,"order":3196,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F03-java-input-io-and-oop\u002F04-recursion-and-trees","Recursion And Tree Thinking",{"path":4389,"title":4390,"order":2619,"module":763,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F01-sockets-client-server","Sockets And Client\u002FServer Thinking",{"path":4392,"title":4393,"order":3080,"module":763,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F02-server-socket-flow","The ServerSocket Flow",{"path":4395,"title":4396,"order":3200,"module":763,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F04-sockets-and-oop\u002F03-oop-for-socket-apps","OOP For Socket Applications",{"path":4398,"title":4399,"order":2619,"module":775,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F01-multi-client-server-shape","Multi-Client Server Shape",{"path":4401,"title":4402,"order":3080,"module":775,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F02-threads-shared-state-and-message-routing","Threads, Shared State, And Message Routing",{"path":4404,"title":4405,"order":3200,"module":775,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Fmodules\u002F05-multi-client-sockets\u002F03-debugging-socket-programs","Debugging Socket Programs",{"path":4407,"title":4408,"order":444,"module":444,"status":3073},"\u002Fjava-advanced-programming\u002Fbook\u002Ftoc","Java Advanced Programming: Table of Contents",{"path":4410,"title":4411,"order":3050,"module":3050,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F00-revision-plan","Java Advanced Programming Presentation Revision Plan",{"path":4413,"title":4414,"order":3050,"module":3050,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Java Advanced Programming Twenty-Minute Recording Plan",{"path":4416,"title":3233,"order":2619,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F01-basic-cli-commands",{"path":4418,"title":3236,"order":3080,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F02-install-git-tools",{"path":4420,"title":3239,"order":3200,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F03-setup-github-ssh",{"path":4422,"title":3242,"order":3196,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F04-git-commands-prs",{"path":4424,"title":4252,"order":3216,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F05-course-repo-setup",{"path":4426,"title":4255,"order":3220,"module":729,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F01-module-1-course-setup\u002F06-java-environment-setup",{"path":4428,"title":4258,"order":2619,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F01-java-basics",{"path":4430,"title":4261,"order":3080,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F02-flow-control",{"path":4432,"title":4264,"order":3200,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F03-loops",{"path":4434,"title":4267,"order":3196,"module":14,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F02-module-2-java-basics\u002F04-collections",{"path":4436,"title":4270,"order":2619,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F01-user-input",{"path":4438,"title":4273,"order":3080,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F02-oop-modifiers",{"path":4440,"title":4276,"order":3200,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F03-file-io",{"path":4442,"title":4279,"order":3196,"module":111,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F03-module-3-java-io-and-oop\u002F04-recursion-trees",{"path":4444,"title":4282,"order":2619,"module":763,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F01-sockets-overview",{"path":4446,"title":4285,"order":3080,"module":763,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F02-oop-intermediate",{"path":4448,"title":4288,"order":3200,"module":763,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F04-module-4-sockets-and-oop\u002F03-multi-client-chat-part-1",{"path":4450,"title":4291,"order":2619,"module":775,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F05-module-5-multi-client-sockets\u002F01-multi-client-chat-part-2",{"path":4452,"title":4453,"order":2619,"module":3102,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F01-prepare-milestone-2-2025","Java Advanced Programming Preparing for Milestone2 2025",{"path":4455,"title":4294,"order":3080,"module":3102,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F02-prepare-milestone-2-2026",{"path":4457,"title":4297,"order":3200,"module":3102,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F06-module-6-milestone-2-prep\u002F03-gameserver-ready-check",{"path":4459,"title":4300,"order":2619,"module":3314,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F01-game-rooms-ready-check",{"path":4461,"title":4303,"order":3080,"module":3314,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F02-round-robin-turns",{"path":4463,"title":4306,"order":3200,"module":3314,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F03-phase-based-turns",{"path":4465,"title":4309,"order":3196,"module":3314,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F04-simultaneous-turns",{"path":4467,"title":4312,"order":3216,"module":3314,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F07-module-7-game-rooms-and-turns\u002F05-individual-turns",{"path":4469,"title":4315,"order":2619,"module":3045,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F01-grid-integration",{"path":4471,"title":4318,"order":3080,"module":3045,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F02-card-integration",{"path":4473,"title":4321,"order":3200,"module":3045,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F03-equals-6-mini-project",{"path":4475,"title":4324,"order":3196,"module":3045,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F04-nice-day-for-fishin",{"path":4477,"title":4327,"order":3216,"module":3045,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F08-module-8-grids-cards-and-ui\u002F05-java-ui-intro",{"path":4479,"title":4330,"order":2619,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F01-ui-integration-2026",{"path":4481,"title":4333,"order":3080,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F02-ui-drawing",{"path":4483,"title":4336,"order":3200,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F03-baseline-ui-integration",{"path":4485,"title":4339,"order":3196,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F04-ndff-ui-integration",{"path":4487,"title":4342,"order":3216,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F05-equals-6-ui",{"path":4489,"title":4345,"order":3220,"module":3112,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F09-module-9-ui-integration\u002F06-popularity-mini-project",{"path":4491,"title":4348,"order":2619,"module":2619,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F01-milestone-3-wrapup",{"path":4493,"title":4351,"order":3080,"module":2619,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F02-deploying-java-apps",{"path":4495,"title":4354,"order":3200,"module":2619,"status":3073},"\u002Fjava-advanced-programming\u002Fpresentations\u002F10-module-10-wrap-up-and-deployment\u002F03-ndff-away-spectator",{"path":4497,"title":4498,"order":2619,"module":729,"status":3073},"\u002Fsystems-integration\u002F2e\u002Fpresentations\u002F01-required-architecture-overview","Required Architecture Overview",{"path":4500,"title":4501,"order":729,"module":444,"status":3052},"\u002Fsystems-integration\u002F2e\u002Fsyllabus\u002Ffall-2026","IT490 - Systems Integration Syllabus",{"path":4503,"title":4504,"order":729,"module":444,"status":3052},"\u002Fsystems-integration","Systems Integration",{"path":4506,"title":4507,"order":3050,"module":3050,"status":3073},"\u002Fsystems-integration\u002Fpresentations-revised\u002F00-revision-plan","Systems Integration Presentation Revision Plan",{"path":4509,"title":4510,"order":3050,"module":3050,"status":3073},"\u002Fsystems-integration\u002Fpresentations-revised\u002F01-20-minute-recording-plan","Systems Integration Twenty-Minute Recording Plan",{"path":4512,"title":4498,"order":2619,"module":729,"status":3052},"\u002Fsystems-integration\u002Fpresentations\u002F01-required-architecture-overview",{"path":4514,"title":4501,"order":729,"module":444,"status":3052},"\u002Fsystems-integration\u002Fsyllabus\u002Fsummer-2026",{"path":4516,"title":4517,"order":3050,"module":3050,"status":3050},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-authentication-authorization-core-2026-draft","IT490 Authentication and Authorization Core Milestone (2026)",{"path":4519,"title":4520,"order":3050,"module":3050,"status":3050},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-centralized-logging-milestone-draft","IT490 Centralized Logging Milestone",{"path":4522,"title":4523,"order":3050,"module":3050,"status":3050},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-3-resiliency-2026-draft","IT490 Milestone 3 - Deployment, Promotion, And Recovery",{"path":4525,"title":4526,"order":3050,"module":3050,"status":3050},"\u002Fsystems-integration\u002Fworksheets\u002Fit490-milestone-4-availability-2026-draft","IT490 Milestone 4 - Availability, Load Balancing, And Recovery",{"path":4528,"title":4529,"order":3080,"module":444,"status":3073},"\u002Fsystems-integration\u002Fworksheets\u002Fmeeting-minutes-template","IT490 Meeting Minutes Template",{"path":4531,"title":4532,"order":3200,"module":444,"status":3073},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-changelog-template","IT490 Project Change Log Template",{"path":4534,"title":4535,"order":2619,"module":444,"status":3073},"\u002Fsystems-integration\u002Fworksheets\u002Fproject-proposal-template","IT490 Project Proposal Template",1788152086761]