aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/templates/partials/integrations/analytics/google.html
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2023-10-07 06:48:07 +0800
committer简律纯 <i@jyunko.cn>2023-10-07 06:48:07 +0800
commit991fd7a6d67ee017c57beaaa21fc31c4bee7944d (patch)
treee895202203fcaa50b0052f60ef6fc7d6d2928cf9 /src/templates/partials/integrations/analytics/google.html
parentd62900046bb6f754a8e6e7e670a66a90134055d9 (diff)
downloadinfini-991fd7a6d67ee017c57beaaa21fc31c4bee7944d.tar.gz
infini-991fd7a6d67ee017c57beaaa21fc31c4bee7944d.zip
feat(version): versions
Diffstat (limited to 'src/templates/partials/integrations/analytics/google.html')
-rw-r--r--src/templates/partials/integrations/analytics/google.html97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/templates/partials/integrations/analytics/google.html b/src/templates/partials/integrations/analytics/google.html
new file mode 100644
index 00000000..a9fa37d9
--- /dev/null
+++ b/src/templates/partials/integrations/analytics/google.html
@@ -0,0 +1,97 @@
+<!--
+ Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ IN THE SOFTWARE.
+-->
+
+<!-- Determine analytics property -->
+{% if config.extra.analytics %}
+ {% set property = config.extra.analytics.property | d("", true) %}
+{% endif %}
+
+<!-- Integrate with Google Analytics 4 -->
+<script id="__analytics">
+ function __md_analytics() {
+ window.dataLayer = window.dataLayer || []
+ function gtag() { dataLayer.push(arguments) }
+
+ /* Set up integration and send page view */
+ gtag("js", new Date())
+ gtag("config", "{{ property }}")
+
+ /* Register event handlers after documented loaded */
+ document.addEventListener("DOMContentLoaded", function() {
+
+ /* Set up search tracking */
+ if (document.forms.search) {
+ var query = document.forms.search.query
+ query.addEventListener("blur", function() {
+ if (this.value)
+ gtag("event", "search", { search_term: this.value })
+ })
+ }
+
+ /* Set up feedback, i.e. "Was this page helpful?" */
+ document$.subscribe(function() {
+ var feedback = document.forms.feedback
+ if (typeof feedback === "undefined")
+ return
+
+ /* Send feedback to Google Analytics */
+ for (var button of feedback.querySelectorAll("[type=submit]")) {
+ button.addEventListener("click", function(ev) {
+ ev.preventDefault()
+
+ /* Retrieve and send data */
+ var page = document.location.pathname
+ var data = this.getAttribute("data-md-value")
+ gtag("event", "feedback", { page, data })
+
+ /* Disable form and show note, if given */
+ feedback.firstElementChild.disabled = true
+ var note = feedback.querySelector(
+ ".md-feedback__note [data-md-value='" + data + "']"
+ )
+ if (note)
+ note.hidden = false
+ })
+
+ /* Show feedback */
+ feedback.hidden = false
+ }
+ })
+
+ /* Send page view on location change */
+ location$.subscribe(function(url) {
+ gtag("config", "{{ property }}", {
+ page_path: url.pathname
+ })
+ })
+ })
+
+ /* Create script tag */
+ var script = document.createElement("script")
+ script.async = true
+ script.src = "https://www.googletagmanager.com/gtag/js?id={{ property }}"
+
+ /* Inject script tag */
+ var container = document.getElementById("__analytics")
+ container.insertAdjacentElement("afterEnd", script)
+ }
+</script>