/** * AKSRT Share Data Builder * * Single source of truth for share payloads. Every share surface * (dropdown links, copy, WeChat bridge, poster) resolves its data through * window.AksrtShareData so no script assembles title/url/cover/qrcode on its * own. * * Canonical payload shape: * { title, url, desc, text, image, qrcode, author, date, siteName } * * Data is read from the nearest [data-share-*] context (falling back to * #share-dropdown), then to OpenGraph/meta tags and document defaults. * * @package AKSRT */ (function () { 'use strict'; function metaContent(selectors) { for (var i = 0; i < selectors.length; i += 1) { var node = document.querySelector(selectors[i]); var content = node ? node.getAttribute('content') : ''; if (content) return content; } return ''; } function siteName() { return ( metaContent(['meta[property="og:site_name"]']) || (document.querySelector('.site-title, .logo-text, .site-nav__logo') || {}).textContent || document.title || '' ).trim(); } /** * Find the element that carries the share data attributes for a node. */ function context(node) { var source = node && typeof node.closest === 'function' ? node.closest('[data-share-url], [data-share-title], [data-share-desc], [data-share-image], [data-aksrt-poster]') : null; return source || document.getElementById('share-dropdown'); } /** * Generate a QR data URL for a link, reusing the WeChat share encoder * when available. Returns '' if no encoder is loaded. */ function qrcode(url) { if (window.AksrtShare && typeof window.AksrtShare.buildQrDataUrl === 'function' && url) { return window.AksrtShare.buildQrDataUrl(url, 200) || ''; } return ''; } /** * Resolve a canonical share payload for a triggering node. * * @param {Element} node Triggering element (button/link). * @param {Object} [overrides] Optional explicit overrides. * @returns {Object} */ function resolve(node, overrides) { var ctx = context(node); function attr(name) { return (node && node.getAttribute && node.getAttribute(name)) || (ctx && ctx.getAttribute && ctx.getAttribute(name)) || ''; } var url = attr('data-share-url') || window.location.href; var payload = { title: attr('data-share-title') || document.title, url: url, desc: attr('data-share-desc') || metaContent(['meta[property="og:description"]', 'meta[name="description"]']), text: attr('data-share-text') || '', image: attr('data-share-image') || metaContent(['meta[property="og:image"]']), qrcode: attr('data-share-qrcode') || '', author: attr('data-share-author') || '', date: attr('data-share-date') || '', siteName: attr('data-share-site') || siteName() }; if (!payload.qrcode) { payload.qrcode = qrcode(payload.url); } if (overrides && typeof overrides === 'object') { Object.keys(overrides).forEach(function (key) { if (overrides[key] !== undefined && overrides[key] !== null && overrides[key] !== '') { payload[key] = overrides[key]; } }); } return payload; } window.AksrtShareData = { resolve: resolve, qrcode: qrcode, siteName: siteName }; })();