forked from mirrors/gecko-dev
		
	Differential Revision: https://phabricator.services.mozilla.com/D37217 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			91 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 | 
						|
 * You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
this.documentMetadata = (function() {
 | 
						|
 | 
						|
  function findSiteName() {
 | 
						|
    let el = document.querySelector("meta[property~='og:site_name'][content]");
 | 
						|
    if (el) {
 | 
						|
      return el.getAttribute("content");
 | 
						|
    }
 | 
						|
    // nytimes.com uses this property:
 | 
						|
    el = document.querySelector("meta[name='cre'][content]");
 | 
						|
    if (el) {
 | 
						|
      return el.getAttribute("content");
 | 
						|
    }
 | 
						|
    return null;
 | 
						|
  }
 | 
						|
 | 
						|
  function getOpenGraph() {
 | 
						|
    const openGraph = {};
 | 
						|
    // If you update this, also update _OPENGRAPH_PROPERTIES in shot.js:
 | 
						|
    const forceSingle = `title type url`.split(" ");
 | 
						|
    const openGraphProperties = `
 | 
						|
    title type url image audio description determiner locale site_name video
 | 
						|
    image:secure_url image:type image:width image:height
 | 
						|
    video:secure_url video:type video:width image:height
 | 
						|
    audio:secure_url audio:type
 | 
						|
    article:published_time article:modified_time article:expiration_time article:author article:section article:tag
 | 
						|
    book:author book:isbn book:release_date book:tag
 | 
						|
    profile:first_name profile:last_name profile:username profile:gender
 | 
						|
    `.split(/\s+/g);
 | 
						|
    for (const prop of openGraphProperties) {
 | 
						|
      let elems = document.querySelectorAll(`meta[property~='og:${prop}'][content]`);
 | 
						|
      if (forceSingle.includes(prop) && elems.length > 1) {
 | 
						|
        elems = [elems[0]];
 | 
						|
      }
 | 
						|
      let value;
 | 
						|
      if (elems.length > 1) {
 | 
						|
        value = [];
 | 
						|
        for (const elem of elems) {
 | 
						|
          const v = elem.getAttribute("content");
 | 
						|
          if (v) {
 | 
						|
            value.push(v);
 | 
						|
          }
 | 
						|
        }
 | 
						|
        if (!value.length) {
 | 
						|
          value = null;
 | 
						|
        }
 | 
						|
      } else if (elems.length === 1) {
 | 
						|
        value = elems[0].getAttribute("content");
 | 
						|
      }
 | 
						|
      if (value) {
 | 
						|
        openGraph[prop] = value;
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return openGraph;
 | 
						|
  }
 | 
						|
 | 
						|
  function getTwitterCard() {
 | 
						|
    const twitterCard = {};
 | 
						|
    // If you update this, also update _TWITTERCARD_PROPERTIES in shot.js:
 | 
						|
    const properties = `
 | 
						|
    card site title description image
 | 
						|
    player player:width player:height player:stream player:stream:content_type
 | 
						|
    `.split(/\s+/g);
 | 
						|
    for (const prop of properties) {
 | 
						|
      const elem = document.querySelector(`meta[name='twitter:${prop}'][content]`);
 | 
						|
      if (elem) {
 | 
						|
        const value = elem.getAttribute("content");
 | 
						|
        if (value) {
 | 
						|
          twitterCard[prop] = value;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    }
 | 
						|
    return twitterCard;
 | 
						|
  }
 | 
						|
 | 
						|
  return function documentMetadata() {
 | 
						|
    const result = {};
 | 
						|
    result.docTitle = document.title;
 | 
						|
    result.siteName = findSiteName();
 | 
						|
    result.openGraph = getOpenGraph();
 | 
						|
    result.twitterCard = getTwitterCard();
 | 
						|
    return result;
 | 
						|
  };
 | 
						|
 | 
						|
})();
 | 
						|
null;
 |