15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ==UserScript==
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @name           Userscript @run-at example.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @version        1.0.1
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @namespace      runat
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @description    This script demonstrates @runat by listing which resources
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                 the current page has loaded.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @include        *
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// @run-at         document-start
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ==/UserScript==
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (c) 2011 The Chromium Authors. All rights reserved.
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Use of this source code is governed by a BSD-style license that can be
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * found in the LICENSE file.
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var urls = {};
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var count = 0;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called whenever the page loads a subresource.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Logs all loaded URLs in the urls var.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('beforeload', function(evt) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!urls[evt.url]) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    urls[evt.url] = 0;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    count++;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls[evt.url]++;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, true);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called when the window is finished loading.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Loops through the urls var and prints its contents to the page DOM.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)window.addEventListener('load', function() {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (count == 0) {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create and style inserted DOM elements.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var urls_dom = document.createElement('ul');
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  urls_dom.style.cssText = [
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'margin: 4px 0 !important;',
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'padding: 0 !important;',
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'width: 98%;',
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'word-wrap: break-word;',
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'max-height: 200px;',
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'overflow: auto;'
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ].join(' ');
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var wrap_dom = document.createElement('div');
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  wrap_dom.style.cssText = [
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'background-color: #ff7357;',
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'background-image: -webkit-repeating-linear-gradient(' +
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          '-45deg, transparent, transparent 35px,' +
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          'rgba(0,0,0,.1) 35px, rgba(0,0,0,.1) 70px);',
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'color: #000;',
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'padding: 10px;',
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'font: 14px Arial;'
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ].join(' ');
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  var title_dom = document.createElement('strong');
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  title_dom.textContent = (count > 1) ?
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'This page has loaded the following resources:' :
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      'This page loaded the following resource:';
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  wrap_dom.appendChild(title_dom);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  wrap_dom.appendChild(urls_dom);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Render each url as a list item containing a link.
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (var url in urls) {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var url_dom = document.createElement('li');
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var link_dom = document.createElement('a');
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    var times_dom = document.createElement('span');
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    url_dom.style.cssText = [
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'list-style-type: disc;',
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'margin: 0 0 0 30px !important;',
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'padding: 2px !important'
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ].join(' ');
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    link_dom.setAttribute('href', url);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    link_dom.setAttribute('target', '_blank');
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    link_dom.textContent = url;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    link_dom.style.cssText = [
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        'color: #000 !important;'
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ].join(' ');
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    times_dom.textContent = (urls[url] > 1) ?
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ' (' + urls[url] + ' times)' :
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ' (once)';
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    url_dom.appendChild(link_dom);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    url_dom.appendChild(times_dom);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    urls_dom.appendChild(url_dom);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Insert the created DOM into the page.
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.body.style.position = 'relative';
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  document.body.parentElement.insertBefore(wrap_dom, document.body);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}, true);
96