recursal/MDN huggingface dataset:
CalDAV
======

CalDAV (Calendaring extensions to WebDAV) is a protocol standardized by the IETF and used to remotely access calendar data from a server.

See also
--------

* CalDAV on Wikipedia
* RFC 4791: Calendaring extensions to WebDAV (CalDAV)
* RFC 6638: Scheduling Extensions to CalDAV
Sticky activation
=================

**Sticky activation** (or "sticky user activation") is a window state that indicates a user has pressed a button, moved a mouse, used a menu, or performed some other user interaction.

A page is considered "user activated" if a user is currently interacting with the page or has completed a touch, pointer, or keyboard interaction since page load. With sticky user activation, if activation is set it is not reset for the duration of the session (unlike Transient activation).

See Features gated by user activation for examples of APIs that require *sticky activation*.

See the `UserActivation.hasBeenActive` property to programmatically access the current window's sticky activation state.

See also
--------

* HTML Living Standard > Sticky activation
* Transient activation
* `UserActivation.hasBeenActive`
Localization
============

**Localization** (l10n) is the process of adapting a software user interface to a specific culture.

The following are common factors to consider:

* language
* unit of measure (e.g., kilometers in Europe, miles in U.S.)
* text direction (e.g., European languages are left-to-right, Arabic right-to-left)
* capitalization in Latin script (e.g., English uses capitals for weekdays, Spanish uses lowercase)
* adaptation of idioms (e.g., "raining cats and dogs" makes no sense when translated literally)
* use of register (e.g., in Japanese respectful speech differs exceptionally from casual speech)
* number format (e.g., 10 000,00 in Germany vs. 10,000.00 in the U.S.)
* date format
* currency
* cultural references
* paper size
* color psychology
* compliance with local laws
* local holidays
* personal names

The complementary practice, of designing a system so it is easy to localize, is called Internationalization.

See also
--------

* Localization on Wikipedia
* Internationalization
Card sorting
============

Card sorting is a simple technique used in Information architecture whereby people involved in the design of a website (or other type of product) are invited to write down the content / services / features they feel the product should contain, and then organize those features into categories or groupings. This can be used for example to work out what should go on each page of a website. The name comes from the fact that often card sorting is carried out by literally writing the items to sort onto cards, and then arranging the cards into piles.

See also
--------

* Card sorting on Wikipedia
Document directive
==================

**CSP document directives** are used in a `Content-Security-Policy` header and govern the properties of a document or worker environment to which a policy applies.

Document directives don't fall back to the `default-src` directive.

See Document directives for a complete list.

See also
--------

* Glossary
    + CSP
    + Reporting directive
    + Fetch directive
    + Navigation directive
* Reference
    + https://www.w3.org/TR/CSP/#directives-document
    + `upgrade-insecure-requests`
    + `block-all-mixed-content`
    + `Content-Security-Policy`
Alignment container
===================

The **alignment container** is the rectangle that the alignment subject is aligned within. This is defined by the layout mode; it is usually the alignment subject's containing block, and assumes the writing mode of the box establishing the containing block.

See also
--------

* CSS box alignment module
* CSS `align-content` property
* CSS `align-items` property
* CSS `align-self` property
* CSS `align-tracks` property
* CSS `justify-content` property
* CSS `justify-items` property
* CSS `justify-self` property
* CSS `justify-tracks` property
* CSS `place-content` shorthand property
* CSS `place-self` shorthand property
* CSS `scroll-snap-align` property
String
======

In any computer programming language, a string is a sequence of characters used to represent text.

In JavaScript, a String is one of the primitive values and the `String` object is a wrapper around a String primitive.

See also
--------

* String (computer science) on Wikipedia
* JavaScript data types and data structures
Graceful degradation
====================

**Graceful degradation** is a design philosophy that centers around trying to build a modern website/application that will work in the newest browsers, but falls back to an experience that while not as good still delivers essential content and functionality in older browsers.

Polyfills can be used to build in missing features with JavaScript, but acceptable alternatives to features like styling and layout should be provided where possible, for example by using the CSS cascade, or HTML fallback behavior. Some good examples can be found in Handling common HTML and CSS problems.

It is a useful technique that allows Web developers to focus on developing the best possible websites, given that those websites are accessed by multiple unknown user-agents. Progressive enhancement is related but different — often seen as going in the opposite direction to graceful degradation. In reality both approaches are valid and can often complement one another.

See also
--------

* Graceful degradation on Wikipedia
* Handling common HTML and CSS problems
* Implementing feature detection
* MDN Web Docs Glossary
    + Graceful degradation
    + Polyfill
    + Progressive enhancement
WCAG
====

*Web Content Accessibility Guidelines* (**WCAG**) are a recommendation published by the Web Accessibility Initiative group at the W3C. They outline a set of guidelines for making content accessible primarily for people with disabilities but also for limited-resource devices such as mobile phones.

WCAG 2.0 which superseded WCAG 1.0 was published as a W3C Recommendation on 11 December 2008. It consists of 12 guidelines organized under 4 principles (perceivable, operable, understandable, and robust) and each guideline has testable success criteria.

WCAG uses three levels of conformance:

* Priority 1: Web developers **must** satisfy these requirements, otherwise it will be impossible for one or more groups to access the Web content. Conformance to this level is described as A.
* Priority 2: Web developers **should** satisfy these requirements, otherwise some groups will find it difficult to access the Web content. Conformance to this level is described as AA or Double-A.
* Priority 3: Web developers **may** satisfy these requirements, in order to make it easier for some groups to access the Web content. Conformance to this level is described as AAA or Triple-A.

Work is proceeding on both WCAG 2.2 and WCAG) 3.0.

See also
--------

* WCAG on Wikipedia
* Accessibility information on MDN
* The WCAG 2.0 recommendation at the W3C
* Web Content Accessibility Guidelines (WCAG) 2.2: Candidate Recommendation
* W3C Accessibility Guidelines (WCAG) 3.0: Working Draft
Garbage collection
==================

**Garbage collection** is a term used in computer programming to describe the process of finding and deleting objects which are no longer being referenced by other objects.

In other words, garbage collection is the process of removing any objects which are not being used by any other objects. Often abbreviated "GC," garbage collection is a fundamental component of the memory management system used by JavaScript.

See also
--------

* Memory management on Wikipedia
* Garbage collection (computer science) on Wikipedia
* Garbage collection in the MDN JavaScript guide.
* Memory management in JavaScript
TOFU
====

**Trust On First Use** **(TOFU**) is a security model in which a client needs to create a trust relationship with an unknown server. To do that, clients will look for identifiers (for example public keys) stored locally. If an identifier is found, the client can establish the connection. If no identifier is found, the client can prompt the user to determine if the client should trust the identifier.

TOFU is used in the SSH protocol, in `Strict-Transport-Security` (HSTS) where a browser will obey the redirection rule.

See also
--------

* Wikipedia: TOFU
OTA
===

*Over The Air* (**OTA**) refers to automatic updating of software on connected devices from a central server. All device owners receiving a given set of updates are on the same "channel", and each device often can access several channels (e.g. for production or engineering builds).

See also
--------

* Over-the-air programming on Wikipedia
Speculative parsing
===================

Traditionally in browsers the HTML parser ran on the main thread and was blocked after a `</script>` tag until the script has been retrieved from the network and executed. Some HTML parser, such as Firefox since Firefox 4, support speculative parsing off of the main thread. It parses ahead while scripts are being downloaded and executed. The HTML parser starts speculative loads for scripts, style sheets and images it finds ahead in the stream and runs the HTML tree construction algorithm speculatively. The upside is that when a speculation succeeds, there's no need to reparse the part of the incoming file that was already scanned for scripts, style sheets and images. The downside is that there's more work lost when the speculation fails.

This document helps you avoid the kind of things that make speculation fail and slow down the loading of your page.

To make speculative loads of linked scripts, style sheets and images successful, avoid `document.write`. If you use a `<base>` element to override the base URI of your page, put the element in the non-scripted part of the document. Don't add it via `document.write()` or `document.createElement`.

Avoiding losing tree builder output
-----------------------------------

Speculative tree building fails when `document.write()` changes the tree builder state such that the speculative state after the `</script>` tag no longer holds when all the content inserted by `document.write()` has been parsed. However, only unusual uses of `document.write()` cause trouble. Here are the things to avoid:

* Don't write unbalanced trees. `<script>document.write("<div>");</script>` is bad. `<script>document.write("<div></div>");</script>` is OK.
* Don't write an unfinished token. `<script>document.write("<div></div");</script>` is bad.
* Don't finish your writing with a carriage return. `<script>document.write("Hello World!\r");</script>` is bad. `<script>document.write("Hello World!\n");</script>` is OK.
* Note that writing balanced tags may cause other tags to be inferred in a way that makes the write unbalanced. E.g. `<script>document.write("<div></div>");</script>` inside the `head` element will be interpreted as `<script>document.write("</head><body><div></div>");</script>` which is unbalanced.
* Don't format part of a table. `<table><script>document.write("<tr><td>Hello World!</td></tr>");</script></table>` is bad.
FTU
===

FTU (First Time Use) is the app that loads when you run a newly-installed version of Gecko on a Firefox OS device.

You can use FTU to set many important options (e.g. timezone, Wi-Fi details, default language, importing contacts), or take the "Phone Tour" to find out more about your device.
Unix time
=========

Unix time is a method to represent a timestamp, and is usually defined as the number of seconds since the beginning of the Unix epoch, which is January 1st, 1970, at midnight (UTC). Leap seconds are ignored.

On the web platform, Unix time is used for timestamps, and is given as the number of milliseconds since the beginning of the Unix epoch.

See also
--------

* Unix time on Wikipedia
* Leap second on Wikipedia
Viewport
========

A viewport represents a polygonal (normally rectangular) area in computer graphics that is currently being viewed. In web browser terms, it refers to the part of the document you're viewing which is currently visible in its window (or the screen, if the document is being viewed in full screen mode). Content outside the viewport is not visible onscreen until scrolled into view.

The portion of the viewport that is currently visible is called the **visual viewport**. This can be smaller than the layout viewport, such as when the user has pinched-zoomed. The layout viewport remains the same, but the visual viewport became smaller.

See also
--------

* Visual Viewport API
* Viewport on Wikipedia
* A tale of two viewports (Quirksmode)
* Visual viewport in the MDN Glossary
* Layout viewport in the MDN Glossary
Sloppy mode
===========

ECMAScript 5 and later let scripts opt in to a new strict mode, which alters the semantics of JavaScript in several ways to improve its resiliency and which make it easier to understand what's going on when there are problems.

The normal, non-strict mode of JavaScript is sometimes referred to as **sloppy mode**. This isn't an official designation, but you are likely to come across it if you spend time doing serious JavaScript code.

See also
--------

* "Strict Mode" in chapter 7 ("JavaScript Syntax") in the book Speaking *JavaScript*.
PNG
===

**PNG** (Portable Network Graphics) is a graphics file format that supports lossless data compression.

See also
--------

* PNG on Wikipedia
SDK (Software Development Kit)
==============================

An **SDK** (**Software Development Kit**) is an integrated collection of tools that a developer can use to create software for a specific framework, operating system, or other platform. An SDK can include:

* An editor
* A compiler
* A debugger
* An emulator or simulator, if the target platform is different from the platform used to create the program.
* Tools to help test and package the program for distribution.

SDKs are usually provided by the owner of a software platform, to support developers targeting the platform. For example, Google provides an Android SDK for developers writing Android apps.

In many respects, the developer tools built into modern web browsers provide a similar function for web developers.
IPv6
====

**IPv6** is the current version of the communication protocol underlying the Internet. Slowly IPv6 is replacing IPv4, among other reasons because IPv6 allows for many different IP addresses.

See also
--------

* IPv6 on Wikipedia
Whitespace
==========

**Whitespace** refers to characters which are used to provide horizontal or vertical space between other characters. Whitespace is often used to separate tokens in HTML, CSS, JavaScript, and other computer languages.

Whitespace characters and their usage vary among languages.

In HTML
-------

The Infra Living Standard defines five characters as "ASCII whitespace": U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, and U+0020 SPACE.

In JavaScript
-------------

The ECMAScript Language Specification defines several Unicode code points as "white space": U+0009 CHARACTER TABULATION <TAB>, U+000B LINE TABULATION <VT>, U+000C FORM FEED <FF>, U+0020 SPACE <SP>, U+00A0 NO-BREAK SPACE <NBSP>, U+FEFF ZERO WIDTH NO-BREAK SPACE <ZWNBSP>, and any other Unicode "Space\_Separator" code points <USP>.

See also
--------

* Whitespace character (Wikipedia)
* How whitespace is handled by HTML, CSS, and in the DOM
* `white-space`
* Specifications
    + ASCII whitespace spec
    + ECMAScript Language Specification
* Glossary
    1. Character
GZip compression
================

gzip is a file format used for file compression and decompression. It is based on the Deflate algorithm that allows files to be made smaller in size which allows for faster network transfers. gzip is commonly supported by web servers and modern browsers, meaning that servers can automatically compress files with gzip before sending them, and browsers can uncompress files upon receiving them.

See also
--------

* The gzip home page
* gzip on Wikipedia
LTR (Left To Right)
===================

**LTR** (**Left To Right**) is a locale property indicating that text is written from left to right. For example, the `en-US` locale (for US English) specifies left-to-right.

Most Western languages, as well as many others around the world, are written LTR.

The opposite of LTR, RTL (Right To Left) is used in other common languages, including Arabic (`ar`) and Hebrew (`he`).

See also
--------

* MDN Web Docs Glossary
    + locale
    + Localization
    + LTR
    + RTL
* HTML global attributes
    + dir
    + lang
* CSS
    + `:dir`
    + `direction`
    + `unicode-bidi`
    + `writing-mode`
Stacking context
================

**Stacking context** refers to how elements on a webpage appear to sit on top of other elements, just as you can arrange index cards on your desk to lie side-by-side or overlap each other.

See also
--------

* Explanation and example of the stacking context
P2P
===

P2P (Peer-to-peer) is a computer networking architecture in which all participating nodes (*peers*) have equal privileges and share the workload. P2P differs from a client-server network architecture, where multiple *client* nodes connect to centralized *servers* for services. P2P is commonly found in Blockchain Applications.

See also
--------

* P2P on Wikipedia
UI
==

**User Interface** (UI) is anything that facilitates the interaction between a user and a machine. In the world of computers, it can be anything from a keyboard, a joystick, a screen or a program. In case of computer software, it can be a command-line prompt, a webpage, a user input form, or the front-end of any application.

See also
--------

* User interface on Wikipedia
* Front end development on Wikipedia
CSP
===

A CSP (Content Security Policy) is used to detect and mitigate certain types of website related attacks like Cross-site\_scripting, clickjacking and data injections.

The implementation is based on an HTTP header called `Content-Security-Policy`.

See also
--------

* Content Security Policy on Wikipedia
* Content Security Policy documentation on MDN
OWASP
=====

**OWASP** (Open Web Application Security Project) is a non-profit organization and worldwide network that works for security in Free Software, especially on the Web.

See also
--------

* Official website
Flex Container
==============

A flexbox layout is defined using the `flex` or `inline-flex` values of the `display` property on the parent item. This element then becomes a **flex container**, and each one of its children becomes a flex item.

A value of `flex` causes the element to become a block level flex container, and `inline-flex` an inline level flex container. These values create a **flex formatting context** for the element, which is similar to a block formatting context in that floats will not intrude into the container, and the margins on the container will not collapse with those of the items.

See also
--------

### Property reference

* `align-content`
* `align-items`
* `flex`
* `flex-direction`
* `flex-flow`
* `flex-wrap`
* `justify-content`
### Further reading

* CSS Flexbox Guide: *Basic Concepts of Flexbox*
* CSS Flexbox Guide: *Aligning items in a flex container*
* CSS Flexbox Guide: *Mastering wrapping of flex items*
* Firefox Developer Tools > How to: *CSS Flexbox Inspector: Examine Flexbox layouts*
Type
====

**Type** is a characteristic of a value affecting what kind of data it can store, and the structure that the data will adhere to. For example, a boolean Data Type can hold only a `true` or `false` value at any given time, whereas a string has the ability to hold a string or a sequence of characters, a number can hold numerical values of any kind, and so on.

A value's data type also affects the operations that are valid on that value. For example, a value of type number can be multiplied by another number, but not by a string - even if that string contains *only* a number, such as the string "2".

Types also provides us with useful knowledge about the comparison between different values. Comparison between structured types is not always an easy assumption, as even if the previous data structure is the same, there could be inherited structures inside of the Prototype Chain.

If you are unsure of the type of a value, you can use the `typeof` operator.

See also
--------

* Data type on Wikipedia
* JavaScript data types
* Glossary
    + JavaScript
    + string
    + number
    + bigint
    + boolean
    + null
    + undefined
    + symbol
ICE
===

**ICE** (*Interactive Connectivity Establishment*) is a framework used by WebRTC (among other technologies) for connecting two peers, regardless of network topology (usually for audio and video chat). This protocol lets two peers find and establish a connection with one another even though they may both be using Network Address Translator (NAT) to share a global IP address with other devices on their respective local networks.

The framework algorithm looks for the lowest-latency path for connecting the two peers, trying these options in order:

1. Direct UDP connection (In this case—and only this case—a STUN server is used to find the network-facing address of a peer)
2. Direct TCP connection, via the HTTP port
3. Direct TCP connection, via the HTTPS port
4. Indirect connection via a relay/TURN server (if a direct connection fails, e.g., if one peer is behind a firewall that blocks NAT traversal)
See also
--------

* WebRTC, the principal web-related protocol which uses ICE
* WebRTC protocols
* RFC 8445, the IETF specification for ICE
* `RTCIceCandidate`, the interface representing an ICE candidate
Symmetric-key cryptography
==========================

Symmetric-key cryptography is a term used for cryptographic algorithms that use the same key for encryption and for decryption. The key is usually called a "symmetric key" or a "secret key".

This is usually contrasted with public-key cryptography, in which keys are generated in pairs and the transformation made by one key can only be reversed using the other key.

Symmetric-key algorithms should be secure when used properly and are highly efficient, so they can be used to encrypt large amounts of data without having a negative effect on performance.

Most symmetric-key algorithms currently in use are block ciphers: this means that they encrypt data one 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.

See also
--------

* MDN Web Docs Glossary
    + Block cipher mode of operation
    + Cryptography
    + Cryptographic hash function
    + Symmetric-key cryptography
Crawler
=======

A web crawler is a program, often called a bot or robot, which systematically browses the Web to collect data from webpages. Typically search engines (e.g. Google, Bing, etc.) use crawlers to build indexes.

See also
--------

* Web crawler on Wikipedia
* Search engine (Glossary)
Ink overflow
============

The **ink overflow** of a box refers to the part of the box and its contents that creates a visual effect outside of the box's border box. Being visual only, ink overflow does not affect layout as it has no impact on box model properties.

Ink overflow is the overflow of painting effects such as box shadows, border images, text decoration, outlines, etc. that do not affect layout or otherwise extend the scrollable overflow area. Ink overflow is also the overhanging of glyphs, such as ascenders and descenders extending outside the em box.

As replaced elements always establish an independent formatting context, any overflow of replaced content is always ink overflow (as opposed to scrollable overflow).

See also
--------

* CSS overflow module
Global scope
============

In a programming environment, the *global scope* is the scope that contains, and is visible in, all other scopes.

In client-side JavaScript, the global scope is generally the web page inside which all the code is being executed.

See also
--------

* Introduction to variable scope in JavaScript
* Scope on Wikipedia