SWFObject Plugin Helper

By John Keyes Last update Apr 10, 2009 — Installed 289 times.

There are 6 previous versions of this script.

// ==UserScript==
// @name SWFObject Plugin Helper
// @namespace http://keyes.ie/greasemonkey/swfobject_plugin_helper/
// @description Copies SWFObject code for the current video page to the clipboard.
// @include http://youtube.com/watch?*
// @include http://www.youtube.com/watch?*
// @include http://www.viddler.com/*
// @include http://viddler.com/*
// @include http://www.vimeo.com/*
// @include http://vimeo.com/*
// @include http://qik.com/video/*
// @include http://12seconds.tv/*
// @version 1.0.2
// ==/UserScript==

// This function was copied from http://kb.mozillazine.org/XPath
// Evaluate an XPath expression aExpression against a given DOM node
// or Document object (aNode), returning the results as an array
// thanks wanderingstan at morethanwarm dot mail dot com for the
// initial work.

function evaluateXPath(aNode, aExpr){
    var xpe = new XPathEvaluator();
    var nsResolver = xpe.createNSResolver(aNode.ownerDocument == null ? aNode.documentElement : aNode.ownerDocument.documentElement);
    var result = xpe.evaluate(aExpr, aNode, nsResolver, 0, null);
    var found = [];
    var res;
    while (res = result.iterateNext()) 
        found.push(res);
    return found;
}

/*
 parseUri 1.2.1
 (c) 2007 Steven Levithan <stevenlevithan.com>
 MIT License
 */
function parseUri(str){
    var o = parseUri.options, m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), uri = {}, i = 14;
    
    while (i--) 
        uri[o.key[i]] = m[i] || "";
    
    uri[o.q.name] = {};
    uri[o.key[12]].replace(o.q.parser, function($0, $1, $2){
        if ($1) 
            uri[o.q.name][$1] = $2;
    });
    
    return uri;
};

parseUri.options = {
    strictMode: false,
    key: ["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor"],
    q: {
        name: "queryKey",
        parser: /(?:^|&)([^&=]*)=?([^&]*)/g
    },
    parser: {
        strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
        loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
    }
};

function add_code(site, video_id, width, height){
    var panel = document.createElement('div');
    panel.style.marginTop = "-1px";
    panel.style.borderBottom = "2px solid #555";
    var label = document.createElement("label");
    label.innerHTML = "SWFObject Plugin Code";
    label.style.fontSize = '12px';
    label.style.fontFamily = "Helvetica";
    label.style.fontWeight = 'bold';
    label.style.cssFloat = 'none';
    label.style.color = '#FFF';
    label.style.padding = '0px';
    panel.appendChild(label);
    var swf_input = document.createElement('input');
    swf_input.setAttribute("readonly", "");
    swf_input.setAttribute("type", "text");
    swf_input.value = "[" + site + " " + video_id + " " + width + " " + height + "]";
    swf_input.style.margin = '3px 0px 3px 5px';
    swf_input.style.padding = "3px";
    swf_input.style.width = "400px";
    swf_input.style.border = "1px solid #555";
    swf_input.addEventListener("click", function(event){
        swf_input.focus();
        swf_input.select();
    }, false);
    panel.appendChild(swf_input);
    var header = document.body;
    panel.style.backgroundColor = '#666';
    panel.style.color = '#FFF';
    panel.style.textAlign = 'center';
    panel.style.padding = '4px 0 3px 0';
    header.insertBefore(panel, header.firstChild);
}

function check_youtube(){
    url = parseUri(location.href);
    youtube_re = /.*(youtube\.com)$/;
    m = youtube_re.exec(url.host);
    if (m) {
        video_re = /v=([^\/&]+)/g;
        m = video_re.exec(url.query);
        var vid_id = m[1];
        var embed_input = document.getElementById('embed_code');
        dim_re = /.*width=\"(.*)\".*height=\"(.*)\".*/g;
        m = dim_re.exec(embed_input.value);
        var width = m[1];
        var height = m[2];
        add_code("youtube", vid_id, width, height);
    }
}

function check_vimeo(){
    url = parseUri(location.href);
    vimeo_re = /.*(vimeo\.com)$/;
    m = vimeo_re.exec(url.host);
    if (m) {
        video_re = /^.*\/(\d+)$/;
        m = video_re.exec(url.path);
        if (m) {
            video_id = m[1];
            add_code("vimeo", video_id, 640, 300);
        }
    }
}

function check_qik(){
    url = parseUri(location.href);
    qik_re = /.*(qik\.com)$/;
    m = qik_re.exec(url.host);
    if (m) {
        // find the link
        var link = evaluateXPath(document, '//head/link[@rel="videothumbnail"]')[0];
        video_uri = parseUri(link.href);
        video_re = /(.*)\..*/;
        m = video_re.exec(video_uri.file);
        var video_id = m[1];
        var player = document.getElementById('qik_player');
        add_code("qik", video_id, player.getAttribute("width"), player.getAttribute("height"));
    }
}

function check_12seconds(){
    url = parseUri(location.href);
    qik_re = /.*(12seconds\.tv)$/;
    m = qik_re.exec(url.host);
    if (m) {
        video_re = /^.*\/(\d+)$/;
        m = video_re.exec(url.path);
        if (m) {
            video_id = m[1];
            add_code("12seconds", video_id, 430, 360);
        }
    }
}

function check_viddler(){
    url = parseUri(location.href);
    viddler_re = /.*(viddler\.com)$/;
    m = viddler_re.exec(url.host);
    var vid_id = 'error';
    if (m) {
        var comment_form = document.getElementById('newCommentForm');
        var inputs = comment_form.getElementsByTagName('input');
        for (var i = 0; i < inputs.length; i++) {
            var input = inputs[i];
            if ("movieToken" == input.name) {
                vid_id = input.value;
            }
        }
        var player = document.getElementById('viddler');
        add_code("viddler", vid_id, player.getAttribute("width"), player.getAttribute("height"));
    }
}


check_youtube();
check_vimeo();
check_viddler();
check_qik();
check_12seconds();