recursal/MDN huggingface dataset:
Block cipher mode of operation
==============================

A block cipher mode of operation, usually just called a "mode" in context, specifies how a block cipher should be used to encrypt or decrypt messages that are longer than the block size.

Most symmetric-key algorithms currently in use are block ciphers: this means that they encrypt data a block at a time. The size of each block is fixed and determined by the algorithm: for example AES uses 16-byte blocks. Block ciphers are always used with a *mode*, which specifies how to securely encrypt messages that are longer than the block size. For example, AES is a cipher, while CTR, CBC, and GCM are all modes. Using an inappropriate mode, or using a mode incorrectly, can completely undermine the security provided by the underlying cipher.
Routers
=======

There are three definitions for **routers** on the web:

1. For the network layer, the router is a networking device that decides data Packets directions. They are distributed by retailers allowing user interaction to the internet.
2. For a Single-page application in the application layer, a router is a library that decides what web page is presented by a given URL. This middleware module is used for all URL functions, as these are given a path to a file that is rendered to open the next page.
3. In the implementation of an API in a service layer, a router is a software component that parses a request and directs or routes the request to various handlers within a program. The router code usually accepts a response from the handler and facilitates its return to the requester.
See also
--------

For network layer context:

* Router (computing) on Wikipedia

For SPA in application layer context, most of the popular SPA frameworks have their routing libraries:

* Angular router
* React router
* Vue router
Nullish value
=============

In JavaScript, a nullish value is the value which is either `null` or `undefined`. Nullish values are always falsy.
Instance
========

An object created by a constructor is an instance of that constructor.

See also
--------

* Instance on Wikipedia
Inline-level content
====================

In CSS, content that participates in inline layout is called **inline-level content**. Most text sequences, replaced elements, and generated content are inline-level by default.

In inline layout, a mixed stream of text, replaced elements, and other inline boxes are laid out by fragmenting them into a stack of line boxes. Within each line box, inline-level boxes are aligned to each other vertically or horizontally, depending on the writing mode. Typically, they are aligned by the baselines of their text. This can be changed with CSS.

![inline layout](/en-US/docs/Glossary/Inline-level_content/inline_layout.png)

**Note:** HTML (*HyperText Markup Language*) elements historically were categorized as either "block-level" elements or "inline" elements. As a presentational characteristic, this is now specified by CSS.

Examples
--------


```html
<p>
  This span is an <span class="highlight">inline-level element</span>; its
  background has been colored to display both the beginning and end of the
  element's influence. Input elements, like <input type="radio" /> and
  <input type="checkbox" />, are also inline-level content.
</p>
```


In this example, the `<p>` element contains some text. Within that text is a `<span>` element and two `<input>` elements, which are inline-level elements. If the `<span>` is spread across two lines, two line boxes are generated. Because these elements are inline, the paragraph correctly renders as a single paragraph of unbroken text flow:
```

body {
  margin: 0;
  padding: 4px;
  border: 1px solid #333;
}

.highlight {
  background-color: #ee3;
}
```

See also
--------

* Block-level content
* Inline formatting context
* `display`
Screen reader
=============

Screen readers are software applications that attempt to convey what is seen on a screen display in a non-visual way, usually as text to speech, but also into braille or sound icons. Screen readers are essential to people who are visually impaired, illiterate, or have a learning disability. There are some browser extension screen readers, but most screen readers operate system-wide for all user applications, not just the browser.

In terms of web accessibility, most user agents provide an accessibility object model and screen readers interact with dedicated accessibility APIs, using various operating system features and employing hooking techniques.

VoiceOver
---------

macOS comes with VoiceOver, a built-in screen reader. To access VoiceOver, go to System Preferences > Accessibility > VoiceOver. You can also toggle VoiceOver on and off with fn+command + F5. VoiceOver both reads aloud and displays content. The content read aloud is displayed in a dark grey box.

Desktop/laptop screen reader users navigate websites with a keyboard or other non-pointing device. The best way to emulate use is to do the same.

Just like keyboard navigation without VoiceOver, you can navigate through interactive elements using the tab key and the arrow keys:

* Next interactive element: Tab
* Previous interactive element: Shift + Tab
* Next radio button in a same named-group: right or down arrow
* Previous radio button in a same named-group: left or up arrow

Navigating through the content of a page is done with the tab key and a series of other keys along with Control + Option keys

* Next heading: Control + Option + H
* Next list: Control + Option + X
* Next graphic: Control + Option + G
* Next table: Control + Option + T
* Down an HTML hierarchical order Control + Option + right arrow
* Previous heading: Shift + Control + Option + H
* Previous list: Shift + Control + Option + X
* Previous graphic: Shift + Control + Option + G
* Previous table: Shift + Control + Option + T
* Up an HTML hierarchical order: Control + Option + left arrow
See also
--------

* ARIA
Key
===

A key is a piece of information used by a cipher for encryption and/or decryption.

Encrypted messages should remain secure even if everything about the cryptosystem, except for the key, is public knowledge.

In symmetric-key cryptography, the same key is used for both encryption and decryption. In public-key cryptography, there exists a pair of related keys known as the *public key* and *private key*. The public key is freely available, whereas the private key is kept secret. The public key is able to encrypt messages that only the corresponding private key is able to decrypt, and vice versa.

See also
--------

* Kerckhoffs's principle on Wikipedia
* MDN Web Docs Glossary
    + Block cipher mode of operation
    + Cipher
    + Ciphertext
    + Cipher suite
    + Cryptanalysis
    + Cryptography
    + Decryption
    + Encryption
    + Key
    + Plaintext
    + Public-key cryptography
    + Symmetric-key cryptography
WebM
====

**WebM** is royalty-free and is an open web video format natively supported in Mozilla Firefox.

See also
--------

* WebM on Wikipedia
Conditional
===========

A **condition** is a set of rules that can interrupt normal code execution or change it, depending on whether the condition is completed or not.

An instruction or a set of instructions is executed if a specific condition is fulfilled. Otherwise, another instruction is executed. It is also possible to repeat the execution of an instruction, or set of instructions, while a condition is not yet fulfilled.

See also
--------

* Condition on Wikipedia
* Control flow on MDN
* Making decisions in your code — conditionals
* Control flow and error handling in JavaScript on MDN
Color wheel
===========

A **color wheel**, or *color circle*, is a chart representing a palette of colors in a circle. A color wheel can display colors identified by two polar coordinates, the *angle* and the *distance* from the origin, the circle's center.

Color wheels are convenient for comparing colors expressed in polar or cylindrical coordinates, like `hsl()`, `hwb()`, or `lch()`.

In such cases, *complementary colors* are often found opposite on the same diameter. Similarly, *monochromatic colors* – colors of the same *tone* but of different *shades* – are located on the same radius, and *triadic colors* – three colors evenly spaced around the color wheel that lead to colors that work well together – are also easy to find.

Color wheels are used in real life when we want to choose between different hues. For example, when selecting wall paint or the color for a piece furniture.

 In the digital world, color wheels are used in *color pickers*, like the default one on macOS:
 ![The default color picker on macOS Monterey](/en-US/docs/Glossary/Color_wheel/color_wheel_macos.png)

See also
--------

* *Color theory and the color wheel*
* *How to Use the Color Wheel to Pick Your Perfect Color Palette* in *Better Homes & Gardens*
* *Color wheel* in *Wikipedia*
* `<color>` (the CSS color type)
Privileged code
===============

**Privileged code** - JavaScript code of your extension. For example, code in content scripts.

**Non-privileged** - JavaScript on web-page.
RDF
===

**RDF** (Resource Description Framework) is a language developed by W3C for representing information on the World Wide Web, such as Webpages. RDF provides a standard way of encoding resource information so that it can be exchanged in a fully automated way between applications.

See also
--------

* Resource Description Framework on Wikipedia
Modularity
==========

The term Modularity refers to the degree to which a system's components may be separated and recombined, it is also division of a software package into logical units. The advantage of a modular system is that one can reason the parts independently

See also
--------

* Modularity on Wikipedia
TCP
===

**TCP (Transmission Control Protocol)** is an important network protocol that lets two hosts connect and exchange data streams. TCP guarantees the delivery of data and packets in the same order as they were sent. Vint Cerf and Bob Kahn, who were DARPA scientists at the time, designed TCP in the 1970s.

TCP's role is to ensure the packets are reliably delivered, and error-free. TCP implements congestion control, which means the initial requests start small, increasing in size to the levels of bandwidth the computers, servers, and network can support.

See also
--------

* Transmission Control Protocol (Wikipedia)
* HTTP Overview
* How browsers work
* Glossary
    + IPv4
    + IPv6
    + Packet
Undefined
=========

**`undefined`** is a primitive value automatically assigned to variables that have just been declared, or to formal arguments for which there are no actual arguments.

Example
-------


```js
let x; //create a variable but assign it no value

console.log(`x's value is ${x}`); //logs "x's value is undefined"
```

See also
--------

* Undefined value on Wikipedia
* JavaScript data types and data structures
SQL
===

**SQL** (Structured Query Language) is a descriptive computer language designed for updating, retrieving, and calculating data in table-based databases.

See also
--------

* SQL on Wikipedia
* Learn SQL on sqlzoo.net
* Tutorials Point
Call stack
==========

A **call stack** is a mechanism for an interpreter (like the JavaScript interpreter in a web browser) to keep track of its place in a script that calls multiple functions — what function is currently being run and what functions are called from within that function, etc.

* When a script calls a function, the interpreter adds it to the call stack and then starts carrying out the function.
* Any functions that are called by that function are added to the call stack further up, and run where their calls are reached.
* When the current function is finished, the interpreter takes it off the stack and resumes execution where it left off in the last code listing.
* If the stack takes up more space than it was assigned, a "stack overflow" error is thrown.
Example
-------


```js
function greeting() {
  // [1] Some code here
  sayHi();
  // [2] Some code here
}
function sayHi() {
  return "Hi!";
}

// Invoke the `greeting` function
greeting();

// [3] Some code here
```


The code above would be executed like this:

1. Ignore all functions, until it reaches the `greeting()` function invocation.
2. Add the `greeting()` function to the call stack list.


**Note:** Call stack list:
 - greeting
3. Execute all lines of code inside the `greeting()` function.
4. Get to the `sayHi()` function invocation.
5. Add the `sayHi()` function to the call stack list.


**Note:** Call stack list:
 - sayHi
 - greeting
6. Execute all lines of code inside the `sayHi()` function, until reaches its end.
7. Return execution to the line that invoked `sayHi()` and continue executing the rest of the `greeting()` function.
8. Delete the `sayHi()` function from our call stack list.


**Note:** Call stack list:
 - greeting
9. When everything inside the `greeting()` function has been executed, return to its invoking line to continue executing the rest of the JS code.
10. Delete the `greeting()` function from the call stack list.


**Note:** Call stack list:
 EMPTY

In summary, then, we start with an empty Call Stack. Whenever we invoke a function, it is automatically added to the Call Stack. Once the function has executed all of its code, it is automatically removed from the Call Stack. Ultimately, the Stack is empty again.

See also
--------

* Call stack on Wikipedia
* Glossary
    + Call stack
    + Function
TCP slow start
==============

TCP slow start helps buildup transmission speeds to the network's capabilities. It does this without initially knowing what those capabilities are and without creating congestion. TCP slow start is an algorithm used to detect the available bandwidth for packet transmission, and balances the speed of a network connection. It prevents the appearance of network congestion whose capabilities are initially unknown, and slowly increases the volume of information diffused until the network's maximum capacity is found.

To implement TCP slow start, the congestion window (*cwnd*) sets an upper limit on the amount of data a source can transmit over the network before receiving an acknowledgment (ACK). The slow start threshold (*ssthresh*) determines the (de)activation of slow start. When a new connection is made, cwnd is initialized to one TCP data or acknowledgment packet, and waits for an acknowledgement, or ACK. When that ACK is received, the congestion window is incremented until the *cwnd* is greater than *ssthresh*. Slow start also terminates when congestion is experienced.

Congestion control
------------------

Congestion itself is a state that happens within a network layer when the message traffic is too busy it slows the network response time. The server sends data in TCP packets, the user's client then confirms delivery by returning acknowledgements, or ACKs. The connection has a limited capacity depending on hardware and network conditions. If the server sends too many packets too quickly, they will be dropped. Meaning, there will be no acknowledgement. The server registers this as missing ACKs. Congestion control algorithms use this flow of sent packets and ACKs to determine a send rate.

See also
--------

* Populating the page: how browsers work
* http overview
HTTPS
=====

**HTTPS** (***HyperText Transfer Protocol Secure***) is an encrypted version of the HTTP protocol. It uses TLS to encrypt all communication between a client and a server. This secure connection allows clients to safely exchange sensitive data with a server, such as when performing banking activities or online shopping.

See also
--------

* HTTPS on Wikipedia
* Moving to HTTPS community guide
* Secure Contexts
* MDN Web Docs Glossary
    + HTTP
    + TLS
    + SSL
Fetch metadata request header
=============================

A **fetch metadata request header** is an HTTP request header that provides additional information about the context from which the request originated. This allows the server to make decisions about whether a request should be allowed based on where the request came from and how the resource will be used.

With this information a server can implement a resource isolation policy, allowing external sites to request only those resources that are intended for sharing, and that are used appropriately. This approach can help mitigate common cross-site web vulnerabilities such as CSRF, Cross-site Script Inclusion('XSSI'), timing attacks, and cross-origin information leaks.

These headers are prefixed with `Sec-`, and hence have forbidden header names. As such, they cannot be modified from JavaScript.

The fetch metadata request headers are:

* `Sec-Fetch-Site`
* `Sec-Fetch-Mode`
* `Sec-Fetch-User`
* `Sec-Fetch-Dest`

 The following request headers are not *strictly* "fetch metadata request headers", as they are not in the same specification, but similarly provide information about the context of how a resource will be used.
 A server might use them to modify its caching behavior, or the information that is returned:

* `Sec-Purpose` 
Experimental
* `Service-Worker-Navigation-Preload`
See also
--------

* Protect your resources from web attacks with Fetch Metadata (web.dev)
* Fetch Metadata Request Headers playground (secmetadata.appspot.com)
* List of all HTTP headers
* List of all HTTP headers > Fetch metadata request headers
* Glossary
    + Representation header
    + HTTP header
    + Response header
    + Request header
Cookie
======

A cookie is a small piece of information left on a visitor's computer by a website, via a web browser.

Cookies are used to personalize a user's web experience with a website. It may contain the user's preferences or inputs when accessing that website. A user can customize their web browser to accept, reject, or delete cookies.

Cookies can be set and modified at the server level using the `Set-Cookie` HTTP header, or with JavaScript using `document.cookie`.

See also
--------

* HTTP cookie on Wikipedia
ARPANET
=======

The **ARPANET** (Advanced Research Projects Agency NETwork) was an early computer network, constructed in 1969 as a robust medium to transmit sensitive military data and to connect leading research groups throughout the United States. ARPANET first ran NCP (Network Control Protocol) and subsequently the first version of the Internet protocol or TCP/IP suite, making ARPANET a prominent part of the nascent Internet. ARPANET was closed in early 1990.

See also
--------

* .arpa
* TCP
* ARPANET on Wikipedia
Method
======

A **method** is a function which is a property of an object. There are two kinds of methods: *instance methods* which are built-in tasks performed by an object instance, or *static methods* which are tasks that are called directly on an object constructor.

**Note:** In JavaScript functions themselves are objects, so, in that context, a method is actually an object reference to a function.

When `F` is said to be a *method* of `O`, it often means that `F` uses `O` as its `this` binding. Function properties that do not have different behaviors based on their `this` value (or those that don't have a dynamic `this` binding at all — like bound functions and arrow functions) may not be universally recognized as methods.

See also
--------

* Method (computer programming) in Wikipedia
* Defining a method in JavaScript (comparison of the traditional syntax and the new shorthand)
* List of JavaScript built-in methods
* MDN Web Docs Glossary
    + function
    + object
    + property
    + static method
FTP
===

**FTP** (File Transfer Protocol) is an insecure protocol for transferring files from one host to another over the Internet.

For many years it was the defacto standard way of transferring files, but as it is inherently insecure, it is no longer supported by many hosting accounts. Instead you should use SFTP (a secure, encrypted version of FTP) or another secure method for transferring files like Rsync over SSH.

See also
--------

* Beginner's guide to uploading files via FTP
* FTP on Wikipedia
Time to first byte
==================

**Time to First Byte** (TTFB) refers to the time between the browser requesting a page and when it receives the first byte of information from the server. This time includes DNS lookup and establishing the connection using a TCP handshake and TLS handshake if the request is made over HTTPS.

TTFB is the time it takes between the start of the request and the start of the response, in milliseconds:
```

TTFB = responseStart - navigationStart
```

See also
--------

* A typical HTTP session
* PerformanceResourceTiming
* PerformanceTiming
Argument
========

An **argument** is a value (primitive or object) passed as input to a function.

For example:


```js
const argument1 = "Web";
const argument2 = "Development";
example(argument1, argument2); // passing two arguments

// This function takes two values
function example(parameter1, parameter2) {
  console.log(parameter1); // Output = "Web"
  console.log(parameter2); // Output = "Development"
}
```


The argument order within the function call should be the same as the parameters order in the function definition.


```js
const argument1 = "foo";
const argument2 = [1, 2, 3];
example(argument1, argument2); // passing two arguments

// This function takes a single value, so the second argument passed is ignored
function example(parameter) {
  console.log(parameter); // Output = foo
}
```

See also
--------

* Difference between parameter and argument
* The `arguments` object in JavaScript
PAC
===

A Proxy Auto-Configuration file (**PAC file**) is a file which contains a function, `FindProxyForURL()`, which is used by the browser to determine whether requests (including HTTP, HTTPS, and FTP) should go directly to the destination or if they need to be forwarded through a web proxy server.


```js
function FindProxyForURL(url, host) {
  // …
}

ret = FindProxyForURL(url, host);
```


See Proxy Auto-Configuration (PAC) file for details about how these are used and how to create new ones.

See also
--------

* PAC on Wikipedia
* Proxy Auto-Configuration file on MDN
General header
==============

**General header** is an outdated term used to refer to an HTTP header that can be used in both request and response messages, but which doesn't apply to the content itself (a header that applied to the content was called an entity header). Depending on the context they are used in, general headers might either be response or request headers (e.g. `Cache-Control`).

**Note:** Current versions of the HTTP/1.1 specification do not specifically categorize headers as "general headers". These are now simply referred to as response or request headers depending on context.
Secure Context
==============

A **secure context** is a `Window` or `Worker` in which certain minimum standards of authentication and confidentiality are met. Many Web APIs and features are only accessible in secure contexts, reducing the opportunity for misuse by malicious code.

For more information see: Web > Security > Secure Contexts.
Responsive web design
=====================

*Responsive Web Design* (**RWD**) is a Web development concept focusing on making sites look and behave optimally on all personal computing devices, from desktop to mobile.

See also
--------

* Progressive web apps
* Responsive Web Design
Parent object
=============

The object to which a given property or method belongs.

See also
--------

* Discussion of Inheritance and prototypes in JavaScript