diff --git a/.gitignore b/.gitignore index ad4754cd5e..c300c925e6 100755 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,4 @@ Gemfile.lock /.bundle .jekyll-metadata *ads.txt.bkp* - +.sass-cache diff --git a/.sass-cache/3566244f41d72698175d1ae4f088bd2e3dff2559/main.scssc b/.sass-cache/3566244f41d72698175d1ae4f088bd2e3dff2559/main.scssc deleted file mode 100644 index 76fc24b01a..0000000000 Binary files a/.sass-cache/3566244f41d72698175d1ae4f088bd2e3dff2559/main.scssc and /dev/null differ diff --git a/.sass-cache/41c54059954d6ed385311837ab9d3a08e3784288/main.scssc b/.sass-cache/41c54059954d6ed385311837ab9d3a08e3784288/main.scssc deleted file mode 100644 index 3e75ee75f1..0000000000 Binary files a/.sass-cache/41c54059954d6ed385311837ab9d3a08e3784288/main.scssc and /dev/null differ diff --git a/.sass-cache/5eb7d1ad8f5d191bdc09ff706ecde9f0bb94342b/main.scssc b/.sass-cache/5eb7d1ad8f5d191bdc09ff706ecde9f0bb94342b/main.scssc deleted file mode 100644 index 487a2b9b62..0000000000 Binary files a/.sass-cache/5eb7d1ad8f5d191bdc09ff706ecde9f0bb94342b/main.scssc and /dev/null differ diff --git a/.sass-cache/a8ae1fbf8fe3cf0ae44282e4f927a25624204c54/main.scssc b/.sass-cache/a8ae1fbf8fe3cf0ae44282e4f927a25624204c54/main.scssc deleted file mode 100644 index 6db4f74c3a..0000000000 Binary files a/.sass-cache/a8ae1fbf8fe3cf0ae44282e4f927a25624204c54/main.scssc and /dev/null differ diff --git a/.sass-cache/e54a2b524845b6c18a57dadf1796966da31d0138/main.scssc b/.sass-cache/e54a2b524845b6c18a57dadf1796966da31d0138/main.scssc deleted file mode 100644 index b3701f0ddf..0000000000 Binary files a/.sass-cache/e54a2b524845b6c18a57dadf1796966da31d0138/main.scssc and /dev/null differ diff --git a/_assets/sass/components/_bidder-list.scss b/_assets/sass/components/_bidder-list.scss new file mode 100644 index 0000000000..55db573e20 --- /dev/null +++ b/_assets/sass/components/_bidder-list.scss @@ -0,0 +1,36 @@ +.pb-content { + .bidder-filter { + padding: 10px 15px; + border: 1px solid #b3c1cc; + background-color: rgba(236, 243, 245, 0.35); + + &:focus { + outline: none; + } + } + + .c-bidder-list-group { + h4 { + color: #797f90; + font-size: 19px; + font-weight: 700; + } + } + + .c-bidder-list { + padding-left: 0; + columns: 2; + + li { + padding-bottom: 5px; + + &::before { + content: none !important; + } + } + + a { + text-decoration: none; + } + } +} diff --git a/_assets/sass/components/_download-form.scss b/_assets/sass/components/_download-form.scss new file mode 100644 index 0000000000..19ebe7fb55 --- /dev/null +++ b/_assets/sass/components/_download-form.scss @@ -0,0 +1,17 @@ +.download-form { + margin-bottom: 20px; + + > .row { + flex-flow: column; + } + + .adapters { + display: flex; + flex-flow: row wrap; + } +} + +.download-form__modal, +.modal-backdrop.fade { + opacity: 0; +} diff --git a/_assets/sass/components/_search.scss b/_assets/sass/components/_search.scss new file mode 100644 index 0000000000..0909593a1b --- /dev/null +++ b/_assets/sass/components/_search.scss @@ -0,0 +1,44 @@ +.algolia-autocomplete { + .algolia-docsearch-suggestion--category-header { + display: none !important; + } +} + +.c-search { + position: relative; + + @include media('<=990px') { + float: left; + } + + &::after { + @include position(absolute, 50% 10px null null); + @include size(20px); + transform: translateY(-50%); + background: url(/assets/images/icons/search-icon2.svg); + background-size: cover; + content: ''; + } + + input[type="search"] { + @include padding(null 8px); + border: 1px solid rgba(0, 0, 0, 0.125); + max-width: 120px; + transition: max-width 200ms ease-in-out; + + &:hover, &:focus { + max-width: 200px; + outline: none; + } + + /* clears the ‘X’ from Internet Explorer */ + &::-ms-clear { display: none; width : 0; height: 0; } + &::-ms-reveal { display: none; width : 0; height: 0; } + + /* clears the ‘X’ from Chrome */ + &::-webkit-search-decoration, + &::-webkit-search-cancel-button, + &::-webkit-search-results-button, + &::-webkit-search-results-decoration { display: none; } + } +} diff --git a/_assets/sass/main.scss b/_assets/sass/main.scss index dc657f9167..29af1a2147 100644 --- a/_assets/sass/main.scss +++ b/_assets/sass/main.scss @@ -15,6 +15,7 @@ @import 'vendor/bootstrap'; @import 'vendor/bourbon'; @import 'vendor/include-media'; +@import 'vendor/awesomplete'; // Base Styles @import 'base/base'; @@ -32,6 +33,9 @@ @import 'components/pb'; @import 'components/social-media'; @import 'components/table'; +@import 'components/download-form'; +@import 'components/bidder-list'; +@import 'components/search'; // Pages @import 'pages/home'; diff --git a/_assets/sass/vendor/_awesomplete.scss b/_assets/sass/vendor/_awesomplete.scss new file mode 100644 index 0000000000..c4983e5ea6 --- /dev/null +++ b/_assets/sass/vendor/_awesomplete.scss @@ -0,0 +1,27 @@ +@import '../../node_modules/awesomplete/awesomplete.base.css'; + +.awesomplete { + > ul { + background: #333; + padding: 0 !important; + + > li { + padding: 10px 15px; + border-bottom: 1px solid #707070; + color: #efefef; + font-size: 17px; + + &:last-child { + border-bottom: 0; + } + + &[aria-selected="true"] { + background-color: #ff6f00; + } + + &::before { + content: none !important; + } + } + } +} diff --git a/_assets/sass/vendor/_bootstrap.scss b/_assets/sass/vendor/_bootstrap.scss index 405a18ded2..0d44b0260c 100644 --- a/_assets/sass/vendor/_bootstrap.scss +++ b/_assets/sass/vendor/_bootstrap.scss @@ -13,4 +13,5 @@ @import "../../../node_modules/bootstrap/scss/card"; @import "../../../node_modules/bootstrap/scss/code"; @import "../../../node_modules/bootstrap/scss/alert"; +@import "../../../node_modules/bootstrap/scss/modal"; @import "../../../node_modules/bootstrap/scss/utilities"; diff --git a/_config.yml b/_config.yml index 178f1e0d4b..8f03e0bebe 100755 --- a/_config.yml +++ b/_config.yml @@ -85,7 +85,7 @@ collections: port: 8080 -exclude: ['README.md', 'LICENSE', 'bower.json', 'Gemfile.lock', 'Gemfile', 'vendor', 'node_modules', '_assets', 'mix-manifest.json', 'webpack.mix.js'] +exclude: ['README.md', 'LICENSE', 'bower.json', 'Gemfile.lock', 'Gemfile', 'vendor', 'node_modules', '_assets', 'mix-manifest.json', 'webpack.mix.js', 'find-ungrouped-bidders.sh' ] keep_files: - assets/css/main-bundle.css diff --git a/_data/sidebar.yml b/_data/sidebar.yml index 0e1296b51f..8219b1f587 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -460,7 +460,7 @@ - sbSecId: 1 title: Native Ads - link: /dev-docs/show-native-ads.html + link: /prebid/native-implementation.html isHeader: 0 isSectionHeader: 0 sectionTitle: @@ -506,6 +506,14 @@ sectionTitle: subgroup: 8 +- sbSecId: 1 + title: Timeouts + link: /features/timeouts.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 8 + #--------------Prebid Mobile--------------| @@ -625,6 +633,14 @@ sectionTitle: subgroup: 1 +- sbSecId: 2 + title: In App Native Ad Unit + link: /prebid-mobile/pbm-api/ios/pbm-native-inapp-ios.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 1 + - sbSecId: 2 title: Video Outstream Ad Unit link: /prebid-mobile/pbm-api/ios/pbm-videooutstreamadunit-ios.html @@ -738,6 +754,14 @@ sectionTitle: subgroup: 2 +- sbSecId: 2 + title: In App Native Ad Unit + link: /prebid-mobile/pbm-api/android/pbm-native-inapp-android.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 2 + - sbSecId: 2 title: Banner Interstitial Ad Unit link: /prebid-mobile/pbm-api/android/pbm-bannerinterstitialadunit-android.html @@ -754,6 +778,14 @@ sectionTitle: subgroup: 2 +- sbSecId: 2 + title: Video Intream Ad Unit + link: /prebid-mobile/pbm-api/android/pbm-video-instream-android.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 2 + - sbSecId: 2 title: Video Interstitial Ad Unit link: /prebid-mobile/pbm-api/android/pbm-videointerstitialadunit-android.html @@ -951,7 +983,7 @@ subgroup: 0 - sbSecId: 3 - title: 'Guide to Ad Manager' + title: 'Guide to Prebid in Ad Manager' link: /adops/step-by-step.html isHeader: 0 isSectionHeader: 0 @@ -959,7 +991,7 @@ subgroup: 0 - sbSecId: 3 - title: 'Setting up for AMP' + title: 'Setting up for AMP in GAM' link: /adops/setting-up-prebid-for-amp-in-dfp.html isHeader: 0 isSectionHeader: 0 @@ -967,7 +999,7 @@ subgroup: 0 - sbSecId: 3 - title: 'Setting up Multi-Format' + title: 'Setting up Multi-Format in GAM' link: /adops/setting-up-prebid-multi-format-in-dfp.html isHeader: 0 isSectionHeader: 0 @@ -975,15 +1007,15 @@ subgroup: 0 - sbSecId: 3 - title: 'Setting up Native (Alpha)' - link: /adops/setting-up-prebid-native-in-dfp.html + title: 'Setting up Native in GAM' + link: /adops/gam-native.html isHeader: 0 isSectionHeader: 0 sectionTitle: subgroup: 0 - sbSecId: 3 - title: 'Setting up Video' + title: 'Setting up Video in GAM' link: /adops/setting-up-prebid-video-in-dfp.html isHeader: 0 isSectionHeader: 0 @@ -991,7 +1023,7 @@ subgroup: 0 - sbSecId: 3 - title: 'Setting up Long-Form Video' + title: 'Setting up Long-Form Video in GAM' link: /adops/setting-up-prebid-ott-video-in-gam.html isHeader: 0 isSectionHeader: 0 @@ -1583,14 +1615,6 @@ sectionTitle: subgroup: 0 -- sbSecId: 5 - title: 'Managed Solutions' - link: /prebid-server/hosting/hosted-servers.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 0 - - sbSecId: 5 title: 'Hosting Your Own PBS' link: /prebid-server/hosting/pbs-hosting.html @@ -1993,3 +2017,32 @@ isSectionHeader: 0 sectionTitle: subgroup: 0 + + #-------------- Tools --------------| + +- sbSecId: 8 + title: + link: + isHeader: 0 + isSectionHeader: 1 + sectionTitle: Tools + sectionId: tools + subgroup: 1000 + sbCollapseId: tools + +- sbSecId: 8 + title: + link: + isHeader: 1 + headerId: toolsinvis + isSectionHeader: + sectionTitle: + subgroup: 0 + +- sbSecId: 8 + title: Line Item Manager + link: /tools/line-item-manager.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 diff --git a/_includes/adops/adops-gam-setup.html b/_includes/adops/adops-gam-setup.html index f5c9eee240..35db7cdf1c 100644 --- a/_includes/adops/adops-gam-setup.html +++ b/_includes/adops/adops-gam-setup.html @@ -1,5 +1,5 @@
- +

Step By Step Guide to Google Ad Manager Setup

@@ -28,6 +28,13 @@

(Sorry, YouTube videos aren't available with your cookie privacy settings.)< + +

Step 1. Add a line item

In Google Ad Manager, create a new order with a $0.50 line item.

@@ -76,7 +83,7 @@

Step 2. Add a Creative

Copy this creative code snippet and paste it into the Code snippet box.

-
diff --git a/_includes/send-all-bids-keyword-targeting.md b/_includes/send-all-bids-keyword-targeting.md index ff36d33d72..f8f977684d 100644 --- a/_includes/send-all-bids-keyword-targeting.md +++ b/_includes/send-all-bids-keyword-targeting.md @@ -1,9 +1,4 @@ -{% capture infoNote %} **Important:** Google Ad Manager has a key-value key character [limit](https://support.google.com/dfp_premium/answer/1628457?hl=en#Key-values) of up to **20 characters**. Some of the keys without truncation will exceed 20 chars. Prebid.js automatically truncates the key length to 20 characters. For example, `hb_adid_longBidderName` is truncated to `hb_adid_longBidderNa` (`me` is truncated). Note that the key is case-sensitive. To get the exact key-value keys for each bidder, find them at [Bidder Params](/dev-docs/bidders.html). -{% endcapture %} - -{% include alerts/alert_note.html content=infoNote %} - {: .table .table-bordered .table-striped } | Default Key | Scope | Description | Example | @@ -11,4 +6,3 @@ | `hb_pb_BIDDERCODE` | Required | The price bucket. Used by the line item to target. Case sensitive and truncated to 20 chars. The `BIDDERCODE` is documented at [Bidder Params](/dev-docs/bidders.html). | `hb_pb_rubicon` = `2.10` | | `hb_adid_BIDDERCODE` | Required | The ad Id. Used by the ad server creative to render ad. Case sensitive and truncated to 20 chars. The `BIDDERCODE` is documented at [Bidder Params](/dev-docs/bidders.html). | `hb_adid_longBidderNa` = `234234` | | `hb_size_BIDDERCODE` | Optional | This is not required for adops. Case sensitive and truncated to 20 chars. | `hb_size_appnexus` = `300x250` | - diff --git a/_layouts/analytics.html b/_layouts/analytics.html new file mode 100644 index 0000000000..45e91208b1 --- /dev/null +++ b/_layouts/analytics.html @@ -0,0 +1,64 @@ +{% include head.html %} + +{% include nav.html %} + + +
+ +
+ + + +
+
+ + {% if page.is_full_screen %} + {{content}} + {% else %} + +
+ +
+
+ +

{{ page.title }}

+ +

Features

+ + {{content}} + +
+ +
+ +
+ + {% endif %} + + +
+ + +
+
+ +
+ {% if page.title != "Credits" %} + {% if page.layout != "home" %} + {% include footer.html %} + {% endif %} + {% endif %} + + + diff --git a/_layouts/bidder.html b/_layouts/bidder.html index eca349615e..35f39c9de1 100644 --- a/_layouts/bidder.html +++ b/_layouts/bidder.html @@ -29,10 +29,11 @@
-
+
+

Back to Bidders

-

{{ page.title }}

+

{{ page.title }}

{% if page.s2s_only == true %}
@@ -42,7 +43,7 @@

Note:

This is a S2S adapter only.

Features

- +
@@ -51,23 +52,53 @@

Features

- - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Bidder Code {{ page.biddercode }}
Media Typesdisplay{% if page.media_types contains 'video' %}, video{% endif %}{% if page.media_types contains 'native' %}, native{% endif %}GDPR Support{% unless page.media_types contains 'no-display' %}display{% if page.media_types contains 'video' %},{% endif %}{% endunless %}{% if page.media_types contains 'video' %} video{% endif %}{% if page.media_types != "no-display, native" and page.media_types contains 'native' %}, native{% endif %}{% if page.media_types == "no-display, native" %}native{% endif %}GDPR TCF Support {% if page.gdpr_supported == true %}yes{% else %}no{% endif %}
User IDs {% if page.userIds and page.userIds != '' %}{{page.userIds}}{% else %}none{% endif %}USP/CCPA Support{% if page.usp_supported == true %}yes{% else %}no{% endif %}
Supply Chain Support{% if page.schain_supported == true %}yes{% else %}no{% endif %} COPPA Support {% if page.coppa_supported == true %}yes{% else %}no{% endif %}
Demand Chain Support{% if page.dchain_supported == true %}yes{% else %}no{% endif %}Safeframes OK{% if page.safeframes_ok == false %}no{% elsif page.safeframes_ok == true %}yes{% else %}check with bidder{% endif %}
Supports Deals{% if page.bidder_supports_deals == false %}no{% elsif page.bidder_supports_deals == true %}yes{% else %}check with bidder{% endif %}Prebid.js Adapteryes
IAB GVL ID{% if page.gvl_id %}{{page.gvl_id}}{% else %}check with bidder{% endif %}Prebid Server Adapter{% if page.pbs == true %}yes{% else %}no{% endif %}
Floors Module Support{% if page.getFloor == true %}yes{% else %}no{% endif %}

"Send All Bids" Ad Server Keys

These are the bidder-specific keys that would be targeted within GAM in a Send-All-Bids scenario. GAM truncates keys to 20 characters. - +
@@ -83,19 +114,21 @@

"Send All Bids" Ad Server Keys

+ + + + +
{{ "hb_pb_" | append: page.biddercode | slice: 0,20 }} {{ "hb_bidder_" | append: page.biddercode | slice: 0,20 }} {{ "hb_cache_id_" | append: page.biddercode | slice: 0,20 }} {{ "hb_uuid_" | append: page.biddercode | slice: 0,20 }}
{{ "hb_cache_path_" | append: page.biddercode | slice: 0,20 }}{{ "hb_deal_" | append: page.biddercode | slice: 0,20 }}
{% if page.prevBiddercode %} This bidder previously had a bidder code of `{{ page.prevBiddercode }}`, but prefers new configurations to use `{{ page.biddercode }}`. {% endif %} - {% if page.bidder_supports_deals != false %} -

"Deal ID" Ad Server Key

- {{ "hb_deal_" | append: page.biddercode | slice: 0,20 }} - {% endif %} {{content}} +

Back to Bidders

{% if page.show_disqus %} @@ -123,8 +156,3 @@

"Deal ID" Ad Server Key

- - - - - diff --git a/_layouts/home.html b/_layouts/home.html index e8e12b035d..5faca70eda 100644 --- a/_layouts/home.html +++ b/_layouts/home.html @@ -9,7 +9,7 @@

Prebid Documentation

-

Welcome to the Prebid.org technical documentation portal. Here you will find the help you need to work with the Prebid.org family of products. Visit Prebid.org for general product overviews, blog updates, and additional information on membership and events.

+

Welcome to the Prebid.org technical documentation portal. Here you will find the help you need to work with the Prebid.org family of products. Visit Prebid.org for general product overviews, blog updates, and additional information on membership and events. If you're wondering what Prebid and Header Bidding are all about, check out Why Prebid?

@@ -165,5 +165,5 @@
Follow Us
- + {% include body-end.html %} diff --git a/adops/before-you-start.md b/adops/before-you-start.md index 6388405a29..cfd599506d 100644 --- a/adops/before-you-start.md +++ b/adops/before-you-start.md @@ -14,7 +14,7 @@ sbUUID: 3.2 Prebid products are designed to integrate with the ad ops line item configuration on the publisher's selected ad server. Whether using Prebid.js, Prebid Server or Prebid Mobile, bid targeting parameters are passed to the ad server. The ad server then attempts to match the targeting parameters to a preset line item. If successful, that line item is compared to other line items and if the Prebid bid wins the auction, the creative is returned to the web page or app for display. {% capture importantNote %} -This page assumes you have read [Getting Started with Prebid.js]({{site.baseurl}}/overview/getting-started.html), though it applies to Prebid SDK and Server as well. +This page assumes you have read [Getting Started with Prebid.js](/overview/getting-started.html), though it applies to Prebid SDK and Server as well. {% endcapture %} {% include alerts/alert_important.html content=importantNote %} @@ -29,14 +29,14 @@ The table below lists ad servers supported by Prebid and provides links to step {: .table .table-bordered .table-striped } | Server | Page | |--------------+-----------------------------------------------------------------------------------------------------------------------------------------| -| **Google Ad Manager** | [Step by step guide to Google Ad Manager setup]({{site.baseurl}}/adops/step-by-step.html) | -| | [Send all bids to the ad server]({{site.baseurl}}/adops/send-all-bids-adops.html) | -| | [Setting up Prebid for AMP in Google Ad Manager]({{site.baseurl}}/adops/setting-up-prebid-for-amp-in-dfp.html) | -| | [Setting up Prebid Video in Google Ad Manager]({{site.baseurl}}/adops/setting-up-prebid-video-in-dfp.html) | -| | [Setting up Prebid Native in Google Ad Manager]({{site.baseurl}}/adops/setting-up-prebid-native-in-dfp.html) | -| **AppNexus** | [Setting up Prebid with the AppNexus Publisher Ad Server]({{site.baseurl}}/adops/setting-up-prebid-with-the-appnexus-ad-server.html) | -| **Smart Ad Server** | [Setting up Prebid.js with Smart Ad Server]({{site.baseurl}}/adops/setting-up-prebidjs-with-Smart-Ad-Server.html) | -| **FreeWheel** | [FreeWheel Guide for Premium Long-Form Video]({{site.baseurl}}/adops/setting-up-prebid-video-in-freewheel.html) | +| **Google Ad Manager** | [Step by step guide to Google Ad Manager setup](/adops/step-by-step.html) | +| | [Send all bids to the ad server](/adops/send-all-bids-adops.html) | +| | [Setting up Prebid for AMP in Google Ad Manager](/adops/setting-up-prebid-for-amp-in-dfp.html) | +| | [Setting up Prebid Video in Google Ad Manager](/adops/setting-up-prebid-video-in-dfp.html) | +| | [Setting up Prebid Native in Google Ad Manager](/adops/gam-native.html) | +| **AppNexus** | [Setting up Prebid with the AppNexus Publisher Ad Server](/adops/setting-up-prebid-with-the-appnexus-ad-server.html) | +| **Smart Ad Server** | [Setting up Prebid.js with Smart Ad Server](/adops/setting-up-prebidjs-with-Smart-Ad-Server.html) | +| **FreeWheel** | [FreeWheel Guide for Premium Long-Form Video](/adops/setting-up-prebid-video-in-freewheel.html) | ## Decide on price bucket granularity @@ -125,6 +125,6 @@ Implementing header bidding requires much more collaboration with your dev team ## Related Topics -- [Getting Started with Prebid.js]({{site.baseurl}}/overview/getting-started.html): How Prebid.js works at a high level. -- [What is Prebid?]({{site.baseurl}}/overview/intro.html): Overview and history of header bidding and Prebid.js. -+ [Docs by Format]({{site.baseurl}}/dev-docs/docs-by-format.html): Engineering and ad ops docs arranged by ad format (video, native, etc.). +- [Getting Started with Prebid.js](/overview/getting-started.html): How Prebid.js works at a high level. +- [What is Prebid?](/overview/intro.html): Overview and history of header bidding and Prebid.js. ++ [Docs by Format](/dev-docs/docs-by-format.html): Engineering and ad ops docs arranged by ad format (video, native, etc.). diff --git a/adops/gam-native.md b/adops/gam-native.md new file mode 100644 index 0000000000..f8e81e65cd --- /dev/null +++ b/adops/gam-native.md @@ -0,0 +1,226 @@ +--- +layout: page_v2 +title: Setting up Prebid Native in Google Ad Manager +head_title: Setting up Prebid Native in Google Ad Manager +description: Setting up Prebid Native in Google Ad Manager +sidebarType: 3 +--- + +# Setting up Prebid Native in Google Ad Manager +{: .no_toc} + +This page describes how to set up native creatives in Google Ad Manager for use with Prebid.js. + +For more information about Google Ad Manager native ad setup, see the [Google Ad Manager native ads documentation](https://support.google.com/admanager/answer/6366845). + +{% capture version2 %} +This document replaces the [original documentation](/adops/setting-up-prebid-native-in-dfp.html) that described how to set up Prebid.js native for GAM. That documentation is still valid, but the approach described here is better in every way, so we recommend that all new and revised implementations follow this approach. Here are the key differences between the original approach and the preferred approach described in this document: +{::nomarkdown} +