From c21654ef2c90301ddd92ce116b3ca63ad2534f2f Mon Sep 17 00:00:00 2001 From: Zach Lasiuk Date: Fri, 4 Sep 2026 12:39:01 -0400 Subject: [PATCH 1/6] social card prototype w new branding --- tools/social_card_prototype/.gitignore | 2 + tools/social_card_prototype/fonts/.gitkeep | 0 tools/social_card_prototype/generate.py | 448 ++++++++++++++++++ .../learn-social-og-template.svg | 17 + tools/social_card_prototype/output.webp | Bin 0 -> 107184 bytes 5 files changed, 467 insertions(+) create mode 100644 tools/social_card_prototype/.gitignore create mode 100644 tools/social_card_prototype/fonts/.gitkeep create mode 100644 tools/social_card_prototype/generate.py create mode 100644 tools/social_card_prototype/learn-social-og-template.svg create mode 100644 tools/social_card_prototype/output.webp diff --git a/tools/social_card_prototype/.gitignore b/tools/social_card_prototype/.gitignore new file mode 100644 index 0000000000..d31b42517d --- /dev/null +++ b/tools/social_card_prototype/.gitignore @@ -0,0 +1,2 @@ +# Commercial fonts - do not commit +fonts/*.otf diff --git a/tools/social_card_prototype/fonts/.gitkeep b/tools/social_card_prototype/fonts/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tools/social_card_prototype/generate.py b/tools/social_card_prototype/generate.py new file mode 100644 index 0000000000..3c458cca2b --- /dev/null +++ b/tools/social_card_prototype/generate.py @@ -0,0 +1,448 @@ +from pathlib import Path +from io import BytesIO +import argparse +import base64 +import html + +import yaml +from PIL import Image, ImageChops +from playwright.sync_api import sync_playwright + + +# ------------------------------------------------------------ +# Configuration +# ------------------------------------------------------------ + +WIDTH = 1200 +HEIGHT = 630 + +# Rectangle in which the title is allowed to appear. +TITLE_X = 70 +TITLE_Y = 205 +TITLE_WIDTH = 800 +TITLE_HEIGHT = 250 + +MAX_FONT_SIZE = 60 +MIN_FONT_SIZE = 36 +FONT_WEIGHT = 500 +LINE_HEIGHT = 1.08 + +TEXT_ALIGN = "left" +VERTICAL_ALIGN = "start" + + +# ------------------------------------------------------------ +# Files +# ------------------------------------------------------------ + +BASE_DIR = Path(__file__).resolve().parent +REPO_ROOT = BASE_DIR.parents[1] + +SVG_PATH = BASE_DIR / "learn-social-og-template.svg" +TITLE_FONT_PATH = BASE_DIR / "fonts" / "Aeonik-Medium.otf" +META_FONT_PATH = BASE_DIR / "fonts" / "AeonikFono-Regular.otf" +OUTPUT_PATH = BASE_DIR / "output.webp" + +LEARNING_PATH_ROOT = REPO_ROOT / "content" / "learning-paths" +INSTALL_GUIDE_ROOT = REPO_ROOT / "content" / "install-guides" +INSTALL_GUIDE_TITLE_TEMPLATE = "Quickly install the\n{title}\ntool" + + +def file_to_data_url(path: Path, mime_type: str) -> str: + encoded = base64.b64encode(path.read_bytes()).decode("ascii") + return f"data:{mime_type};base64,{encoded}" + + +def vertical_alignment_css(value: str) -> str: + mapping = { + "start": "flex-start", + "center": "center", + "end": "flex-end", + } + + if value not in mapping: + raise ValueError( + f"VERTICAL_ALIGN must be one of {list(mapping)}, got {value!r}" + ) + + return mapping[value] + + +def parse_args(): + parser = argparse.ArgumentParser( + description=( + "Generate a social card from Learning Path or install guide metadata." + ) + ) + parser.add_argument( + "content_path", + help=( + "Path to a Learning Path directory/_index.md or an install guide .md file." + ), + ) + return parser.parse_args() + + +def resolve_content_path(value: str) -> Path: + raw_path = Path(value).expanduser() + + if raw_path.is_absolute(): + path = raw_path + else: + cwd_path = Path.cwd() / raw_path + repo_path = REPO_ROOT / raw_path + path = cwd_path if cwd_path.exists() else repo_path + + if path.is_dir(): + path = path / "_index.md" + + if not path.exists(): + raise FileNotFoundError(f"Content file not found: {path}") + + if path.suffix != ".md": + raise ValueError(f"Content path must be a Markdown file: {path}") + + return path.resolve() + + +def content_type_for_path(path: Path) -> str: + resolved_path = path.resolve() + + try: + resolved_path.relative_to(LEARNING_PATH_ROOT.resolve()) + return "LEARNING PATH" + except ValueError: + pass + + try: + resolved_path.relative_to(INSTALL_GUIDE_ROOT.resolve()) + return "INSTALL GUIDE" + except ValueError: + pass + + raise ValueError( + "Content path must be under content/learning-paths or content/install-guides: " + f"{path}" + ) + + +def read_front_matter(path: Path) -> dict: + lines = path.read_text(encoding="utf-8").splitlines() + + if not lines or lines[0].strip() != "---": + raise ValueError(f"Missing YAML front matter delimiter at start of {path}") + + for index, line in enumerate(lines[1:], start=1): + if line.strip() == "---": + front_matter = "\n".join(lines[1:index]) + data = yaml.safe_load(front_matter) or {} + + if not isinstance(data, dict): + raise ValueError(f"YAML front matter must be a mapping in {path}") + + return data + + raise ValueError(f"Missing closing YAML front matter delimiter in {path}") + + +def title_for_path(path: Path) -> str: + front_matter = read_front_matter(path) + title = front_matter.get("title") + + if title is None or not str(title).strip(): + raise ValueError(f"Missing required title in front matter: {path}") + + return str(title).strip() + + +def render_title(raw_title: str, content_type: str) -> str: + if content_type != "INSTALL GUIDE": + return raw_title + + return INSTALL_GUIDE_TITLE_TEMPLATE.replace("{title}", raw_title) + + +def font_face_css(path: Path, family: str, weight: int, fallback: str) -> str: + if not path.exists(): + print( + f"Warning: {path.name} not found. " + f"Using system {fallback} fallback." + ) + return "" + + font_url = file_to_data_url(path, "font/otf") + + return f""" + @font-face {{ + font-family: "{family}"; + src: url("{font_url}") format("opentype"); + font-style: normal; + font-weight: {weight}; + font-display: block; + }} +""" + + +def main(): + args = parse_args() + content_path = resolve_content_path(args.content_path) + raw_title = title_for_path(content_path) + content_type = content_type_for_path(content_path) + title = render_title(raw_title, content_type) + + for path in ( + SVG_PATH, + ): + if not path.exists(): + raise FileNotFoundError(f"Missing required file: {path}") + + + title_font_css = font_face_css(TITLE_FONT_PATH, "Aeonik", 500, "sans-serif") + meta_font_css = font_face_css(META_FONT_PATH, "Aeonik Fono", 400, "monospace") + svg_url = file_to_data_url(SVG_PATH, "image/svg+xml") + + safe_title = html.escape(title) + safe_content_type = html.escape(content_type) + + document = f""" + + + + + + + + + + + + +
+ + +
{safe_content_type}
+
+
{safe_title}
+
+ +
+ + + + +""" + + with sync_playwright() as p: + browser = p.chromium.launch(headless=True) + + page = browser.new_page( + viewport={ + "width": WIDTH, + "height": HEIGHT, + }, + device_scale_factor=4, + ) + + page.set_content(document) + + page.wait_for_function("window.__READY__ === true") + + result = page.evaluate("window.__TITLE_RESULT__") + + if not result["fits"]: + browser.close() + raise RuntimeError( + "Title could not fit inside the configured title box " + f"even at {result['fontSize']}px. " + "Increase TITLE_WIDTH/TITLE_HEIGHT, lower MIN_FONT_SIZE, " + "or shorten the title." + ) + + print( + f"Title fitted at {result['fontSize']}px " + f"inside {TITLE_WIDTH}x{TITLE_HEIGHT}px box." + ) + + # Playwright returns PNG bytes directly. + # No temporary PNG file is required. + png_bytes = page.locator("#card").screenshot(type="png") + + browser.close() + + with Image.open(BytesIO(png_bytes)) as image: + image = image.convert("RGB") + + image = image.resize( + (WIDTH, HEIGHT), + Image.Resampling.LANCZOS, + ) + + # Very subtle dithering to break up gradient banding. + noise = Image.effect_noise( + image.size, + sigma=1.5, # 0.6 → extremely subtle. 1.0 → my starting point 1.5 → stronger anti-banding 2.0 → probably more grain than you need + ).convert("RGB") + + dithered = ImageChops.add( + image, + noise, + scale=1.0, + offset=-128, + ) + + # Only dither darker pixels. + # White logo/title remain untouched. + luminance = image.convert("L") + + mask = luminance.point( + lambda p: 255 if p < 190 else 0 + ) + + image = Image.composite( + dithered, + image, + mask, + ) + + + image.save( + OUTPUT_PATH, + format="WEBP", + quality=96, + method=6, + ) + + print(f"Wrote: {OUTPUT_PATH}") + + +if __name__ == "__main__": + main() diff --git a/tools/social_card_prototype/learn-social-og-template.svg b/tools/social_card_prototype/learn-social-og-template.svg new file mode 100644 index 0000000000..49966345f4 --- /dev/null +++ b/tools/social_card_prototype/learn-social-og-template.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/tools/social_card_prototype/output.webp b/tools/social_card_prototype/output.webp new file mode 100644 index 0000000000000000000000000000000000000000..e41b535a8fb5d943e935792196eaf01e6f43871b GIT binary patch literal 107184 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
  • vhLZ-;q@Q_PLSXb*SDx-8 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 z%0D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 AmH+?% literal 0 HcmV?d00001 From 1a0b704240411234671225b6a8812c162a2b919f Mon Sep 17 00:00:00 2001 From: Zach Lasiuk Date: Fri, 4 Sep 2026 12:44:23 -0400 Subject: [PATCH 2/6] added instruction --- tools/social_card_prototype/README.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tools/social_card_prototype/README.md diff --git a/tools/social_card_prototype/README.md b/tools/social_card_prototype/README.md new file mode 100644 index 0000000000..790ce5a4c1 --- /dev/null +++ b/tools/social_card_prototype/README.md @@ -0,0 +1,20 @@ +# Social Card Prototype + +Prototype generator for learn.arm.com social/Open Graph cards. It reads a Learning Path or install guide Markdown file, pulls the `title` from front matter, applies the content type label, and writes `output.webp`. + +You'll need these python files installed: +```bash +pip install playwright Pillow +python -m playwright install --only-shell chromium +``` + +Test from the repo root: + +```bash +python tools/social_card_prototype/generate.py content/install-guides/ambaviz.md +python tools/social_card_prototype/generate.py content/learning-paths/embedded-and-microcontrollers/advanced_soc +``` + +Open `tools/social_card_prototype/output.webp` to inspect the result. + +Exact brand rendering still needs a font solution for `fonts/Aeonik-Medium.otf` and `fonts/AeonikFono-Regular.otf`, which I have from our branding team but we are unable to host in the OSS repo on GitHub due to licensing with the owners of Aeonik. The current system font fallbacks are close enough for now. From c3df5eafc48e3dd1a89bdb14c6ecfcce1d8cf495 Mon Sep 17 00:00:00 2001 From: Zach Lasiuk Date: Fri, 4 Sep 2026 12:47:36 -0400 Subject: [PATCH 3/6] updated --- tools/social_card_prototype/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/social_card_prototype/README.md b/tools/social_card_prototype/README.md index 790ce5a4c1..bfb57d3fb9 100644 --- a/tools/social_card_prototype/README.md +++ b/tools/social_card_prototype/README.md @@ -1,6 +1,6 @@ # Social Card Prototype -Prototype generator for learn.arm.com social/Open Graph cards. It reads a Learning Path or install guide Markdown file, pulls the `title` from front matter, applies the content type label, and writes `output.webp`. +Prototype generator for learn.arm.com social/Open Graph cards with updated branding and name of the content directly in the image. It reads a Learning Path or install guide Markdown file, pulls the `title` from front matter, applies the content type label, and writes `output.webp`. You'll need these python files installed: ```bash From 6c311a13df9459775978196d48767e5f99956ad3 Mon Sep 17 00:00:00 2001 From: Zach Lasiuk Date: Thu, 17 Sep 2026 16:35:54 +0100 Subject: [PATCH 4/6] social card generation new branding finalized commit --- .../.gitignore | 0 .../README.md | 9 ++++++--- .../fonts/.gitkeep | 0 .../generate.py | 2 +- .../learn-social-og-template.svg | 0 .../output_sample.webp} | Bin 6 files changed, 7 insertions(+), 4 deletions(-) rename tools/{social_card_prototype => social_card_generation}/.gitignore (100%) rename tools/{social_card_prototype => social_card_generation}/README.md (60%) rename tools/{social_card_prototype => social_card_generation}/fonts/.gitkeep (100%) rename tools/{social_card_prototype => social_card_generation}/generate.py (99%) rename tools/{social_card_prototype => social_card_generation}/learn-social-og-template.svg (100%) rename tools/{social_card_prototype/output.webp => social_card_generation/output_sample.webp} (100%) diff --git a/tools/social_card_prototype/.gitignore b/tools/social_card_generation/.gitignore similarity index 100% rename from tools/social_card_prototype/.gitignore rename to tools/social_card_generation/.gitignore diff --git a/tools/social_card_prototype/README.md b/tools/social_card_generation/README.md similarity index 60% rename from tools/social_card_prototype/README.md rename to tools/social_card_generation/README.md index bfb57d3fb9..abdbf3413d 100644 --- a/tools/social_card_prototype/README.md +++ b/tools/social_card_generation/README.md @@ -1,6 +1,9 @@ # Social Card Prototype -Prototype generator for learn.arm.com social/Open Graph cards with updated branding and name of the content directly in the image. It reads a Learning Path or install guide Markdown file, pulls the `title` from front matter, applies the content type label, and writes `output.webp`. +Prototype generator for learn.arm.com social/Open Graph cards with updated branding and name of the content directly in the image. It reads a Learning Path or install guide Markdown file, pulls the `title` from front matter, applies the content type label, and writes `social_image.webp`. + +To implement this we need to put this script in our CI pipeline for each content (and when its title is updated). Each content needs to generate a unique webp image for each learning path for social sharing, as opposed to the current one social image approach. The Hugo template needs to be updated for each content to source its webp. + You'll need these python files installed: ```bash @@ -15,6 +18,6 @@ python tools/social_card_prototype/generate.py content/install-guides/ambaviz.md python tools/social_card_prototype/generate.py content/learning-paths/embedded-and-microcontrollers/advanced_soc ``` -Open `tools/social_card_prototype/output.webp` to inspect the result. +Open `tools/social_card_prototype/social_image.webp` to inspect the result. -Exact brand rendering still needs a font solution for `fonts/Aeonik-Medium.otf` and `fonts/AeonikFono-Regular.otf`, which I have from our branding team but we are unable to host in the OSS repo on GitHub due to licensing with the owners of Aeonik. The current system font fallbacks are close enough for now. +Exact brand rendering still needs a font solution for `fonts/Aeonik-Medium.otf` and `fonts/AeonikFono-Regular.otf`, which I have from our branding team but we are unable to host in the OSS repo on GitHub due to licensing. The current system font fallbacks are near-identical and OK for social sharing. diff --git a/tools/social_card_prototype/fonts/.gitkeep b/tools/social_card_generation/fonts/.gitkeep similarity index 100% rename from tools/social_card_prototype/fonts/.gitkeep rename to tools/social_card_generation/fonts/.gitkeep diff --git a/tools/social_card_prototype/generate.py b/tools/social_card_generation/generate.py similarity index 99% rename from tools/social_card_prototype/generate.py rename to tools/social_card_generation/generate.py index 3c458cca2b..3442e86cd8 100644 --- a/tools/social_card_prototype/generate.py +++ b/tools/social_card_generation/generate.py @@ -41,7 +41,7 @@ SVG_PATH = BASE_DIR / "learn-social-og-template.svg" TITLE_FONT_PATH = BASE_DIR / "fonts" / "Aeonik-Medium.otf" META_FONT_PATH = BASE_DIR / "fonts" / "AeonikFono-Regular.otf" -OUTPUT_PATH = BASE_DIR / "output.webp" +OUTPUT_PATH = BASE_DIR / "social_image.webp" LEARNING_PATH_ROOT = REPO_ROOT / "content" / "learning-paths" INSTALL_GUIDE_ROOT = REPO_ROOT / "content" / "install-guides" diff --git a/tools/social_card_prototype/learn-social-og-template.svg b/tools/social_card_generation/learn-social-og-template.svg similarity index 100% rename from tools/social_card_prototype/learn-social-og-template.svg rename to tools/social_card_generation/learn-social-og-template.svg diff --git a/tools/social_card_prototype/output.webp b/tools/social_card_generation/output_sample.webp similarity index 100% rename from tools/social_card_prototype/output.webp rename to tools/social_card_generation/output_sample.webp From 1c108a9eb3e3830022c8ffa057a1012559748e92 Mon Sep 17 00:00:00 2001 From: Zach Lasiuk Date: Mon, 21 Sep 2026 09:55:22 -0400 Subject: [PATCH 5/6] updated analytics to track code copies --- .../static/js/anonymous-analytics.js | 138 +++++++++++++++++- 1 file changed, 137 insertions(+), 1 deletion(-) diff --git a/themes/arm-design-system-hugo-theme/static/js/anonymous-analytics.js b/themes/arm-design-system-hugo-theme/static/js/anonymous-analytics.js index 5cc1fd65b8..7e65e00de2 100644 --- a/themes/arm-design-system-hugo-theme/static/js/anonymous-analytics.js +++ b/themes/arm-design-system-hugo-theme/static/js/anonymous-analytics.js @@ -12,8 +12,9 @@ - list-card --> learning path and tool list cards should have these types - learning-path-nav --> navigation buttons in the application: 'next' button, 'prev' button, left-hand navigation - metadata --> any metadata links; above LPs and installs, and in 'next steps' page - - content --> all links from user-generated markdown should have this. the 'render-link.html' should implement this tracker + - content --> all links from user-generated markdown should have this, INCLUDING CODE. the 'render-link.html' should implement this tracker - data-track-name --> specific name of the element, human readable to link behavior. A click on a learning path should render its title, etc. This is dynamic + - data-track-identifier --> Prism language of a code block - facet-interaction Attributes tracked: @@ -168,6 +169,70 @@ function attachPageFindSearchTracker() { } +function getSelectedCodeContext() { + const selection = window.getSelection(); + + if (!selection || selection.isCollapsed || selection.rangeCount === 0) { + return null; + } + + const range = selection.getRangeAt(0); + + function getContainingPre(node) { + const element = node.nodeType === Node.ELEMENT_NODE + ? node + : node.parentElement; + + return element?.closest('.code-toolbar pre') || null; + } + + const start_pre = getContainingPre(range.startContainer); + const end_pre = getContainingPre(range.endContainer); + + // Only track selections contained within one Prism code block. + if (!start_pre || start_pre !== end_pre) { + return null; + } + + const code_element = start_pre.querySelector('code'); + + if (!code_element) { + return null; + } + + return { + code_block_language: getCodeBlockLanguage(start_pre), + code_block_position: Array.from(document.querySelectorAll('.code-toolbar pre')).indexOf(start_pre), + selected_character_count: selection.toString().length, + selection_start_offset: range.startOffset, + selection_end_offset: range.endOffset + }; +} + + +function getCodeBlockLanguage(pre_element) { + const code_element = pre_element.querySelector('code'); + const language_class = Array.from(code_element?.classList || []) + .find((class_name) => class_name.startsWith('language-')); + + return language_class + ? language_class.replace('language-', '') + : 'unknown'; +} + + +function trackCodeInteraction(interaction_type, code_block_language) { + if (window._satellite?.track) { + window._satellite.track('content-interaction', { + 'data-track-type' : interaction_type, + 'data-track-location' : 'content', + 'data-track-name' : window.location.pathname, + 'data-track-identifier' : code_block_language + }); + } +} + + // Go page by page, and assign the analytics tracker event component to appropriate ares. @@ -177,6 +242,77 @@ function attachPageFindSearchTracker() { let depth_of_path= current_path.split('/').length - 1 // Get number of '/' in the string; will help identify where we are in the heirarcy + // + // Prism code blocks + // =================== + // Use delegated listeners because Prism creates its toolbar buttons after + // the page DOM is ready. These listeners cover Learning Paths and install + // guides and identify each code block by its Prism language. + let code_selection_timer; + let last_code_selection_signature = ''; + + document.addEventListener('selectionchange', function() { + clearTimeout(code_selection_timer); + + // selectionchange fires repeatedly while the selection is changing. + code_selection_timer = setTimeout(function() { + const context = getSelectedCodeContext(); + + if (!context) { + last_code_selection_signature = ''; + return; + } + + const signature = [ + current_path, + context.code_block_position, + context.selected_character_count, + context.selection_start_offset, + context.selection_end_offset + ].join('|'); + + if (signature === last_code_selection_signature) { + return; + } + + last_code_selection_signature = signature; + trackCodeInteraction('code-block-selection', context.code_block_language); + }, 400); + }); + + // Track keyboard and context-menu copies of a selection in a code block. + document.addEventListener('copy', function() { + const context = getSelectedCodeContext(); + + if (context) { + trackCodeInteraction('code-block-manual-copy', context.code_block_language); + } + }); + + // Track use of Prism's copy-to-clipboard toolbar button. + document.addEventListener('click', function(event) { + if (!(event.target instanceof Element)) { + return; + } + + const copy_button = event.target.closest('button.copy-to-clipboard-button'); + + if (!copy_button) { + return; + } + + const pre_element = copy_button + .closest('.code-toolbar') + ?.querySelector('pre'); + + if (!pre_element) { + return; + } + + trackCodeInteraction('code-block-copy-button', getCodeBlockLanguage(pre_element)); + }); + + // // Header // =================== From d85c5a3fa9af43aa8ccdd4caabe1469e003a80a0 Mon Sep 17 00:00:00 2001 From: Zach Lasiuk Date: Mon, 21 Sep 2026 10:15:12 -0400 Subject: [PATCH 6/6] update analytics --- .../static/js/anonymous-analytics.js | 104 +++++++++--------- 1 file changed, 50 insertions(+), 54 deletions(-) diff --git a/themes/arm-design-system-hugo-theme/static/js/anonymous-analytics.js b/themes/arm-design-system-hugo-theme/static/js/anonymous-analytics.js index 7e65e00de2..d8e39d99a4 100644 --- a/themes/arm-design-system-hugo-theme/static/js/anonymous-analytics.js +++ b/themes/arm-design-system-hugo-theme/static/js/anonymous-analytics.js @@ -15,6 +15,7 @@ - content --> all links from user-generated markdown should have this, INCLUDING CODE. the 'render-link.html' should implement this tracker - data-track-name --> specific name of the element, human readable to link behavior. A click on a learning path should render its title, etc. This is dynamic - data-track-identifier --> Prism language of a code block + - data-track-url --> full page URL for code copy events - facet-interaction Attributes tracked: @@ -29,6 +30,12 @@ Attributes tracked: - feedback-type --> either 'star-rating' or 'reason' - feedback-content --> specifies the feedback. Star-rating will be 1-5, Reason will be a string (from a limited choice set, not free text) + + - copy-type + Attributes tracked: + - data-track-type --> copy-type + - data-track-location --> manual-copy or button-copy + - data-track-name --> current page number and name */ @@ -169,7 +176,7 @@ function attachPageFindSearchTracker() { } -function getSelectedCodeContext() { +function getSelectedCodeBlock() { const selection = window.getSelection(); if (!selection || selection.isCollapsed || selection.rangeCount === 0) { @@ -194,19 +201,7 @@ function getSelectedCodeContext() { return null; } - const code_element = start_pre.querySelector('code'); - - if (!code_element) { - return null; - } - - return { - code_block_language: getCodeBlockLanguage(start_pre), - code_block_position: Array.from(document.querySelectorAll('.code-toolbar pre')).indexOf(start_pre), - selected_character_count: selection.toString().length, - selection_start_offset: range.startOffset, - selection_end_offset: range.endOffset - }; + return start_pre; } @@ -221,13 +216,45 @@ function getCodeBlockLanguage(pre_element) { } -function trackCodeInteraction(interaction_type, code_block_language) { +function getCodeCopyTrackName() { + const active_learning_path_step = document.getElementById('learning-path-step-active'); + + if (active_learning_path_step) { + const page_number = parseInt(active_learning_path_step.getAttribute('data-step-num')) + 1; + const page_name = (active_learning_path_step.innerText || active_learning_path_step.textContent).trim(); + + return 'page_number:'+page_number+','+'page_name:'+page_name; + } + + const install_guide_title = document.getElementById('install-guide-title'); + + if (install_guide_title) { + const page_name = (install_guide_title.innerText || install_guide_title.textContent).trim(); + + return 'page_number:1,'+'page_name:'+page_name; + } + + return window.location.pathname; +} + + +function trackCodeCopy(copy_location, pre_element) { + const code_block_language = getCodeBlockLanguage(pre_element); + const track_str = getCodeCopyTrackName(); + if (window._satellite?.track) { window._satellite.track('content-interaction', { - 'data-track-type' : interaction_type, + 'data-track-type' : 'copy', 'data-track-location' : 'content', - 'data-track-name' : window.location.pathname, - 'data-track-identifier' : code_block_language + 'data-track-name' : track_str, + 'data-track-identifier' : code_block_language, + 'data-track-url' : window.location.href + }); + + window._satellite.track('content-interaction', { + 'data-track-type' : 'copy-type', + 'data-track-location' : copy_location, + 'data-track-name' : track_str }); } } @@ -247,45 +274,14 @@ function trackCodeInteraction(interaction_type, code_block_language) { // =================== // Use delegated listeners because Prism creates its toolbar buttons after // the page DOM is ready. These listeners cover Learning Paths and install - // guides and identify each code block by its Prism language. - let code_selection_timer; - let last_code_selection_signature = ''; - - document.addEventListener('selectionchange', function() { - clearTimeout(code_selection_timer); - - // selectionchange fires repeatedly while the selection is changing. - code_selection_timer = setTimeout(function() { - const context = getSelectedCodeContext(); - - if (!context) { - last_code_selection_signature = ''; - return; - } - - const signature = [ - current_path, - context.code_block_position, - context.selected_character_count, - context.selection_start_offset, - context.selection_end_offset - ].join('|'); - - if (signature === last_code_selection_signature) { - return; - } - - last_code_selection_signature = signature; - trackCodeInteraction('code-block-selection', context.code_block_language); - }, 400); - }); + // guides and identify each copied code block by its Prism language. // Track keyboard and context-menu copies of a selection in a code block. document.addEventListener('copy', function() { - const context = getSelectedCodeContext(); + const pre_element = getSelectedCodeBlock(); - if (context) { - trackCodeInteraction('code-block-manual-copy', context.code_block_language); + if (pre_element) { + trackCodeCopy('manual-copy', pre_element); } }); @@ -309,7 +305,7 @@ function trackCodeInteraction(interaction_type, code_block_language) { return; } - trackCodeInteraction('code-block-copy-button', getCodeBlockLanguage(pre_element)); + trackCodeCopy('button-copy', pre_element); });