361 lines
13 KiB
JavaScript
361 lines
13 KiB
JavaScript
/*
|
|
* zClip :: jQuery ZeroClipboard v1.1.1
|
|
* http://steamdev.com/zclip
|
|
*
|
|
* Copyright 2011, SteamDev
|
|
* Released under the MIT license.
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
*
|
|
* Date: Wed Jun 01, 2011
|
|
*/
|
|
|
|
(function(a) {
|
|
a.fn.zclip = function(c) {
|
|
if (typeof c == "object" && !c.length) {
|
|
var b = a.extend({
|
|
path: "ZeroClipboard.swf",
|
|
copy: null,
|
|
beforeCopy: null,
|
|
afterCopy: null,
|
|
clickAfter: true,
|
|
setHandCursor: true,
|
|
setCSSEffects: true
|
|
}, c);
|
|
return this.each(function() {
|
|
var e = a(this);
|
|
if (e.is(":visible") && (typeof b.copy == "string" || a.isFunction(b.copy))) {
|
|
ZeroClipboard.setMoviePath(b.path);
|
|
var d = new ZeroClipboard.Client();
|
|
if (a.isFunction(b.copy)) {
|
|
e.bind("zClip_copy", b.copy)
|
|
}
|
|
if (a.isFunction(b.beforeCopy)) {
|
|
e.bind("zClip_beforeCopy", b.beforeCopy)
|
|
}
|
|
if (a.isFunction(b.afterCopy)) {
|
|
e.bind("zClip_afterCopy", b.afterCopy)
|
|
}
|
|
d.setHandCursor(b.setHandCursor);
|
|
d.setCSSEffects(b.setCSSEffects);
|
|
d.addEventListener("mouseOver", function(f) {
|
|
e.trigger("mouseenter")
|
|
});
|
|
d.addEventListener("mouseOut", function(f) {
|
|
e.trigger("mouseleave")
|
|
});
|
|
d.addEventListener("mouseDown", function(f) {
|
|
e.trigger("mousedown");
|
|
if (!a.isFunction(b.copy)) {
|
|
d.setText(b.copy)
|
|
} else {
|
|
d.setText(e.triggerHandler("zClip_copy"))
|
|
}
|
|
if (a.isFunction(b.beforeCopy)) {
|
|
e.trigger("zClip_beforeCopy")
|
|
}
|
|
});
|
|
d.addEventListener("complete", function(f, g) {
|
|
if (a.isFunction(b.afterCopy)) {
|
|
e.trigger("zClip_afterCopy")
|
|
} else {
|
|
if (g.length > 500) {
|
|
g = g.substr(0, 500) + "...\n\n(" + (g.length - 500) + " characters not shown)"
|
|
}
|
|
e.removeClass("hover");
|
|
alert("Copied text to clipboard:\n\n " + g)
|
|
}
|
|
if (b.clickAfter) {
|
|
e.trigger("click")
|
|
}
|
|
});
|
|
d.glue(e[0], e.parent()[0]);
|
|
a(window).bind("load resize", function() {
|
|
d.reposition()
|
|
})
|
|
}
|
|
})
|
|
} else {
|
|
if (typeof c == "string") {
|
|
return this.each(function() {
|
|
var f = a(this);
|
|
c = c.toLowerCase();
|
|
var e = f.data("zclipId");
|
|
var d = a("#" + e + ".zclip");
|
|
if (c == "remove") {
|
|
d.remove();
|
|
f.removeClass("active hover")
|
|
} else {
|
|
if (c == "hide") {
|
|
d.hide();
|
|
f.removeClass("active hover")
|
|
} else {
|
|
if (c == "show") {
|
|
d.show()
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
})(jQuery);
|
|
var ZeroClipboard = {
|
|
version: "1.0.7",
|
|
clients: {},
|
|
moviePath: "ZeroClipboard.swf",
|
|
nextId: 1,
|
|
$: function(a) {
|
|
if (typeof(a) == "string") {
|
|
a = document.getElementById(a)
|
|
}
|
|
if (!a.addClass) {
|
|
a.hide = function() {
|
|
this.style.display = "none"
|
|
};
|
|
a.show = function() {
|
|
this.style.display = ""
|
|
};
|
|
a.addClass = function(b) {
|
|
this.removeClass(b);
|
|
this.className += " " + b
|
|
};
|
|
a.removeClass = function(d) {
|
|
var e = this.className.split(/\s+/);
|
|
var b = -1;
|
|
for (var c = 0; c < e.length; c++) {
|
|
if (e[c] == d) {
|
|
b = c;
|
|
c = e.length
|
|
}
|
|
}
|
|
if (b > -1) {
|
|
e.splice(b, 1);
|
|
this.className = e.join(" ")
|
|
}
|
|
return this
|
|
};
|
|
a.hasClass = function(b) {
|
|
return !!this.className.match(new RegExp("\\s*" + b + "\\s*"))
|
|
}
|
|
}
|
|
return a
|
|
},
|
|
setMoviePath: function(a) {
|
|
this.moviePath = a
|
|
},
|
|
dispatch: function(d, b, c) {
|
|
var a = this.clients[d];
|
|
if (a) {
|
|
a.receiveEvent(b, c)
|
|
}
|
|
},
|
|
register: function(b, a) {
|
|
this.clients[b] = a
|
|
},
|
|
getDOMObjectPosition: function(c, a) {
|
|
var b = {
|
|
left: 0,
|
|
top: 0,
|
|
width: c.width ? c.width : c.offsetWidth,
|
|
height: c.height ? c.height : c.offsetHeight
|
|
};
|
|
if (c && (c != a)) {
|
|
b.left += c.offsetLeft;
|
|
b.top += c.offsetTop
|
|
}
|
|
return b
|
|
},
|
|
Client: function(a) {
|
|
this.handlers = {};
|
|
this.id = ZeroClipboard.nextId++;
|
|
this.movieId = "ZeroClipboardMovie_" + this.id;
|
|
ZeroClipboard.register(this.id, this);
|
|
if (a) {
|
|
this.glue(a)
|
|
}
|
|
}
|
|
};
|
|
ZeroClipboard.Client.prototype = {
|
|
id: 0,
|
|
ready: false,
|
|
movie: null,
|
|
clipText: "",
|
|
handCursorEnabled: true,
|
|
cssEffects: true,
|
|
handlers: null,
|
|
glue: function(d, b, e) {
|
|
this.domElement = ZeroClipboard.$(d);
|
|
var f = 99;
|
|
if (this.domElement.style.zIndex) {
|
|
f = parseInt(this.domElement.style.zIndex, 10) + 1
|
|
}
|
|
if (typeof(b) == "string") {
|
|
b = ZeroClipboard.$(b)
|
|
} else {
|
|
if (typeof(b) == "undefined") {
|
|
b = document.getElementsByTagName("body")[0]
|
|
}
|
|
}
|
|
var c = ZeroClipboard.getDOMObjectPosition(this.domElement, b);
|
|
this.div = document.createElement("div");
|
|
this.div.className = "zclip";
|
|
this.div.id = "zclip-" + this.movieId;
|
|
$(this.domElement).data("zclipId", "zclip-" + this.movieId);
|
|
var a = this.div.style;
|
|
a.position = "absolute";
|
|
a.left = "" + c.left + "px";
|
|
a.top = "" + c.top + "px";
|
|
a.width = "" + c.width + "px";
|
|
a.height = "" + c.height + "px";
|
|
a.zIndex = f;
|
|
if (typeof(e) == "object") {
|
|
for (addedStyle in e) {
|
|
a[addedStyle] = e[addedStyle]
|
|
}
|
|
}
|
|
b.appendChild(this.div);
|
|
this.div.innerHTML = this.getHTML(c.width, c.height)
|
|
},
|
|
getHTML: function(d, a) {
|
|
var c = "";
|
|
var b = "id=" + this.id + "&width=" + d + "&height=" + a;
|
|
if (navigator.userAgent.match(/MSIE/)) {
|
|
var e = location.href.match(/^https/i) ? "https://" : "http://";
|
|
c += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="' + e + 'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="' + d + '" height="' + a + '" id="' + this.movieId + '" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="' + ZeroClipboard.moviePath + '" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="' + b + '"/><param name="wmode" value="transparent"/></object>'
|
|
} else {
|
|
c += '<embed id="' + this.movieId + '" src="' + ZeroClipboard.moviePath + '" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="' + d + '" height="' + a + '" name="' + this.movieId + '" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="' + b + '" wmode="transparent" />'
|
|
}
|
|
return c
|
|
},
|
|
hide: function() {
|
|
if (this.div) {
|
|
this.div.style.left = "-2000px"
|
|
}
|
|
},
|
|
show: function() {
|
|
this.reposition()
|
|
},
|
|
destroy: function() {
|
|
if (this.domElement && this.div) {
|
|
this.hide();
|
|
this.div.innerHTML = "";
|
|
var a = document.getElementsByTagName("body")[0];
|
|
try {
|
|
a.removeChild(this.div)
|
|
} catch (b) {}
|
|
this.domElement = null;
|
|
this.div = null
|
|
}
|
|
},
|
|
reposition: function(c) {
|
|
if (c) {
|
|
this.domElement = ZeroClipboard.$(c);
|
|
if (!this.domElement) {
|
|
this.hide()
|
|
}
|
|
}
|
|
if (this.domElement && this.div) {
|
|
var b = ZeroClipboard.getDOMObjectPosition(this.domElement);
|
|
var a = this.div.style;
|
|
a.left = "" + b.left + "px";
|
|
a.top = "" + b.top + "px"
|
|
}
|
|
},
|
|
setText: function(a) {
|
|
this.clipText = a;
|
|
if (this.ready) {
|
|
this.movie.setText(a)
|
|
}
|
|
},
|
|
addEventListener: function(a, b) {
|
|
a = a.toString().toLowerCase().replace(/^on/, "");
|
|
if (!this.handlers[a]) {
|
|
this.handlers[a] = []
|
|
}
|
|
this.handlers[a].push(b)
|
|
},
|
|
setHandCursor: function(a) {
|
|
this.handCursorEnabled = a;
|
|
if (this.ready) {
|
|
this.movie.setHandCursor(a)
|
|
}
|
|
},
|
|
setCSSEffects: function(a) {
|
|
this.cssEffects = !!a
|
|
},
|
|
receiveEvent: function(d, f) {
|
|
d = d.toString().toLowerCase().replace(/^on/, "");
|
|
switch (d) {
|
|
case "load":
|
|
this.movie = document.getElementById(this.movieId);
|
|
if (!this.movie) {
|
|
var c = this;
|
|
setTimeout(function() {
|
|
c.receiveEvent("load", null)
|
|
}, 1);
|
|
return
|
|
}
|
|
if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
|
|
var c = this;
|
|
setTimeout(function() {
|
|
c.receiveEvent("load", null)
|
|
}, 100);
|
|
this.ready = true;
|
|
return
|
|
}
|
|
this.ready = true;
|
|
try {
|
|
this.movie.setText(this.clipText)
|
|
} catch (h) {}
|
|
try {
|
|
this.movie.setHandCursor(this.handCursorEnabled)
|
|
} catch (h) {}
|
|
break;
|
|
case "mouseover":
|
|
if (this.domElement && this.cssEffects) {
|
|
this.domElement.addClass("hover");
|
|
if (this.recoverActive) {
|
|
this.domElement.addClass("active")
|
|
}
|
|
}
|
|
break;
|
|
case "mouseout":
|
|
if (this.domElement && this.cssEffects) {
|
|
this.recoverActive = false;
|
|
if (this.domElement.hasClass("active")) {
|
|
this.domElement.removeClass("active");
|
|
this.recoverActive = true
|
|
}
|
|
this.domElement.removeClass("hover")
|
|
}
|
|
break;
|
|
case "mousedown":
|
|
if (this.domElement && this.cssEffects) {
|
|
this.domElement.addClass("active")
|
|
}
|
|
break;
|
|
case "mouseup":
|
|
if (this.domElement && this.cssEffects) {
|
|
this.domElement.removeClass("active");
|
|
this.recoverActive = false
|
|
}
|
|
break
|
|
}
|
|
if (this.handlers[d]) {
|
|
for (var b = 0, a = this.handlers[d].length; b < a; b++) {
|
|
var g = this.handlers[d][b];
|
|
if (typeof(g) == "function") {
|
|
g(this, f)
|
|
} else {
|
|
if ((typeof(g) == "object") && (g.length == 2)) {
|
|
g[0][g[1]](this, f)
|
|
} else {
|
|
if (typeof(g) == "string") {
|
|
window[g](this, f)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}; |