<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://progzoo.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Andr3w</id>
	<title>ProgZoo - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://progzoo.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Andr3w"/>
	<link rel="alternate" type="text/html" href="https://progzoo.net/Special:Contributions/Andr3w"/>
	<updated>2026-06-10T03:45:59Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://progzoo.net/index.php?title=DOM_Creating_content&amp;diff=1109</id>
		<title>DOM Creating content</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=DOM_Creating_content&amp;diff=1109"/>
		<updated>2024-10-15T08:53:54Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Using functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create Content==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
You can create a div element an set the content.&lt;br /&gt;
&lt;br /&gt;
We use the document method &#039;&#039;&#039;createElement&#039;&#039;&#039; and the DOM node method &#039;&#039;&#039;append&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;imper&#039;&amp;gt;Change the code so that it says &#039;Hello world&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let e = document.createElement(&#039;div&#039;);&lt;br /&gt;
e.innerHTML = &#039;Hello&#039;;&lt;br /&gt;
document.body.append(e);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let e = document.createElement(&#039;div&#039;);&lt;br /&gt;
e.innerHTML = &#039;Hello world&#039;;&lt;br /&gt;
document.body.append(e);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create img==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
You can create a &#039;&#039;&#039;img&#039;&#039;&#039; element and set the &#039;&#039;&#039;src&#039;&#039;&#039;.&lt;br /&gt;
In this example you must set the &#039;&#039;&#039;src&#039;&#039;&#039; and the &#039;&#039;&#039;style&#039;&#039;&#039; of the new element &#039;&#039;&#039;a&#039;&#039;&#039;.&lt;br /&gt;
 a.style = &#039;width:100px;border:solid;&#039;;&lt;br /&gt;
These are CSS properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;img&#039;);&lt;br /&gt;
a.src = &#039;/flags/fr.png&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;img&#039;);&lt;br /&gt;
a.src = &#039;/flags/fr.png&#039;;&lt;br /&gt;
a.style = &#039;width:100px;border:solid;&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create multiple elements==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
*You can add several elements to the document.body.&lt;br /&gt;
*You can add elements to other elements.&lt;br /&gt;
*Change this code to match the model answer&lt;br /&gt;
*Can you see why the flag does not show?&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;Germany, &#039;;&lt;br /&gt;
let b = document.createElement(&#039;i&#039;);&lt;br /&gt;
b.innerHTML = &#039;Berlin&#039;;&lt;br /&gt;
a.appendChild(b);&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
let c = document.createElement(&#039;img&#039;);&lt;br /&gt;
c.src = &#039;/flags/de.png&#039;;&lt;br /&gt;
c.style = &#039;width:100px&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;Germany, &#039;;&lt;br /&gt;
let b = document.createElement(&#039;i&#039;);&lt;br /&gt;
b.innerHTML = &#039;Berlin&#039;;&lt;br /&gt;
a.append(b);&lt;br /&gt;
document.body.appendChild(a);&lt;br /&gt;
let c = document.createElement(&#039;img&#039;);&lt;br /&gt;
c.src = &#039;/flags/de.png&#039;;&lt;br /&gt;
c.style = &#039;width:100px&#039;;&lt;br /&gt;
document.body.append(c);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting complex innerHTML==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
You can put more complex HTML into an element.&lt;br /&gt;
The backticks ` ` can span many lines.&lt;br /&gt;
&amp;lt;div class=&#039;imper&#039;&amp;gt;Make the flags bigger - you can set the height to 2ex&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = `&lt;br /&gt;
  &amp;lt;img src=&#039;/flags/gr.png&#039; style=&#039;height:1ex&#039;&amp;gt;&lt;br /&gt;
  Greece &amp;lt;i&amp;gt;Athens&amp;lt;/i&amp;gt;`;&lt;br /&gt;
document.body.appendChild(a);&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = `&lt;br /&gt;
  &amp;lt;img src=&#039;/flags/it.png&#039; style=&#039;height:1ex&#039;&amp;gt;&lt;br /&gt;
  Italy &amp;lt;i&amp;gt;Rome&amp;lt;/i&amp;gt;`;&lt;br /&gt;
document.body.appendChild(b);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = `&lt;br /&gt;
  &amp;lt;img src=&#039;/flags/gr.png&#039; style=&#039;height:2ex&#039;&amp;gt;&lt;br /&gt;
  Greece &amp;lt;i&amp;gt;Athens&amp;lt;/i&amp;gt;`;&lt;br /&gt;
document.body.appendChild(a);&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = `&lt;br /&gt;
  &amp;lt;img src=&#039;/flags/it.png&#039; style=&#039;height:2ex&#039;&amp;gt;&lt;br /&gt;
  Italy &amp;lt;i&amp;gt;Rome&amp;lt;/i&amp;gt;`;&lt;br /&gt;
document.body.appendChild(b);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using functions==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
* You should avoid copying chunks of code.&lt;br /&gt;
* A well chosen function can help avoid that.&lt;br /&gt;
* Notice how &#039;&#039;string interpolation&#039;&#039; allows you to include variables in the string.&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function addCountryDiv(name, capital, flag){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    &amp;lt;img src=&#039;/flags/${flag}.png&#039;&lt;br /&gt;
         style=&#039;height:2ex;&#039;&amp;gt;&lt;br /&gt;
    ${name}`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCountryDiv(&#039;China&#039;, &#039;Beijing&#039;, &#039;cn&#039;);&lt;br /&gt;
addCountryDiv(&#039;Japan&#039;, &#039;Tokyo&#039;, &#039;jp&#039;);&lt;br /&gt;
addCountryDiv(&#039;South Korea&#039;, &#039;Seoul&#039;, &#039;kr&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function addCountryDiv(name, capital, flag){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    &amp;lt;img src=&#039;/flags/${flag}.png&#039;&lt;br /&gt;
         style=&#039;height:2ex;border:solid;&#039;&amp;gt;&lt;br /&gt;
    ${name} &amp;lt;i&amp;gt;${capital}&amp;lt;/i&amp;gt;`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCountryDiv(&#039;China&#039;, &#039;Beijing&#039;, &#039;cn&#039;);&lt;br /&gt;
addCountryDiv(&#039;Japan&#039;, &#039;Tokyo&#039;, &#039;jp&#039;);&lt;br /&gt;
addCountryDiv(&#039;South Korea&#039;, &#039;Seoul&#039;, &#039;kr&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Write the schedule==&lt;br /&gt;
We want to show the start time and end time for each event.&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function addSchedule(name, timeStart, timeEnd){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `${name}`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;13:00&#039;, &#039;14:00&#039;);&lt;br /&gt;
addSchedule(&#039;Tutorial&#039;, &#039;14:00&#039;, &#039;15:30&#039;);&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;15:30&#039;, &#039;16:00&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function addSchedule(name, timeStart, timeEnd){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `${name} ${timeStart} ${timeEnd}`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;13:00&#039;, &#039;14:00&#039;);&lt;br /&gt;
addSchedule(&#039;Tutorial&#039;, &#039;14:00&#039;, &#039;15:30&#039;);&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;15:30&#039;, &#039;16:00&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Write the schedule with Edinburgh time==&lt;br /&gt;
You can use this function to calculate Edinburgh time:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function edinburgh(t){&lt;br /&gt;
  let hm = t.split(&#039;:&#039;);&lt;br /&gt;
  let m = 60*parseInt(hm[0])+parseInt(hm[1]);&lt;br /&gt;
  let e = m - 60*5.5;&lt;br /&gt;
  return (Math.floor(e/60).toString().padStart(2,&#039;0&#039;))+&#039;:&#039;+&lt;br /&gt;
                   ((e%60).toString().padStart(2,&#039;0&#039;));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The times shown are in the Yangon time zone. Show the Edinburgh time in brackets. Edinburgh time is 5.5 hours earlier than Yangon time.&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=280&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function edinburgh(t){&lt;br /&gt;
  let hm = t.split(&#039;:&#039;);&lt;br /&gt;
  let m = 60*parseInt(hm[0])+parseInt(hm[1]);&lt;br /&gt;
  let e = m - 60*5.5;&lt;br /&gt;
  return (Math.floor(e/60).toString().padStart(2,&#039;0&#039;))+&#039;:&#039;+&lt;br /&gt;
                   ((e%60).toString().padStart(2,&#039;0&#039;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addSchedule(name, timeStart, timeEnd){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `${name} ${timeStart} ${edinburgh(timeStart)}`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;13:00&#039;, &#039;14:00&#039;);&lt;br /&gt;
addSchedule(&#039;Tutorial&#039;, &#039;14:00&#039;, &#039;15:30&#039;);&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;15:30&#039;, &#039;16:00&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function edinburgh(t){&lt;br /&gt;
  let hm = t.split(&#039;:&#039;);&lt;br /&gt;
  let m = 60*parseInt(hm[0])+parseInt(hm[1]);&lt;br /&gt;
  let e = m - 60*5.5;&lt;br /&gt;
  return (Math.floor(e/60).toString().padStart(2,&#039;0&#039;))+&#039;:&#039;+&lt;br /&gt;
                   ((e%60).toString().padStart(2,&#039;0&#039;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addSchedule(name, timeStart, timeEnd){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `${name} ${timeStart} (${edinburgh(timeStart)}) ${timeEnd} (${edinburgh(timeEnd)})`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;13:00&#039;, &#039;14:00&#039;);&lt;br /&gt;
addSchedule(&#039;Tutorial&#039;, &#039;14:00&#039;, &#039;15:30&#039;);&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;15:30&#039;, &#039;16:00&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using a loop==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
* Another way to avoid copying chunks of code is to use a loop.&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let cl = [&lt;br /&gt;
  {name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
  {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
  {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}&lt;br /&gt;
];&lt;br /&gt;
for(let c of cl){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    ${c.name}`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let cl = [{name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
          {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
          {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}];&lt;br /&gt;
for(let c of cl){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    &amp;lt;img src=&#039;/flags/${c.flag}.png&#039;&lt;br /&gt;
         style=&#039;height:2ex;border:solid&#039;&amp;gt;&lt;br /&gt;
    ${c.name} &amp;lt;i&amp;gt;${c.capital}&amp;lt;/i&amp;gt;`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Radio buttons==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
* You can create HTML elements such as a radio button:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;label&amp;gt;&amp;lt;input type=radio name=&#039;country&#039;&amp;gt;France&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let cl = [&lt;br /&gt;
  {name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
  {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
  {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}&lt;br /&gt;
];&lt;br /&gt;
for(let c of cl){&lt;br /&gt;
  let d = document.createElement(&#039;div&#039;);&lt;br /&gt;
  d.innerHTML = c.name;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let cl = [{name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
          {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
          {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}];&lt;br /&gt;
for(let c of cl){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=radio name=&#039;country&#039;&amp;gt;${c.name}&amp;lt;/label&amp;gt;`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Radio buttons with images==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
* Add a flag to each radio button:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;label&amp;gt;&amp;lt;input type=radio name=&#039;country&#039;&amp;gt;France&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let cl = [&lt;br /&gt;
  {name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
  {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
  {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}&lt;br /&gt;
];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let cl = [{name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
          {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
          {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}];&lt;br /&gt;
for(let c of cl){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=radio name=&#039;country&#039;&amp;gt;&amp;lt;img style=&#039;height:20px&#039; src=/flags/${c.flag}.png&amp;gt;&amp;lt;/label&amp;gt;`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Quiz_-_HTML&amp;diff=1108</id>
		<title>Quiz - HTML</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Quiz_-_HTML&amp;diff=1108"/>
		<updated>2023-12-09T13:21:17Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Consider the html fragment&lt;br /&gt;
 &amp;amp;lt;div style=&#039;color:red&#039;&amp;gt;This &amp;amp;amp;amp; that&amp;amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=quiz&amp;gt;&lt;br /&gt;
  &amp;lt;div class=q&amp;gt;The term &amp;lt;code&amp;gt;style&amp;lt;/code&amp;gt; is best described as:&lt;br /&gt;
    &amp;lt;div class=&#039;d y&#039;&amp;gt;Attribute name&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Attribute value&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Closing tag&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Entity&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Tag name&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=q&amp;gt;The term &amp;lt;code&amp;gt;&amp;amp;amp;amp;&amp;lt;/code&amp;gt; is best described as:&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Attribute name&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Attribute value&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Closing tag&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d y&#039;&amp;gt;Entity&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Tag name&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=q&amp;gt;The term &amp;lt;code&amp;gt;&amp;amp;lt;/div&amp;gt;&amp;lt;/code&amp;gt; is best described as:&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Attribute name&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Attribute value&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d y&#039;&amp;gt;Closing tag&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Entity&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Tag name&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=q&amp;gt;The term &amp;lt;code&amp;gt;&#039;color:red&#039;&amp;lt;/code&amp;gt; is best described as:&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Attribute name&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d y&#039;&amp;gt;Attribute value&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Closing tag&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Entity&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Tag name&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=q&amp;gt;The term &amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt; is best described as:&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Attribute name&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=d&amp;gt;Attribute value&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Closing tag&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Entity&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d y&#039;&amp;gt;Tag name&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=q&amp;gt;The html would be rendered as:&lt;br /&gt;
    &amp;lt;div class=&#039;d y&#039;&amp;gt;&amp;lt;div style=&#039;color:red&#039;&amp;gt;This &amp;amp;amp; that&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=d&amp;gt;&amp;lt;div style=&#039;background:red&#039;&amp;gt;This &amp;amp;amp; that&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;&amp;lt;div style=&#039;color:red&#039;&amp;gt;This &amp;lt;br&amp;gt; that&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;&amp;lt;div&amp;gt;color:red&#039; This &amp;amp;amp; that&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;&amp;lt;div style=&#039;color:red&#039;&amp;gt;This &amp;amp;amp;amp; that&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=q&amp;gt;In html5 what is wrong with the fragment &amp;lt;code&amp;gt;&amp;amp;lt;div&amp;gt;&amp;amp;lt;img src=kitten.png&amp;gt;&amp;amp;lt;/div&amp;gt;&amp;lt;/code&amp;gt;:&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;The img tag is not closed&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=d&amp;gt;The attribute values is not quoted&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;png is not an image format&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;An img may not appear in a div&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d y&#039;&amp;gt;There is nothing wrong with the fragment&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=q&amp;gt;Select the true statement about HTTP:&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;The HTTP response must always include HTML&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;The HTTP response always comes from the client&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d y&#039;&amp;gt;The HTTP request always comes from the client&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;nginx is an example of an HTTP client&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;firefox is an example of an HTTP server&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=q&amp;gt;Select the true statement about this HTTP fragment:&lt;br /&gt;
 HTTP/1.1 404 Not Found&lt;br /&gt;
 Content-Type: text/html; charset=UTF-8&lt;br /&gt;
 Referrer-Policy: no-referrer&lt;br /&gt;
 Content-Length: 1565&lt;br /&gt;
 Date: Mon, 06 Sep 2021 21:45:18 GMT&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
 &amp;lt;html lang=en&amp;gt;...&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;The status code is HTML&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;There are five headers in this response&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;This indicates the server is not working properly&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;This is part of the HTTP request&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d y&#039;&amp;gt;This is part of the HTTP response&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;div class=q&amp;gt;One difference between HTTP/1.0 and HTTP/1.1 is that the Host header became mandatory. The Host header allows for:&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Authentication is possible&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d y&#039;&amp;gt;One server can deal with many web sites&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;One web site can be accessed by many clients&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;One web site can be delivered from many servers&amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&#039;d&#039;&amp;gt;Web pages can have components on different servers&amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=M.js&amp;diff=1107</id>
		<title>M.js</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=M.js&amp;diff=1107"/>
		<updated>2023-11-19T14:53:28Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some handy functions for every day JavaScript&lt;br /&gt;
 /* returns a new element for a given tag with properties and children */&lt;br /&gt;
 function $m(tag,props,children){&lt;br /&gt;
  let args = [...arguments];&lt;br /&gt;
  let ret = document.createElement(args.shift());&lt;br /&gt;
  for(let a of args){&lt;br /&gt;
    if (typeof a === &amp;quot;string&amp;quot;)&lt;br /&gt;
      ret.innerHTML = a;&lt;br /&gt;
    else if (Array.isArray(a)){&lt;br /&gt;
      for(let c of a){&lt;br /&gt;
        if (typeof c === &#039;string&#039;){&lt;br /&gt;
            ret.appendChild(document.createTextNode(c))&lt;br /&gt;
        }else{&lt;br /&gt;
            ret.appendChild(c);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }else{&lt;br /&gt;
      for(let k in a){&lt;br /&gt;
        if (k === &#039;text&#039;){&lt;br /&gt;
          ret.innerText = a[k];&lt;br /&gt;
        }else if (k.startsWith(&#039;on&#039;))&lt;br /&gt;
          ret.addEventListener(k.substring(2),a[k]);&lt;br /&gt;
        else&lt;br /&gt;
          ret.setAttribute(k,props[k]);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return ret;&lt;br /&gt;
 }&lt;br /&gt;
 /* renaming */&lt;br /&gt;
 let $i = id =&amp;gt; document.getElementById(id);&lt;br /&gt;
 /* querySelectorAll as a list */&lt;br /&gt;
 let $q = (p,context) =&amp;gt; Array.from((context||document).querySelectorAll(p));&lt;br /&gt;
 /* returns a copy sorted by key function f */&lt;br /&gt;
 function sort(ls,f){&lt;br /&gt;
  let ret = [...ls];&lt;br /&gt;
  if (f===undefined){&lt;br /&gt;
    ret.sort();&lt;br /&gt;
  }else{&lt;br /&gt;
    ret.sort((a,b)=&amp;gt;f(a)&amp;gt;=f(b));&lt;br /&gt;
  }&lt;br /&gt;
  return ret;&lt;br /&gt;
 }&lt;br /&gt;
 /* like python... returns a list of integers */&lt;br /&gt;
 let range = n =&amp;gt; [...new Array(n)].map((_,i)=&amp;gt;i);&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=M.js&amp;diff=1106</id>
		<title>M.js</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=M.js&amp;diff=1106"/>
		<updated>2023-11-19T14:46:19Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; /* returns a new element for a given tag with properties and children */&lt;br /&gt;
 /* Example use...&lt;br /&gt;
 document.body.append($m(&#039;div&#039;,{style:&#039;border:solid;padding:1ex;&#039;},[&lt;br /&gt;
   &#039;This is a button &#039;,&lt;br /&gt;
   $m(&#039;button&#039;,{onclick:()=&amp;gt;alert(&#039;Hello World&#039;)},&#039;Say Hello&#039;)&lt;br /&gt;
 ]));&lt;br /&gt;
 function $m(tag,props,children){&lt;br /&gt;
  let args = [...arguments];&lt;br /&gt;
  let ret = document.createElement(args.shift());&lt;br /&gt;
  for(let a of args){&lt;br /&gt;
    if (typeof a === &amp;quot;string&amp;quot;)&lt;br /&gt;
      ret.innerHTML = a;&lt;br /&gt;
    else if (Array.isArray(a)){&lt;br /&gt;
      for(let c of a){&lt;br /&gt;
        if (typeof c === &#039;string&#039;){&lt;br /&gt;
            ret.appendChild(document.createTextNode(c))&lt;br /&gt;
        }else{&lt;br /&gt;
            ret.appendChild(c);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }else{&lt;br /&gt;
      for(let k in a){&lt;br /&gt;
        if (k === &#039;text&#039;){&lt;br /&gt;
          ret.innerText = a[k];&lt;br /&gt;
        }else if (k.startsWith(&#039;on&#039;))&lt;br /&gt;
          ret.addEventListener(k.substring(2),a[k]);&lt;br /&gt;
        else&lt;br /&gt;
          ret.setAttribute(k,props[k]);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return ret;&lt;br /&gt;
 }&lt;br /&gt;
 /* renaming */&lt;br /&gt;
 let $i = id =&amp;gt; document.getElementById(id);&lt;br /&gt;
 /* querySelectorAll as a list */&lt;br /&gt;
 let $q = (p,context) =&amp;gt; Array.from((context||document).querySelectorAll(p));&lt;br /&gt;
 /* returns a copy sorted by key function f */&lt;br /&gt;
 function sort(ls,f){&lt;br /&gt;
  let ret = [...ls];&lt;br /&gt;
  if (f===undefined){&lt;br /&gt;
    ret.sort();&lt;br /&gt;
  }else{&lt;br /&gt;
    ret.sort((a,b)=&amp;gt;f(a)&amp;gt;=f(b));&lt;br /&gt;
  }&lt;br /&gt;
  return ret;&lt;br /&gt;
 }&lt;br /&gt;
 /* like python... returns a list of integers */&lt;br /&gt;
 let range = n =&amp;gt; [...new Array(n)].map((_,i)=&amp;gt;i);&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=M.js&amp;diff=1105</id>
		<title>M.js</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=M.js&amp;diff=1105"/>
		<updated>2023-11-19T14:37:48Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: Created page with &amp;quot; let $i = id =&amp;gt; document.getElementById(id);  let $q = (p,context) =&amp;gt; Array.from((context||document).querySelectorAll(p));  function sort(ls,f){   let ret = [...ls];   if (f==...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; let $i = id =&amp;gt; document.getElementById(id);&lt;br /&gt;
 let $q = (p,context) =&amp;gt; Array.from((context||document).querySelectorAll(p));&lt;br /&gt;
 function sort(ls,f){&lt;br /&gt;
  let ret = [...ls];&lt;br /&gt;
  if (f===undefined){&lt;br /&gt;
    ret.sort();&lt;br /&gt;
  }else{&lt;br /&gt;
    ret.sort((a,b)=&amp;gt;f(a)&amp;gt;=f(b));&lt;br /&gt;
  }&lt;br /&gt;
  return ret;&lt;br /&gt;
 }&lt;br /&gt;
 let range = n =&amp;gt; [...new Array(n)].map((_,i)=&amp;gt;i);&lt;br /&gt;
 function $m(tag,props,children){&lt;br /&gt;
  let args = [...arguments];&lt;br /&gt;
  let ret = document.createElement(args.shift());&lt;br /&gt;
  for(let a of args){&lt;br /&gt;
    if (typeof a === &amp;quot;string&amp;quot;)&lt;br /&gt;
      ret.innerHTML = a;&lt;br /&gt;
    else if (Array.isArray(a)){&lt;br /&gt;
      for(let c of a){&lt;br /&gt;
        if (typeof c === &#039;string&#039;){&lt;br /&gt;
            ret.appendChild(document.createTextNode(c))&lt;br /&gt;
        }else{&lt;br /&gt;
            ret.appendChild(c);&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }else{&lt;br /&gt;
      for(let k in a){&lt;br /&gt;
        if (k === &#039;text&#039;){&lt;br /&gt;
          ret.innerText = a[k];&lt;br /&gt;
        }else if (k.startsWith(&#039;on&#039;))&lt;br /&gt;
          ret.addEventListener(k.substring(2),a[k]);&lt;br /&gt;
        else&lt;br /&gt;
          ret.setAttribute(k,props[k]);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  return ret;&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_with_Rectangles&amp;diff=1104</id>
		<title>Flags with Rectangles</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_with_Rectangles&amp;diff=1104"/>
		<updated>2023-08-28T21:33:15Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can dive right in and start programming - or you can watch this worked example: [[Worked example Benin|Flag of Benin]] &lt;br /&gt;
*You will need to use the method [https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillRect fillRect]&lt;br /&gt;
*You will need to use the property [https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/fillStyle fillStyle]&lt;br /&gt;
&lt;br /&gt;
==Libya==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=&amp;quot;150&amp;quot; data-height=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;
The flag of Libya, until 2011, was a simple green rectangle.&lt;br /&gt;
Try the program as it is given, then change it so that the green rectangle is 150 wide.&lt;br /&gt;
[[Image:flaglibya.png|border]]&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;green&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,75,100);&lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;green&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,100);&lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==France==&lt;br /&gt;
&amp;lt;div class=qu data-width=&amp;quot;150&amp;quot; data-height=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;
The flag of France is blue, white  and red.  &lt;br /&gt;
The code given draws only one of the three rectangles required and it is in the wrong place.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:flag_guide_france.png|border]]&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;blue&#039;;&lt;br /&gt;
  ctx.fillRect(50,0,50,100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;blue&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,50,100);&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(50,0,50,100); &lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(100,0,50,100); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Germany==&lt;br /&gt;
&amp;lt;div class=qu data-width=150 data-height=90&amp;gt;&lt;br /&gt;
The flag of Germany is black, red and yellow.&lt;br /&gt;
&lt;br /&gt;
Only one of the three rectangles has been drawn - and that one is in the wrong place.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:flaggermany.png|border]] &amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;yellow&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,30);&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;black&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,30);&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(0,30,150,30);&lt;br /&gt;
  ctx.fillStyle = &#039;yellow&#039;;&lt;br /&gt;
  ctx.fillRect(0,60,150,30);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Switzerland==&lt;br /&gt;
&amp;lt;div class=qu width=&#039;100&#039; height=&#039;100&#039;&lt;br /&gt;
  className=&amp;quot;Raster&amp;quot; level=&#039;1&#039;&amp;gt;&lt;br /&gt;
The flag of Switzerland is red with a white cross in the center.&lt;br /&gt;
&lt;br /&gt;
The background has been filled in. Use white rectangles to draw the cross.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:swissflag.png|border]] &amp;lt;pre class=usr&amp;gt;function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,100,100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,100,100);&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(10,40,80,20);&lt;br /&gt;
  ctx.fillRect(40,10,20,80);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==United Arab Emirates==&lt;br /&gt;
&amp;lt;div class=qu data-width=&#039;200&#039; data-height=&#039;99&#039;&amp;gt;&lt;br /&gt;
*The flag of United Arab Emirates has a red bar taking one quarter of the rectangle.&lt;br /&gt;
*The rectangle is 200 by 99.&lt;br /&gt;
[[Image:Flaguaeplain.png|border]]&lt;br /&gt;
&amp;lt;div class=&#039;dhint&#039; title=&amp;quot;How to draw a circle&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(50,0,150,33);&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,50,99);&lt;br /&gt;
  ctx.fillStyle = &#039;black&#039;;&lt;br /&gt;
  ctx.fillRect(50,0,150,33);&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(50,33,150,33);&lt;br /&gt;
  ctx.fillStyle = &#039;green&#039;;&lt;br /&gt;
  ctx.fillRect(50,66,150,33);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_inspired_by_Bridget_Riley&amp;diff=1103</id>
		<title>Flags inspired by Bridget Riley</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_inspired_by_Bridget_Riley&amp;diff=1103"/>
		<updated>2023-08-28T21:31:51Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: Created page with &amp;quot;&amp;lt;pre id=&amp;#039;shellbody&amp;#039; data-qtp=&amp;#039;canvas&amp;#039;&amp;gt;&amp;lt;/pre&amp;gt; ==Movement in Squares==  &amp;lt;div class=&amp;#039;qu&amp;#039; data-width=&amp;quot;240&amp;quot; data-height=&amp;quot;240&amp;quot;&amp;gt; For each of the first 16 columns the width is 90% of...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Movement in Squares==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=&amp;quot;240&amp;quot; data-height=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
For each of the first 16 columns the width is 90% of the previous. This pattern is reversed for the remainder. There are 31 columns.&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,240,240);&lt;br /&gt;
  ctx.fillStyle = &#039;black&#039;;&lt;br /&gt;
  for(let y=0;y&amp;lt;12;y++){&lt;br /&gt;
    for(let x=0;x&amp;lt;31;x++){&lt;br /&gt;
       if ((x+y)%2==1){&lt;br /&gt;
         ctx.fillRect(240*x/24,240*y/12,240/24,240/12);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,240,240);&lt;br /&gt;
  ctx.fillStyle = &#039;black&#039;;&lt;br /&gt;
  let a = 0;&lt;br /&gt;
  let w = 240/12;&lt;br /&gt;
  for(let x=0;x&amp;lt;31;x++){&lt;br /&gt;
    for(let y=0;y&amp;lt;12;y++){&lt;br /&gt;
       if ((x+y)%2==1){&lt;br /&gt;
         ctx.fillRect(a,240*y/12,w,240/12);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    a += w;&lt;br /&gt;
    if (x&amp;lt;16){&lt;br /&gt;
      w *= 0.9;&lt;br /&gt;
    }else{&lt;br /&gt;
      w *= 1/0.9;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_with_Rectangles&amp;diff=1102</id>
		<title>Flags with Rectangles</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_with_Rectangles&amp;diff=1102"/>
		<updated>2023-07-09T16:46:49Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Movement in Squares */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Movement in Squares==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=&amp;quot;240&amp;quot; data-height=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
For each of the first 16 columns the width is 90% of the previous. This pattern is reversed for the remainder. There are 31 columns.&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,240,240);&lt;br /&gt;
  ctx.fillStyle = &#039;black&#039;;&lt;br /&gt;
  for(let y=0;y&amp;lt;12;y++){&lt;br /&gt;
    for(let x=0;x&amp;lt;31;x++){&lt;br /&gt;
       if ((x+y)%2==1){&lt;br /&gt;
         ctx.fillRect(240*x/24,240*y/12,240/24,240/12);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,240,240);&lt;br /&gt;
  ctx.fillStyle = &#039;black&#039;;&lt;br /&gt;
  let a = 0;&lt;br /&gt;
  let w = 240/12;&lt;br /&gt;
  for(let x=0;x&amp;lt;31;x++){&lt;br /&gt;
    for(let y=0;y&amp;lt;12;y++){&lt;br /&gt;
       if ((x+y)%2==1){&lt;br /&gt;
         ctx.fillRect(a,240*y/12,w,240/12);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    a += w;&lt;br /&gt;
    if (x&amp;lt;16){&lt;br /&gt;
      w *= 0.9;&lt;br /&gt;
    }else{&lt;br /&gt;
      w *= 1/0.9;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_with_Rectangles&amp;diff=1101</id>
		<title>Flags with Rectangles</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_with_Rectangles&amp;diff=1101"/>
		<updated>2023-07-09T16:44:46Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Movement in Squares */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Movement in Squares==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=&amp;quot;240&amp;quot; data-height=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
For each of the first 16 columns the width is 90% of the previous. This pattern is reversed for the remainder. There are 31 columns.&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,240,240);&lt;br /&gt;
  ctx.fillStyle = &#039;black&#039;;&lt;br /&gt;
  for(let y=0;y&amp;lt;12;y++){&lt;br /&gt;
    for(let x=0;x&amp;lt;31;x++){&lt;br /&gt;
       if ((x+y)%2==1){&lt;br /&gt;
         ctx.fillRect(240*x/24,240*y/12,240/24,240/12);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,240,240);&lt;br /&gt;
  ctx.fillStyle = &#039;black&#039;;&lt;br /&gt;
  let a = 0;&lt;br /&gt;
  let w = 240/12;&lt;br /&gt;
  for(let x=0;x&amp;lt;31;x++){&lt;br /&gt;
    for(let y=0;y&amp;lt;12;y++){&lt;br /&gt;
       if ((x+y)%2==1){&lt;br /&gt;
         ctx.fillRect(a,240*y/12,w,240/12);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    if (x&amp;lt;16){&lt;br /&gt;
      w *= 0.9;&lt;br /&gt;
    }else{&lt;br /&gt;
      w *= 1/0.9;&lt;br /&gt;
    }&lt;br /&gt;
    a += w;&lt;br /&gt;
  }&lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_with_Rectangles&amp;diff=1100</id>
		<title>Flags with Rectangles</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_with_Rectangles&amp;diff=1100"/>
		<updated>2023-07-09T16:44:05Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Movement in Squares */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Movement in Squares==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=&amp;quot;240&amp;quot; data-height=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
For each of the first 16 columns the width is 90% of the previous. This pattern is reversed for the remainder. There are 31 columns.&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,240,240);&lt;br /&gt;
  for(let y=0;y&amp;lt;12;y++){&lt;br /&gt;
    for(let x=0;x&amp;lt;24;x++){&lt;br /&gt;
       if ((x+y)%2==1){&lt;br /&gt;
         ctx.fillRect(240*x/24,240*y/12,240/24,240/12);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,240,240);&lt;br /&gt;
  ctx.fillStyle = &#039;black&#039;;&lt;br /&gt;
  let a = 0;&lt;br /&gt;
  let w = 240/12;&lt;br /&gt;
  for(let x=0;x&amp;lt;31;x++){&lt;br /&gt;
    for(let y=0;y&amp;lt;12;y++){&lt;br /&gt;
       if ((x+y)%2==1){&lt;br /&gt;
         ctx.fillRect(a,240*y/12,w,240/12);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
    if (x&amp;lt;16){&lt;br /&gt;
      w *= 0.9;&lt;br /&gt;
    }else{&lt;br /&gt;
      w *= 1/0.9;&lt;br /&gt;
    }&lt;br /&gt;
    a += w;&lt;br /&gt;
  }&lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_with_Rectangles&amp;diff=1099</id>
		<title>Flags with Rectangles</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_with_Rectangles&amp;diff=1099"/>
		<updated>2023-07-09T16:32:55Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Movement in Squares==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=&amp;quot;240&amp;quot; data-height=&amp;quot;240&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,240,240);&lt;br /&gt;
  for(let y=0;y&amp;lt;12;y++){&lt;br /&gt;
    for(let x=0;x&amp;lt;24;x++){&lt;br /&gt;
       if ((x+y)%2==1){&lt;br /&gt;
         ctx.fillRect(240*x/24,240*y/12,240/24,240/12);&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;green&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,100);&lt;br /&gt;
}  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Main_Page&amp;diff=1098</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Main_Page&amp;diff=1098"/>
		<updated>2023-07-09T16:23:45Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=tut-nav&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Manipulating DOM&lt;br /&gt;
* [[DOM Creating content]]&lt;br /&gt;
* [[DOM div in div]]&lt;br /&gt;
* [[DOM Changing elements]]&lt;br /&gt;
* [[DOM Working with data]]&lt;br /&gt;
* [[DOM Content from lists]]&lt;br /&gt;
* [[DOM Controls that do things]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Useful patterns&lt;br /&gt;
* [[DOM Common Logic]]&lt;br /&gt;
* [[DOM Shopping]]&lt;br /&gt;
* [[DOM Calendar]]&lt;br /&gt;
* [[World Factbook]]&lt;br /&gt;
* [[DOM Options]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Drawing images&lt;br /&gt;
* [[Flags with Rectangles]]&lt;br /&gt;
* [[Flags with Lines]]&lt;br /&gt;
* [[Flags with Polygons]]&lt;br /&gt;
* [[Flags with Stars]]&lt;br /&gt;
* [[Flags with Repeats]]&lt;br /&gt;
* [[Flags with Methods]]&lt;br /&gt;
* [[Flags inspired by Bridget Riley]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Use your own computer Tutorials&lt;br /&gt;
* [[pokemon]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Quiz&lt;br /&gt;
* [[Quiz - HTML]]&lt;br /&gt;
* [[Assessment2021 09Easy]]&lt;br /&gt;
* [[Assessment2021 09Medium]]&lt;br /&gt;
* [[Assessment2021 09Hard]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Server-side concerns&lt;br /&gt;
* [[Buy and set up a server]]&lt;br /&gt;
* [[Flask_from_command_line|Running flask dev &amp;amp; prod]]&lt;br /&gt;
* [[Encryption]]&lt;br /&gt;
* [[Testing for prime]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Data&lt;br /&gt;
* [[File:flags.zip]]&lt;br /&gt;
* [[File:worldl.json]]&lt;br /&gt;
* [[File:zodiac.json]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==Hello World==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
Hello World&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.innerHTML = &#039;Hellow orld&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
document.body.innerHTML = &#039;Hello world!&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_with_Methods&amp;diff=1097</id>
		<title>Flags with Methods</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_with_Methods&amp;diff=1097"/>
		<updated>2023-06-28T10:09:35Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* China */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; src=&amp;quot;videos/flags_with_methods.mp4&amp;quot; width=&amp;quot;400px&amp;quot; controls &amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Three colours ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain three colors in vertical stripes.&lt;br /&gt;
[[Image:flagtricolour.png|left|frame|Three colour flags]]&lt;br /&gt;
Draw the flags of: France, Romania, Belgium, Nigeria. The positions and colours are as follows.&lt;br /&gt;
  10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;&lt;br /&gt;
  95,10,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;&lt;br /&gt;
  10,70,&#039;black&#039;,&#039;yellow&#039;,&#039;red&#039;&lt;br /&gt;
  95,70,&#039;green&#039;,&#039;white&#039;,&#039;green&#039;&lt;br /&gt;
&lt;br /&gt;
* Sizes are:&lt;br /&gt;
**The small flags are 75 by 50&lt;br /&gt;
**The margins are 10&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function tri(x,y,cl){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    cl.forEach((c,i)=&amp;gt;{&lt;br /&gt;
      ctx.fillStyle = c;&lt;br /&gt;
      ctx.fillRect(i*75/cl.length,0,75/cl.length,50);&lt;br /&gt;
    });&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle = &#039;gray&#039;;&lt;br /&gt;
  tri(10,10,[&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  tri(95,10,[&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;]);&lt;br /&gt;
  tri(10,70,[&#039;black&#039;,&#039;yellow&#039;,&#039;red&#039;]);&lt;br /&gt;
  tri(95,70,[&#039;green&#039;,&#039;white&#039;,&#039;green&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nordic cross ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain three colors in vertical stripes.&lt;br /&gt;
[[Image:flagnordic.png|left|frame|Nordic]]&lt;br /&gt;
The Nordic Cross features in flags of Scandinavia&lt;br /&gt;
&lt;br /&gt;
Draw the flags of: Sweden, Denmark, Finland, Östergötland&lt;br /&gt;
&lt;br /&gt;
* The small flags are 75 by 50.&lt;br /&gt;
* The squares on the left are 20 by 20.&lt;br /&gt;
* The line width is 10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function nordic(x,y,b,f){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.fillStyle = b;&lt;br /&gt;
    ctx.fillRect(0,0,75,50);&lt;br /&gt;
    ctx.fillStyle = f;&lt;br /&gt;
    ctx.fillRect(20,0,10,50);&lt;br /&gt;
    ctx.fillRect(0,20,75,10);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  nordic(10,10,&#039;blue&#039;,&#039;yellow&#039;);&lt;br /&gt;
  nordic(95,10,&#039;red&#039;,&#039;white&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,70,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Horizontal stripes ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain several horizontal stripes.&lt;br /&gt;
[[Image:flaghstripe.png|left|frame|Horizontal stripes]]&lt;br /&gt;
&lt;br /&gt;
Draw the flags of: Poland, Costa Rica, Columbia, Estonia, Mauritius&lt;br /&gt;
&lt;br /&gt;
* The small flags are 75 by 48.&lt;br /&gt;
* Put the four flags at (10,10) (95,10) (10,70) and (95,70)&lt;br /&gt;
* It may be useful to have two adjacent same-colour stripes.&lt;br /&gt;
  stripes(10,10,[&#039;white&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(95,10,[&#039;yellow&#039;,&#039;yellow&#039;,&#039;blue&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(10,70,[&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  stripes(95,70,[&#039;red&#039;,&#039;blue&#039;,&#039;yellow&#039;,&#039;green&#039;]);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 75;&lt;br /&gt;
  let h = 48;&lt;br /&gt;
  function stripes(x,y,cl){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    cl.forEach((c,i)=&amp;gt;{&lt;br /&gt;
      ctx.fillStyle = c;&lt;br /&gt;
      ctx.fillRect(0,i*h/cl.length,75,h/cl.length);&lt;br /&gt;
    });&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  stripes(10,10,[&#039;white&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(95,10,[&#039;yellow&#039;,&#039;yellow&#039;,&#039;blue&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(10,70,[&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  stripes(95,70,[&#039;red&#039;,&#039;blue&#039;,&#039;yellow&#039;,&#039;green&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== More Nordic crosses ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
The Nordic Cross features in flags of Scandinavia&lt;br /&gt;
[[Image:flagmorenordic.png|left|frame|More Nordic crosses]]&lt;br /&gt;
Draw the flags of: Norway, Iceland, Faroe Islands, Orkney&lt;br /&gt;
* The small flags are 75 by 50. The line width is 6 with a border of 2 each side&lt;br /&gt;
* The positions are (10,10) (95,10) (10,70) (95,70)&lt;br /&gt;
  nordic(10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,10,&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(95,70,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 75;&lt;br /&gt;
  let h = 50;&lt;br /&gt;
  function nordic(x,y,b,e,s){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.fillStyle = b;&lt;br /&gt;
    ctx.fillRect(0,0,w,h);&lt;br /&gt;
    ctx.fillStyle = e;&lt;br /&gt;
    ctx.fillRect(20,0,10,h);&lt;br /&gt;
    ctx.fillRect(0,20,75,10);&lt;br /&gt;
    ctx.fillStyle = s;&lt;br /&gt;
    ctx.fillRect(22,0,6,h);&lt;br /&gt;
    ctx.fillRect(0,22,w,6);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  nordic(10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,10,&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(95,70,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== China ==&lt;br /&gt;
&amp;lt;div class=qu data-width=300 data-height=200&amp;gt;&lt;br /&gt;
The flag of China requires 5 stars with a variety of size, orientation and distance from a fixed point.&lt;br /&gt;
* The whole flag is 300 by 200&lt;br /&gt;
* The big star is at (50,50) it has radius 30&lt;br /&gt;
* Each smaller star has radius 10&lt;br /&gt;
* Each smaller star is at a different distance with a different angle&lt;br /&gt;
&lt;br /&gt;
  star(30,3.14,0);      // Radius 30, angle 3.14, distance 0&lt;br /&gt;
  star(10,1.03,58.3);   // Radius 10, angle 1.03, distance 58.3&lt;br /&gt;
  star(10,1.42,70.7);&lt;br /&gt;
  star(10,1.85,72.8);&lt;br /&gt;
  star(10,2.24,58.3);&lt;br /&gt;
&lt;br /&gt;
You can reuse the function &amp;lt;code&amp;gt;star&amp;lt;/code&amp;gt; from the earlier tutorial [[Flags with Stars]]&lt;br /&gt;
&lt;br /&gt;
[[Image:flagchina.png|left|frame|China]]&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function star(radius,angle,distance){&lt;br /&gt;
    ctx.rotate(angle);&lt;br /&gt;
    ctx.translate(0,-distance);&lt;br /&gt;
    ctx.scale(radius/100,-radius/100);&lt;br /&gt;
    ctx.beginPath();&lt;br /&gt;
    [[0,-100],[22,-31],[95,-31],[36,12],[59,81],&lt;br /&gt;
     [0,38],[-59,81],[-36,12],[-95,-31],[-22,-31]]&lt;br /&gt;
     .forEach((xy)=&amp;gt;ctx.lineTo(xy[0],xy[1]));&lt;br /&gt;
    ctx.fill();&lt;br /&gt;
    ctx.scale(100/radius,-100/radius);&lt;br /&gt;
    ctx.translate(0,distance);&lt;br /&gt;
    ctx.rotate(-angle);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,300,200);&lt;br /&gt;
  ctx.fillStyle = &#039;gold&#039;;&lt;br /&gt;
  ctx.translate(50,50);&lt;br /&gt;
  star(30,3.14,0);&lt;br /&gt;
  star(10,1.03,58.3);&lt;br /&gt;
  star(10,1.42,70.7);&lt;br /&gt;
  star(10,1.85,72.8);&lt;br /&gt;
  star(10,2.24,58.3);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== United States ==&lt;br /&gt;
&amp;lt;div class=qu data-width=246 data-height=130&amp;gt;&lt;br /&gt;
Size: 246 by 130. Thirteen red and white stripes. A 5x4 grid of 20 stars interleaved with a 6x5 grid of 30 stars on a blue background.&lt;br /&gt;
&lt;br /&gt;
*Radius of star: 5&lt;br /&gt;
*Horizontal grid offset: 8&lt;br /&gt;
*Vertical grid offset: 7 &lt;br /&gt;
&lt;br /&gt;
[[Image:flagusa.png|left|frame|Stars and Stripes]]&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 246;&lt;br /&gt;
  let h = 130;&lt;br /&gt;
  let stripe = 13;&lt;br /&gt;
  for(let i=0;i&amp;lt;stripe;i++){&lt;br /&gt;
    ctx.fillStyle = [&#039;red&#039;,&#039;white&#039;][i%2];&lt;br /&gt;
    ctx.fillRect(0,i*h/stripe,w,h/stripe);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle=&#039;blue&#039;;&lt;br /&gt;
  let xoff = 8;&lt;br /&gt;
  let yoff = 7;&lt;br /&gt;
  ctx.fillRect(0,0,6*xoff*2,5*yoff*2);&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.translate(xoff,yoff);&lt;br /&gt;
  starGrid(6,5);&lt;br /&gt;
  ctx.translate(xoff,yoff);&lt;br /&gt;
  starGrid(5,4);&lt;br /&gt;
  &lt;br /&gt;
  function starGrid(x,y){&lt;br /&gt;
    for(let i=0;i&amp;lt;x;i++){&lt;br /&gt;
      for(let j=0;j&amp;lt;y;j++){&lt;br /&gt;
        star(i*2*xoff,j*2*yoff,5);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function star(x,y,r)&lt;br /&gt;
  {&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.scale(r/100.0,r/100.0);&lt;br /&gt;
    ctx.beginPath();&lt;br /&gt;
    [[0,-100],[22,-31],[95,-31],[36,12],[59,81],&lt;br /&gt;
     [0,38],[-59,81],[-36,12],[-95,-31],[-22,-31]]&lt;br /&gt;
    .forEach((xy)=&amp;gt;ctx.lineTo(xy[0],xy[1]));&lt;br /&gt;
    ctx.fill();&lt;br /&gt;
    ctx.scale(100.0/r,100.0/r);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_with_Methods&amp;diff=1096</id>
		<title>Flags with Methods</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_with_Methods&amp;diff=1096"/>
		<updated>2023-06-28T10:08:46Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* China */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; src=&amp;quot;videos/flags_with_methods.mp4&amp;quot; width=&amp;quot;400px&amp;quot; controls &amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Three colours ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain three colors in vertical stripes.&lt;br /&gt;
[[Image:flagtricolour.png|left|frame|Three colour flags]]&lt;br /&gt;
Draw the flags of: France, Romania, Belgium, Nigeria. The positions and colours are as follows.&lt;br /&gt;
  10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;&lt;br /&gt;
  95,10,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;&lt;br /&gt;
  10,70,&#039;black&#039;,&#039;yellow&#039;,&#039;red&#039;&lt;br /&gt;
  95,70,&#039;green&#039;,&#039;white&#039;,&#039;green&#039;&lt;br /&gt;
&lt;br /&gt;
* Sizes are:&lt;br /&gt;
**The small flags are 75 by 50&lt;br /&gt;
**The margins are 10&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function tri(x,y,cl){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    cl.forEach((c,i)=&amp;gt;{&lt;br /&gt;
      ctx.fillStyle = c;&lt;br /&gt;
      ctx.fillRect(i*75/cl.length,0,75/cl.length,50);&lt;br /&gt;
    });&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle = &#039;gray&#039;;&lt;br /&gt;
  tri(10,10,[&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  tri(95,10,[&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;]);&lt;br /&gt;
  tri(10,70,[&#039;black&#039;,&#039;yellow&#039;,&#039;red&#039;]);&lt;br /&gt;
  tri(95,70,[&#039;green&#039;,&#039;white&#039;,&#039;green&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nordic cross ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain three colors in vertical stripes.&lt;br /&gt;
[[Image:flagnordic.png|left|frame|Nordic]]&lt;br /&gt;
The Nordic Cross features in flags of Scandinavia&lt;br /&gt;
&lt;br /&gt;
Draw the flags of: Sweden, Denmark, Finland, Östergötland&lt;br /&gt;
&lt;br /&gt;
* The small flags are 75 by 50.&lt;br /&gt;
* The squares on the left are 20 by 20.&lt;br /&gt;
* The line width is 10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function nordic(x,y,b,f){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.fillStyle = b;&lt;br /&gt;
    ctx.fillRect(0,0,75,50);&lt;br /&gt;
    ctx.fillStyle = f;&lt;br /&gt;
    ctx.fillRect(20,0,10,50);&lt;br /&gt;
    ctx.fillRect(0,20,75,10);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  nordic(10,10,&#039;blue&#039;,&#039;yellow&#039;);&lt;br /&gt;
  nordic(95,10,&#039;red&#039;,&#039;white&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,70,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Horizontal stripes ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain several horizontal stripes.&lt;br /&gt;
[[Image:flaghstripe.png|left|frame|Horizontal stripes]]&lt;br /&gt;
&lt;br /&gt;
Draw the flags of: Poland, Costa Rica, Columbia, Estonia, Mauritius&lt;br /&gt;
&lt;br /&gt;
* The small flags are 75 by 48.&lt;br /&gt;
* Put the four flags at (10,10) (95,10) (10,70) and (95,70)&lt;br /&gt;
* It may be useful to have two adjacent same-colour stripes.&lt;br /&gt;
  stripes(10,10,[&#039;white&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(95,10,[&#039;yellow&#039;,&#039;yellow&#039;,&#039;blue&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(10,70,[&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  stripes(95,70,[&#039;red&#039;,&#039;blue&#039;,&#039;yellow&#039;,&#039;green&#039;]);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 75;&lt;br /&gt;
  let h = 48;&lt;br /&gt;
  function stripes(x,y,cl){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    cl.forEach((c,i)=&amp;gt;{&lt;br /&gt;
      ctx.fillStyle = c;&lt;br /&gt;
      ctx.fillRect(0,i*h/cl.length,75,h/cl.length);&lt;br /&gt;
    });&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  stripes(10,10,[&#039;white&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(95,10,[&#039;yellow&#039;,&#039;yellow&#039;,&#039;blue&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(10,70,[&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  stripes(95,70,[&#039;red&#039;,&#039;blue&#039;,&#039;yellow&#039;,&#039;green&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== More Nordic crosses ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
The Nordic Cross features in flags of Scandinavia&lt;br /&gt;
[[Image:flagmorenordic.png|left|frame|More Nordic crosses]]&lt;br /&gt;
Draw the flags of: Norway, Iceland, Faroe Islands, Orkney&lt;br /&gt;
* The small flags are 75 by 50. The line width is 6 with a border of 2 each side&lt;br /&gt;
* The positions are (10,10) (95,10) (10,70) (95,70)&lt;br /&gt;
  nordic(10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,10,&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(95,70,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 75;&lt;br /&gt;
  let h = 50;&lt;br /&gt;
  function nordic(x,y,b,e,s){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.fillStyle = b;&lt;br /&gt;
    ctx.fillRect(0,0,w,h);&lt;br /&gt;
    ctx.fillStyle = e;&lt;br /&gt;
    ctx.fillRect(20,0,10,h);&lt;br /&gt;
    ctx.fillRect(0,20,75,10);&lt;br /&gt;
    ctx.fillStyle = s;&lt;br /&gt;
    ctx.fillRect(22,0,6,h);&lt;br /&gt;
    ctx.fillRect(0,22,w,6);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  nordic(10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,10,&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(95,70,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== China ==&lt;br /&gt;
&amp;lt;div class=qu data-width=300 data-height=200&amp;gt;&lt;br /&gt;
The flag of China requires 5 stars with a variety of size, orientation and distance from a fixed point.&lt;br /&gt;
* The whole flag is 300 by 200&lt;br /&gt;
* The big star is at (50,50) it has radius 30&lt;br /&gt;
* Each smaller star has radius 10&lt;br /&gt;
* Each smaller star is at a different distance with a different angle&lt;br /&gt;
&lt;br /&gt;
  star(30,3.14,0);      // Radius 30, angle 3.14, distance 0&lt;br /&gt;
  star(10,1.03,58.3);   // Radius 10, angle 1.03, distance 58.3&lt;br /&gt;
  star(10,1.42,70.7);&lt;br /&gt;
  star(10,1.85,72.8);&lt;br /&gt;
  star(10,2.24,58.3);&lt;br /&gt;
&lt;br /&gt;
You can reuse the function star from the earlier tutorial [[Flags with Stars]]&lt;br /&gt;
&lt;br /&gt;
[[Image:flagchina.png|left|frame|China]]&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function star(radius,angle,distance){&lt;br /&gt;
    ctx.rotate(angle);&lt;br /&gt;
    ctx.translate(0,-distance);&lt;br /&gt;
    ctx.scale(radius/100,-radius/100);&lt;br /&gt;
    ctx.beginPath();&lt;br /&gt;
    [[0,-100],[22,-31],[95,-31],[36,12],[59,81],&lt;br /&gt;
     [0,38],[-59,81],[-36,12],[-95,-31],[-22,-31]]&lt;br /&gt;
     .forEach((xy)=&amp;gt;ctx.lineTo(xy[0],xy[1]));&lt;br /&gt;
    ctx.fill();&lt;br /&gt;
    ctx.scale(100/radius,-100/radius);&lt;br /&gt;
    ctx.translate(0,distance);&lt;br /&gt;
    ctx.rotate(-angle);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,300,200);&lt;br /&gt;
  ctx.fillStyle = &#039;gold&#039;;&lt;br /&gt;
  ctx.translate(50,50);&lt;br /&gt;
  star(30,3.14,0);&lt;br /&gt;
  star(10,1.03,58.3);&lt;br /&gt;
  star(10,1.42,70.7);&lt;br /&gt;
  star(10,1.85,72.8);&lt;br /&gt;
  star(10,2.24,58.3);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== United States ==&lt;br /&gt;
&amp;lt;div class=qu data-width=246 data-height=130&amp;gt;&lt;br /&gt;
Size: 246 by 130. Thirteen red and white stripes. A 5x4 grid of 20 stars interleaved with a 6x5 grid of 30 stars on a blue background.&lt;br /&gt;
&lt;br /&gt;
*Radius of star: 5&lt;br /&gt;
*Horizontal grid offset: 8&lt;br /&gt;
*Vertical grid offset: 7 &lt;br /&gt;
&lt;br /&gt;
[[Image:flagusa.png|left|frame|Stars and Stripes]]&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 246;&lt;br /&gt;
  let h = 130;&lt;br /&gt;
  let stripe = 13;&lt;br /&gt;
  for(let i=0;i&amp;lt;stripe;i++){&lt;br /&gt;
    ctx.fillStyle = [&#039;red&#039;,&#039;white&#039;][i%2];&lt;br /&gt;
    ctx.fillRect(0,i*h/stripe,w,h/stripe);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle=&#039;blue&#039;;&lt;br /&gt;
  let xoff = 8;&lt;br /&gt;
  let yoff = 7;&lt;br /&gt;
  ctx.fillRect(0,0,6*xoff*2,5*yoff*2);&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.translate(xoff,yoff);&lt;br /&gt;
  starGrid(6,5);&lt;br /&gt;
  ctx.translate(xoff,yoff);&lt;br /&gt;
  starGrid(5,4);&lt;br /&gt;
  &lt;br /&gt;
  function starGrid(x,y){&lt;br /&gt;
    for(let i=0;i&amp;lt;x;i++){&lt;br /&gt;
      for(let j=0;j&amp;lt;y;j++){&lt;br /&gt;
        star(i*2*xoff,j*2*yoff,5);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function star(x,y,r)&lt;br /&gt;
  {&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.scale(r/100.0,r/100.0);&lt;br /&gt;
    ctx.beginPath();&lt;br /&gt;
    [[0,-100],[22,-31],[95,-31],[36,12],[59,81],&lt;br /&gt;
     [0,38],[-59,81],[-36,12],[-95,-31],[-22,-31]]&lt;br /&gt;
    .forEach((xy)=&amp;gt;ctx.lineTo(xy[0],xy[1]));&lt;br /&gt;
    ctx.fill();&lt;br /&gt;
    ctx.scale(100.0/r,100.0/r);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_with_Methods&amp;diff=1095</id>
		<title>Flags with Methods</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_with_Methods&amp;diff=1095"/>
		<updated>2023-06-28T10:08:26Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* China */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; src=&amp;quot;videos/flags_with_methods.mp4&amp;quot; width=&amp;quot;400px&amp;quot; controls &amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Three colours ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain three colors in vertical stripes.&lt;br /&gt;
[[Image:flagtricolour.png|left|frame|Three colour flags]]&lt;br /&gt;
Draw the flags of: France, Romania, Belgium, Nigeria. The positions and colours are as follows.&lt;br /&gt;
  10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;&lt;br /&gt;
  95,10,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;&lt;br /&gt;
  10,70,&#039;black&#039;,&#039;yellow&#039;,&#039;red&#039;&lt;br /&gt;
  95,70,&#039;green&#039;,&#039;white&#039;,&#039;green&#039;&lt;br /&gt;
&lt;br /&gt;
* Sizes are:&lt;br /&gt;
**The small flags are 75 by 50&lt;br /&gt;
**The margins are 10&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function tri(x,y,cl){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    cl.forEach((c,i)=&amp;gt;{&lt;br /&gt;
      ctx.fillStyle = c;&lt;br /&gt;
      ctx.fillRect(i*75/cl.length,0,75/cl.length,50);&lt;br /&gt;
    });&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle = &#039;gray&#039;;&lt;br /&gt;
  tri(10,10,[&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  tri(95,10,[&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;]);&lt;br /&gt;
  tri(10,70,[&#039;black&#039;,&#039;yellow&#039;,&#039;red&#039;]);&lt;br /&gt;
  tri(95,70,[&#039;green&#039;,&#039;white&#039;,&#039;green&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nordic cross ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain three colors in vertical stripes.&lt;br /&gt;
[[Image:flagnordic.png|left|frame|Nordic]]&lt;br /&gt;
The Nordic Cross features in flags of Scandinavia&lt;br /&gt;
&lt;br /&gt;
Draw the flags of: Sweden, Denmark, Finland, Östergötland&lt;br /&gt;
&lt;br /&gt;
* The small flags are 75 by 50.&lt;br /&gt;
* The squares on the left are 20 by 20.&lt;br /&gt;
* The line width is 10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function nordic(x,y,b,f){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.fillStyle = b;&lt;br /&gt;
    ctx.fillRect(0,0,75,50);&lt;br /&gt;
    ctx.fillStyle = f;&lt;br /&gt;
    ctx.fillRect(20,0,10,50);&lt;br /&gt;
    ctx.fillRect(0,20,75,10);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  nordic(10,10,&#039;blue&#039;,&#039;yellow&#039;);&lt;br /&gt;
  nordic(95,10,&#039;red&#039;,&#039;white&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,70,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Horizontal stripes ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain several horizontal stripes.&lt;br /&gt;
[[Image:flaghstripe.png|left|frame|Horizontal stripes]]&lt;br /&gt;
&lt;br /&gt;
Draw the flags of: Poland, Costa Rica, Columbia, Estonia, Mauritius&lt;br /&gt;
&lt;br /&gt;
* The small flags are 75 by 48.&lt;br /&gt;
* Put the four flags at (10,10) (95,10) (10,70) and (95,70)&lt;br /&gt;
* It may be useful to have two adjacent same-colour stripes.&lt;br /&gt;
  stripes(10,10,[&#039;white&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(95,10,[&#039;yellow&#039;,&#039;yellow&#039;,&#039;blue&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(10,70,[&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  stripes(95,70,[&#039;red&#039;,&#039;blue&#039;,&#039;yellow&#039;,&#039;green&#039;]);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 75;&lt;br /&gt;
  let h = 48;&lt;br /&gt;
  function stripes(x,y,cl){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    cl.forEach((c,i)=&amp;gt;{&lt;br /&gt;
      ctx.fillStyle = c;&lt;br /&gt;
      ctx.fillRect(0,i*h/cl.length,75,h/cl.length);&lt;br /&gt;
    });&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  stripes(10,10,[&#039;white&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(95,10,[&#039;yellow&#039;,&#039;yellow&#039;,&#039;blue&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(10,70,[&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  stripes(95,70,[&#039;red&#039;,&#039;blue&#039;,&#039;yellow&#039;,&#039;green&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== More Nordic crosses ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
The Nordic Cross features in flags of Scandinavia&lt;br /&gt;
[[Image:flagmorenordic.png|left|frame|More Nordic crosses]]&lt;br /&gt;
Draw the flags of: Norway, Iceland, Faroe Islands, Orkney&lt;br /&gt;
* The small flags are 75 by 50. The line width is 6 with a border of 2 each side&lt;br /&gt;
* The positions are (10,10) (95,10) (10,70) (95,70)&lt;br /&gt;
  nordic(10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,10,&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(95,70,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 75;&lt;br /&gt;
  let h = 50;&lt;br /&gt;
  function nordic(x,y,b,e,s){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.fillStyle = b;&lt;br /&gt;
    ctx.fillRect(0,0,w,h);&lt;br /&gt;
    ctx.fillStyle = e;&lt;br /&gt;
    ctx.fillRect(20,0,10,h);&lt;br /&gt;
    ctx.fillRect(0,20,75,10);&lt;br /&gt;
    ctx.fillStyle = s;&lt;br /&gt;
    ctx.fillRect(22,0,6,h);&lt;br /&gt;
    ctx.fillRect(0,22,w,6);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  nordic(10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,10,&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(95,70,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== China ==&lt;br /&gt;
&amp;lt;div class=qu data-width=300 data-height=200&amp;gt;&lt;br /&gt;
The flag of China requires 5 stars with a variety of size, orientation and distance from a fixed point.&lt;br /&gt;
* The whole flag is 300 by 200&lt;br /&gt;
* The big star is at (50,50) it has radius 30&lt;br /&gt;
* Each smaller star has radius 10&lt;br /&gt;
* Each smaller star is at a different distance with a different angle&lt;br /&gt;
&lt;br /&gt;
  star(30,3.14,0);      // Radius 30, angle 3.14, distance 0&lt;br /&gt;
  star(10,1.03,58.3);   // Radius 10, angle 1.03, distance 58.3&lt;br /&gt;
  star(10,1.42,70.7);&lt;br /&gt;
  star(10,1.85,72.8);&lt;br /&gt;
  star(10,2.24,58.3);&lt;br /&gt;
&lt;br /&gt;
You can reuse the function star from the earlier tutorial [[Flags_with_Stars]]&lt;br /&gt;
&lt;br /&gt;
[[Image:flagchina.png|left|frame|China]]&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function star(radius,angle,distance){&lt;br /&gt;
    ctx.rotate(angle);&lt;br /&gt;
    ctx.translate(0,-distance);&lt;br /&gt;
    ctx.scale(radius/100,-radius/100);&lt;br /&gt;
    ctx.beginPath();&lt;br /&gt;
    [[0,-100],[22,-31],[95,-31],[36,12],[59,81],&lt;br /&gt;
     [0,38],[-59,81],[-36,12],[-95,-31],[-22,-31]]&lt;br /&gt;
     .forEach((xy)=&amp;gt;ctx.lineTo(xy[0],xy[1]));&lt;br /&gt;
    ctx.fill();&lt;br /&gt;
    ctx.scale(100/radius,-100/radius);&lt;br /&gt;
    ctx.translate(0,distance);&lt;br /&gt;
    ctx.rotate(-angle);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,300,200);&lt;br /&gt;
  ctx.fillStyle = &#039;gold&#039;;&lt;br /&gt;
  ctx.translate(50,50);&lt;br /&gt;
  star(30,3.14,0);&lt;br /&gt;
  star(10,1.03,58.3);&lt;br /&gt;
  star(10,1.42,70.7);&lt;br /&gt;
  star(10,1.85,72.8);&lt;br /&gt;
  star(10,2.24,58.3);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== United States ==&lt;br /&gt;
&amp;lt;div class=qu data-width=246 data-height=130&amp;gt;&lt;br /&gt;
Size: 246 by 130. Thirteen red and white stripes. A 5x4 grid of 20 stars interleaved with a 6x5 grid of 30 stars on a blue background.&lt;br /&gt;
&lt;br /&gt;
*Radius of star: 5&lt;br /&gt;
*Horizontal grid offset: 8&lt;br /&gt;
*Vertical grid offset: 7 &lt;br /&gt;
&lt;br /&gt;
[[Image:flagusa.png|left|frame|Stars and Stripes]]&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 246;&lt;br /&gt;
  let h = 130;&lt;br /&gt;
  let stripe = 13;&lt;br /&gt;
  for(let i=0;i&amp;lt;stripe;i++){&lt;br /&gt;
    ctx.fillStyle = [&#039;red&#039;,&#039;white&#039;][i%2];&lt;br /&gt;
    ctx.fillRect(0,i*h/stripe,w,h/stripe);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle=&#039;blue&#039;;&lt;br /&gt;
  let xoff = 8;&lt;br /&gt;
  let yoff = 7;&lt;br /&gt;
  ctx.fillRect(0,0,6*xoff*2,5*yoff*2);&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.translate(xoff,yoff);&lt;br /&gt;
  starGrid(6,5);&lt;br /&gt;
  ctx.translate(xoff,yoff);&lt;br /&gt;
  starGrid(5,4);&lt;br /&gt;
  &lt;br /&gt;
  function starGrid(x,y){&lt;br /&gt;
    for(let i=0;i&amp;lt;x;i++){&lt;br /&gt;
      for(let j=0;j&amp;lt;y;j++){&lt;br /&gt;
        star(i*2*xoff,j*2*yoff,5);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function star(x,y,r)&lt;br /&gt;
  {&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.scale(r/100.0,r/100.0);&lt;br /&gt;
    ctx.beginPath();&lt;br /&gt;
    [[0,-100],[22,-31],[95,-31],[36,12],[59,81],&lt;br /&gt;
     [0,38],[-59,81],[-36,12],[-95,-31],[-22,-31]]&lt;br /&gt;
    .forEach((xy)=&amp;gt;ctx.lineTo(xy[0],xy[1]));&lt;br /&gt;
    ctx.fill();&lt;br /&gt;
    ctx.scale(100.0/r,100.0/r);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_with_Methods&amp;diff=1094</id>
		<title>Flags with Methods</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_with_Methods&amp;diff=1094"/>
		<updated>2023-06-28T10:08:15Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* China */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; src=&amp;quot;videos/flags_with_methods.mp4&amp;quot; width=&amp;quot;400px&amp;quot; controls &amp;gt;&amp;lt;/htmltag&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Three colours ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain three colors in vertical stripes.&lt;br /&gt;
[[Image:flagtricolour.png|left|frame|Three colour flags]]&lt;br /&gt;
Draw the flags of: France, Romania, Belgium, Nigeria. The positions and colours are as follows.&lt;br /&gt;
  10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;&lt;br /&gt;
  95,10,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;&lt;br /&gt;
  10,70,&#039;black&#039;,&#039;yellow&#039;,&#039;red&#039;&lt;br /&gt;
  95,70,&#039;green&#039;,&#039;white&#039;,&#039;green&#039;&lt;br /&gt;
&lt;br /&gt;
* Sizes are:&lt;br /&gt;
**The small flags are 75 by 50&lt;br /&gt;
**The margins are 10&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function tri(x,y,cl){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    cl.forEach((c,i)=&amp;gt;{&lt;br /&gt;
      ctx.fillStyle = c;&lt;br /&gt;
      ctx.fillRect(i*75/cl.length,0,75/cl.length,50);&lt;br /&gt;
    });&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle = &#039;gray&#039;;&lt;br /&gt;
  tri(10,10,[&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  tri(95,10,[&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;]);&lt;br /&gt;
  tri(10,70,[&#039;black&#039;,&#039;yellow&#039;,&#039;red&#039;]);&lt;br /&gt;
  tri(95,70,[&#039;green&#039;,&#039;white&#039;,&#039;green&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Nordic cross ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain three colors in vertical stripes.&lt;br /&gt;
[[Image:flagnordic.png|left|frame|Nordic]]&lt;br /&gt;
The Nordic Cross features in flags of Scandinavia&lt;br /&gt;
&lt;br /&gt;
Draw the flags of: Sweden, Denmark, Finland, Östergötland&lt;br /&gt;
&lt;br /&gt;
* The small flags are 75 by 50.&lt;br /&gt;
* The squares on the left are 20 by 20.&lt;br /&gt;
* The line width is 10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function nordic(x,y,b,f){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.fillStyle = b;&lt;br /&gt;
    ctx.fillRect(0,0,75,50);&lt;br /&gt;
    ctx.fillStyle = f;&lt;br /&gt;
    ctx.fillRect(20,0,10,50);&lt;br /&gt;
    ctx.fillRect(0,20,75,10);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  nordic(10,10,&#039;blue&#039;,&#039;yellow&#039;);&lt;br /&gt;
  nordic(95,10,&#039;red&#039;,&#039;white&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,70,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Horizontal stripes ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
Several countries have flags that contain several horizontal stripes.&lt;br /&gt;
[[Image:flaghstripe.png|left|frame|Horizontal stripes]]&lt;br /&gt;
&lt;br /&gt;
Draw the flags of: Poland, Costa Rica, Columbia, Estonia, Mauritius&lt;br /&gt;
&lt;br /&gt;
* The small flags are 75 by 48.&lt;br /&gt;
* Put the four flags at (10,10) (95,10) (10,70) and (95,70)&lt;br /&gt;
* It may be useful to have two adjacent same-colour stripes.&lt;br /&gt;
  stripes(10,10,[&#039;white&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(95,10,[&#039;yellow&#039;,&#039;yellow&#039;,&#039;blue&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(10,70,[&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  stripes(95,70,[&#039;red&#039;,&#039;blue&#039;,&#039;yellow&#039;,&#039;green&#039;]);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 75;&lt;br /&gt;
  let h = 48;&lt;br /&gt;
  function stripes(x,y,cl){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    cl.forEach((c,i)=&amp;gt;{&lt;br /&gt;
      ctx.fillStyle = c;&lt;br /&gt;
      ctx.fillRect(0,i*h/cl.length,75,h/cl.length);&lt;br /&gt;
    });&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  stripes(10,10,[&#039;white&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(95,10,[&#039;yellow&#039;,&#039;yellow&#039;,&#039;blue&#039;,&#039;red&#039;]);&lt;br /&gt;
  stripes(10,70,[&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;]);&lt;br /&gt;
  stripes(95,70,[&#039;red&#039;,&#039;blue&#039;,&#039;yellow&#039;,&#039;green&#039;]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== More Nordic crosses ==&lt;br /&gt;
&amp;lt;div class=qu data-width=180 data-height=130&amp;gt;&lt;br /&gt;
The Nordic Cross features in flags of Scandinavia&lt;br /&gt;
[[Image:flagmorenordic.png|left|frame|More Nordic crosses]]&lt;br /&gt;
Draw the flags of: Norway, Iceland, Faroe Islands, Orkney&lt;br /&gt;
* The small flags are 75 by 50. The line width is 6 with a border of 2 each side&lt;br /&gt;
* The positions are (10,10) (95,10) (10,70) (95,70)&lt;br /&gt;
  nordic(10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,10,&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(95,70,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 75;&lt;br /&gt;
  let h = 50;&lt;br /&gt;
  function nordic(x,y,b,e,s){&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.fillStyle = b;&lt;br /&gt;
    ctx.fillRect(0,0,w,h);&lt;br /&gt;
    ctx.fillStyle = e;&lt;br /&gt;
    ctx.fillRect(20,0,10,h);&lt;br /&gt;
    ctx.fillRect(0,20,75,10);&lt;br /&gt;
    ctx.fillStyle = s;&lt;br /&gt;
    ctx.fillRect(22,0,6,h);&lt;br /&gt;
    ctx.fillRect(0,22,w,6);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
  nordic(10,10,&#039;red&#039;,&#039;white&#039;,&#039;blue&#039;);&lt;br /&gt;
  nordic(95,10,&#039;blue&#039;,&#039;white&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(10,70,&#039;white&#039;,&#039;blue&#039;,&#039;red&#039;);&lt;br /&gt;
  nordic(95,70,&#039;red&#039;,&#039;yellow&#039;,&#039;blue&#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== China ==&lt;br /&gt;
&amp;lt;div class=qu data-width=300 data-height=200&amp;gt;&lt;br /&gt;
The flag of China requires 5 stars with a variety of size, orientation and distance from a fixed point.&lt;br /&gt;
* The whole flag is 300 by 200&lt;br /&gt;
* The big star is at (50,50) it has radius 30&lt;br /&gt;
* Each smaller star has radius 10&lt;br /&gt;
* Each smaller star is at a different distance with a different angle&lt;br /&gt;
&lt;br /&gt;
  star(30,3.14,0);      // Radius 30, angle 3.14, distance 0&lt;br /&gt;
  star(10,1.03,58.3);   // Radius 10, angle 1.03, distance 58.3&lt;br /&gt;
  star(10,1.42,70.7);&lt;br /&gt;
  star(10,1.85,72.8);&lt;br /&gt;
  star(10,2.24,58.3);&lt;br /&gt;
&lt;br /&gt;
You can reuse the function star from the earlier tutorial [Flags_with_Stars]&lt;br /&gt;
&lt;br /&gt;
[[Image:flagchina.png|left|frame|China]]&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  function star(radius,angle,distance){&lt;br /&gt;
    ctx.rotate(angle);&lt;br /&gt;
    ctx.translate(0,-distance);&lt;br /&gt;
    ctx.scale(radius/100,-radius/100);&lt;br /&gt;
    ctx.beginPath();&lt;br /&gt;
    [[0,-100],[22,-31],[95,-31],[36,12],[59,81],&lt;br /&gt;
     [0,38],[-59,81],[-36,12],[-95,-31],[-22,-31]]&lt;br /&gt;
     .forEach((xy)=&amp;gt;ctx.lineTo(xy[0],xy[1]));&lt;br /&gt;
    ctx.fill();&lt;br /&gt;
    ctx.scale(100/radius,-100/radius);&lt;br /&gt;
    ctx.translate(0,distance);&lt;br /&gt;
    ctx.rotate(-angle);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,300,200);&lt;br /&gt;
  ctx.fillStyle = &#039;gold&#039;;&lt;br /&gt;
  ctx.translate(50,50);&lt;br /&gt;
  star(30,3.14,0);&lt;br /&gt;
  star(10,1.03,58.3);&lt;br /&gt;
  star(10,1.42,70.7);&lt;br /&gt;
  star(10,1.85,72.8);&lt;br /&gt;
  star(10,2.24,58.3);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== United States ==&lt;br /&gt;
&amp;lt;div class=qu data-width=246 data-height=130&amp;gt;&lt;br /&gt;
Size: 246 by 130. Thirteen red and white stripes. A 5x4 grid of 20 stars interleaved with a 6x5 grid of 30 stars on a blue background.&lt;br /&gt;
&lt;br /&gt;
*Radius of star: 5&lt;br /&gt;
*Horizontal grid offset: 8&lt;br /&gt;
*Vertical grid offset: 7 &lt;br /&gt;
&lt;br /&gt;
[[Image:flagusa.png|left|frame|Stars and Stripes]]&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx){&lt;br /&gt;
  let w = 246;&lt;br /&gt;
  let h = 130;&lt;br /&gt;
  let stripe = 13;&lt;br /&gt;
  for(let i=0;i&amp;lt;stripe;i++){&lt;br /&gt;
    ctx.fillStyle = [&#039;red&#039;,&#039;white&#039;][i%2];&lt;br /&gt;
    ctx.fillRect(0,i*h/stripe,w,h/stripe);&lt;br /&gt;
  }&lt;br /&gt;
  ctx.fillStyle=&#039;blue&#039;;&lt;br /&gt;
  let xoff = 8;&lt;br /&gt;
  let yoff = 7;&lt;br /&gt;
  ctx.fillRect(0,0,6*xoff*2,5*yoff*2);&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.translate(xoff,yoff);&lt;br /&gt;
  starGrid(6,5);&lt;br /&gt;
  ctx.translate(xoff,yoff);&lt;br /&gt;
  starGrid(5,4);&lt;br /&gt;
  &lt;br /&gt;
  function starGrid(x,y){&lt;br /&gt;
    for(let i=0;i&amp;lt;x;i++){&lt;br /&gt;
      for(let j=0;j&amp;lt;y;j++){&lt;br /&gt;
        star(i*2*xoff,j*2*yoff,5);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  function star(x,y,r)&lt;br /&gt;
  {&lt;br /&gt;
    ctx.translate(x,y);&lt;br /&gt;
    ctx.scale(r/100.0,r/100.0);&lt;br /&gt;
    ctx.beginPath();&lt;br /&gt;
    [[0,-100],[22,-31],[95,-31],[36,12],[59,81],&lt;br /&gt;
     [0,38],[-59,81],[-36,12],[-95,-31],[-22,-31]]&lt;br /&gt;
    .forEach((xy)=&amp;gt;ctx.lineTo(xy[0],xy[1]));&lt;br /&gt;
    ctx.fill();&lt;br /&gt;
    ctx.scale(100.0/r,100.0/r);&lt;br /&gt;
    ctx.translate(-x,-y);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=DOM_div_in_div&amp;diff=1093</id>
		<title>DOM div in div</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=DOM_div_in_div&amp;diff=1093"/>
		<updated>2023-06-07T13:11:35Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Create a drop down from a list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Image:UK.png|right|thumb|UK map]]&lt;br /&gt;
==UK contains England==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England, England contains London==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;London&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
b.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England and Scotland==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
a.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==England and Scotland, England contains London==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;England&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;London&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
document.body.append(b);&lt;br /&gt;
a.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England and Scotland, Scotland contains Edinburgh==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let uk = document.createElement(&#039;div&#039;);&lt;br /&gt;
let en = document.createElement(&#039;div&#039;);&lt;br /&gt;
let sc = document.createElement(&#039;div&#039;);&lt;br /&gt;
let ed = document.createElement(&#039;div&#039;);&lt;br /&gt;
uk.innerHTML = &#039;UK&#039;;&lt;br /&gt;
en.innerHTML = &#039;England&#039;;&lt;br /&gt;
sc.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
ed.innerHTML = &#039;Edinburgh&#039;;&lt;br /&gt;
document.body.append(uk);&lt;br /&gt;
uk.append(en);&lt;br /&gt;
uk.append(sc);&lt;br /&gt;
sc.append(ed);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create a drop down list==&lt;br /&gt;
A dropdown list is a select element that contains option elements.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;select&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;England&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Northern Ireland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Scotland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Wales&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
option.innerHTML = &#039;A&#039;;&lt;br /&gt;
select.append(option);&lt;br /&gt;
let option2 = document.createElement(&#039;option&#039;);&lt;br /&gt;
option2.innerHTML = &#039;B&#039;;&lt;br /&gt;
select.append(option2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for (let c of [&#039;England&#039;,&#039;Northern Ireland&#039;,&#039;Scotland&#039;,&#039;Wales&#039;]){&lt;br /&gt;
  let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
  option.innerHTML = c;&lt;br /&gt;
  select.append(option);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Create a drop down from a list==&lt;br /&gt;
A dropdown list is a select element that contains option elements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
const countries = [&amp;quot;France&amp;quot;, &amp;quot;Germany&amp;quot;, &amp;quot;Italy&amp;quot;, &amp;quot;Spain&amp;quot;];&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for(let c of countries){&lt;br /&gt;
  let option = document.createElement(&amp;quot;option&amp;quot;);&lt;br /&gt;
  // Remember there are three steps to complete&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
const countries = [&amp;quot;France&amp;quot;, &amp;quot;Germany&amp;quot;, &amp;quot;Italy&amp;quot;, &amp;quot;Spain&amp;quot;];&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for (let c of countries){&lt;br /&gt;
  let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
  option.innerHTML = c;&lt;br /&gt;
  select.append(option);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=DOM_div_in_div&amp;diff=1092</id>
		<title>DOM div in div</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=DOM_div_in_div&amp;diff=1092"/>
		<updated>2023-06-07T13:10:43Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Create a drop down from a list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Image:UK.png|right|thumb|UK map]]&lt;br /&gt;
==UK contains England==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England, England contains London==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;London&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
b.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England and Scotland==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
a.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==England and Scotland, England contains London==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;England&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;London&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
document.body.append(b);&lt;br /&gt;
a.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England and Scotland, Scotland contains Edinburgh==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let uk = document.createElement(&#039;div&#039;);&lt;br /&gt;
let en = document.createElement(&#039;div&#039;);&lt;br /&gt;
let sc = document.createElement(&#039;div&#039;);&lt;br /&gt;
let ed = document.createElement(&#039;div&#039;);&lt;br /&gt;
uk.innerHTML = &#039;UK&#039;;&lt;br /&gt;
en.innerHTML = &#039;England&#039;;&lt;br /&gt;
sc.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
ed.innerHTML = &#039;Edinburgh&#039;;&lt;br /&gt;
document.body.append(uk);&lt;br /&gt;
uk.append(en);&lt;br /&gt;
uk.append(sc);&lt;br /&gt;
sc.append(ed);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create a drop down list==&lt;br /&gt;
A dropdown list is a select element that contains option elements.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;select&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;England&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Northern Ireland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Scotland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Wales&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
option.innerHTML = &#039;A&#039;;&lt;br /&gt;
select.append(option);&lt;br /&gt;
let option2 = document.createElement(&#039;option&#039;);&lt;br /&gt;
option2.innerHTML = &#039;B&#039;;&lt;br /&gt;
select.append(option2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for (let c of [&#039;England&#039;,&#039;Northern Ireland&#039;,&#039;Scotland&#039;,&#039;Wales&#039;]){&lt;br /&gt;
  let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
  option.innerHTML = c;&lt;br /&gt;
  select.append(option);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Create a drop down from a list==&lt;br /&gt;
A dropdown list is a select element that contains option elements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
const countries = [&amp;quot;France&amp;quot;, &amp;quot;Germany&amp;quot;, &amp;quot;Italy&amp;quot;, &amp;quot;Spain&amp;quot;];&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for(let c of countries){&lt;br /&gt;
  let s = document.createElement(&amp;quot;select&amp;quot;);&lt;br /&gt;
  // Remember there are three steps to complete&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
const countries = [&amp;quot;France&amp;quot;, &amp;quot;Germany&amp;quot;, &amp;quot;Italy&amp;quot;, &amp;quot;Spain&amp;quot;];&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for (let c of countries){&lt;br /&gt;
  let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
  option.innerHTML = c;&lt;br /&gt;
  select.append(option);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=DOM_div_in_div&amp;diff=1091</id>
		<title>DOM div in div</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=DOM_div_in_div&amp;diff=1091"/>
		<updated>2023-06-07T13:10:00Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Create a drop down from a list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Image:UK.png|right|thumb|UK map]]&lt;br /&gt;
==UK contains England==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England, England contains London==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;London&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
b.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England and Scotland==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
a.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==England and Scotland, England contains London==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;England&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;London&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
document.body.append(b);&lt;br /&gt;
a.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England and Scotland, Scotland contains Edinburgh==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let uk = document.createElement(&#039;div&#039;);&lt;br /&gt;
let en = document.createElement(&#039;div&#039;);&lt;br /&gt;
let sc = document.createElement(&#039;div&#039;);&lt;br /&gt;
let ed = document.createElement(&#039;div&#039;);&lt;br /&gt;
uk.innerHTML = &#039;UK&#039;;&lt;br /&gt;
en.innerHTML = &#039;England&#039;;&lt;br /&gt;
sc.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
ed.innerHTML = &#039;Edinburgh&#039;;&lt;br /&gt;
document.body.append(uk);&lt;br /&gt;
uk.append(en);&lt;br /&gt;
uk.append(sc);&lt;br /&gt;
sc.append(ed);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create a drop down list==&lt;br /&gt;
A dropdown list is a select element that contains option elements.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;select&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;England&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Northern Ireland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Scotland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Wales&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
option.innerHTML = &#039;A&#039;;&lt;br /&gt;
select.append(option);&lt;br /&gt;
let option2 = document.createElement(&#039;option&#039;);&lt;br /&gt;
option2.innerHTML = &#039;B&#039;;&lt;br /&gt;
select.append(option2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for (let c of [&#039;England&#039;,&#039;Northern Ireland&#039;,&#039;Scotland&#039;,&#039;Wales&#039;]){&lt;br /&gt;
  let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
  option.innerHTML = c;&lt;br /&gt;
  select.append(option);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Create a drop down from a list==&lt;br /&gt;
A dropdown list is a select element that contains option elements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
const countries = [&amp;quot;France&amp;quot;, &amp;quot;Germany&amp;quot;, &amp;quot;Italy&amp;quot;, &amp;quot;Spain&amp;quot;]&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for(let c of countries){&lt;br /&gt;
  let s = document.createElement(&amp;quot;select&amp;quot;);&lt;br /&gt;
  // Remember there are three steps to complete&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
const countries = [&amp;quot;France&amp;quot;, &amp;quot;Germany&amp;quot;, &amp;quot;Italy&amp;quot;, &amp;quot;Spain&amp;quot;]&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for (let c of countries){&lt;br /&gt;
  let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
  option.innerHTML = c;&lt;br /&gt;
  select.append(option);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=DOM_div_in_div&amp;diff=1090</id>
		<title>DOM div in div</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=DOM_div_in_div&amp;diff=1090"/>
		<updated>2023-06-07T13:09:45Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Create a drop down from a list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Image:UK.png|right|thumb|UK map]]&lt;br /&gt;
==UK contains England==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England, England contains London==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;London&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
b.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England and Scotland==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
a.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==England and Scotland, England contains London==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;England&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;London&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
document.body.append(b);&lt;br /&gt;
a.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England and Scotland, Scotland contains Edinburgh==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let uk = document.createElement(&#039;div&#039;);&lt;br /&gt;
let en = document.createElement(&#039;div&#039;);&lt;br /&gt;
let sc = document.createElement(&#039;div&#039;);&lt;br /&gt;
let ed = document.createElement(&#039;div&#039;);&lt;br /&gt;
uk.innerHTML = &#039;UK&#039;;&lt;br /&gt;
en.innerHTML = &#039;England&#039;;&lt;br /&gt;
sc.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
ed.innerHTML = &#039;Edinburgh&#039;;&lt;br /&gt;
document.body.append(uk);&lt;br /&gt;
uk.append(en);&lt;br /&gt;
uk.append(sc);&lt;br /&gt;
sc.append(ed);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create a drop down list==&lt;br /&gt;
A dropdown list is a select element that contains option elements.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;select&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;England&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Northern Ireland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Scotland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Wales&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
option.innerHTML = &#039;A&#039;;&lt;br /&gt;
select.append(option);&lt;br /&gt;
let option2 = document.createElement(&#039;option&#039;);&lt;br /&gt;
option2.innerHTML = &#039;B&#039;;&lt;br /&gt;
select.append(option2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for (let c of [&#039;England&#039;,&#039;Northern Ireland&#039;,&#039;Scotland&#039;,&#039;Wales&#039;]){&lt;br /&gt;
  let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
  option.innerHTML = c;&lt;br /&gt;
  select.append(option);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Create a drop down from a list==&lt;br /&gt;
A dropdown list is a select element that contains option elements.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
const countries = [&amp;quot;France&amp;quot;, &amp;quot;Germamny&amp;quot;, &amp;quot;Italy&amp;quot;, &amp;quot;Spain&amp;quot;]&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for(let c of countries){&lt;br /&gt;
  let s = document.createElement(&amp;quot;select&amp;quot;);&lt;br /&gt;
  // Remember there are three steps to complete&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
const countries = [&amp;quot;France&amp;quot;, &amp;quot;Germamny&amp;quot;, &amp;quot;Italy&amp;quot;, &amp;quot;Spain&amp;quot;]&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for (let c of countries){&lt;br /&gt;
  let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
  option.innerHTML = c;&lt;br /&gt;
  select.append(option);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=DOM_div_in_div&amp;diff=1089</id>
		<title>DOM div in div</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=DOM_div_in_div&amp;diff=1089"/>
		<updated>2023-06-07T13:09:32Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Create a drop down list */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Image:UK.png|right|thumb|UK map]]&lt;br /&gt;
==UK contains England==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England, England contains London==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;London&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
b.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England and Scotland==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;UK&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;England&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
a.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==England and Scotland, England contains London==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;England&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
let c = document.createElement(&#039;div&#039;);&lt;br /&gt;
c.innerHTML = &#039;London&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
document.body.append(b);&lt;br /&gt;
a.append(c);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==UK contains England and Scotland, Scotland contains Edinburgh==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;A&#039;;&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = &#039;B&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
a.append(b);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let uk = document.createElement(&#039;div&#039;);&lt;br /&gt;
let en = document.createElement(&#039;div&#039;);&lt;br /&gt;
let sc = document.createElement(&#039;div&#039;);&lt;br /&gt;
let ed = document.createElement(&#039;div&#039;);&lt;br /&gt;
uk.innerHTML = &#039;UK&#039;;&lt;br /&gt;
en.innerHTML = &#039;England&#039;;&lt;br /&gt;
sc.innerHTML = &#039;Scotland&#039;;&lt;br /&gt;
ed.innerHTML = &#039;Edinburgh&#039;;&lt;br /&gt;
document.body.append(uk);&lt;br /&gt;
uk.append(en);&lt;br /&gt;
uk.append(sc);&lt;br /&gt;
sc.append(ed);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
let css = document.createElement(&#039;style&#039;);&lt;br /&gt;
document.head.append(css);&lt;br /&gt;
css.innerText = `&lt;br /&gt;
div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
`;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create a drop down list==&lt;br /&gt;
A dropdown list is a select element that contains option elements.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;select&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;England&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Northern Ireland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Scotland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Wales&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
option.innerHTML = &#039;A&#039;;&lt;br /&gt;
select.append(option);&lt;br /&gt;
let option2 = document.createElement(&#039;option&#039;);&lt;br /&gt;
option2.innerHTML = &#039;B&#039;;&lt;br /&gt;
select.append(option2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for (let c of [&#039;England&#039;,&#039;Northern Ireland&#039;,&#039;Scotland&#039;,&#039;Wales&#039;]){&lt;br /&gt;
  let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
  option.innerHTML = c;&lt;br /&gt;
  select.append(option);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Create a drop down from a list==&lt;br /&gt;
A dropdown list is a select element that contains option elements.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;select&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;England&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Northern Ireland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Scotland&amp;lt;/option&amp;gt;&lt;br /&gt;
   &amp;lt;option&amp;gt;Wales&amp;lt;/option&amp;gt;&lt;br /&gt;
 &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
const countries = [&amp;quot;France&amp;quot;, &amp;quot;Germamny&amp;quot;, &amp;quot;Italy&amp;quot;, &amp;quot;Spain&amp;quot;]&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for(let c of countries){&lt;br /&gt;
  let s = document.createElement(&amp;quot;select&amp;quot;);&lt;br /&gt;
  // Remember there are three steps to complete&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
const countries = [&amp;quot;France&amp;quot;, &amp;quot;Germamny&amp;quot;, &amp;quot;Italy&amp;quot;, &amp;quot;Spain&amp;quot;]&lt;br /&gt;
let select = document.createElement(&#039;select&#039;);&lt;br /&gt;
document.body.append(select);&lt;br /&gt;
for (let c of countries){&lt;br /&gt;
  let option = document.createElement(&#039;option&#039;);&lt;br /&gt;
  option.innerHTML = c;&lt;br /&gt;
  select.append(option);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=DOM_Creating_content&amp;diff=1088</id>
		<title>DOM Creating content</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=DOM_Creating_content&amp;diff=1088"/>
		<updated>2023-06-06T22:00:23Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Radio buttons */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create Content==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
You can create a div element an set the content.&lt;br /&gt;
&lt;br /&gt;
We use the document method &#039;&#039;&#039;createElement&#039;&#039;&#039; and the DOM node method &#039;&#039;&#039;append&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&#039;imper&#039;&amp;gt;Change the code so that it says &#039;Hello world&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let e = document.createElement(&#039;div&#039;);&lt;br /&gt;
e.innerHTML = &#039;Hello&#039;;&lt;br /&gt;
document.body.append(e);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let e = document.createElement(&#039;div&#039;);&lt;br /&gt;
e.innerHTML = &#039;Hello world&#039;;&lt;br /&gt;
document.body.append(e);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create img==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
You can create a &#039;&#039;&#039;img&#039;&#039;&#039; element and set the &#039;&#039;&#039;src&#039;&#039;&#039;.&lt;br /&gt;
In this example you must set the &#039;&#039;&#039;src&#039;&#039;&#039; and the &#039;&#039;&#039;style&#039;&#039;&#039; of the new element &#039;&#039;&#039;a&#039;&#039;&#039;.&lt;br /&gt;
 a.style = &#039;width:100px;border:solid;&#039;;&lt;br /&gt;
These are CSS properties.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;img&#039;);&lt;br /&gt;
a.src = &#039;/flags/fr.png&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;img&#039;);&lt;br /&gt;
a.src = &#039;/flags/fr.png&#039;;&lt;br /&gt;
a.style = &#039;width:100px;border:solid;&#039;;&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Create multiple elements==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
*You can add several elements to the document.body.&lt;br /&gt;
*You can add elements to other elements.&lt;br /&gt;
*Change this code to match the model answer&lt;br /&gt;
*Can you see why the flag does not show?&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;Germany, &#039;;&lt;br /&gt;
let b = document.createElement(&#039;i&#039;);&lt;br /&gt;
b.innerHTML = &#039;Berlin&#039;;&lt;br /&gt;
a.appendChild(b);&lt;br /&gt;
document.body.append(a);&lt;br /&gt;
let c = document.createElement(&#039;img&#039;);&lt;br /&gt;
c.src = &#039;/flags/de.png&#039;;&lt;br /&gt;
c.style = &#039;width:100px&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = &#039;Germany, &#039;;&lt;br /&gt;
let b = document.createElement(&#039;i&#039;);&lt;br /&gt;
b.innerHTML = &#039;Berlin&#039;;&lt;br /&gt;
a.append(b);&lt;br /&gt;
document.body.appendChild(a);&lt;br /&gt;
let c = document.createElement(&#039;img&#039;);&lt;br /&gt;
c.src = &#039;/flags/de.png&#039;;&lt;br /&gt;
c.style = &#039;width:100px&#039;;&lt;br /&gt;
document.body.append(c);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Setting complex innerHTML==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
You can put more complex HTML into an element.&lt;br /&gt;
The backticks ` ` can span many lines.&lt;br /&gt;
&amp;lt;div class=&#039;imper&#039;&amp;gt;Make the flags bigger - you can set the height to 2ex&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = `&lt;br /&gt;
  &amp;lt;img src=&#039;/flags/gr.png&#039; style=&#039;height:1ex&#039;&amp;gt;&lt;br /&gt;
  Greece &amp;lt;i&amp;gt;Athens&amp;lt;/i&amp;gt;`;&lt;br /&gt;
document.body.appendChild(a);&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = `&lt;br /&gt;
  &amp;lt;img src=&#039;/flags/it.png&#039; style=&#039;height:1ex&#039;&amp;gt;&lt;br /&gt;
  Italy &amp;lt;i&amp;gt;Rome&amp;lt;/i&amp;gt;`;&lt;br /&gt;
document.body.appendChild(b);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
a.innerHTML = `&lt;br /&gt;
  &amp;lt;img src=&#039;/flags/gr.png&#039; style=&#039;height:2ex&#039;&amp;gt;&lt;br /&gt;
  Greece &amp;lt;i&amp;gt;Athens&amp;lt;/i&amp;gt;`;&lt;br /&gt;
document.body.appendChild(a);&lt;br /&gt;
let b = document.createElement(&#039;div&#039;);&lt;br /&gt;
b.innerHTML = `&lt;br /&gt;
  &amp;lt;img src=&#039;/flags/it.png&#039; style=&#039;height:2ex&#039;&amp;gt;&lt;br /&gt;
  Italy &amp;lt;i&amp;gt;Rome&amp;lt;/i&amp;gt;`;&lt;br /&gt;
document.body.appendChild(b);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using functions==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
* You should avoid copying chunks of code.&lt;br /&gt;
* A well chosen function can help avoid that.&lt;br /&gt;
* Notice how &#039;&#039;string interpolation&#039;&#039; allows you to include variables in the string.&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function addCountryDiv(name, capital, flag){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    &amp;lt;img src=&#039;/flags/${flag}.png&#039;&lt;br /&gt;
         style=&#039;height:2ex;&#039;&amp;gt;&lt;br /&gt;
    ${name}`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCountryDiv(&#039;China&#039;, &#039;Beijing&#039;, &#039;cn&#039;);&lt;br /&gt;
addCountryDiv(&#039;Japan&#039;, &#039;Tokyo&#039;, &#039;jp&#039;);&lt;br /&gt;
addCountryDiv(&#039;South Korea&#039;, &#039;Seoul&#039;, &#039;kr&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function addCountryDiv(name, capital, flag){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    &amp;lt;img src=&#039;/flags/${flag}.png&#039;&lt;br /&gt;
         style=&#039;height:2ex;border:solid&#039;&amp;gt;&lt;br /&gt;
    ${name} &amp;lt;i&amp;gt;${capital}&amp;lt;/i&amp;gt;`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addCountryDiv(&#039;China&#039;, &#039;Beijing&#039;, &#039;cn&#039;);&lt;br /&gt;
addCountryDiv(&#039;Japan&#039;, &#039;Tokyo&#039;, &#039;jp&#039;);&lt;br /&gt;
addCountryDiv(&#039;South Korea&#039;, &#039;Seoul&#039;, &#039;kr&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Write the schedule==&lt;br /&gt;
We want to show the start time and end time for each event.&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function addSchedule(name, timeStart, timeEnd){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `${name}`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;13:00&#039;, &#039;14:00&#039;);&lt;br /&gt;
addSchedule(&#039;Tutorial&#039;, &#039;14:00&#039;, &#039;15:30&#039;);&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;15:30&#039;, &#039;16:00&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function addSchedule(name, timeStart, timeEnd){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `${name} ${timeStart} ${timeEnd}`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;13:00&#039;, &#039;14:00&#039;);&lt;br /&gt;
addSchedule(&#039;Tutorial&#039;, &#039;14:00&#039;, &#039;15:30&#039;);&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;15:30&#039;, &#039;16:00&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Write the schedule with Edinburgh time==&lt;br /&gt;
You can use this function to calculate Edinburgh time:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function edinburgh(t){&lt;br /&gt;
  let hm = t.split(&#039;:&#039;);&lt;br /&gt;
  let m = 60*parseInt(hm[0])+parseInt(hm[1]);&lt;br /&gt;
  let e = m - 60*5.5;&lt;br /&gt;
  return (Math.floor(e/60).toString().padStart(2,&#039;0&#039;))+&#039;:&#039;+&lt;br /&gt;
                   ((e%60).toString().padStart(2,&#039;0&#039;));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The times shown are in the Yangon time zone. Show the Edinburgh time in brackets. Edinburgh time is 5.5 hours earlier than Yangon time.&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=280&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
function edinburgh(t){&lt;br /&gt;
  let hm = t.split(&#039;:&#039;);&lt;br /&gt;
  let m = 60*parseInt(hm[0])+parseInt(hm[1]);&lt;br /&gt;
  let e = m - 60*5.5;&lt;br /&gt;
  return (Math.floor(e/60).toString().padStart(2,&#039;0&#039;))+&#039;:&#039;+&lt;br /&gt;
                   ((e%60).toString().padStart(2,&#039;0&#039;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addSchedule(name, timeStart, timeEnd){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `${name} ${timeStart} ${edinburgh(timeStart)}`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;13:00&#039;, &#039;14:00&#039;);&lt;br /&gt;
addSchedule(&#039;Tutorial&#039;, &#039;14:00&#039;, &#039;15:30&#039;);&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;15:30&#039;, &#039;16:00&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
function edinburgh(t){&lt;br /&gt;
  let hm = t.split(&#039;:&#039;);&lt;br /&gt;
  let m = 60*parseInt(hm[0])+parseInt(hm[1]);&lt;br /&gt;
  let e = m - 60*5.5;&lt;br /&gt;
  return (Math.floor(e/60).toString().padStart(2,&#039;0&#039;))+&#039;:&#039;+&lt;br /&gt;
                   ((e%60).toString().padStart(2,&#039;0&#039;));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function addSchedule(name, timeStart, timeEnd){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `${name} ${timeStart} (${edinburgh(timeStart)}) ${timeEnd} (${edinburgh(timeEnd)})`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;13:00&#039;, &#039;14:00&#039;);&lt;br /&gt;
addSchedule(&#039;Tutorial&#039;, &#039;14:00&#039;, &#039;15:30&#039;);&lt;br /&gt;
addSchedule(&#039;Lecture&#039;,  &#039;15:30&#039;, &#039;16:00&#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Using a loop==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
* Another way to avoid copying chunks of code is to use a loop.&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let cl = [&lt;br /&gt;
  {name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
  {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
  {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}&lt;br /&gt;
];&lt;br /&gt;
for(let c of cl){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    ${c.name}`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let cl = [{name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
          {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
          {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}];&lt;br /&gt;
for(let c of cl){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    &amp;lt;img src=&#039;/flags/${c.flag}.png&#039;&lt;br /&gt;
         style=&#039;height:2ex;border:solid&#039;&amp;gt;&lt;br /&gt;
    ${c.name} &amp;lt;i&amp;gt;${c.capital}&amp;lt;/i&amp;gt;`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Radio buttons==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
* You can create HTML elements such as a radio button:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;label&amp;gt;&amp;lt;input type=radio name=&#039;country&#039;&amp;gt;France&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let cl = [&lt;br /&gt;
  {name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
  {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
  {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}&lt;br /&gt;
];&lt;br /&gt;
for(let c of cl){&lt;br /&gt;
  let d = document.createElement(&#039;div&#039;);&lt;br /&gt;
  d.innerHTML = c.name;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let cl = [{name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
          {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
          {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}];&lt;br /&gt;
for(let c of cl){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=radio name=&#039;country&#039;&amp;gt;${c.name}&amp;lt;/label&amp;gt;`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Radio buttons with images==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
* Add a flag to each radio button:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &amp;lt;label&amp;gt;&amp;lt;input type=radio name=&#039;country&#039;&amp;gt;France&amp;lt;/label&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
let cl = [&lt;br /&gt;
  {name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
  {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
  {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}&lt;br /&gt;
];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
let cl = [{name:&#039;France&#039;, capital:&#039;Paris&#039;, flag:&#039;fr&#039;},&lt;br /&gt;
          {name:&#039;Italy&#039;, capital:&#039;Rome&#039;,   flag:&#039;it&#039;},&lt;br /&gt;
          {name:&#039;Germany&#039;, capital:&#039;Berlin&#039;, flag:&#039;de&#039;}];&lt;br /&gt;
for(let c of cl){&lt;br /&gt;
  let a = document.createElement(&#039;div&#039;);&lt;br /&gt;
  a.innerHTML = `&lt;br /&gt;
    &amp;lt;label&amp;gt;&amp;lt;input type=radio name=&#039;country&#039;&amp;gt;&amp;lt;img style=&#039;height:20px&#039; src=/flags/${c.flag}.png&amp;gt;&amp;lt;/label&amp;gt;`;&lt;br /&gt;
  document.body.appendChild(a);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=ProgZoo:About&amp;diff=1087</id>
		<title>ProgZoo:About</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=ProgZoo:About&amp;diff=1087"/>
		<updated>2023-01-12T06:53:39Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Instructions on how to create interactive content:&lt;br /&gt;
[[User:Andr3w]]&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Main_Page&amp;diff=1086</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Main_Page&amp;diff=1086"/>
		<updated>2023-01-11T08:35:40Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=tut-nav&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Manipulating DOM&lt;br /&gt;
* [[DOM Creating content]]&lt;br /&gt;
* [[DOM div in div]]&lt;br /&gt;
* [[DOM Changing elements]]&lt;br /&gt;
* [[DOM Working with data]]&lt;br /&gt;
* [[DOM Content from lists]]&lt;br /&gt;
* [[DOM Controls that do things]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Useful patterns&lt;br /&gt;
* [[DOM Common Logic]]&lt;br /&gt;
* [[DOM Shopping]]&lt;br /&gt;
* [[DOM Calendar]]&lt;br /&gt;
* [[World Factbook]]&lt;br /&gt;
* [[DOM Options]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Drawing images&lt;br /&gt;
* [[Flags with Rectangles]]&lt;br /&gt;
* [[Flags with Lines]]&lt;br /&gt;
* [[Flags with Polygons]]&lt;br /&gt;
* [[Flags with Stars]]&lt;br /&gt;
* [[Flags with Repeats]]&lt;br /&gt;
* [[Flags with Methods]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Use your own computer Tutorials&lt;br /&gt;
* [[pokemon]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Quiz&lt;br /&gt;
* [[Quiz - HTML]]&lt;br /&gt;
* [[Assessment2021 09Easy]]&lt;br /&gt;
* [[Assessment2021 09Medium]]&lt;br /&gt;
* [[Assessment2021 09Hard]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Server-side concerns&lt;br /&gt;
* [[Buy and set up a server]]&lt;br /&gt;
* [[Flask_from_command_line|Running flask dev &amp;amp; prod]]&lt;br /&gt;
* [[Encryption]]&lt;br /&gt;
* [[Testing for prime]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&lt;br /&gt;
Data&lt;br /&gt;
* [[File:flags.zip]]&lt;br /&gt;
* [[File:worldl.json]]&lt;br /&gt;
* [[File:zodiac.json]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==Hello World==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039;&amp;gt;&lt;br /&gt;
Hello World&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.innerHTML = &#039;Hellow orld&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=&#039;ans&#039;&amp;gt;&lt;br /&gt;
document.body.innerHTML = &#039;Hello world!&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1085</id>
		<title>User:Andr3w</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1085"/>
		<updated>2023-01-09T14:54:42Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Notes on registering students */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Current activity==&lt;br /&gt;
&amp;lt;div id=&#039;students&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://progzoo.net/MediaWiki:Common.css&lt;br /&gt;
&lt;br /&gt;
==Notes on registering students==&lt;br /&gt;
When linking from moodle set the following URL parameters:&lt;br /&gt;
*course&lt;br /&gt;
** Course ID number&lt;br /&gt;
*userName&lt;br /&gt;
** user full name&lt;br /&gt;
*institution&lt;br /&gt;
** Institution&lt;br /&gt;
[[File:moodle_snap.png|thumb|Moodle Snapshot]]&lt;br /&gt;
&lt;br /&gt;
==Notes on question type &#039;&#039;&#039;qtp&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Set the question type using&lt;br /&gt;
  &amp;amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* canvas&lt;br /&gt;
** in this case we create a canvas element, call drawFlag with the 2d context, report the bitmap to score.php&lt;br /&gt;
* DOM&lt;br /&gt;
** in this question type after usr.js has executed pass document.body.innerHTML to score.php&lt;br /&gt;
* fetch&lt;br /&gt;
** intercept &#039;&#039;&#039;fetch&#039;&#039;&#039; calls, after the promise has been resolved pass document.innerHTML to score.php&lt;br /&gt;
* clicky&lt;br /&gt;
** trigger a click on the button before checking innerHTML&lt;br /&gt;
** if there is a &amp;amp;lt;pre class=test&amp;gt; element...&lt;br /&gt;
** complete each action and evaluate the expr each time. The result is a list, usr and ans are compared&lt;br /&gt;
 &amp;amp;lt;pre class=test&amp;gt;&lt;br /&gt;
 {expr:[{id:&#039;ride&#039;,prop:&amp;quot;disabled&amp;quot;}],&lt;br /&gt;
  actions:[{},{id:&#039;tall&#039;,method:&amp;quot;click&amp;quot;}]}&lt;br /&gt;
 &amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes on score.php==&lt;br /&gt;
Each question creates  two iframes one for user input one for model answer.&lt;br /&gt;
&lt;br /&gt;
The containing  document cannot see the iframe contents so we use a round-about scoring mechanism:&lt;br /&gt;
* Each iframe reports to score.php with the body innerHTML or the canvas content&lt;br /&gt;
* score.php responds to the second of the two calls by generating an MQTT message&lt;br /&gt;
 topic: pzscore/0.08061187738818432&lt;br /&gt;
 payload: {&amp;quot;uid&amp;quot;:&amp;quot;0.08061187738818432&amp;quot;,&amp;quot;aid&amp;quot;:&amp;quot;1629570082&amp;quot;,&amp;quot;qid&amp;quot;:&amp;quot;Flags_with_Rectangles-1&amp;quot;,&amp;quot;score&amp;quot;:50}&lt;br /&gt;
* these messages can be picked up by the parent page, also allows a teacher to monitor a class &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; src=&amp;quot;v.mp4&amp;quot; width=&amp;quot;100%&amp;quot; controls &amp;gt;&amp;lt;/htmltag&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1084</id>
		<title>User:Andr3w</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1084"/>
		<updated>2023-01-09T14:53:36Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Notes on registering students */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Current activity==&lt;br /&gt;
&amp;lt;div id=&#039;students&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://progzoo.net/MediaWiki:Common.css&lt;br /&gt;
&lt;br /&gt;
==Notes on registering students==&lt;br /&gt;
When linking from moodle set the following URL parameters:&lt;br /&gt;
*course&lt;br /&gt;
** Course ID number&lt;br /&gt;
*userName&lt;br /&gt;
** user full name&lt;br /&gt;
*institution&lt;br /&gt;
** Institution&lt;br /&gt;
[[File:moodle_snap.png|upright|Moodle Snapshot]]&lt;br /&gt;
&lt;br /&gt;
==Notes on question type &#039;&#039;&#039;qtp&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Set the question type using&lt;br /&gt;
  &amp;amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* canvas&lt;br /&gt;
** in this case we create a canvas element, call drawFlag with the 2d context, report the bitmap to score.php&lt;br /&gt;
* DOM&lt;br /&gt;
** in this question type after usr.js has executed pass document.body.innerHTML to score.php&lt;br /&gt;
* fetch&lt;br /&gt;
** intercept &#039;&#039;&#039;fetch&#039;&#039;&#039; calls, after the promise has been resolved pass document.innerHTML to score.php&lt;br /&gt;
* clicky&lt;br /&gt;
** trigger a click on the button before checking innerHTML&lt;br /&gt;
** if there is a &amp;amp;lt;pre class=test&amp;gt; element...&lt;br /&gt;
** complete each action and evaluate the expr each time. The result is a list, usr and ans are compared&lt;br /&gt;
 &amp;amp;lt;pre class=test&amp;gt;&lt;br /&gt;
 {expr:[{id:&#039;ride&#039;,prop:&amp;quot;disabled&amp;quot;}],&lt;br /&gt;
  actions:[{},{id:&#039;tall&#039;,method:&amp;quot;click&amp;quot;}]}&lt;br /&gt;
 &amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes on score.php==&lt;br /&gt;
Each question creates  two iframes one for user input one for model answer.&lt;br /&gt;
&lt;br /&gt;
The containing  document cannot see the iframe contents so we use a round-about scoring mechanism:&lt;br /&gt;
* Each iframe reports to score.php with the body innerHTML or the canvas content&lt;br /&gt;
* score.php responds to the second of the two calls by generating an MQTT message&lt;br /&gt;
 topic: pzscore/0.08061187738818432&lt;br /&gt;
 payload: {&amp;quot;uid&amp;quot;:&amp;quot;0.08061187738818432&amp;quot;,&amp;quot;aid&amp;quot;:&amp;quot;1629570082&amp;quot;,&amp;quot;qid&amp;quot;:&amp;quot;Flags_with_Rectangles-1&amp;quot;,&amp;quot;score&amp;quot;:50}&lt;br /&gt;
* these messages can be picked up by the parent page, also allows a teacher to monitor a class &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; src=&amp;quot;v.mp4&amp;quot; width=&amp;quot;100%&amp;quot; controls &amp;gt;&amp;lt;/htmltag&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=File:Moodle_snap.png&amp;diff=1083</id>
		<title>File:Moodle snap.png</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=File:Moodle_snap.png&amp;diff=1083"/>
		<updated>2023-01-09T14:49:42Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1082</id>
		<title>User:Andr3w</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1082"/>
		<updated>2023-01-09T14:46:35Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Notes on registering students */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Current activity==&lt;br /&gt;
&amp;lt;div id=&#039;students&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://progzoo.net/MediaWiki:Common.css&lt;br /&gt;
&lt;br /&gt;
==Notes on registering students==&lt;br /&gt;
When linking from moodle set the following URL parameters:&lt;br /&gt;
*course&lt;br /&gt;
** Course ID number&lt;br /&gt;
*userName&lt;br /&gt;
** user full name&lt;br /&gt;
*institution&lt;br /&gt;
** Institution&lt;br /&gt;
[[Image:moodle_snap.png]]&lt;br /&gt;
&lt;br /&gt;
==Notes on question type &#039;&#039;&#039;qtp&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Set the question type using&lt;br /&gt;
  &amp;amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* canvas&lt;br /&gt;
** in this case we create a canvas element, call drawFlag with the 2d context, report the bitmap to score.php&lt;br /&gt;
* DOM&lt;br /&gt;
** in this question type after usr.js has executed pass document.body.innerHTML to score.php&lt;br /&gt;
* fetch&lt;br /&gt;
** intercept &#039;&#039;&#039;fetch&#039;&#039;&#039; calls, after the promise has been resolved pass document.innerHTML to score.php&lt;br /&gt;
* clicky&lt;br /&gt;
** trigger a click on the button before checking innerHTML&lt;br /&gt;
** if there is a &amp;amp;lt;pre class=test&amp;gt; element...&lt;br /&gt;
** complete each action and evaluate the expr each time. The result is a list, usr and ans are compared&lt;br /&gt;
 &amp;amp;lt;pre class=test&amp;gt;&lt;br /&gt;
 {expr:[{id:&#039;ride&#039;,prop:&amp;quot;disabled&amp;quot;}],&lt;br /&gt;
  actions:[{},{id:&#039;tall&#039;,method:&amp;quot;click&amp;quot;}]}&lt;br /&gt;
 &amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes on score.php==&lt;br /&gt;
Each question creates  two iframes one for user input one for model answer.&lt;br /&gt;
&lt;br /&gt;
The containing  document cannot see the iframe contents so we use a round-about scoring mechanism:&lt;br /&gt;
* Each iframe reports to score.php with the body innerHTML or the canvas content&lt;br /&gt;
* score.php responds to the second of the two calls by generating an MQTT message&lt;br /&gt;
 topic: pzscore/0.08061187738818432&lt;br /&gt;
 payload: {&amp;quot;uid&amp;quot;:&amp;quot;0.08061187738818432&amp;quot;,&amp;quot;aid&amp;quot;:&amp;quot;1629570082&amp;quot;,&amp;quot;qid&amp;quot;:&amp;quot;Flags_with_Rectangles-1&amp;quot;,&amp;quot;score&amp;quot;:50}&lt;br /&gt;
* these messages can be picked up by the parent page, also allows a teacher to monitor a class &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; src=&amp;quot;v.mp4&amp;quot; width=&amp;quot;100%&amp;quot; controls &amp;gt;&amp;lt;/htmltag&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1081</id>
		<title>User:Andr3w</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1081"/>
		<updated>2023-01-09T14:46:23Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Current activity==&lt;br /&gt;
&amp;lt;div id=&#039;students&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://progzoo.net/MediaWiki:Common.css&lt;br /&gt;
&lt;br /&gt;
==Notes on registering students==&lt;br /&gt;
When linking from moodle set the following URL parameters:&lt;br /&gt;
*course&lt;br /&gt;
** Course ID number&lt;br /&gt;
*userName&lt;br /&gt;
** user full name&lt;br /&gt;
*institution&lt;br /&gt;
** Institution&lt;br /&gt;
[Image:moodle_snap.png]&lt;br /&gt;
&lt;br /&gt;
==Notes on question type &#039;&#039;&#039;qtp&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Set the question type using&lt;br /&gt;
  &amp;amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* canvas&lt;br /&gt;
** in this case we create a canvas element, call drawFlag with the 2d context, report the bitmap to score.php&lt;br /&gt;
* DOM&lt;br /&gt;
** in this question type after usr.js has executed pass document.body.innerHTML to score.php&lt;br /&gt;
* fetch&lt;br /&gt;
** intercept &#039;&#039;&#039;fetch&#039;&#039;&#039; calls, after the promise has been resolved pass document.innerHTML to score.php&lt;br /&gt;
* clicky&lt;br /&gt;
** trigger a click on the button before checking innerHTML&lt;br /&gt;
** if there is a &amp;amp;lt;pre class=test&amp;gt; element...&lt;br /&gt;
** complete each action and evaluate the expr each time. The result is a list, usr and ans are compared&lt;br /&gt;
 &amp;amp;lt;pre class=test&amp;gt;&lt;br /&gt;
 {expr:[{id:&#039;ride&#039;,prop:&amp;quot;disabled&amp;quot;}],&lt;br /&gt;
  actions:[{},{id:&#039;tall&#039;,method:&amp;quot;click&amp;quot;}]}&lt;br /&gt;
 &amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes on score.php==&lt;br /&gt;
Each question creates  two iframes one for user input one for model answer.&lt;br /&gt;
&lt;br /&gt;
The containing  document cannot see the iframe contents so we use a round-about scoring mechanism:&lt;br /&gt;
* Each iframe reports to score.php with the body innerHTML or the canvas content&lt;br /&gt;
* score.php responds to the second of the two calls by generating an MQTT message&lt;br /&gt;
 topic: pzscore/0.08061187738818432&lt;br /&gt;
 payload: {&amp;quot;uid&amp;quot;:&amp;quot;0.08061187738818432&amp;quot;,&amp;quot;aid&amp;quot;:&amp;quot;1629570082&amp;quot;,&amp;quot;qid&amp;quot;:&amp;quot;Flags_with_Rectangles-1&amp;quot;,&amp;quot;score&amp;quot;:50}&lt;br /&gt;
* these messages can be picked up by the parent page, also allows a teacher to monitor a class &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; src=&amp;quot;v.mp4&amp;quot; width=&amp;quot;100%&amp;quot; controls &amp;gt;&amp;lt;/htmltag&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Flags_with_Lines&amp;diff=1080</id>
		<title>Flags with Lines</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Flags_with_Lines&amp;diff=1080"/>
		<updated>2023-01-05T16:31:57Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Scotland */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;canvas&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get on with the programming, don&#039;t pause to look at this worked example: [[Road Sign Square]]&lt;br /&gt;
==England==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=qu data-height=&amp;quot;90&amp;quot; data-width=&amp;quot;150&amp;quot;&amp;gt;&lt;br /&gt;
The English flag is the cross of St. George. This is a red cross on a white&lt;br /&gt;
background .&lt;br /&gt;
*The line thickness should be 18. &lt;br /&gt;
[[Image:flagengland.png]]&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,90);&lt;br /&gt;
  ctx.strokeStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.lineWidth = 18;&lt;br /&gt;
  ctx.moveTo(0,45);&lt;br /&gt;
  ctx.lineTo(150,45);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,90);&lt;br /&gt;
  ctx.strokeStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.lineWidth = 18;&lt;br /&gt;
  ctx.moveTo(0,45);&lt;br /&gt;
  ctx.lineTo(150,45);&lt;br /&gt;
  ctx.moveTo(75,0);&lt;br /&gt;
  ctx.lineTo(75,90);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scotland==&lt;br /&gt;
&amp;lt;div class=qu data-height=&amp;quot;90&amp;quot; data-width=&amp;quot;150&amp;quot; data-cols=&#039;40&#039;&amp;gt;&lt;br /&gt;
The cross of St. Andrew shows diagonal lines on a blue background.&amp;lt;br/&amp;gt;&lt;br /&gt;
*Complete the flag by drawing the other diagonal  line.&lt;br /&gt;
*The white lines should be slightly thicker - try 18.&lt;br /&gt;
[[Image:flagscotland.png]]&lt;br /&gt;
&amp;lt;pre class=usr lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,90);&lt;br /&gt;
  ctx.strokeStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.lineWidth = 10;&lt;br /&gt;
  ctx.moveTo(0,0);&lt;br /&gt;
  ctx.lineTo(150,90);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;blue&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,90);&lt;br /&gt;
  ctx.strokeStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.lineWidth = 18;&lt;br /&gt;
  ctx.moveTo(0,0);&lt;br /&gt;
  ctx.lineTo(150,90);&lt;br /&gt;
  ctx.moveTo(0,90);&lt;br /&gt;
  ctx.lineTo(150,0);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Botswana==&lt;br /&gt;
&amp;lt;div class=qu data-width=&amp;quot;150&amp;quot; data-height=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;
The flag of Botswana has a black stripe on a white stripe on a blue background.&lt;br /&gt;
&lt;br /&gt;
[[Image:flagbotswana.png|border]]&lt;br /&gt;
*The flag is 150 by 100&lt;br /&gt;
*The white stripe behind the black one has width 30&lt;br /&gt;
*The black stripe has width 20&lt;br /&gt;
*The pale blue has rgb: &#039;#6EB6ED&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;#6EB6ED&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;#6EB6ED&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,100);&lt;br /&gt;
  ctx.strokeStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.lineWidth = 30;&lt;br /&gt;
  ctx.moveTo(0,50);&lt;br /&gt;
  ctx.lineTo(150,50);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
  ctx.strokeStyle = &#039;black&#039;;&lt;br /&gt;
  ctx.lineWidth = 20;&lt;br /&gt;
  ctx.moveTo(0,50);&lt;br /&gt;
  ctx.lineTo(150,50);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Iceland==&lt;br /&gt;
&amp;lt;div class=qu data-width=&amp;quot;125&amp;quot; data-height=&amp;quot;90&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:flagiceland.png|border]]&lt;br /&gt;
* 125 by 90&lt;br /&gt;
* The white cross is 20 wide&lt;br /&gt;
* The red cross is 10 wide&lt;br /&gt;
* The cross line intersect at (45, 45)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;blue&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,125,90);&lt;br /&gt;
  ctx.strokeStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.lineWidth = 20;&lt;br /&gt;
  ctx.moveTo(45,0);&lt;br /&gt;
  ctx.lineTo(45,90);&lt;br /&gt;
  ctx.moveTo(0,45);&lt;br /&gt;
  ctx.lineTo(125,45);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
  ctx.strokeStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.lineWidth = 10;&lt;br /&gt;
  ctx.moveTo(45,0);&lt;br /&gt;
  ctx.lineTo(45,90);&lt;br /&gt;
  ctx.moveTo(0,45);&lt;br /&gt;
  ctx.lineTo(125,45);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Trinidad and Tobago==&lt;br /&gt;
&amp;lt;div class=qu height=&amp;quot;100&amp;quot; width=&amp;quot;150&amp;quot;&amp;gt;&lt;br /&gt;
We can start and end lines outside the confines of the surface.&lt;br /&gt;
*The white line has width 35&lt;br /&gt;
*The black line has width 25&lt;br /&gt;
[[Image:flagtrinidad.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre class=usr lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,100);&lt;br /&gt;
  ctx.lineWidth = 35;&lt;br /&gt;
  ctx.strokeStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.moveTo(0,-25);&lt;br /&gt;
  ctx.lineTo(75,50);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre class=ans lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
function drawFlag(ctx)&lt;br /&gt;
{&lt;br /&gt;
  ctx.fillStyle = &#039;red&#039;;&lt;br /&gt;
  ctx.fillRect(0,0,150,100);&lt;br /&gt;
  ctx.lineWidth = 35;&lt;br /&gt;
  ctx.strokeStyle = &#039;white&#039;;&lt;br /&gt;
  ctx.moveTo(0,-25);&lt;br /&gt;
  ctx.lineTo(150,125);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
  ctx.lineWidth = 25;&lt;br /&gt;
  ctx.strokeStyle = &#039;black&#039;;&lt;br /&gt;
  ctx.moveTo(0,-25);&lt;br /&gt;
  ctx.lineTo(150,125);&lt;br /&gt;
  ctx.stroke();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1079</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1079"/>
		<updated>2022-11-12T21:28:51Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#students div.most-recent{&lt;br /&gt;
  background:yellow;&lt;br /&gt;
}&lt;br /&gt;
#students div.tq{&lt;br /&gt;
  margin-left:5ex;&lt;br /&gt;
}&lt;br /&gt;
#students div.page{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:35ex;&lt;br /&gt;
}&lt;br /&gt;
#students div.qnum,#students div.tscore,#students div.attempts,#students div.when{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:5ex;&lt;br /&gt;
}&lt;br /&gt;
#students{&lt;br /&gt;
  border: solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
  min-height:5ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre.test{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls{&lt;br /&gt;
    margin-top: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls button{&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
    padding: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q {&lt;br /&gt;
    margin-top: 4em;&lt;br /&gt;
    padding-top: 0.8em;&lt;br /&gt;
    padding-bottom: 0.8em;&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q div.d {&lt;br /&gt;
    padding: .5em .5em .5em 1em;&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d {&lt;br /&gt;
    border: gray solid thin;&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.picked {&lt;br /&gt;
    box-shadow: 0ex 0ex 4px 1ex #cfd1ba;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d:hover {&lt;br /&gt;
    border: black solid thin;&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(50 50 50 / 75%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.checked,.quiz .q .d.checked.picked{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(255,0,0,0.25);&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d.checked.y{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgba(0,255,0,0.75);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tut-nav div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.imper{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.view-source{&lt;br /&gt;
  margin-left:2ex;&lt;br /&gt;
}&lt;br /&gt;
.quresizer{&lt;br /&gt;
  overflow:hidden;&lt;br /&gt;
  resize:both;&lt;br /&gt;
  border:solid green;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #mw-navigation, .hide-controls #mw-page-base, .hide-controls #footer{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #content{&lt;br /&gt;
  margin-left:0;&lt;br /&gt;
}&lt;br /&gt;
button.go{&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  min-width:5em;&lt;br /&gt;
  margin-top:50px;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer{&lt;br /&gt;
  position:relative;&lt;br /&gt;
}&lt;br /&gt;
.yourscore{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  right:50%;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 100px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  transition: all .8s;&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal{&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 0px);&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal.gone{&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  height: 0px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
div.thumb{&lt;br /&gt;
  float:none;&lt;br /&gt;
}&lt;br /&gt;
.codetip{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer iframe{&lt;br /&gt;
  height:30ex;&lt;br /&gt;
}&lt;br /&gt;
.qu{&lt;br /&gt;
  margin-bottom:10ex;&lt;br /&gt;
}&lt;br /&gt;
.qu img{&lt;br /&gt;
  background-color:silver;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker-warning, .lint-message-warning {&lt;br /&gt;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=);&lt;br /&gt;
    background-repeat-y: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker {&lt;br /&gt;
    background-position: center center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    height: 16px;&lt;br /&gt;
    width: 16px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
#shellbody, #shelljs{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.qu pre.usr, .qu pre.ans{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.inputs, .outputs{&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
.cm-container{&lt;br /&gt;
  width:80ex;&lt;br /&gt;
  border:solid thin black;&lt;br /&gt;
}&lt;br /&gt;
textarea.usr{&lt;br /&gt;
  width:50ex;&lt;br /&gt;
  height:20ex;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1078</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1078"/>
		<updated>2022-11-12T21:27:10Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#students div.most-recent{&lt;br /&gt;
  background:yellow;&lt;br /&gt;
}&lt;br /&gt;
#students div.qt{&lt;br /&gt;
  margin-left:5ex;&lt;br /&gt;
}&lt;br /&gt;
#students div.page{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:35ex;&lt;br /&gt;
}&lt;br /&gt;
#students div.qnum,#students div.tscore,#students div.attempts,#students div.when{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:5ex;&lt;br /&gt;
}&lt;br /&gt;
#students{&lt;br /&gt;
  border: solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
  min-height:5ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre.test{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls{&lt;br /&gt;
    margin-top: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls button{&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
    padding: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q {&lt;br /&gt;
    margin-top: 4em;&lt;br /&gt;
    padding-top: 0.8em;&lt;br /&gt;
    padding-bottom: 0.8em;&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q div.d {&lt;br /&gt;
    padding: .5em .5em .5em 1em;&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d {&lt;br /&gt;
    border: gray solid thin;&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.picked {&lt;br /&gt;
    box-shadow: 0ex 0ex 4px 1ex #cfd1ba;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d:hover {&lt;br /&gt;
    border: black solid thin;&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(50 50 50 / 75%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.checked,.quiz .q .d.checked.picked{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(255,0,0,0.25);&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d.checked.y{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgba(0,255,0,0.75);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tut-nav div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.imper{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.view-source{&lt;br /&gt;
  margin-left:2ex;&lt;br /&gt;
}&lt;br /&gt;
.quresizer{&lt;br /&gt;
  overflow:hidden;&lt;br /&gt;
  resize:both;&lt;br /&gt;
  border:solid green;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #mw-navigation, .hide-controls #mw-page-base, .hide-controls #footer{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #content{&lt;br /&gt;
  margin-left:0;&lt;br /&gt;
}&lt;br /&gt;
button.go{&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  min-width:5em;&lt;br /&gt;
  margin-top:50px;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer{&lt;br /&gt;
  position:relative;&lt;br /&gt;
}&lt;br /&gt;
.yourscore{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  right:50%;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 100px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  transition: all .8s;&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal{&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 0px);&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal.gone{&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  height: 0px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
div.thumb{&lt;br /&gt;
  float:none;&lt;br /&gt;
}&lt;br /&gt;
.codetip{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer iframe{&lt;br /&gt;
  height:30ex;&lt;br /&gt;
}&lt;br /&gt;
.qu{&lt;br /&gt;
  margin-bottom:10ex;&lt;br /&gt;
}&lt;br /&gt;
.qu img{&lt;br /&gt;
  background-color:silver;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker-warning, .lint-message-warning {&lt;br /&gt;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=);&lt;br /&gt;
    background-repeat-y: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker {&lt;br /&gt;
    background-position: center center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    height: 16px;&lt;br /&gt;
    width: 16px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
#shellbody, #shelljs{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.qu pre.usr, .qu pre.ans{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.inputs, .outputs{&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
.cm-container{&lt;br /&gt;
  width:80ex;&lt;br /&gt;
  border:solid thin black;&lt;br /&gt;
}&lt;br /&gt;
textarea.usr{&lt;br /&gt;
  width:50ex;&lt;br /&gt;
  height:20ex;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1077</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1077"/>
		<updated>2022-11-12T21:18:34Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#students div.most-recent{&lt;br /&gt;
  background:yellow;&lt;br /&gt;
}&lt;br /&gt;
#students div.page{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:35ex;&lt;br /&gt;
}&lt;br /&gt;
#students div.qnum,#students div.tscore,#students div.attempts,#students div.when{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:5ex;&lt;br /&gt;
}&lt;br /&gt;
#students{&lt;br /&gt;
  border: solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
  min-height:5ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre.test{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls{&lt;br /&gt;
    margin-top: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls button{&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
    padding: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q {&lt;br /&gt;
    margin-top: 4em;&lt;br /&gt;
    padding-top: 0.8em;&lt;br /&gt;
    padding-bottom: 0.8em;&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q div.d {&lt;br /&gt;
    padding: .5em .5em .5em 1em;&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d {&lt;br /&gt;
    border: gray solid thin;&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.picked {&lt;br /&gt;
    box-shadow: 0ex 0ex 4px 1ex #cfd1ba;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d:hover {&lt;br /&gt;
    border: black solid thin;&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(50 50 50 / 75%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.checked,.quiz .q .d.checked.picked{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(255,0,0,0.25);&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d.checked.y{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgba(0,255,0,0.75);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tut-nav div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.imper{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.view-source{&lt;br /&gt;
  margin-left:2ex;&lt;br /&gt;
}&lt;br /&gt;
.quresizer{&lt;br /&gt;
  overflow:hidden;&lt;br /&gt;
  resize:both;&lt;br /&gt;
  border:solid green;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #mw-navigation, .hide-controls #mw-page-base, .hide-controls #footer{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #content{&lt;br /&gt;
  margin-left:0;&lt;br /&gt;
}&lt;br /&gt;
button.go{&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  min-width:5em;&lt;br /&gt;
  margin-top:50px;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer{&lt;br /&gt;
  position:relative;&lt;br /&gt;
}&lt;br /&gt;
.yourscore{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  right:50%;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 100px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  transition: all .8s;&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal{&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 0px);&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal.gone{&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  height: 0px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
div.thumb{&lt;br /&gt;
  float:none;&lt;br /&gt;
}&lt;br /&gt;
.codetip{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer iframe{&lt;br /&gt;
  height:30ex;&lt;br /&gt;
}&lt;br /&gt;
.qu{&lt;br /&gt;
  margin-bottom:10ex;&lt;br /&gt;
}&lt;br /&gt;
.qu img{&lt;br /&gt;
  background-color:silver;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker-warning, .lint-message-warning {&lt;br /&gt;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=);&lt;br /&gt;
    background-repeat-y: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker {&lt;br /&gt;
    background-position: center center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    height: 16px;&lt;br /&gt;
    width: 16px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
#shellbody, #shelljs{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.qu pre.usr, .qu pre.ans{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.inputs, .outputs{&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
.cm-container{&lt;br /&gt;
  width:80ex;&lt;br /&gt;
  border:solid thin black;&lt;br /&gt;
}&lt;br /&gt;
textarea.usr{&lt;br /&gt;
  width:50ex;&lt;br /&gt;
  height:20ex;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1076</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1076"/>
		<updated>2022-11-12T21:15:48Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#student div.most-recent{&lt;br /&gt;
  background:yellow;&lt;br /&gt;
}&lt;br /&gt;
#students div.page{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:35ex;&lt;br /&gt;
}&lt;br /&gt;
#students div.qnum,#students div.tscore,#students div.attempts,#students div.when{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:5ex;&lt;br /&gt;
}&lt;br /&gt;
#students{&lt;br /&gt;
  border: solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
  min-height:5ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre.test{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls{&lt;br /&gt;
    margin-top: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls button{&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
    padding: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q {&lt;br /&gt;
    margin-top: 4em;&lt;br /&gt;
    padding-top: 0.8em;&lt;br /&gt;
    padding-bottom: 0.8em;&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q div.d {&lt;br /&gt;
    padding: .5em .5em .5em 1em;&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d {&lt;br /&gt;
    border: gray solid thin;&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.picked {&lt;br /&gt;
    box-shadow: 0ex 0ex 4px 1ex #cfd1ba;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d:hover {&lt;br /&gt;
    border: black solid thin;&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(50 50 50 / 75%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.checked,.quiz .q .d.checked.picked{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(255,0,0,0.25);&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d.checked.y{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgba(0,255,0,0.75);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tut-nav div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.imper{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.view-source{&lt;br /&gt;
  margin-left:2ex;&lt;br /&gt;
}&lt;br /&gt;
.quresizer{&lt;br /&gt;
  overflow:hidden;&lt;br /&gt;
  resize:both;&lt;br /&gt;
  border:solid green;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #mw-navigation, .hide-controls #mw-page-base, .hide-controls #footer{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #content{&lt;br /&gt;
  margin-left:0;&lt;br /&gt;
}&lt;br /&gt;
button.go{&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  min-width:5em;&lt;br /&gt;
  margin-top:50px;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer{&lt;br /&gt;
  position:relative;&lt;br /&gt;
}&lt;br /&gt;
.yourscore{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  right:50%;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 100px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  transition: all .8s;&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal{&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 0px);&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal.gone{&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  height: 0px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
div.thumb{&lt;br /&gt;
  float:none;&lt;br /&gt;
}&lt;br /&gt;
.codetip{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer iframe{&lt;br /&gt;
  height:30ex;&lt;br /&gt;
}&lt;br /&gt;
.qu{&lt;br /&gt;
  margin-bottom:10ex;&lt;br /&gt;
}&lt;br /&gt;
.qu img{&lt;br /&gt;
  background-color:silver;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker-warning, .lint-message-warning {&lt;br /&gt;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=);&lt;br /&gt;
    background-repeat-y: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker {&lt;br /&gt;
    background-position: center center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    height: 16px;&lt;br /&gt;
    width: 16px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
#shellbody, #shelljs{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.qu pre.usr, .qu pre.ans{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.inputs, .outputs{&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
.cm-container{&lt;br /&gt;
  width:80ex;&lt;br /&gt;
  border:solid thin black;&lt;br /&gt;
}&lt;br /&gt;
textarea.usr{&lt;br /&gt;
  width:50ex;&lt;br /&gt;
  height:20ex;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1075</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1075"/>
		<updated>2022-11-12T21:09:44Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#students div.page{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:35ex;&lt;br /&gt;
}&lt;br /&gt;
#students div.qnum,#students div.tscore,#students div.attempts,#students div.when{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:5ex;&lt;br /&gt;
}&lt;br /&gt;
#students{&lt;br /&gt;
  border: solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
  min-height:5ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre.test{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls{&lt;br /&gt;
    margin-top: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls button{&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
    padding: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q {&lt;br /&gt;
    margin-top: 4em;&lt;br /&gt;
    padding-top: 0.8em;&lt;br /&gt;
    padding-bottom: 0.8em;&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q div.d {&lt;br /&gt;
    padding: .5em .5em .5em 1em;&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d {&lt;br /&gt;
    border: gray solid thin;&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.picked {&lt;br /&gt;
    box-shadow: 0ex 0ex 4px 1ex #cfd1ba;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d:hover {&lt;br /&gt;
    border: black solid thin;&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(50 50 50 / 75%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.checked,.quiz .q .d.checked.picked{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(255,0,0,0.25);&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d.checked.y{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgba(0,255,0,0.75);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tut-nav div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.imper{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.view-source{&lt;br /&gt;
  margin-left:2ex;&lt;br /&gt;
}&lt;br /&gt;
.quresizer{&lt;br /&gt;
  overflow:hidden;&lt;br /&gt;
  resize:both;&lt;br /&gt;
  border:solid green;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #mw-navigation, .hide-controls #mw-page-base, .hide-controls #footer{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #content{&lt;br /&gt;
  margin-left:0;&lt;br /&gt;
}&lt;br /&gt;
button.go{&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  min-width:5em;&lt;br /&gt;
  margin-top:50px;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer{&lt;br /&gt;
  position:relative;&lt;br /&gt;
}&lt;br /&gt;
.yourscore{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  right:50%;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 100px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  transition: all .8s;&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal{&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 0px);&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal.gone{&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  height: 0px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
div.thumb{&lt;br /&gt;
  float:none;&lt;br /&gt;
}&lt;br /&gt;
.codetip{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer iframe{&lt;br /&gt;
  height:30ex;&lt;br /&gt;
}&lt;br /&gt;
.qu{&lt;br /&gt;
  margin-bottom:10ex;&lt;br /&gt;
}&lt;br /&gt;
.qu img{&lt;br /&gt;
  background-color:silver;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker-warning, .lint-message-warning {&lt;br /&gt;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=);&lt;br /&gt;
    background-repeat-y: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker {&lt;br /&gt;
    background-position: center center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    height: 16px;&lt;br /&gt;
    width: 16px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
#shellbody, #shelljs{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.qu pre.usr, .qu pre.ans{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.inputs, .outputs{&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
.cm-container{&lt;br /&gt;
  width:80ex;&lt;br /&gt;
  border:solid thin black;&lt;br /&gt;
}&lt;br /&gt;
textarea.usr{&lt;br /&gt;
  width:50ex;&lt;br /&gt;
  height:20ex;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1074</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1074"/>
		<updated>2022-11-12T21:08:32Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#students div.page{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:25ex;&lt;br /&gt;
}&lt;br /&gt;
#students div.qnum,#students div.tscore,#students div.attempts,#students div.when{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:5ex;&lt;br /&gt;
}&lt;br /&gt;
#students{&lt;br /&gt;
  border: solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
  min-height:5ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre.test{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls{&lt;br /&gt;
    margin-top: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls button{&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
    padding: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q {&lt;br /&gt;
    margin-top: 4em;&lt;br /&gt;
    padding-top: 0.8em;&lt;br /&gt;
    padding-bottom: 0.8em;&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q div.d {&lt;br /&gt;
    padding: .5em .5em .5em 1em;&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d {&lt;br /&gt;
    border: gray solid thin;&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.picked {&lt;br /&gt;
    box-shadow: 0ex 0ex 4px 1ex #cfd1ba;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d:hover {&lt;br /&gt;
    border: black solid thin;&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(50 50 50 / 75%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.checked,.quiz .q .d.checked.picked{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(255,0,0,0.25);&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d.checked.y{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgba(0,255,0,0.75);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tut-nav div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.imper{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.view-source{&lt;br /&gt;
  margin-left:2ex;&lt;br /&gt;
}&lt;br /&gt;
.quresizer{&lt;br /&gt;
  overflow:hidden;&lt;br /&gt;
  resize:both;&lt;br /&gt;
  border:solid green;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #mw-navigation, .hide-controls #mw-page-base, .hide-controls #footer{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #content{&lt;br /&gt;
  margin-left:0;&lt;br /&gt;
}&lt;br /&gt;
button.go{&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  min-width:5em;&lt;br /&gt;
  margin-top:50px;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer{&lt;br /&gt;
  position:relative;&lt;br /&gt;
}&lt;br /&gt;
.yourscore{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  right:50%;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 100px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  transition: all .8s;&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal{&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 0px);&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal.gone{&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  height: 0px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
div.thumb{&lt;br /&gt;
  float:none;&lt;br /&gt;
}&lt;br /&gt;
.codetip{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer iframe{&lt;br /&gt;
  height:30ex;&lt;br /&gt;
}&lt;br /&gt;
.qu{&lt;br /&gt;
  margin-bottom:10ex;&lt;br /&gt;
}&lt;br /&gt;
.qu img{&lt;br /&gt;
  background-color:silver;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker-warning, .lint-message-warning {&lt;br /&gt;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=);&lt;br /&gt;
    background-repeat-y: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker {&lt;br /&gt;
    background-position: center center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    height: 16px;&lt;br /&gt;
    width: 16px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
#shellbody, #shelljs{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.qu pre.usr, .qu pre.ans{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.inputs, .outputs{&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
.cm-container{&lt;br /&gt;
  width:80ex;&lt;br /&gt;
  border:solid thin black;&lt;br /&gt;
}&lt;br /&gt;
textarea.usr{&lt;br /&gt;
  width:50ex;&lt;br /&gt;
  height:20ex;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1073</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1073"/>
		<updated>2022-11-12T21:07:43Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#students div.qnum,#students div.tscore,#students div.attempts,#students div.when{&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  width:5ex;&lt;br /&gt;
}&lt;br /&gt;
#students{&lt;br /&gt;
  border: solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
  min-height:5ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre.test{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls{&lt;br /&gt;
    margin-top: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls button{&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
    padding: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q {&lt;br /&gt;
    margin-top: 4em;&lt;br /&gt;
    padding-top: 0.8em;&lt;br /&gt;
    padding-bottom: 0.8em;&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q div.d {&lt;br /&gt;
    padding: .5em .5em .5em 1em;&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d {&lt;br /&gt;
    border: gray solid thin;&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.picked {&lt;br /&gt;
    box-shadow: 0ex 0ex 4px 1ex #cfd1ba;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d:hover {&lt;br /&gt;
    border: black solid thin;&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(50 50 50 / 75%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.checked,.quiz .q .d.checked.picked{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(255,0,0,0.25);&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d.checked.y{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgba(0,255,0,0.75);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tut-nav div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.imper{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.view-source{&lt;br /&gt;
  margin-left:2ex;&lt;br /&gt;
}&lt;br /&gt;
.quresizer{&lt;br /&gt;
  overflow:hidden;&lt;br /&gt;
  resize:both;&lt;br /&gt;
  border:solid green;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #mw-navigation, .hide-controls #mw-page-base, .hide-controls #footer{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #content{&lt;br /&gt;
  margin-left:0;&lt;br /&gt;
}&lt;br /&gt;
button.go{&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  min-width:5em;&lt;br /&gt;
  margin-top:50px;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer{&lt;br /&gt;
  position:relative;&lt;br /&gt;
}&lt;br /&gt;
.yourscore{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  right:50%;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 100px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  transition: all .8s;&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal{&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 0px);&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal.gone{&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  height: 0px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
div.thumb{&lt;br /&gt;
  float:none;&lt;br /&gt;
}&lt;br /&gt;
.codetip{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer iframe{&lt;br /&gt;
  height:30ex;&lt;br /&gt;
}&lt;br /&gt;
.qu{&lt;br /&gt;
  margin-bottom:10ex;&lt;br /&gt;
}&lt;br /&gt;
.qu img{&lt;br /&gt;
  background-color:silver;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker-warning, .lint-message-warning {&lt;br /&gt;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=);&lt;br /&gt;
    background-repeat-y: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker {&lt;br /&gt;
    background-position: center center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    height: 16px;&lt;br /&gt;
    width: 16px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
#shellbody, #shelljs{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.qu pre.usr, .qu pre.ans{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.inputs, .outputs{&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
.cm-container{&lt;br /&gt;
  width:80ex;&lt;br /&gt;
  border:solid thin black;&lt;br /&gt;
}&lt;br /&gt;
textarea.usr{&lt;br /&gt;
  width:50ex;&lt;br /&gt;
  height:20ex;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1072</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1072"/>
		<updated>2022-11-12T20:50:38Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#students{&lt;br /&gt;
  border: solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
  min-height:5ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre.test{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls{&lt;br /&gt;
    margin-top: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls button{&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
    padding: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q {&lt;br /&gt;
    margin-top: 4em;&lt;br /&gt;
    padding-top: 0.8em;&lt;br /&gt;
    padding-bottom: 0.8em;&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q div.d {&lt;br /&gt;
    padding: .5em .5em .5em 1em;&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d {&lt;br /&gt;
    border: gray solid thin;&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.picked {&lt;br /&gt;
    box-shadow: 0ex 0ex 4px 1ex #cfd1ba;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d:hover {&lt;br /&gt;
    border: black solid thin;&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(50 50 50 / 75%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.checked,.quiz .q .d.checked.picked{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(255,0,0,0.25);&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d.checked.y{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgba(0,255,0,0.75);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tut-nav div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.imper{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.view-source{&lt;br /&gt;
  margin-left:2ex;&lt;br /&gt;
}&lt;br /&gt;
.quresizer{&lt;br /&gt;
  overflow:hidden;&lt;br /&gt;
  resize:both;&lt;br /&gt;
  border:solid green;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #mw-navigation, .hide-controls #mw-page-base, .hide-controls #footer{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #content{&lt;br /&gt;
  margin-left:0;&lt;br /&gt;
}&lt;br /&gt;
button.go{&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  min-width:5em;&lt;br /&gt;
  margin-top:50px;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer{&lt;br /&gt;
  position:relative;&lt;br /&gt;
}&lt;br /&gt;
.yourscore{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  right:50%;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 100px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  transition: all .8s;&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal{&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 0px);&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal.gone{&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  height: 0px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
div.thumb{&lt;br /&gt;
  float:none;&lt;br /&gt;
}&lt;br /&gt;
.codetip{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer iframe{&lt;br /&gt;
  height:30ex;&lt;br /&gt;
}&lt;br /&gt;
.qu{&lt;br /&gt;
  margin-bottom:10ex;&lt;br /&gt;
}&lt;br /&gt;
.qu img{&lt;br /&gt;
  background-color:silver;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker-warning, .lint-message-warning {&lt;br /&gt;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=);&lt;br /&gt;
    background-repeat-y: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker {&lt;br /&gt;
    background-position: center center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    height: 16px;&lt;br /&gt;
    width: 16px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
#shellbody, #shelljs{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.qu pre.usr, .qu pre.ans{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.inputs, .outputs{&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
.cm-container{&lt;br /&gt;
  width:80ex;&lt;br /&gt;
  border:solid thin black;&lt;br /&gt;
}&lt;br /&gt;
textarea.usr{&lt;br /&gt;
  width:50ex;&lt;br /&gt;
  height:20ex;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1071</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1071"/>
		<updated>2022-11-12T20:50:21Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#students{&lt;br /&gt;
  border: solid;&lt;br /&gt;
  padding: 1ex;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre.test{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls{&lt;br /&gt;
    margin-top: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls button{&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
    padding: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q {&lt;br /&gt;
    margin-top: 4em;&lt;br /&gt;
    padding-top: 0.8em;&lt;br /&gt;
    padding-bottom: 0.8em;&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q div.d {&lt;br /&gt;
    padding: .5em .5em .5em 1em;&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d {&lt;br /&gt;
    border: gray solid thin;&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.picked {&lt;br /&gt;
    box-shadow: 0ex 0ex 4px 1ex #cfd1ba;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d:hover {&lt;br /&gt;
    border: black solid thin;&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(50 50 50 / 75%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.checked,.quiz .q .d.checked.picked{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(255,0,0,0.25);&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d.checked.y{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgba(0,255,0,0.75);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tut-nav div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.imper{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.view-source{&lt;br /&gt;
  margin-left:2ex;&lt;br /&gt;
}&lt;br /&gt;
.quresizer{&lt;br /&gt;
  overflow:hidden;&lt;br /&gt;
  resize:both;&lt;br /&gt;
  border:solid green;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #mw-navigation, .hide-controls #mw-page-base, .hide-controls #footer{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #content{&lt;br /&gt;
  margin-left:0;&lt;br /&gt;
}&lt;br /&gt;
button.go{&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  min-width:5em;&lt;br /&gt;
  margin-top:50px;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer{&lt;br /&gt;
  position:relative;&lt;br /&gt;
}&lt;br /&gt;
.yourscore{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  right:50%;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 100px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  transition: all .8s;&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal{&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 0px);&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal.gone{&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  height: 0px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
div.thumb{&lt;br /&gt;
  float:none;&lt;br /&gt;
}&lt;br /&gt;
.codetip{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer iframe{&lt;br /&gt;
  height:30ex;&lt;br /&gt;
}&lt;br /&gt;
.qu{&lt;br /&gt;
  margin-bottom:10ex;&lt;br /&gt;
}&lt;br /&gt;
.qu img{&lt;br /&gt;
  background-color:silver;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker-warning, .lint-message-warning {&lt;br /&gt;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=);&lt;br /&gt;
    background-repeat-y: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker {&lt;br /&gt;
    background-position: center center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    height: 16px;&lt;br /&gt;
    width: 16px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
#shellbody, #shelljs{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.qu pre.usr, .qu pre.ans{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.inputs, .outputs{&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
.cm-container{&lt;br /&gt;
  width:80ex;&lt;br /&gt;
  border:solid thin black;&lt;br /&gt;
}&lt;br /&gt;
textarea.usr{&lt;br /&gt;
  width:50ex;&lt;br /&gt;
  height:20ex;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1070</id>
		<title>User:Andr3w</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1070"/>
		<updated>2022-11-12T20:49:13Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Current activity==&lt;br /&gt;
&amp;lt;div id=&#039;students&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://progzoo.net/MediaWiki:Common.css&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Notes on question type &#039;&#039;&#039;qtp&#039;&#039;&#039;==&lt;br /&gt;
&lt;br /&gt;
Set the question type using&lt;br /&gt;
  &amp;amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* canvas&lt;br /&gt;
** in this case we create a canvas element, call drawFlag with the 2d context, report the bitmap to score.php&lt;br /&gt;
* DOM&lt;br /&gt;
** in this question type after usr.js has executed pass document.body.innerHTML to score.php&lt;br /&gt;
* fetch&lt;br /&gt;
** intercept &#039;&#039;&#039;fetch&#039;&#039;&#039; calls, after the promise has been resolved pass document.innerHTML to score.php&lt;br /&gt;
* clicky&lt;br /&gt;
** trigger a click on the button before checking innerHTML&lt;br /&gt;
** if there is a &amp;amp;lt;pre class=test&amp;gt; element...&lt;br /&gt;
** complete each action and evaluate the expr each time. The result is a list, usr and ans are compared&lt;br /&gt;
 &amp;amp;lt;pre class=test&amp;gt;&lt;br /&gt;
 {expr:[{id:&#039;ride&#039;,prop:&amp;quot;disabled&amp;quot;}],&lt;br /&gt;
  actions:[{},{id:&#039;tall&#039;,method:&amp;quot;click&amp;quot;}]}&lt;br /&gt;
 &amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes on score.php==&lt;br /&gt;
Each question creates  two iframes one for user input one for model answer.&lt;br /&gt;
&lt;br /&gt;
The containing  document cannot see the iframe contents so we use a round-about scoring mechanism:&lt;br /&gt;
* Each iframe reports to score.php with the body innerHTML or the canvas content&lt;br /&gt;
* score.php responds to the second of the two calls by generating an MQTT message&lt;br /&gt;
 topic: pzscore/0.08061187738818432&lt;br /&gt;
 payload: {&amp;quot;uid&amp;quot;:&amp;quot;0.08061187738818432&amp;quot;,&amp;quot;aid&amp;quot;:&amp;quot;1629570082&amp;quot;,&amp;quot;qid&amp;quot;:&amp;quot;Flags_with_Rectangles-1&amp;quot;,&amp;quot;score&amp;quot;:50}&lt;br /&gt;
* these messages can be picked up by the parent page, also allows a teacher to monitor a class &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; src=&amp;quot;v.mp4&amp;quot; width=&amp;quot;100%&amp;quot; controls &amp;gt;&amp;lt;/htmltag&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1069</id>
		<title>User:Andr3w</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=User:Andr3w&amp;diff=1069"/>
		<updated>2022-11-09T07:56:48Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Notes on question type &#039;&#039;&#039;qtp&#039;&#039;&#039;==&lt;br /&gt;
&amp;lt;div id=&#039;students&#039;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
https://progzoo.net/MediaWiki:Common.css&lt;br /&gt;
&lt;br /&gt;
Set the question type using&lt;br /&gt;
  &amp;amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* canvas&lt;br /&gt;
** in this case we create a canvas element, call drawFlag with the 2d context, report the bitmap to score.php&lt;br /&gt;
* DOM&lt;br /&gt;
** in this question type after usr.js has executed pass document.body.innerHTML to score.php&lt;br /&gt;
* fetch&lt;br /&gt;
** intercept &#039;&#039;&#039;fetch&#039;&#039;&#039; calls, after the promise has been resolved pass document.innerHTML to score.php&lt;br /&gt;
* clicky&lt;br /&gt;
** trigger a click on the button before checking innerHTML&lt;br /&gt;
** if there is a &amp;amp;lt;pre class=test&amp;gt; element...&lt;br /&gt;
** complete each action and evaluate the expr each time. The result is a list, usr and ans are compared&lt;br /&gt;
 &amp;amp;lt;pre class=test&amp;gt;&lt;br /&gt;
 {expr:[{id:&#039;ride&#039;,prop:&amp;quot;disabled&amp;quot;}],&lt;br /&gt;
  actions:[{},{id:&#039;tall&#039;,method:&amp;quot;click&amp;quot;}]}&lt;br /&gt;
 &amp;amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes on score.php==&lt;br /&gt;
Each question creates  two iframes one for user input one for model answer.&lt;br /&gt;
&lt;br /&gt;
The containing  document cannot see the iframe contents so we use a round-about scoring mechanism:&lt;br /&gt;
* Each iframe reports to score.php with the body innerHTML or the canvas content&lt;br /&gt;
* score.php responds to the second of the two calls by generating an MQTT message&lt;br /&gt;
 topic: pzscore/0.08061187738818432&lt;br /&gt;
 payload: {&amp;quot;uid&amp;quot;:&amp;quot;0.08061187738818432&amp;quot;,&amp;quot;aid&amp;quot;:&amp;quot;1629570082&amp;quot;,&amp;quot;qid&amp;quot;:&amp;quot;Flags_with_Rectangles-1&amp;quot;,&amp;quot;score&amp;quot;:50}&lt;br /&gt;
* these messages can be picked up by the parent page, also allows a teacher to monitor a class &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;htmltag tagname=&amp;quot;video&amp;quot; src=&amp;quot;v.mp4&amp;quot; width=&amp;quot;100%&amp;quot; controls &amp;gt;&amp;lt;/htmltag&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1068</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=MediaWiki:Common.css&amp;diff=1068"/>
		<updated>2022-10-03T20:44:09Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;pre.test{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls{&lt;br /&gt;
    margin-top: 2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .controls button{&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
    padding: 1ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q {&lt;br /&gt;
    margin-top: 4em;&lt;br /&gt;
    padding-top: 0.8em;&lt;br /&gt;
    padding-bottom: 0.8em;&lt;br /&gt;
    border-radius: 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q div.d {&lt;br /&gt;
    padding: .5em .5em .5em 1em;&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d {&lt;br /&gt;
    border: gray solid thin;&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.picked {&lt;br /&gt;
    box-shadow: 0ex 0ex 4px 1ex #cfd1ba;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d:hover {&lt;br /&gt;
    border: black solid thin;&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(50 50 50 / 75%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.quiz .q .d.checked,.quiz .q .d.checked.picked{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgb(255,0,0,0.25);&lt;br /&gt;
}&lt;br /&gt;
.quiz .q .d.checked.y{&lt;br /&gt;
    box-shadow: 0px 0px 5px 4px rgba(0,255,0,0.75);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tut-nav div{&lt;br /&gt;
  border:solid;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  display:inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
}&lt;br /&gt;
.imper{&lt;br /&gt;
  font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
.view-source{&lt;br /&gt;
  margin-left:2ex;&lt;br /&gt;
}&lt;br /&gt;
.quresizer{&lt;br /&gt;
  overflow:hidden;&lt;br /&gt;
  resize:both;&lt;br /&gt;
  border:solid green;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #mw-navigation, .hide-controls #mw-page-base, .hide-controls #footer{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.hide-controls #content{&lt;br /&gt;
  margin-left:0;&lt;br /&gt;
}&lt;br /&gt;
button.go{&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  min-width:5em;&lt;br /&gt;
  margin-top:50px;&lt;br /&gt;
}&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    background-size: contain;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer{&lt;br /&gt;
  position:relative;&lt;br /&gt;
}&lt;br /&gt;
.yourscore{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
  font-size:200%;&lt;br /&gt;
  right:50%;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:yellow;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 100px);&lt;br /&gt;
  z-index: 5;&lt;br /&gt;
  transition: all .8s;&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal{&lt;br /&gt;
  font-size:100%;&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  padding: 2ex;&lt;br /&gt;
  transform: translate(0px, 0px);&lt;br /&gt;
}&lt;br /&gt;
.yourscore.normal.gone{&lt;br /&gt;
  right:0;&lt;br /&gt;
  top:0;&lt;br /&gt;
  border:solid;&lt;br /&gt;
  background:white;&lt;br /&gt;
  height: 0px;&lt;br /&gt;
  overflow: hidden;&lt;br /&gt;
  padding: 0;&lt;br /&gt;
  border: none;&lt;br /&gt;
}&lt;br /&gt;
div.thumb{&lt;br /&gt;
  float:none;&lt;br /&gt;
}&lt;br /&gt;
.codetip{&lt;br /&gt;
  position:absolute;&lt;br /&gt;
}&lt;br /&gt;
.qucontainer iframe{&lt;br /&gt;
  height:30ex;&lt;br /&gt;
}&lt;br /&gt;
.qu{&lt;br /&gt;
  margin-bottom:10ex;&lt;br /&gt;
}&lt;br /&gt;
.qu img{&lt;br /&gt;
  background-color:silver;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker-warning, .lint-message-warning {&lt;br /&gt;
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII=);&lt;br /&gt;
    background-repeat-y: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
}&lt;br /&gt;
.lint-marker {&lt;br /&gt;
    background-position: center center;&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    cursor: pointer;&lt;br /&gt;
    display: inline-block;&lt;br /&gt;
    height: 16px;&lt;br /&gt;
    width: 16px;&lt;br /&gt;
    vertical-align: middle;&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
#shellbody, #shelljs{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.qu pre.usr, .qu pre.ans{&lt;br /&gt;
  display:none;&lt;br /&gt;
}&lt;br /&gt;
.inputs, .outputs{&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  vertical-align:top;&lt;br /&gt;
  margin: 1ex;&lt;br /&gt;
}&lt;br /&gt;
.cm-container{&lt;br /&gt;
  width:80ex;&lt;br /&gt;
  border:solid thin black;&lt;br /&gt;
}&lt;br /&gt;
textarea.usr{&lt;br /&gt;
  width:50ex;&lt;br /&gt;
  height:20ex;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Encryption&amp;diff=1067</id>
		<title>Encryption</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Encryption&amp;diff=1067"/>
		<updated>2022-08-17T22:20:17Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Splitting the exponent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Fermat&#039;s Little Theorem==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;3&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;result&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;m&#039;),getbig(&#039;p&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`m&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generate public/private key pairs==&lt;br /&gt;
&amp;lt;div class=qu data-width=500 data-height=250&amp;gt;&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  addHiddenInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  addHiddenInput(&#039;q&#039;,&#039;103&#039;),&lt;br /&gt;
  addInput(&#039;e&#039;,&#039;7&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;d&#039;).value=modInverse(gb(&#039;e&#039;),(gb(&#039;p&#039;)-1n)*(gb(&#039;q&#039;)-1n));&lt;br /&gt;
    $i(&#039;n&#039;).value=gb(&#039;p&#039;)*gb(&#039;q&#039;);&lt;br /&gt;
  }},&#039;Generate public/private key&#039;),&lt;br /&gt;
  addHiddenInput(&#039;d&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;n&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;message&#039;,&#039;123&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;encrypted&#039;).value=pow(gb(&#039;message&#039;),gb(&#039;e&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;encrypt with public key&#039;),&lt;br /&gt;
  addInput(&#039;encrypted&#039;,&#039;&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;decrypted&#039;).value=pow(gb(&#039;encrypted&#039;),gb(&#039;d&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;decrypt with private key&#039;),&lt;br /&gt;
  addInput(&#039;decrypted&#039;,&#039;&#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
//Utility functions&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
function $i(id){return document.getElementById(id);}&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
function gb(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
function addInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},`${id} `),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
function addHiddenInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[&lt;br /&gt;
    $m(&#039;label&#039;,{},`${id} `),&lt;br /&gt;
    $m(&#039;input&#039;,{id,value,type:&#039;password&#039;}),&lt;br /&gt;
    $m(&#039;span&#039;,{onclick:()=&amp;gt;{$i(id).removeAttribute(&#039;type&#039;)}},&#039; show&#039;)&lt;br /&gt;
  ]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Splitting the exponent==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300 data-height=500&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;1000000007&#039;),&lt;br /&gt;
  mkInput(&#039;scramble&#039;,&#039;112233&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    document.getElementById(&#039;unscramble&#039;).value = &lt;br /&gt;
      modInverse(getbig(&#039;scramble&#039;),getbig(&#039;p&#039;)-1n);&lt;br /&gt;
  }},&#039;calculate unscramble&#039;),&lt;br /&gt;
  mkInput(&#039;unscramble&#039;,&#039;&#039;),&lt;br /&gt;
  mkInput(&#039;secret&#039;,&#039;888&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;scrambled&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;secret&#039;),getbig(&#039;scramble&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`scramble secret`),&lt;br /&gt;
  mkInput(&#039;scrambled&#039;,&#039;&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;tada&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;scrambled&#039;),getbig(&#039;unscramble&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`unscramble scrambled`),&lt;br /&gt;
  mkInput(&#039;tada&#039;,&#039;&#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
const $i = document.getElementById;&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Encryption&amp;diff=1066</id>
		<title>Encryption</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Encryption&amp;diff=1066"/>
		<updated>2022-08-17T22:19:53Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Splitting the exponent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Fermat&#039;s Little Theorem==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;3&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;result&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;m&#039;),getbig(&#039;p&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`m&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generate public/private key pairs==&lt;br /&gt;
&amp;lt;div class=qu data-width=500 data-height=250&amp;gt;&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  addHiddenInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  addHiddenInput(&#039;q&#039;,&#039;103&#039;),&lt;br /&gt;
  addInput(&#039;e&#039;,&#039;7&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;d&#039;).value=modInverse(gb(&#039;e&#039;),(gb(&#039;p&#039;)-1n)*(gb(&#039;q&#039;)-1n));&lt;br /&gt;
    $i(&#039;n&#039;).value=gb(&#039;p&#039;)*gb(&#039;q&#039;);&lt;br /&gt;
  }},&#039;Generate public/private key&#039;),&lt;br /&gt;
  addHiddenInput(&#039;d&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;n&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;message&#039;,&#039;123&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;encrypted&#039;).value=pow(gb(&#039;message&#039;),gb(&#039;e&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;encrypt with public key&#039;),&lt;br /&gt;
  addInput(&#039;encrypted&#039;,&#039;&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;decrypted&#039;).value=pow(gb(&#039;encrypted&#039;),gb(&#039;d&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;decrypt with private key&#039;),&lt;br /&gt;
  addInput(&#039;decrypted&#039;,&#039;&#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
//Utility functions&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
function $i(id){return document.getElementById(id);}&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
function gb(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
function addInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},`${id} `),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
function addHiddenInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[&lt;br /&gt;
    $m(&#039;label&#039;,{},`${id} `),&lt;br /&gt;
    $m(&#039;input&#039;,{id,value,type:&#039;password&#039;}),&lt;br /&gt;
    $m(&#039;span&#039;,{onclick:()=&amp;gt;{$i(id).removeAttribute(&#039;type&#039;)}},&#039; show&#039;)&lt;br /&gt;
  ]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Splitting the exponent==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;1000000007&#039;),&lt;br /&gt;
  mkInput(&#039;scramble&#039;,&#039;112233&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    document.getElementById(&#039;unscramble&#039;).value = &lt;br /&gt;
      modInverse(getbig(&#039;scramble&#039;),getbig(&#039;p&#039;)-1n);&lt;br /&gt;
  }},&#039;calculate unscramble&#039;),&lt;br /&gt;
  mkInput(&#039;unscramble&#039;,&#039;&#039;),&lt;br /&gt;
  mkInput(&#039;secret&#039;,&#039;888&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;scrambled&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;secret&#039;),getbig(&#039;scramble&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`scramble secret`),&lt;br /&gt;
  mkInput(&#039;scrambled&#039;,&#039;&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;tada&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;scrambled&#039;),getbig(&#039;unscramble&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`unscramble scrambled`),&lt;br /&gt;
  mkInput(&#039;tada&#039;,&#039;&#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
const $i = document.getElementById;&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Encryption&amp;diff=1065</id>
		<title>Encryption</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Encryption&amp;diff=1065"/>
		<updated>2022-08-17T06:30:07Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Splitting the exponent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Fermat&#039;s Little Theorem==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;3&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;result&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;m&#039;),getbig(&#039;p&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`m&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generate public/private key pairs==&lt;br /&gt;
&amp;lt;div class=qu data-width=500 data-height=250&amp;gt;&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  addHiddenInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  addHiddenInput(&#039;q&#039;,&#039;103&#039;),&lt;br /&gt;
  addInput(&#039;e&#039;,&#039;7&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;d&#039;).value=modInverse(gb(&#039;e&#039;),(gb(&#039;p&#039;)-1n)*(gb(&#039;q&#039;)-1n));&lt;br /&gt;
    $i(&#039;n&#039;).value=gb(&#039;p&#039;)*gb(&#039;q&#039;);&lt;br /&gt;
  }},&#039;Generate public/private key&#039;),&lt;br /&gt;
  addHiddenInput(&#039;d&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;n&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;message&#039;,&#039;123&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;encrypted&#039;).value=pow(gb(&#039;message&#039;),gb(&#039;e&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;encrypt with public key&#039;),&lt;br /&gt;
  addInput(&#039;encrypted&#039;,&#039;&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;decrypted&#039;).value=pow(gb(&#039;encrypted&#039;),gb(&#039;d&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;decrypt with private key&#039;),&lt;br /&gt;
  addInput(&#039;decrypted&#039;,&#039;&#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
//Utility functions&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
function $i(id){return document.getElementById(id);}&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
function gb(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
function addInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},`${id} `),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
function addHiddenInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[&lt;br /&gt;
    $m(&#039;label&#039;,{},`${id} `),&lt;br /&gt;
    $m(&#039;input&#039;,{id,value,type:&#039;password&#039;}),&lt;br /&gt;
    $m(&#039;span&#039;,{onclick:()=&amp;gt;{$i(id).removeAttribute(&#039;type&#039;)}},&#039; show&#039;)&lt;br /&gt;
  ]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Splitting the exponent==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;4093082899&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;19620520&#039;),&lt;br /&gt;
  mkInput(&#039;a&#039;,&#039;11223344&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;b&#039;).value =&lt;br /&gt;
      modInverse(getbig(&#039;a&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`inverse of a mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;}),&lt;br /&gt;
  mkInput(&#039;b&#039;,&#039;&#039;),&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Encryption&amp;diff=1064</id>
		<title>Encryption</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Encryption&amp;diff=1064"/>
		<updated>2022-08-17T06:29:42Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Splitting the exponent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Fermat&#039;s Little Theorem==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;3&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;result&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;m&#039;),getbig(&#039;p&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`m&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generate public/private key pairs==&lt;br /&gt;
&amp;lt;div class=qu data-width=500 data-height=250&amp;gt;&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  addHiddenInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  addHiddenInput(&#039;q&#039;,&#039;103&#039;),&lt;br /&gt;
  addInput(&#039;e&#039;,&#039;7&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;d&#039;).value=modInverse(gb(&#039;e&#039;),(gb(&#039;p&#039;)-1n)*(gb(&#039;q&#039;)-1n));&lt;br /&gt;
    $i(&#039;n&#039;).value=gb(&#039;p&#039;)*gb(&#039;q&#039;);&lt;br /&gt;
  }},&#039;Generate public/private key&#039;),&lt;br /&gt;
  addHiddenInput(&#039;d&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;n&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;message&#039;,&#039;123&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;encrypted&#039;).value=pow(gb(&#039;message&#039;),gb(&#039;e&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;encrypt with public key&#039;),&lt;br /&gt;
  addInput(&#039;encrypted&#039;,&#039;&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;decrypted&#039;).value=pow(gb(&#039;encrypted&#039;),gb(&#039;d&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;decrypt with private key&#039;),&lt;br /&gt;
  addInput(&#039;decrypted&#039;,&#039;&#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
//Utility functions&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
function $i(id){return document.getElementById(id);}&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
function gb(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
function addInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},`${id} `),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
function addHiddenInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[&lt;br /&gt;
    $m(&#039;label&#039;,{},`${id} `),&lt;br /&gt;
    $m(&#039;input&#039;,{id,value,type:&#039;password&#039;}),&lt;br /&gt;
    $m(&#039;span&#039;,{onclick:()=&amp;gt;{$i(id).removeAttribute(&#039;type&#039;)}},&#039; show&#039;)&lt;br /&gt;
  ]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Splitting the exponent==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;4093082899&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;19620520&#039;),&lt;br /&gt;
  mkInput(&#039;a&#039;,&#039;11223344&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;b&#039;).value =&lt;br /&gt;
      modInverse(getbig(&#039;a&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`inverse of a mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;}));&lt;br /&gt;
  mkInput(&#039;b&#039;,&#039;&#039;),&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Encryption&amp;diff=1063</id>
		<title>Encryption</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Encryption&amp;diff=1063"/>
		<updated>2022-08-17T06:28:59Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Fermat&amp;#039;s Little Theorem */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Fermat&#039;s Little Theorem==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;3&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;result&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;m&#039;),getbig(&#039;p&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`m&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generate public/private key pairs==&lt;br /&gt;
&amp;lt;div class=qu data-width=500 data-height=250&amp;gt;&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  addHiddenInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  addHiddenInput(&#039;q&#039;,&#039;103&#039;),&lt;br /&gt;
  addInput(&#039;e&#039;,&#039;7&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;d&#039;).value=modInverse(gb(&#039;e&#039;),(gb(&#039;p&#039;)-1n)*(gb(&#039;q&#039;)-1n));&lt;br /&gt;
    $i(&#039;n&#039;).value=gb(&#039;p&#039;)*gb(&#039;q&#039;);&lt;br /&gt;
  }},&#039;Generate public/private key&#039;),&lt;br /&gt;
  addHiddenInput(&#039;d&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;n&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;message&#039;,&#039;123&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;encrypted&#039;).value=pow(gb(&#039;message&#039;),gb(&#039;e&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;encrypt with public key&#039;),&lt;br /&gt;
  addInput(&#039;encrypted&#039;,&#039;&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;decrypted&#039;).value=pow(gb(&#039;encrypted&#039;),gb(&#039;d&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;decrypt with private key&#039;),&lt;br /&gt;
  addInput(&#039;decrypted&#039;,&#039;&#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
//Utility functions&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
function $i(id){return document.getElementById(id);}&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
function gb(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
function addInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},`${id} `),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
function addHiddenInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[&lt;br /&gt;
    $m(&#039;label&#039;,{},`${id} `),&lt;br /&gt;
    $m(&#039;input&#039;,{id,value,type:&#039;password&#039;}),&lt;br /&gt;
    $m(&#039;span&#039;,{onclick:()=&amp;gt;{$i(id).removeAttribute(&#039;type&#039;)}},&#039; show&#039;)&lt;br /&gt;
  ]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Splitting the exponent==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;4093082899&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;19620520&#039;),&lt;br /&gt;
  mkInput(&#039;a&#039;,&#039;11223344&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;b&#039;).value =&lt;br /&gt;
      modInverse(getbig(&#039;a&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`inverse of a mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;})&lt;br /&gt;
  mkInput(&#039;b&#039;,&#039;&#039;),&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Encryption&amp;diff=1062</id>
		<title>Encryption</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Encryption&amp;diff=1062"/>
		<updated>2022-08-17T06:23:26Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Splitting the exponent */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Fermat&#039;s Little Theorem==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;3&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;result&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;m&#039;),getbig(&#039;p&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`m&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generate public/private key pairs==&lt;br /&gt;
&amp;lt;div class=qu data-width=500 data-height=250&amp;gt;&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  addHiddenInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  addHiddenInput(&#039;q&#039;,&#039;103&#039;),&lt;br /&gt;
  addInput(&#039;e&#039;,&#039;7&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;d&#039;).value=modInverse(gb(&#039;e&#039;),(gb(&#039;p&#039;)-1n)*(gb(&#039;q&#039;)-1n));&lt;br /&gt;
    $i(&#039;n&#039;).value=gb(&#039;p&#039;)*gb(&#039;q&#039;);&lt;br /&gt;
  }},&#039;Generate public/private key&#039;),&lt;br /&gt;
  addHiddenInput(&#039;d&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;n&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;message&#039;,&#039;123&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;encrypted&#039;).value=pow(gb(&#039;message&#039;),gb(&#039;e&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;encrypt with public key&#039;),&lt;br /&gt;
  addInput(&#039;encrypted&#039;,&#039;&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;decrypted&#039;).value=pow(gb(&#039;encrypted&#039;),gb(&#039;d&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;decrypt with private key&#039;),&lt;br /&gt;
  addInput(&#039;decrypted&#039;,&#039;&#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
//Utility functions&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
function $i(id){return document.getElementById(id);}&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
function gb(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
function addInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},`${id} `),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
function addHiddenInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[&lt;br /&gt;
    $m(&#039;label&#039;,{},`${id} `),&lt;br /&gt;
    $m(&#039;input&#039;,{id,value,type:&#039;password&#039;}),&lt;br /&gt;
    $m(&#039;span&#039;,{onclick:()=&amp;gt;{$i(id).removeAttribute(&#039;type&#039;)}},&#039; show&#039;)&lt;br /&gt;
  ]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Fermat&#039;s Little Theorem==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;3&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;result&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;m&#039;),getbig(&#039;p&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`m&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=Encryption&amp;diff=1061</id>
		<title>Encryption</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=Encryption&amp;diff=1061"/>
		<updated>2022-08-17T06:23:04Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: /* Generate public/private key pairs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Fermat&#039;s Little Theorem==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;3&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;result&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;m&#039;),getbig(&#039;p&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`m&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Generate public/private key pairs==&lt;br /&gt;
&amp;lt;div class=qu data-width=500 data-height=250&amp;gt;&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  addHiddenInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  addHiddenInput(&#039;q&#039;,&#039;103&#039;),&lt;br /&gt;
  addInput(&#039;e&#039;,&#039;7&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;d&#039;).value=modInverse(gb(&#039;e&#039;),(gb(&#039;p&#039;)-1n)*(gb(&#039;q&#039;)-1n));&lt;br /&gt;
    $i(&#039;n&#039;).value=gb(&#039;p&#039;)*gb(&#039;q&#039;);&lt;br /&gt;
  }},&#039;Generate public/private key&#039;),&lt;br /&gt;
  addHiddenInput(&#039;d&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;n&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;message&#039;,&#039;123&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;encrypted&#039;).value=pow(gb(&#039;message&#039;),gb(&#039;e&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;encrypt with public key&#039;),&lt;br /&gt;
  addInput(&#039;encrypted&#039;,&#039;&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;decrypted&#039;).value=pow(gb(&#039;encrypted&#039;),gb(&#039;d&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;decrypt with private key&#039;),&lt;br /&gt;
  addInput(&#039;decrypted&#039;,&#039;&#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
//Utility functions&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
function $i(id){return document.getElementById(id);}&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
function gb(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
function addInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},`${id} `),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
function addHiddenInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[&lt;br /&gt;
    $m(&#039;label&#039;,{},`${id} `),&lt;br /&gt;
    $m(&#039;input&#039;,{id,value,type:&#039;password&#039;}),&lt;br /&gt;
    $m(&#039;span&#039;,{onclick:()=&amp;gt;{$i(id).removeAttribute(&#039;type&#039;)}},&#039; show&#039;)&lt;br /&gt;
  ]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre id=&#039;shellbody&#039; data-qtp=&#039;DOM&#039;&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Fermat&#039;s Little Theorem==&lt;br /&gt;
&amp;lt;div class=&#039;qu&#039; data-width=300&amp;gt;&lt;br /&gt;
Fermat&#039;s little theorem tells us that&lt;br /&gt;
 x&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p = x&lt;br /&gt;
if &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; is prime for &amp;lt;code&amp;gt;x&amp;lt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verify this by trying prime and non-prime values for p. You can can generate prime numbers from https://bigprimes.org/&lt;br /&gt;
&amp;lt;pre class=&#039;usr&#039;&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  mkInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  mkInput(&#039;m&#039;,&#039;3&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:function(){&lt;br /&gt;
    document.getElementById(&#039;result&#039;).value =&lt;br /&gt;
      pow(getbig(&#039;m&#039;),getbig(&#039;p&#039;),getbig(&#039;p&#039;));&lt;br /&gt;
  }},`m&amp;lt;sup&amp;gt;p&amp;lt;/sup&amp;gt; mod p`),&lt;br /&gt;
  $m(&#039;input&#039;,{id:&#039;result&#039;})&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
//raise n to the power e, modulo m&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Create an element with tagname and properties&lt;br /&gt;
//children can be a string (innerHTML) or a list of elements&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
//Get the value in element with id, convert it to a BigInt&lt;br /&gt;
function getbig(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
//Return a div containing label and input. id is shown in the label&lt;br /&gt;
function mkInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},id),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Splitting the exponent==&lt;br /&gt;
&amp;lt;div class=qu data-width=500 data-height=250&amp;gt;&lt;br /&gt;
&amp;lt;pre class=usr&amp;gt;&lt;br /&gt;
document.body.append(&lt;br /&gt;
  addHiddenInput(&#039;p&#039;,&#039;101&#039;),&lt;br /&gt;
  addHiddenInput(&#039;q&#039;,&#039;103&#039;),&lt;br /&gt;
  addInput(&#039;e&#039;,&#039;7&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;d&#039;).value=modInverse(gb(&#039;e&#039;),(gb(&#039;p&#039;)-1n)*(gb(&#039;q&#039;)-1n));&lt;br /&gt;
    $i(&#039;n&#039;).value=gb(&#039;p&#039;)*gb(&#039;q&#039;);&lt;br /&gt;
  }},&#039;Generate public/private key&#039;),&lt;br /&gt;
  addHiddenInput(&#039;d&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;n&#039;,&#039;&#039;),&lt;br /&gt;
  addInput(&#039;message&#039;,&#039;123&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;encrypted&#039;).value=pow(gb(&#039;message&#039;),gb(&#039;e&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;encrypt with public key&#039;),&lt;br /&gt;
  addInput(&#039;encrypted&#039;,&#039;&#039;),&lt;br /&gt;
  $m(&#039;button&#039;,{onclick:()=&amp;gt;{&lt;br /&gt;
    $i(&#039;decrypted&#039;).value=pow(gb(&#039;encrypted&#039;),gb(&#039;d&#039;),gb(&#039;n&#039;));&lt;br /&gt;
  }},&#039;decrypt with private key&#039;),&lt;br /&gt;
  addInput(&#039;decrypted&#039;,&#039;&#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function modInverse(a, m){&lt;br /&gt;
  a = (a%m+m)%m;&lt;br /&gt;
  if (!a||m&amp;lt;2n) {&lt;br /&gt;
    return NaN // invalid input&lt;br /&gt;
  }&lt;br /&gt;
  // find the gcd&lt;br /&gt;
  const s=[]&lt;br /&gt;
  let b=m&lt;br /&gt;
  while(b) {&lt;br /&gt;
    [a,b] = [b,a%b]&lt;br /&gt;
    s.push({a, b})&lt;br /&gt;
  }&lt;br /&gt;
  if (a!==1n) {&lt;br /&gt;
    return NaN // inverse does not exists&lt;br /&gt;
  }&lt;br /&gt;
  // find the inverse&lt;br /&gt;
  let x = 1n&lt;br /&gt;
  let y = 0n&lt;br /&gt;
  for(let i=s.length-2; i&amp;gt;=0;--i) {&lt;br /&gt;
    [x,y] = [y,x-y*(s[i].a/s[i].b)]&lt;br /&gt;
  }&lt;br /&gt;
  return (y%m+m)%m&lt;br /&gt;
}&lt;br /&gt;
//Utility functions&lt;br /&gt;
function pow(n,e,m){&lt;br /&gt;
  if (e&amp;lt;=0) return 1n;&lt;br /&gt;
  let r = pow(n,e/2n,m);&lt;br /&gt;
  return (r*r*(e%2n===1n?n:1n))%m;&lt;br /&gt;
}&lt;br /&gt;
function $i(id){return document.getElementById(id);}&lt;br /&gt;
function $m(tag,prop,children){&lt;br /&gt;
  let ret = document.createElement(tag);&lt;br /&gt;
  for(let k in prop)&lt;br /&gt;
    ret[k] = prop[k];&lt;br /&gt;
  if (typeof(children)===&#039;string&#039;)&lt;br /&gt;
    ret.innerHTML = children;&lt;br /&gt;
  if (Array.isArray(children))&lt;br /&gt;
    for(let c of children)&lt;br /&gt;
      ret.append(c);&lt;br /&gt;
  return ret;&lt;br /&gt;
}&lt;br /&gt;
function gb(id){return BigInt(document.getElementById(id).value)}&lt;br /&gt;
function addInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[$m(&#039;label&#039;,{},`${id} `),$m(&#039;input&#039;,{id,value})]);  &lt;br /&gt;
}&lt;br /&gt;
function addHiddenInput(id,value){&lt;br /&gt;
  return $m(&#039;div&#039;,{},[&lt;br /&gt;
    $m(&#039;label&#039;,{},`${id} `),&lt;br /&gt;
    $m(&#039;input&#039;,{id,value,type:&#039;password&#039;}),&lt;br /&gt;
    $m(&#039;span&#039;,{onclick:()=&amp;gt;{$i(id).removeAttribute(&#039;type&#039;)}},&#039; show&#039;)&lt;br /&gt;
  ]);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
	<entry>
		<id>https://progzoo.net/index.php?title=File:Poke4.png&amp;diff=1060</id>
		<title>File:Poke4.png</title>
		<link rel="alternate" type="text/html" href="https://progzoo.net/index.php?title=File:Poke4.png&amp;diff=1060"/>
		<updated>2022-08-16T21:02:58Z</updated>

		<summary type="html">&lt;p&gt;Andr3w: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andr3w</name></author>
	</entry>
</feed>