Steam: add Youtube trailer link

Adds a link to search for the trailer on Youtube after the app title

目前為 2015-03-20 提交的版本,檢視 最新版本

// ==UserScript==
// @name          Steam: add Youtube trailer link
// @include       http://store.steampowered.com/app/*
// @include       https://store.steampowered.com/app/*
// @description   Adds a link to search for the trailer on Youtube after the app title
// @version       1.0
// @author        wOxxOm
// @namespace     wOxxOm.scripts
// @license       MIT License
// @grant         none
// @run-at        document-start
// ==/UserScript==

setMutationHandler(document, '.apphub_AppName', function(observer, node) {
  var yt = document.createElement('div');
  var link = 'https://www.youtube.com/results?search_query=' + node.textContent.replace(' ','+') + '+trailer';
  node.parentNode.insertBefore(yt, node);
  yt.outerHTML = 
    '<div class="apphub_OtherSiteInfo" style="margin-right:1em">\
        <a class="btnv6_blue_hoverfade btn_medium" href="' + link + '">\
            <span>trailer on Youtube</span>\
        </a>\
     </div>';
  observer.disconnect();
  return false;
});

function setMutationHandler(baseNode, selector, cb) {
  var ob = new MutationObserver(function(mutations){
    for (var i=0, ml=mutations.length, m; (i<ml) && (m=mutations[i]); i++)
      for (var j=0, nodes=m.addedNodes, nl=nodes.length, n; (j<nl) && (n=nodes[j]); j++)
        if (n.nodeType == 1) 
          if (n = n.querySelector(selector))
            if (!cb(ob, n))
              return;
  });
  ob.observe(baseNode, {subtree:true, childList:true}); 
}