Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
636f30a
DOC: Split the PMP page into a section and document the create last flow
jwrosewell Sep 15, 2026
e992dfe
DOC: Say that the added client script carries the page's nonce
jwrosewell Sep 15, 2026
5233c70
DOC: Warn that the third party cookie result is a string, not a boolean
jwrosewell Sep 15, 2026
a5bd790
DOC: Keep the blocked browsers note with the paragraph it belongs to
jwrosewell Sep 15, 2026
8045860
DOC: The platform waits for a client script tag rather than adding a …
jwrosewell Sep 15, 2026
6b43867
DOC: Say tag in the heading too, since tag against object is the point
jwrosewell Sep 15, 2026
40539e5
Align the cloud and 51Did pages with what the service now does
jwrosewell Sep 15, 2026
a794ae2
DOC: Ask for IsGdpr by its qualified name, and say it is a default
jwrosewell Sep 15, 2026
71c0b5a
DOC: The second card waits only for a client script still finishing
jwrosewell Sep 15, 2026
53e72aa
DOC: Match the data-timeout cap and the waiting cards to the platform
jwrosewell Sep 15, 2026
8205b3a
DOC: The second card waits for the cookie decision alone, for a fixed…
jwrosewell Sep 15, 2026
4b3b064
DOC: State the three second wait before the second card, and remove d…
jwrosewell Sep 15, 2026
caf8241
CI: Pin the drift check to the commit the bundled template came from
jwrosewell Sep 15, 2026
f26bd7e
Revert the commit that carried another change's message
jwrosewell Sep 15, 2026
6239119
DOC: Say an absent action URL is silent, name the three IsGdpr reason…
jwrosewell Sep 15, 2026
fa7df9f
DOC: Compare the platform with a consent management platform, feature…
jwrosewell Sep 15, 2026
9c3100f
DOC: Link the comparison page from the wiring and preferences pages
jwrosewell Sep 15, 2026
0a891f1
DOC: State that the CMP ID is chosen daily, say why one is used at al…
jwrosewell Sep 15, 2026
b032413
DOC: Say plainly that a key without the 51Did licence creates only no…
jwrosewell Sep 15, 2026
80c1f0d
DOC: Add the comparison page link the preferences page was meant to c…
jwrosewell Sep 15, 2026
636ed21
DOC: Say who the source says checks a CMP ID, rather than where the c…
jwrosewell Sep 15, 2026
b12338f
DOC: Add a 51Did page for each consent signal, being the framework st…
jwrosewell Sep 15, 2026
42e2690
DOC: Read the identifier and the values beside it with onChange, not …
jwrosewell Sep 15, 2026
48e4b17
DOC: Render the mermaid diagram on the site, and drop six unused aliases
jwrosewell Sep 15, 2026
703079e
DOC: Say what a request with no usage actually gets back, which is no…
jwrosewell Sep 15, 2026
9696dde
DOC: Sharpen three paragraphs on the platform answer and the control …
jwrosewell Sep 15, 2026
004f3ff
Merge branch 'feature/create-last-g' into feature/create-last-g-signals
jwrosewell Sep 15, 2026
7b258dd
DOC: Correct the Prebid key property list and say what a shared prope…
jwrosewell Sep 15, 2026
897b4b6
DOC: Say that sharing cannot be undone from the dialog and how a visi…
jwrosewell Sep 15, 2026
4f9d745
DOC: Point every resource key link at the ready made list for the 51D…
jwrosewell Sep 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
src/graphs/*.gvdot diff
src/graphs/*.gvdot diff
docs/mermaid.min.js -text
1 change: 1 addition & 0 deletions docs/Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -1337,6 +1337,7 @@ HTML_EXTRA_FILES = examplegrabber.js \
images/icon-arrow-solid-right-mute.svg \
images/icon-arrow-solid-right-orange.svg \
images/icon-search.svg \
mermaid.min.js \
search51.js

# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
Expand Down
52 changes: 52 additions & 0 deletions docs/HEADER-NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,58 @@ from DoxyGen substitutions; eliminating the proxy's remaining canonical
/ hreflang / title rewrites needs a feature in the custom 51Degrees
DoxyGen build, not a template change.

## Why mermaid is served from this site and loaded only where it is needed

A fenced mermaid block in a page is written out by Doxygen 1.17.0 as
`<pre class="mermaid">` inside `<div class="mermaidgraph">`, and Doxygen
renders nothing itself, so without a library on the page the block shows
as a code listing. The first page to carry one is
`src/identifiers/pmp/index.md`, whose load process diagram is a mermaid
sequence, and the missing rendering was
[#239](https://github.com/51Degrees/documentation/issues/239).

**The library cannot come from a public content delivery network.**
51degrees.com sends a Content-Security-Policy whose `script-src` is
`'self'`, `https://*.archiebot.com`, `https://*.livewebinar.com`,
`https://cloud.51degrees.com/`, `'unsafe-eval'` and `'unsafe-inline'`,
read from the response headers of
`https://51degrees.com/documentation/index.html` on 15 September 2026. A
script from jsdelivr, cdnjs or unpkg is refused by the browser under that
policy, so it would draw the diagram on the gh-pages preview, which sets
no policy, and fail silently on the published site.

So `mermaid.min.js` is held in this repository, copied into the output by
`HTML_EXTRA_FILES`, and loaded from the page's own origin, which `'self'`
allows. The file is the mermaid 11.17.2 bundle from
`https://cdn.jsdelivr.net/npm/mermaid@11.17.2/dist/mermaid.min.js`, which
is one self-contained file with no dynamic imports, so nothing else has to
be copied beside it. Mermaid is published under the MIT licence and the
bundle carries its own licence notices. It is 3.5 MB on disk and about
960 KB on the wire once compressed, which is why the loader in
`header.html` looks for a diagram first and fetches nothing on a page
without one. The build's minifier skips any file already named `*.min.js`,
so the bundle passes through untouched.

The loader waits for `DOMContentLoaded`, because the header runs before
the body exists and there is nothing to look for yet, and then calls
`mermaid.run()` rather than relying on `startOnLoad`, which fires on an
event that has already passed by the time the script arrives. A diagram
that fails to draw is left as the text of the block, which is the
diagram's own source and is readable, so there is nothing to fall back to
and nothing to report.

Only this repository's Doxyfile copies the bundle. An API repository whose
page carried a mermaid block would ask for a file its own output does not
hold, and the block would stay a code listing, which is what happens
today, so add `mermaid.min.js` to that repository's `HTML_EXTRA_FILES`
when one of its pages needs a diagram.

Checked on 15 September 2026 by building the site with Doxygen 1.17.0, the
version CI downloads, and loading the generated page in Chromium. The
diagram drew as one SVG of 1024 by 1401 pixels, a page with no diagram
fetched the bundle zero times, and the diagram still drew when the
response carried the Content-Security-Policy above.

## Why these notes are not inline comments

A prior version had this rationale as `<!-- ... -->` blocks inside
Expand Down
27 changes: 27 additions & 0 deletions docs/header.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,33 @@
$treeview
$search
$mathjax
<!-- Mermaid diagrams. See HEADER-NOTES.md for why the library is served
from this site and loaded only where a page carries a diagram. -->
<script type="text/javascript">
(function () {
var loadMermaid = function () {
if (!document.querySelector('pre.mermaid, div.mermaid')) { return; }
var script = document.createElement('script');
script.src = '$relpath^mermaid.min.js';
script.onload = function () {
try {
window.mermaid.initialize({ startOnLoad: false });
window.mermaid.run();
} catch (e) {
// A diagram that fails to draw stays as the text of the block,
// which is the diagram's own source and is readable, so there is
// nothing to fall back to and nothing to report.
}
};
document.head.appendChild(script);
};
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', loadMermaid);
} else {
loadMermaid();
}
})();
</script>
</head>
<body class="l-docs-index p-doxygen">
<div class="l-index__content">
Expand Down
3,636 changes: 3,636 additions & 0 deletions docs/mermaid.min.js

Large diffs are not rendered by default.

11 changes: 6 additions & 5 deletions src/devicedetection/features/thirdpartycookies.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,19 +45,20 @@ The detection cookie uses specific attributes required for cross-site delivery i

# Properties

The following properties are available after detection. On the client side, these properties can be retrieved in the callback passed to `fod.complete`:
The following properties are available after detection. On the client side, these properties can be retrieved in the callback passed to `fod.onChange`, which is called each time the cloud's answers change, so the tested result reaches you in whichever response carries it:

```javascript
fod.complete(function(data) {
if (data.device.thirdpartycookiesenabled) {
console.log("Third-party cookies enabled: " + data.device.thirdpartycookiesenabled);
fod.onChange(function(data) {
var said = data.device && data.device.thirdpartycookiesenabled;
if (typeof said === "string") {
console.log("Third-party cookies enabled: " + said);
}
});
```

## ThirdPartyCookiesEnabled

A boolean value indicating whether third-party cookies are supported by the user's browser.
Text saying whether third-party cookies are supported by the user's browser. It is a string and not a boolean, so compare it with the values below rather than testing it for truth, because every non-empty string is truthy in JavaScript and `False` is a non-empty string.

| Value | Meaning |
|-------|---------|
Expand Down
Loading
Loading