diff --git a/dist/ZeroClipboard.Core.js b/dist/ZeroClipboard.Core.js index a20b66eb..5511a647 100644 --- a/dist/ZeroClipboard.Core.js +++ b/dist/ZeroClipboard.Core.js @@ -1675,5 +1675,5 @@ window.ZeroClipboard = ZeroClipboard; } })(function() { - return this; + return this || window; }()); \ No newline at end of file diff --git a/dist/ZeroClipboard.Core.min.js b/dist/ZeroClipboard.Core.min.js index ba59f643..1001ddf9 100644 --- a/dist/ZeroClipboard.Core.min.js +++ b/dist/ZeroClipboard.Core.min.js @@ -6,5 +6,5 @@ * http://zeroclipboard.org/ * v2.1.1 */ -!function(a,b){"use strict";var c,d=a,e=d.document,f=d.navigator,g=d.setTimeout,h=d.encodeURIComponent,i=d.ActiveXObject,j=d.Number.parseInt||d.parseInt,k=d.Number.parseFloat||d.parseFloat,l=d.Number.isNaN||d.isNaN,m=d.Math.round,n=d.Date.now,o=d.Object.keys,p=d.Object.defineProperty,q=d.Object.prototype.hasOwnProperty,r=d.Array.prototype.slice,s=function(a){return r.call(a,0)},t=function(){var a,c,d,e,f,g,h=s(arguments),i=h[0]||{};for(a=1,c=h.length;c>a;a++)if(null!=(d=h[a]))for(e in d)q.call(d,e)&&(f=i[e],g=d[e],i!==g&&g!==b&&(i[e]=g));return i},u=function(a){var b,c,d,e;if("object"!=typeof a||null==a)b=a;else if("number"==typeof a.length)for(b=[],c=0,d=a.length;d>c;c++)q.call(a,c)&&(b[c]=u(a[c]));else{b={};for(e in a)q.call(a,e)&&(b[e]=u(a[e]))}return b},v=function(a,b){for(var c={},d=0,e=b.length;e>d;d++)b[d]in a&&(c[b[d]]=a[b[d]]);return c},w=function(a,b){var c={};for(var d in a)-1===b.indexOf(d)&&(c[d]=a[d]);return c},x=function(a){if(a)for(var b in a)q.call(a,b)&&delete a[b];return a},y=function(a,b){if(a&&1===a.nodeType&&a.ownerDocument&&b&&(1===b.nodeType&&b.ownerDocument&&b.ownerDocument===a.ownerDocument||9===b.nodeType&&!b.ownerDocument&&b===a.ownerDocument))do{if(a===b)return!0;a=a.parentNode}while(a);return!1},z={bridge:null,version:"0.0.0",pluginType:"unknown",disabled:null,outdated:null,unavailable:null,deactivated:null,overdue:null,ready:null},A="11.0.0",B={},C={},D=null,E={ready:"Flash communication is established",error:{"flash-disabled":"Flash is disabled or not installed","flash-outdated":"Flash is too outdated to support ZeroClipboard","flash-unavailable":"Flash is unable to communicate bidirectionally with JavaScript","flash-deactivated":"Flash is too outdated for your browser and/or is configured as click-to-activate","flash-overdue":"Flash communication was established but NOT within the acceptable time limit"}},F=function(){var a,b,c,d,f="ZeroClipboard.swf";if(!e.currentScript||!(d=e.currentScript.src)){var g=e.getElementsByTagName("script");if("readyState"in g[0])for(a=g.length;a--&&("interactive"!==g[a].readyState||!(d=g[a].src)););else if("loading"===e.readyState)d=g[g.length-1].src;else{for(a=g.length;a--;){if(c=g[a].src,!c){b=null;break}if(c=c.split("#")[0].split("?")[0],c=c.slice(0,c.lastIndexOf("/")+1),null==b)b=c;else if(b!==c){b=null;break}}null!==b&&(d=b)}}return d&&(d=d.split("#")[0].split("?")[0],f=d.slice(0,d.lastIndexOf("/")+1)+f),f}(),G={swfPath:F,trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceEnhancedClipboard:!1,flashLoadTimeout:3e4,autoActivate:!0,bubbleEvents:!0,containerId:"global-zeroclipboard-html-bridge",containerClass:"global-zeroclipboard-container",swfObjectId:"global-zeroclipboard-flash-bridge",hoverClass:"zeroclipboard-is-hover",activeClass:"zeroclipboard-is-active",forceHandCursor:!1,title:null,zIndex:999999999},H=function(a){if("object"==typeof a&&null!==a)for(var b in a)if(q.call(a,b))if(/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(b))G[b]=a[b];else if(null==z.bridge)if("containerId"===b||"swfObjectId"===b){if(!W(a[b]))throw new Error("The specified `"+b+"` value is not valid as an HTML4 Element ID");G[b]=a[b]}else G[b]=a[b];{if("string"!=typeof a||!a)return u(G);if(q.call(G,a))return G[a]}},I=function(){return{browser:v(f,["userAgent","platform","appName"]),flash:w(z,["bridge"]),zeroclipboard:{version:xb.version,config:xb.config()}}},J=function(){return!!(z.disabled||z.outdated||z.unavailable||z.deactivated)},K=function(a,b){var c,d,e,f={};if("string"==typeof a&&a)e=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)q.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&xb.on(c,a[c]);if(e&&e.length){for(c=0,d=e.length;d>c;c++)a=e[c].replace(/^on/,""),f[a]=!0,B[a]||(B[a]=[]),B[a].push(b);if(f.ready&&z.ready&&xb.emit({type:"ready"}),f.error){var g=["disabled","outdated","unavailable","deactivated","overdue"];for(c=0,d=g.length;d>c;c++)if(z[g[c]]===!0){xb.emit({type:"error",name:"flash-"+g[c]});break}}}return xb},L=function(a,b){var c,d,e,f,g;if(0===arguments.length)f=o(B);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)q.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&xb.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=B[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return xb},M=function(a){var b;return b="string"==typeof a&&a?u(B[a])||null:u(B)},N=function(a){var b,c,d;return a=X(a),a&&!bb(a)?"ready"===a.type&&z.overdue===!0?xb.emit({type:"error",name:"flash-overdue"}):(b=t({},a),ab.call(this,b),"copy"===a.type&&(d=hb(C),c=d.data,D=d.formatMap),c):void 0},O=function(){if("boolean"!=typeof z.ready&&(z.ready=!1),!xb.isFlashUnusable()&&null===z.bridge){var a=G.flashLoadTimeout;"number"==typeof a&&a>=0&&g(function(){"boolean"!=typeof z.deactivated&&(z.deactivated=!0),z.deactivated===!0&&xb.emit({type:"error",name:"flash-deactivated"})},a),z.overdue=!1,fb()}},P=function(){xb.clearData(),xb.blur(),xb.emit("destroy"),gb(),xb.off()},Q=function(a,b){var c;if("object"==typeof a&&a&&"undefined"==typeof b)c=a,xb.clearData();else{if("string"!=typeof a||!a)return;c={},c[a]=b}for(var d in c)"string"==typeof d&&d&&q.call(c,d)&&"string"==typeof c[d]&&c[d]&&(C[d]=c[d])},R=function(a){"undefined"==typeof a?(x(C),D=null):"string"==typeof a&&q.call(C,a)&&delete C[a]},S=function(a){return"undefined"==typeof a?u(C):"string"==typeof a&&q.call(C,a)?C[a]:void 0},T=function(a){if(a&&1===a.nodeType){c&&(pb(c,G.activeClass),c!==a&&pb(c,G.hoverClass)),c=a,ob(a,G.hoverClass);var b=a.getAttribute("title")||G.title;if("string"==typeof b&&b){var d=eb(z.bridge);d&&d.setAttribute("title",b)}var e=G.forceHandCursor===!0||"pointer"===qb(a,"cursor");ub(e),tb()}},U=function(){var a=eb(z.bridge);a&&(a.removeAttribute("title"),a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.top="1px"),c&&(pb(c,G.hoverClass),pb(c,G.activeClass),c=null)},V=function(){return c||null},W=function(a){return"string"==typeof a&&a&&/^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(a)},X=function(a){var b;if("string"==typeof a&&a?(b=a,a={}):"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(b=a.type),b){t(a,{type:b.toLowerCase(),target:a.target||c||null,relatedTarget:a.relatedTarget||null,currentTarget:z&&z.bridge||null,timeStamp:a.timeStamp||n()||null});var d=E[a.type];return"error"===a.type&&a.name&&d&&(d=d[a.name]),d&&(a.message=d),"ready"===a.type&&t(a,{target:null,version:z.version}),"error"===a.type&&(/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(a.name)&&t(a,{target:null,minimumVersion:A}),/^flash-(outdated|unavailable|deactivated|overdue)$/.test(a.name)&&t(a,{version:z.version})),"copy"===a.type&&(a.clipboardData={setData:xb.setData,clearData:xb.clearData}),"aftercopy"===a.type&&(a=ib(a,D)),a.target&&!a.relatedTarget&&(a.relatedTarget=Y(a.target)),a=Z(a)}},Y=function(a){var b=a&&a.getAttribute&&a.getAttribute("data-clipboard-target");return b?e.getElementById(b):null},Z=function(a){if(a&&/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)){var c=a.target,f="_mouseover"===a.type&&a.relatedTarget?a.relatedTarget:b,g="_mouseout"===a.type&&a.relatedTarget?a.relatedTarget:b,h=sb(c),i=d.screenLeft||d.screenX||0,j=d.screenTop||d.screenY||0,k=e.body.scrollLeft+e.documentElement.scrollLeft,l=e.body.scrollTop+e.documentElement.scrollTop,m=h.left+("number"==typeof a._stageX?a._stageX:0),n=h.top+("number"==typeof a._stageY?a._stageY:0),o=m-k,p=n-l,q=i+o,r=j+p,s="number"==typeof a.movementX?a.movementX:0,u="number"==typeof a.movementY?a.movementY:0;delete a._stageX,delete a._stageY,t(a,{srcElement:c,fromElement:f,toElement:g,screenX:q,screenY:r,pageX:m,pageY:n,clientX:o,clientY:p,x:o,y:p,movementX:s,movementY:u,offsetX:0,offsetY:0,layerX:0,layerY:0})}return a},$=function(a){var b=a&&"string"==typeof a.type&&a.type||"";return!/^(?:(?:before)?copy|destroy)$/.test(b)},_=function(a,b,c,d){d?g(function(){a.apply(b,c)},0):a.apply(b,c)},ab=function(a){if("object"==typeof a&&a&&a.type){var b=$(a),c=B["*"]||[],e=B[a.type]||[],f=c.concat(e);if(f&&f.length){var g,h,i,j,k,l=this;for(g=0,h=f.length;h>g;g++)i=f[g],j=l,"string"==typeof i&&"function"==typeof d[i]&&(i=d[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=t({},a),_(i,j,[k],b))}return this}},bb=function(a){var b=a.target||c||null,d="swf"===a._source;delete a._source;var e=["flash-disabled","flash-outdated","flash-unavailable","flash-deactivated","flash-overdue"];switch(a.type){case"error":-1!==e.indexOf(a.name)&&t(z,{disabled:"flash-disabled"===a.name,outdated:"flash-outdated"===a.name,unavailable:"flash-unavailable"===a.name,deactivated:"flash-deactivated"===a.name,overdue:"flash-overdue"===a.name,ready:!1});break;case"ready":var f=z.deactivated===!0;t(z,{disabled:!1,outdated:!1,unavailable:!1,deactivated:!1,overdue:f,ready:!f});break;case"copy":var g,h,i=a.relatedTarget;!C["text/html"]&&!C["text/plain"]&&i&&(h=i.value||i.outerHTML||i.innerHTML)&&(g=i.value||i.textContent||i.innerText)?(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",g),h!==g&&a.clipboardData.setData("text/html",h)):!C["text/plain"]&&a.target&&(g=a.target.getAttribute("data-clipboard-text"))&&(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",g));break;case"aftercopy":xb.clearData(),b&&b!==nb()&&b.focus&&b.focus();break;case"_mouseover":xb.focus(b),G.bubbleEvents===!0&&d&&(b&&b!==a.relatedTarget&&!y(a.relatedTarget,b)&&cb(t({},a,{type:"mouseenter",bubbles:!1,cancelable:!1})),cb(t({},a,{type:"mouseover"})));break;case"_mouseout":xb.blur(),G.bubbleEvents===!0&&d&&(b&&b!==a.relatedTarget&&!y(a.relatedTarget,b)&&cb(t({},a,{type:"mouseleave",bubbles:!1,cancelable:!1})),cb(t({},a,{type:"mouseout"})));break;case"_mousedown":ob(b,G.activeClass),G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}));break;case"_mouseup":pb(b,G.activeClass),G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}));break;case"_click":case"_mousemove":G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}))}return/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)?!0:void 0},cb=function(a){if(a&&"string"==typeof a.type&&a){var b,c=a.target||null,f=c&&c.ownerDocument||e,g={view:f.defaultView||d,canBubble:!0,cancelable:!0,detail:"click"===a.type?1:0,button:"number"==typeof a.which?a.which-1:"number"==typeof a.button?a.button:f.createEvent?0:1},h=t(g,a);c&&f.createEvent&&c.dispatchEvent&&(h=[h.type,h.canBubble,h.cancelable,h.view,h.detail,h.screenX,h.screenY,h.clientX,h.clientY,h.ctrlKey,h.altKey,h.shiftKey,h.metaKey,h.button,h.relatedTarget],b=f.createEvent("MouseEvents"),b.initMouseEvent&&(b.initMouseEvent.apply(b,h),b._source="js",c.dispatchEvent(b)))}},db=function(){var a=e.createElement("div");return a.id=G.containerId,a.className=G.containerClass,a.style.position="absolute",a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.height="1px",a.style.zIndex=""+vb(G.zIndex),a},eb=function(a){for(var b=a&&a.parentNode;b&&"OBJECT"===b.nodeName&&b.parentNode;)b=b.parentNode;return b||null},fb=function(){var a,b=z.bridge,c=eb(b);if(!b){var f=mb(d.location.host,G),g="never"===f?"none":"all",h=kb(G),i=G.swfPath+jb(G.swfPath,G);c=db();var j=e.createElement("div");c.appendChild(j),e.body.appendChild(c);var k=e.createElement("div"),l="activex"===z.pluginType;k.innerHTML='"+(l?'':"")+'',b=k.firstChild,k=null,b.ZeroClipboard=xb,c.replaceChild(b,j)}return b||(b=e[G.swfObjectId],b&&(a=b.length)&&(b=b[a-1]),!b&&c&&(b=c.firstChild)),z.bridge=b||null,b},gb=function(){var a=z.bridge;if(a){var b=eb(a);b&&("activex"===z.pluginType&&"readyState"in a?(a.style.display="none",function c(){if(4===a.readyState){for(var d in a)"function"==typeof a[d]&&(a[d]=null);a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b)}else g(c,10)}()):(a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b))),z.ready=null,z.bridge=null,z.deactivated=null}},hb=function(a){var b={},c={};if("object"==typeof a&&a){for(var d in a)if(d&&q.call(a,d)&&"string"==typeof a[d]&&a[d])switch(d.toLowerCase()){case"text/plain":case"text":case"air:text":case"flash:text":b.text=a[d],c.text=d;break;case"text/html":case"html":case"air:html":case"flash:html":b.html=a[d],c.html=d;break;case"application/rtf":case"text/rtf":case"rtf":case"richtext":case"air:rtf":case"flash:rtf":b.rtf=a[d],c.rtf=d}return{data:b,formatMap:c}}},ib=function(a,b){if("object"!=typeof a||!a||"object"!=typeof b||!b)return a;var c={};for(var d in a)if(q.call(a,d)){if("success"!==d&&"data"!==d){c[d]=a[d];continue}c[d]={};var e=a[d];for(var f in e)f&&q.call(e,f)&&q.call(b,f)&&(c[d][b[f]]=e[f])}return c},jb=function(a,b){var c=null==b||b&&b.cacheBust===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+n():""},kb=function(a){var b,c,e,f,g="",i=[];if(a.trustedDomains&&("string"==typeof a.trustedDomains?f=[a.trustedDomains]:"object"==typeof a.trustedDomains&&"length"in a.trustedDomains&&(f=a.trustedDomains)),f&&f.length)for(b=0,c=f.length;c>b;b++)if(q.call(f,b)&&f[b]&&"string"==typeof f[b]){if(e=lb(f[b]),!e)continue;if("*"===e){i.length=0,i.push(e);break}i.push.apply(i,[e,"//"+e,d.location.protocol+"//"+e])}return i.length&&(g+="trustedOrigins="+h(i.join(","))),a.forceEnhancedClipboard===!0&&(g+=(g?"&":"")+"forceEnhancedClipboard=true"),"string"==typeof a.swfObjectId&&a.swfObjectId&&(g+=(g?"&":"")+"swfObjectId="+h(a.swfObjectId)),g},lb=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},mb=function(){var a=function(a){var b,c,d,e=[];if("string"==typeof a&&(a=[a]),"object"!=typeof a||!a||"number"!=typeof a.length)return e;for(b=0,c=a.length;c>b;b++)if(q.call(a,b)&&(d=lb(a[b]))){if("*"===d){e.length=0,e.push("*");break}-1===e.indexOf(d)&&e.push(d)}return e};return function(b,c){var d=lb(c.swfPath);null===d&&(d=b);var e=a(c.trustedDomains),f=e.length;if(f>0){if(1===f&&"*"===e[0])return"always";if(-1!==e.indexOf(b))return 1===f&&b===d?"sameDomain":"always"}return"never"}}(),nb=function(){try{return e.activeElement}catch(a){return null}},ob=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)||a.classList.add(b),a;if(b&&"string"==typeof b){var c=(b||"").split(/\s+/);if(1===a.nodeType)if(a.className){for(var d=" "+a.className+" ",e=a.className,f=0,g=c.length;g>f;f++)d.indexOf(" "+c[f]+" ")<0&&(e+=" "+c[f]);a.className=e.replace(/^\s+|\s+$/g,"")}else a.className=b}return a},pb=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)&&a.classList.remove(b),a;if("string"==typeof b&&b){var c=b.split(/\s+/);if(1===a.nodeType&&a.className){for(var d=(" "+a.className+" ").replace(/[\n\t]/g," "),e=0,f=c.length;f>e;e++)d=d.replace(" "+c[e]+" "," ");a.className=d.replace(/^\s+|\s+$/g,"")}}return a},qb=function(a,b){var c=d.getComputedStyle(a,null).getPropertyValue(b);return"cursor"!==b||c&&"auto"!==c||"A"!==a.nodeName?c:"pointer"},rb=function(){var a,b,c,d=1;return"function"==typeof e.body.getBoundingClientRect&&(a=e.body.getBoundingClientRect(),b=a.right-a.left,c=e.body.offsetWidth,d=m(b/c*100)/100),d},sb=function(a){var b={left:0,top:0,width:0,height:0};if(a.getBoundingClientRect){var c,f,g,h=a.getBoundingClientRect();"pageXOffset"in d&&"pageYOffset"in d?(c=d.pageXOffset,f=d.pageYOffset):(g=rb(),c=m(e.documentElement.scrollLeft/g),f=m(e.documentElement.scrollTop/g));var i=e.documentElement.clientLeft||0,j=e.documentElement.clientTop||0;b.left=h.left+c-i,b.top=h.top+f-j,b.width="width"in h?h.width:h.right-h.left,b.height="height"in h?h.height:h.bottom-h.top}return b},tb=function(){var a;if(c&&(a=eb(z.bridge))){var b=sb(c);t(a.style,{width:b.width+"px",height:b.height+"px",top:b.top+"px",left:b.left+"px",zIndex:""+vb(G.zIndex)})}},ub=function(a){z.ready===!0&&(z.bridge&&"function"==typeof z.bridge.setHandCursor?z.bridge.setHandCursor(a):z.ready=!1)},vb=function(a){if(/^(?:auto|inherit)$/.test(a))return a;var b;return"number"!=typeof a||l(a)?"string"==typeof a&&(b=vb(j(a,10))):b=a,"number"==typeof b?b:"auto"},wb=function(a){function b(a){var b=a.match(/[\d]+/g);return b.length=3,b.join(".")}function c(a){return!!a&&(a=a.toLowerCase())&&(/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(a)||"chrome.plugin"===a.slice(-13))}function d(a){a&&(i=!0,a.version&&(m=b(a.version)),!m&&a.description&&(m=b(a.description)),a.filename&&(l=c(a.filename)))}var e,g,h,i=!1,j=!1,l=!1,m="";if(f.plugins&&f.plugins.length)e=f.plugins["Shockwave Flash"],d(e),f.plugins["Shockwave Flash 2.0"]&&(i=!0,m="2.0.0.11");else if(f.mimeTypes&&f.mimeTypes.length)h=f.mimeTypes["application/x-shockwave-flash"],e=h&&h.enabledPlugin,d(e);else if("undefined"!=typeof a){j=!0;try{g=new a("ShockwaveFlash.ShockwaveFlash.7"),i=!0,m=b(g.GetVariable("$version"))}catch(n){try{g=new a("ShockwaveFlash.ShockwaveFlash.6"),i=!0,m="6.0.21"}catch(o){try{g=new a("ShockwaveFlash.ShockwaveFlash"),i=!0,m=b(g.GetVariable("$version"))}catch(p){j=!1}}}}z.disabled=i!==!0,z.outdated=m&&k(m)a;a++)if(null!=(d=h[a]))for(e in d)q.call(d,e)&&(f=i[e],g=d[e],i!==g&&g!==b&&(i[e]=g));return i},u=function(a){var b,c,d,e;if("object"!=typeof a||null==a)b=a;else if("number"==typeof a.length)for(b=[],c=0,d=a.length;d>c;c++)q.call(a,c)&&(b[c]=u(a[c]));else{b={};for(e in a)q.call(a,e)&&(b[e]=u(a[e]))}return b},v=function(a,b){for(var c={},d=0,e=b.length;e>d;d++)b[d]in a&&(c[b[d]]=a[b[d]]);return c},w=function(a,b){var c={};for(var d in a)-1===b.indexOf(d)&&(c[d]=a[d]);return c},x=function(a){if(a)for(var b in a)q.call(a,b)&&delete a[b];return a},y=function(a,b){if(a&&1===a.nodeType&&a.ownerDocument&&b&&(1===b.nodeType&&b.ownerDocument&&b.ownerDocument===a.ownerDocument||9===b.nodeType&&!b.ownerDocument&&b===a.ownerDocument))do{if(a===b)return!0;a=a.parentNode}while(a);return!1},z={bridge:null,version:"0.0.0",pluginType:"unknown",disabled:null,outdated:null,unavailable:null,deactivated:null,overdue:null,ready:null},A="11.0.0",B={},C={},D=null,E={ready:"Flash communication is established",error:{"flash-disabled":"Flash is disabled or not installed","flash-outdated":"Flash is too outdated to support ZeroClipboard","flash-unavailable":"Flash is unable to communicate bidirectionally with JavaScript","flash-deactivated":"Flash is too outdated for your browser and/or is configured as click-to-activate","flash-overdue":"Flash communication was established but NOT within the acceptable time limit"}},F=function(){var a,b,c,d,f="ZeroClipboard.swf";if(!e.currentScript||!(d=e.currentScript.src)){var g=e.getElementsByTagName("script");if("readyState"in g[0])for(a=g.length;a--&&("interactive"!==g[a].readyState||!(d=g[a].src)););else if("loading"===e.readyState)d=g[g.length-1].src;else{for(a=g.length;a--;){if(c=g[a].src,!c){b=null;break}if(c=c.split("#")[0].split("?")[0],c=c.slice(0,c.lastIndexOf("/")+1),null==b)b=c;else if(b!==c){b=null;break}}null!==b&&(d=b)}}return d&&(d=d.split("#")[0].split("?")[0],f=d.slice(0,d.lastIndexOf("/")+1)+f),f}(),G={swfPath:F,trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceEnhancedClipboard:!1,flashLoadTimeout:3e4,autoActivate:!0,bubbleEvents:!0,containerId:"global-zeroclipboard-html-bridge",containerClass:"global-zeroclipboard-container",swfObjectId:"global-zeroclipboard-flash-bridge",hoverClass:"zeroclipboard-is-hover",activeClass:"zeroclipboard-is-active",forceHandCursor:!1,title:null,zIndex:999999999},H=function(a){if("object"==typeof a&&null!==a)for(var b in a)if(q.call(a,b))if(/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(b))G[b]=a[b];else if(null==z.bridge)if("containerId"===b||"swfObjectId"===b){if(!W(a[b]))throw new Error("The specified `"+b+"` value is not valid as an HTML4 Element ID");G[b]=a[b]}else G[b]=a[b];{if("string"!=typeof a||!a)return u(G);if(q.call(G,a))return G[a]}},I=function(){return{browser:v(f,["userAgent","platform","appName"]),flash:w(z,["bridge"]),zeroclipboard:{version:xb.version,config:xb.config()}}},J=function(){return!!(z.disabled||z.outdated||z.unavailable||z.deactivated)},K=function(a,b){var c,d,e,f={};if("string"==typeof a&&a)e=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)q.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&xb.on(c,a[c]);if(e&&e.length){for(c=0,d=e.length;d>c;c++)a=e[c].replace(/^on/,""),f[a]=!0,B[a]||(B[a]=[]),B[a].push(b);if(f.ready&&z.ready&&xb.emit({type:"ready"}),f.error){var g=["disabled","outdated","unavailable","deactivated","overdue"];for(c=0,d=g.length;d>c;c++)if(z[g[c]]===!0){xb.emit({type:"error",name:"flash-"+g[c]});break}}}return xb},L=function(a,b){var c,d,e,f,g;if(0===arguments.length)f=o(B);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)q.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&xb.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=B[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return xb},M=function(a){var b;return b="string"==typeof a&&a?u(B[a])||null:u(B)},N=function(a){var b,c,d;return a=X(a),a&&!bb(a)?"ready"===a.type&&z.overdue===!0?xb.emit({type:"error",name:"flash-overdue"}):(b=t({},a),ab.call(this,b),"copy"===a.type&&(d=hb(C),c=d.data,D=d.formatMap),c):void 0},O=function(){if("boolean"!=typeof z.ready&&(z.ready=!1),!xb.isFlashUnusable()&&null===z.bridge){var a=G.flashLoadTimeout;"number"==typeof a&&a>=0&&g(function(){"boolean"!=typeof z.deactivated&&(z.deactivated=!0),z.deactivated===!0&&xb.emit({type:"error",name:"flash-deactivated"})},a),z.overdue=!1,fb()}},P=function(){xb.clearData(),xb.blur(),xb.emit("destroy"),gb(),xb.off()},Q=function(a,b){var c;if("object"==typeof a&&a&&"undefined"==typeof b)c=a,xb.clearData();else{if("string"!=typeof a||!a)return;c={},c[a]=b}for(var d in c)"string"==typeof d&&d&&q.call(c,d)&&"string"==typeof c[d]&&c[d]&&(C[d]=c[d])},R=function(a){"undefined"==typeof a?(x(C),D=null):"string"==typeof a&&q.call(C,a)&&delete C[a]},S=function(a){return"undefined"==typeof a?u(C):"string"==typeof a&&q.call(C,a)?C[a]:void 0},T=function(a){if(a&&1===a.nodeType){c&&(pb(c,G.activeClass),c!==a&&pb(c,G.hoverClass)),c=a,ob(a,G.hoverClass);var b=a.getAttribute("title")||G.title;if("string"==typeof b&&b){var d=eb(z.bridge);d&&d.setAttribute("title",b)}var e=G.forceHandCursor===!0||"pointer"===qb(a,"cursor");ub(e),tb()}},U=function(){var a=eb(z.bridge);a&&(a.removeAttribute("title"),a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.top="1px"),c&&(pb(c,G.hoverClass),pb(c,G.activeClass),c=null)},V=function(){return c||null},W=function(a){return"string"==typeof a&&a&&/^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(a)},X=function(a){var b;if("string"==typeof a&&a?(b=a,a={}):"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(b=a.type),b){t(a,{type:b.toLowerCase(),target:a.target||c||null,relatedTarget:a.relatedTarget||null,currentTarget:z&&z.bridge||null,timeStamp:a.timeStamp||n()||null});var d=E[a.type];return"error"===a.type&&a.name&&d&&(d=d[a.name]),d&&(a.message=d),"ready"===a.type&&t(a,{target:null,version:z.version}),"error"===a.type&&(/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(a.name)&&t(a,{target:null,minimumVersion:A}),/^flash-(outdated|unavailable|deactivated|overdue)$/.test(a.name)&&t(a,{version:z.version})),"copy"===a.type&&(a.clipboardData={setData:xb.setData,clearData:xb.clearData}),"aftercopy"===a.type&&(a=ib(a,D)),a.target&&!a.relatedTarget&&(a.relatedTarget=Y(a.target)),a=Z(a)}},Y=function(a){var b=a&&a.getAttribute&&a.getAttribute("data-clipboard-target");return b?e.getElementById(b):null},Z=function(a){if(a&&/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)){var c=a.target,f="_mouseover"===a.type&&a.relatedTarget?a.relatedTarget:b,g="_mouseout"===a.type&&a.relatedTarget?a.relatedTarget:b,h=sb(c),i=d.screenLeft||d.screenX||0,j=d.screenTop||d.screenY||0,k=e.body.scrollLeft+e.documentElement.scrollLeft,l=e.body.scrollTop+e.documentElement.scrollTop,m=h.left+("number"==typeof a._stageX?a._stageX:0),n=h.top+("number"==typeof a._stageY?a._stageY:0),o=m-k,p=n-l,q=i+o,r=j+p,s="number"==typeof a.movementX?a.movementX:0,u="number"==typeof a.movementY?a.movementY:0;delete a._stageX,delete a._stageY,t(a,{srcElement:c,fromElement:f,toElement:g,screenX:q,screenY:r,pageX:m,pageY:n,clientX:o,clientY:p,x:o,y:p,movementX:s,movementY:u,offsetX:0,offsetY:0,layerX:0,layerY:0})}return a},$=function(a){var b=a&&"string"==typeof a.type&&a.type||"";return!/^(?:(?:before)?copy|destroy)$/.test(b)},_=function(a,b,c,d){d?g(function(){a.apply(b,c)},0):a.apply(b,c)},ab=function(a){if("object"==typeof a&&a&&a.type){var b=$(a),c=B["*"]||[],e=B[a.type]||[],f=c.concat(e);if(f&&f.length){var g,h,i,j,k,l=this;for(g=0,h=f.length;h>g;g++)i=f[g],j=l,"string"==typeof i&&"function"==typeof d[i]&&(i=d[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=t({},a),_(i,j,[k],b))}return this}},bb=function(a){var b=a.target||c||null,d="swf"===a._source;delete a._source;var e=["flash-disabled","flash-outdated","flash-unavailable","flash-deactivated","flash-overdue"];switch(a.type){case"error":-1!==e.indexOf(a.name)&&t(z,{disabled:"flash-disabled"===a.name,outdated:"flash-outdated"===a.name,unavailable:"flash-unavailable"===a.name,deactivated:"flash-deactivated"===a.name,overdue:"flash-overdue"===a.name,ready:!1});break;case"ready":var f=z.deactivated===!0;t(z,{disabled:!1,outdated:!1,unavailable:!1,deactivated:!1,overdue:f,ready:!f});break;case"copy":var g,h,i=a.relatedTarget;!C["text/html"]&&!C["text/plain"]&&i&&(h=i.value||i.outerHTML||i.innerHTML)&&(g=i.value||i.textContent||i.innerText)?(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",g),h!==g&&a.clipboardData.setData("text/html",h)):!C["text/plain"]&&a.target&&(g=a.target.getAttribute("data-clipboard-text"))&&(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",g));break;case"aftercopy":xb.clearData(),b&&b!==nb()&&b.focus&&b.focus();break;case"_mouseover":xb.focus(b),G.bubbleEvents===!0&&d&&(b&&b!==a.relatedTarget&&!y(a.relatedTarget,b)&&cb(t({},a,{type:"mouseenter",bubbles:!1,cancelable:!1})),cb(t({},a,{type:"mouseover"})));break;case"_mouseout":xb.blur(),G.bubbleEvents===!0&&d&&(b&&b!==a.relatedTarget&&!y(a.relatedTarget,b)&&cb(t({},a,{type:"mouseleave",bubbles:!1,cancelable:!1})),cb(t({},a,{type:"mouseout"})));break;case"_mousedown":ob(b,G.activeClass),G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}));break;case"_mouseup":pb(b,G.activeClass),G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}));break;case"_click":case"_mousemove":G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}))}return/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)?!0:void 0},cb=function(a){if(a&&"string"==typeof a.type&&a){var b,c=a.target||null,f=c&&c.ownerDocument||e,g={view:f.defaultView||d,canBubble:!0,cancelable:!0,detail:"click"===a.type?1:0,button:"number"==typeof a.which?a.which-1:"number"==typeof a.button?a.button:f.createEvent?0:1},h=t(g,a);c&&f.createEvent&&c.dispatchEvent&&(h=[h.type,h.canBubble,h.cancelable,h.view,h.detail,h.screenX,h.screenY,h.clientX,h.clientY,h.ctrlKey,h.altKey,h.shiftKey,h.metaKey,h.button,h.relatedTarget],b=f.createEvent("MouseEvents"),b.initMouseEvent&&(b.initMouseEvent.apply(b,h),b._source="js",c.dispatchEvent(b)))}},db=function(){var a=e.createElement("div");return a.id=G.containerId,a.className=G.containerClass,a.style.position="absolute",a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.height="1px",a.style.zIndex=""+vb(G.zIndex),a},eb=function(a){for(var b=a&&a.parentNode;b&&"OBJECT"===b.nodeName&&b.parentNode;)b=b.parentNode;return b||null},fb=function(){var a,b=z.bridge,c=eb(b);if(!b){var f=mb(d.location.host,G),g="never"===f?"none":"all",h=kb(G),i=G.swfPath+jb(G.swfPath,G);c=db();var j=e.createElement("div");c.appendChild(j),e.body.appendChild(c);var k=e.createElement("div"),l="activex"===z.pluginType;k.innerHTML='"+(l?'':"")+'',b=k.firstChild,k=null,b.ZeroClipboard=xb,c.replaceChild(b,j)}return b||(b=e[G.swfObjectId],b&&(a=b.length)&&(b=b[a-1]),!b&&c&&(b=c.firstChild)),z.bridge=b||null,b},gb=function(){var a=z.bridge;if(a){var b=eb(a);b&&("activex"===z.pluginType&&"readyState"in a?(a.style.display="none",function c(){if(4===a.readyState){for(var d in a)"function"==typeof a[d]&&(a[d]=null);a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b)}else g(c,10)}()):(a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b))),z.ready=null,z.bridge=null,z.deactivated=null}},hb=function(a){var b={},c={};if("object"==typeof a&&a){for(var d in a)if(d&&q.call(a,d)&&"string"==typeof a[d]&&a[d])switch(d.toLowerCase()){case"text/plain":case"text":case"air:text":case"flash:text":b.text=a[d],c.text=d;break;case"text/html":case"html":case"air:html":case"flash:html":b.html=a[d],c.html=d;break;case"application/rtf":case"text/rtf":case"rtf":case"richtext":case"air:rtf":case"flash:rtf":b.rtf=a[d],c.rtf=d}return{data:b,formatMap:c}}},ib=function(a,b){if("object"!=typeof a||!a||"object"!=typeof b||!b)return a;var c={};for(var d in a)if(q.call(a,d)){if("success"!==d&&"data"!==d){c[d]=a[d];continue}c[d]={};var e=a[d];for(var f in e)f&&q.call(e,f)&&q.call(b,f)&&(c[d][b[f]]=e[f])}return c},jb=function(a,b){var c=null==b||b&&b.cacheBust===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+n():""},kb=function(a){var b,c,e,f,g="",i=[];if(a.trustedDomains&&("string"==typeof a.trustedDomains?f=[a.trustedDomains]:"object"==typeof a.trustedDomains&&"length"in a.trustedDomains&&(f=a.trustedDomains)),f&&f.length)for(b=0,c=f.length;c>b;b++)if(q.call(f,b)&&f[b]&&"string"==typeof f[b]){if(e=lb(f[b]),!e)continue;if("*"===e){i.length=0,i.push(e);break}i.push.apply(i,[e,"//"+e,d.location.protocol+"//"+e])}return i.length&&(g+="trustedOrigins="+h(i.join(","))),a.forceEnhancedClipboard===!0&&(g+=(g?"&":"")+"forceEnhancedClipboard=true"),"string"==typeof a.swfObjectId&&a.swfObjectId&&(g+=(g?"&":"")+"swfObjectId="+h(a.swfObjectId)),g},lb=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},mb=function(){var a=function(a){var b,c,d,e=[];if("string"==typeof a&&(a=[a]),"object"!=typeof a||!a||"number"!=typeof a.length)return e;for(b=0,c=a.length;c>b;b++)if(q.call(a,b)&&(d=lb(a[b]))){if("*"===d){e.length=0,e.push("*");break}-1===e.indexOf(d)&&e.push(d)}return e};return function(b,c){var d=lb(c.swfPath);null===d&&(d=b);var e=a(c.trustedDomains),f=e.length;if(f>0){if(1===f&&"*"===e[0])return"always";if(-1!==e.indexOf(b))return 1===f&&b===d?"sameDomain":"always"}return"never"}}(),nb=function(){try{return e.activeElement}catch(a){return null}},ob=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)||a.classList.add(b),a;if(b&&"string"==typeof b){var c=(b||"").split(/\s+/);if(1===a.nodeType)if(a.className){for(var d=" "+a.className+" ",e=a.className,f=0,g=c.length;g>f;f++)d.indexOf(" "+c[f]+" ")<0&&(e+=" "+c[f]);a.className=e.replace(/^\s+|\s+$/g,"")}else a.className=b}return a},pb=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)&&a.classList.remove(b),a;if("string"==typeof b&&b){var c=b.split(/\s+/);if(1===a.nodeType&&a.className){for(var d=(" "+a.className+" ").replace(/[\n\t]/g," "),e=0,f=c.length;f>e;e++)d=d.replace(" "+c[e]+" "," ");a.className=d.replace(/^\s+|\s+$/g,"")}}return a},qb=function(a,b){var c=d.getComputedStyle(a,null).getPropertyValue(b);return"cursor"!==b||c&&"auto"!==c||"A"!==a.nodeName?c:"pointer"},rb=function(){var a,b,c,d=1;return"function"==typeof e.body.getBoundingClientRect&&(a=e.body.getBoundingClientRect(),b=a.right-a.left,c=e.body.offsetWidth,d=m(b/c*100)/100),d},sb=function(a){var b={left:0,top:0,width:0,height:0};if(a.getBoundingClientRect){var c,f,g,h=a.getBoundingClientRect();"pageXOffset"in d&&"pageYOffset"in d?(c=d.pageXOffset,f=d.pageYOffset):(g=rb(),c=m(e.documentElement.scrollLeft/g),f=m(e.documentElement.scrollTop/g));var i=e.documentElement.clientLeft||0,j=e.documentElement.clientTop||0;b.left=h.left+c-i,b.top=h.top+f-j,b.width="width"in h?h.width:h.right-h.left,b.height="height"in h?h.height:h.bottom-h.top}return b},tb=function(){var a;if(c&&(a=eb(z.bridge))){var b=sb(c);t(a.style,{width:b.width+"px",height:b.height+"px",top:b.top+"px",left:b.left+"px",zIndex:""+vb(G.zIndex)})}},ub=function(a){z.ready===!0&&(z.bridge&&"function"==typeof z.bridge.setHandCursor?z.bridge.setHandCursor(a):z.ready=!1)},vb=function(a){if(/^(?:auto|inherit)$/.test(a))return a;var b;return"number"!=typeof a||l(a)?"string"==typeof a&&(b=vb(j(a,10))):b=a,"number"==typeof b?b:"auto"},wb=function(a){function b(a){var b=a.match(/[\d]+/g);return b.length=3,b.join(".")}function c(a){return!!a&&(a=a.toLowerCase())&&(/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(a)||"chrome.plugin"===a.slice(-13))}function d(a){a&&(i=!0,a.version&&(m=b(a.version)),!m&&a.description&&(m=b(a.description)),a.filename&&(l=c(a.filename)))}var e,g,h,i=!1,j=!1,l=!1,m="";if(f.plugins&&f.plugins.length)e=f.plugins["Shockwave Flash"],d(e),f.plugins["Shockwave Flash 2.0"]&&(i=!0,m="2.0.0.11");else if(f.mimeTypes&&f.mimeTypes.length)h=f.mimeTypes["application/x-shockwave-flash"],e=h&&h.enabledPlugin,d(e);else if("undefined"!=typeof a){j=!0;try{g=new a("ShockwaveFlash.ShockwaveFlash.7"),i=!0,m=b(g.GetVariable("$version"))}catch(n){try{g=new a("ShockwaveFlash.ShockwaveFlash.6"),i=!0,m="6.0.21"}catch(o){try{g=new a("ShockwaveFlash.ShockwaveFlash"),i=!0,m=b(g.GetVariable("$version"))}catch(p){j=!1}}}}z.disabled=i!==!0,z.outdated=m&&k(m)= 0) {\n _setTimeout(function() {\n if (typeof _flashState.deactivated !== \"boolean\") {\n _flashState.deactivated = true;\n }\n if (_flashState.deactivated === true) {\n ZeroClipboard.emit({\n type: \"error\",\n name: \"flash-deactivated\"\n });\n }\n }, maxWait);\n }\n _flashState.overdue = false;\n _embedSwf();\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.destroy`.\n * @private\n */\n var _destroy = function() {\n ZeroClipboard.clearData();\n ZeroClipboard.blur();\n ZeroClipboard.emit(\"destroy\");\n _unembedSwf();\n ZeroClipboard.off();\n };\n /**\n * The underlying implementation of `ZeroClipboard.setData`.\n * @private\n */\n var _setData = function(format, data) {\n var dataObj;\n if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n dataObj = format;\n ZeroClipboard.clearData();\n } else if (typeof format === \"string\" && format) {\n dataObj = {};\n dataObj[format] = data;\n } else {\n return;\n }\n for (var dataFormat in dataObj) {\n if (typeof dataFormat === \"string\" && dataFormat && _hasOwn.call(dataObj, dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n _clipData[dataFormat] = dataObj[dataFormat];\n }\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.clearData`.\n * @private\n */\n var _clearData = function(format) {\n if (typeof format === \"undefined\") {\n _deleteOwnProperties(_clipData);\n _clipDataFormatMap = null;\n } else if (typeof format === \"string\" && _hasOwn.call(_clipData, format)) {\n delete _clipData[format];\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.getData`.\n * @private\n */\n var _getData = function(format) {\n if (typeof format === \"undefined\") {\n return _deepCopy(_clipData);\n } else if (typeof format === \"string\" && _hasOwn.call(_clipData, format)) {\n return _clipData[format];\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.focus`/`ZeroClipboard.activate`.\n * @private\n */\n var _focus = function(element) {\n if (!(element && element.nodeType === 1)) {\n return;\n }\n if (_currentElement) {\n _removeClass(_currentElement, _globalConfig.activeClass);\n if (_currentElement !== element) {\n _removeClass(_currentElement, _globalConfig.hoverClass);\n }\n }\n _currentElement = element;\n _addClass(element, _globalConfig.hoverClass);\n var newTitle = element.getAttribute(\"title\") || _globalConfig.title;\n if (typeof newTitle === \"string\" && newTitle) {\n var htmlBridge = _getHtmlBridge(_flashState.bridge);\n if (htmlBridge) {\n htmlBridge.setAttribute(\"title\", newTitle);\n }\n }\n var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n _setHandCursor(useHandCursor);\n _reposition();\n };\n /**\n * The underlying implementation of `ZeroClipboard.blur`/`ZeroClipboard.deactivate`.\n * @private\n */\n var _blur = function() {\n var htmlBridge = _getHtmlBridge(_flashState.bridge);\n if (htmlBridge) {\n htmlBridge.removeAttribute(\"title\");\n htmlBridge.style.left = \"0px\";\n htmlBridge.style.top = \"-9999px\";\n htmlBridge.style.width = \"1px\";\n htmlBridge.style.top = \"1px\";\n }\n if (_currentElement) {\n _removeClass(_currentElement, _globalConfig.hoverClass);\n _removeClass(_currentElement, _globalConfig.activeClass);\n _currentElement = null;\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.activeElement`.\n * @private\n */\n var _activeElement = function() {\n return _currentElement || null;\n };\n /**\n * Check if a value is a valid HTML4 `ID` or `Name` token.\n * @private\n */\n var _isValidHtml4Id = function(id) {\n return typeof id === \"string\" && id && /^[A-Za-z][A-Za-z0-9_:\\-\\.]*$/.test(id);\n };\n /**\n * Create or update an `event` object, based on the `eventType`.\n * @private\n */\n var _createEvent = function(event) {\n var eventType;\n if (typeof event === \"string\" && event) {\n eventType = event;\n event = {};\n } else if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n eventType = event.type;\n }\n if (!eventType) {\n return;\n }\n _extend(event, {\n type: eventType.toLowerCase(),\n target: event.target || _currentElement || null,\n relatedTarget: event.relatedTarget || null,\n currentTarget: _flashState && _flashState.bridge || null,\n timeStamp: event.timeStamp || _now() || null\n });\n var msg = _eventMessages[event.type];\n if (event.type === \"error\" && event.name && msg) {\n msg = msg[event.name];\n }\n if (msg) {\n event.message = msg;\n }\n if (event.type === \"ready\") {\n _extend(event, {\n target: null,\n version: _flashState.version\n });\n }\n if (event.type === \"error\") {\n if (/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n _extend(event, {\n target: null,\n minimumVersion: _minimumFlashVersion\n });\n }\n if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n _extend(event, {\n version: _flashState.version\n });\n }\n }\n if (event.type === \"copy\") {\n event.clipboardData = {\n setData: ZeroClipboard.setData,\n clearData: ZeroClipboard.clearData\n };\n }\n if (event.type === \"aftercopy\") {\n event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n }\n if (event.target && !event.relatedTarget) {\n event.relatedTarget = _getRelatedTarget(event.target);\n }\n event = _addMouseData(event);\n return event;\n };\n /**\n * Get a relatedTarget from the target's `data-clipboard-target` attribute\n * @private\n */\n var _getRelatedTarget = function(targetEl) {\n var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n return relatedTargetId ? _document.getElementById(relatedTargetId) : null;\n };\n /**\n * Add element and position data to `MouseEvent` instances\n * @private\n */\n var _addMouseData = function(event) {\n if (event && /^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n var srcElement = event.target;\n var fromElement = event.type === \"_mouseover\" && event.relatedTarget ? event.relatedTarget : undefined;\n var toElement = event.type === \"_mouseout\" && event.relatedTarget ? event.relatedTarget : undefined;\n var pos = _getDOMObjectPosition(srcElement);\n var screenLeft = _window.screenLeft || _window.screenX || 0;\n var screenTop = _window.screenTop || _window.screenY || 0;\n var scrollLeft = _document.body.scrollLeft + _document.documentElement.scrollLeft;\n var scrollTop = _document.body.scrollTop + _document.documentElement.scrollTop;\n var pageX = pos.left + (typeof event._stageX === \"number\" ? event._stageX : 0);\n var pageY = pos.top + (typeof event._stageY === \"number\" ? event._stageY : 0);\n var clientX = pageX - scrollLeft;\n var clientY = pageY - scrollTop;\n var screenX = screenLeft + clientX;\n var screenY = screenTop + clientY;\n var moveX = typeof event.movementX === \"number\" ? event.movementX : 0;\n var moveY = typeof event.movementY === \"number\" ? event.movementY : 0;\n delete event._stageX;\n delete event._stageY;\n _extend(event, {\n srcElement: srcElement,\n fromElement: fromElement,\n toElement: toElement,\n screenX: screenX,\n screenY: screenY,\n pageX: pageX,\n pageY: pageY,\n clientX: clientX,\n clientY: clientY,\n x: clientX,\n y: clientY,\n movementX: moveX,\n movementY: moveY,\n offsetX: 0,\n offsetY: 0,\n layerX: 0,\n layerY: 0\n });\n }\n return event;\n };\n /**\n * Determine if an event's registered handlers should be execute synchronously or asynchronously.\n *\n * @returns {boolean}\n * @private\n */\n var _shouldPerformAsync = function(event) {\n var eventType = event && typeof event.type === \"string\" && event.type || \"\";\n return !/^(?:(?:before)?copy|destroy)$/.test(eventType);\n };\n /**\n * Control if a callback should be executed asynchronously or not.\n *\n * @returns `undefined`\n * @private\n */\n var _dispatchCallback = function(func, context, args, async) {\n if (async) {\n _setTimeout(function() {\n func.apply(context, args);\n }, 0);\n } else {\n func.apply(context, args);\n }\n };\n /**\n * Handle the actual dispatching of events to client instances.\n *\n * @returns `undefined`\n * @private\n */\n var _dispatchCallbacks = function(event) {\n if (!(typeof event === \"object\" && event && event.type)) {\n return;\n }\n var async = _shouldPerformAsync(event);\n var wildcardTypeHandlers = _handlers[\"*\"] || [];\n var specificTypeHandlers = _handlers[event.type] || [];\n var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);\n if (handlers && handlers.length) {\n var i, len, func, context, eventCopy, originalContext = this;\n for (i = 0, len = handlers.length; i < len; i++) {\n func = handlers[i];\n context = originalContext;\n if (typeof func === \"string\" && typeof _window[func] === \"function\") {\n func = _window[func];\n }\n if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n context = func;\n func = func.handleEvent;\n }\n if (typeof func === \"function\") {\n eventCopy = _extend({}, event);\n _dispatchCallback(func, context, [ eventCopy ], async);\n }\n }\n }\n return this;\n };\n /**\n * Preprocess any special behaviors, reactions, or state changes after receiving this event.\n * Executes only once per event emitted, NOT once per client.\n * @private\n */\n var _preprocessEvent = function(event) {\n var element = event.target || _currentElement || null;\n var sourceIsSwf = event._source === \"swf\";\n delete event._source;\n var flashErrorNames = [ \"flash-disabled\", \"flash-outdated\", \"flash-unavailable\", \"flash-deactivated\", \"flash-overdue\" ];\n switch (event.type) {\n case \"error\":\n if (flashErrorNames.indexOf(event.name) !== -1) {\n _extend(_flashState, {\n disabled: event.name === \"flash-disabled\",\n outdated: event.name === \"flash-outdated\",\n unavailable: event.name === \"flash-unavailable\",\n deactivated: event.name === \"flash-deactivated\",\n overdue: event.name === \"flash-overdue\",\n ready: false\n });\n }\n break;\n\n case \"ready\":\n var wasDeactivated = _flashState.deactivated === true;\n _extend(_flashState, {\n disabled: false,\n outdated: false,\n unavailable: false,\n deactivated: false,\n overdue: wasDeactivated,\n ready: !wasDeactivated\n });\n break;\n\n case \"copy\":\n var textContent, htmlContent, targetEl = event.relatedTarget;\n if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n event.clipboardData.clearData();\n event.clipboardData.setData(\"text/plain\", textContent);\n if (htmlContent !== textContent) {\n event.clipboardData.setData(\"text/html\", htmlContent);\n }\n } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n event.clipboardData.clearData();\n event.clipboardData.setData(\"text/plain\", textContent);\n }\n break;\n\n case \"aftercopy\":\n ZeroClipboard.clearData();\n if (element && element !== _safeActiveElement() && element.focus) {\n element.focus();\n }\n break;\n\n case \"_mouseover\":\n ZeroClipboard.focus(element);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseenter\",\n bubbles: false,\n cancelable: false\n }));\n }\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseover\"\n }));\n }\n break;\n\n case \"_mouseout\":\n ZeroClipboard.blur();\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseleave\",\n bubbles: false,\n cancelable: false\n }));\n }\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseout\"\n }));\n }\n break;\n\n case \"_mousedown\":\n _addClass(element, _globalConfig.activeClass);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n\n case \"_mouseup\":\n _removeClass(element, _globalConfig.activeClass);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n\n case \"_click\":\n case \"_mousemove\":\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n }\n if (/^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n return true;\n }\n };\n /**\n * Dispatch a synthetic MouseEvent.\n *\n * @returns `undefined`\n * @private\n */\n var _fireMouseEvent = function(event) {\n if (!(event && typeof event.type === \"string\" && event)) {\n return;\n }\n var e, target = event.target || null, doc = target && target.ownerDocument || _document, defaults = {\n view: doc.defaultView || _window,\n canBubble: true,\n cancelable: true,\n detail: event.type === \"click\" ? 1 : 0,\n button: typeof event.which === \"number\" ? event.which - 1 : typeof event.button === \"number\" ? event.button : doc.createEvent ? 0 : 1\n }, args = _extend(defaults, event);\n if (!target) {\n return;\n }\n if (doc.createEvent && target.dispatchEvent) {\n args = [ args.type, args.canBubble, args.cancelable, args.view, args.detail, args.screenX, args.screenY, args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, args.relatedTarget ];\n e = doc.createEvent(\"MouseEvents\");\n if (e.initMouseEvent) {\n e.initMouseEvent.apply(e, args);\n e._source = \"js\";\n target.dispatchEvent(e);\n }\n }\n };\n /**\n * Create the HTML bridge element to embed the Flash object into.\n * @private\n */\n var _createHtmlBridge = function() {\n var container = _document.createElement(\"div\");\n container.id = _globalConfig.containerId;\n container.className = _globalConfig.containerClass;\n container.style.position = \"absolute\";\n container.style.left = \"0px\";\n container.style.top = \"-9999px\";\n container.style.width = \"1px\";\n container.style.height = \"1px\";\n container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n return container;\n };\n /**\n * Get the HTML element container that wraps the Flash bridge object/element.\n * @private\n */\n var _getHtmlBridge = function(flashBridge) {\n var htmlBridge = flashBridge && flashBridge.parentNode;\n while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n htmlBridge = htmlBridge.parentNode;\n }\n return htmlBridge || null;\n };\n /**\n * Create the SWF object.\n *\n * @returns The SWF object reference.\n * @private\n */\n var _embedSwf = function() {\n var len, flashBridge = _flashState.bridge, container = _getHtmlBridge(flashBridge);\n if (!flashBridge) {\n var allowScriptAccess = _determineScriptAccess(_window.location.host, _globalConfig);\n var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n var flashvars = _vars(_globalConfig);\n var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n container = _createHtmlBridge();\n var divToBeReplaced = _document.createElement(\"div\");\n container.appendChild(divToBeReplaced);\n _document.body.appendChild(container);\n var tmpDiv = _document.createElement(\"div\");\n var oldIE = _flashState.pluginType === \"activex\";\n tmpDiv.innerHTML = '\" + (oldIE ? '' : \"\") + '' + '' + '' + '' + '' + \"\";\n flashBridge = tmpDiv.firstChild;\n tmpDiv = null;\n flashBridge.ZeroClipboard = ZeroClipboard;\n container.replaceChild(flashBridge, divToBeReplaced);\n }\n if (!flashBridge) {\n flashBridge = _document[_globalConfig.swfObjectId];\n if (flashBridge && (len = flashBridge.length)) {\n flashBridge = flashBridge[len - 1];\n }\n if (!flashBridge && container) {\n flashBridge = container.firstChild;\n }\n }\n _flashState.bridge = flashBridge || null;\n return flashBridge;\n };\n /**\n * Destroy the SWF object.\n * @private\n */\n var _unembedSwf = function() {\n var flashBridge = _flashState.bridge;\n if (flashBridge) {\n var htmlBridge = _getHtmlBridge(flashBridge);\n if (htmlBridge) {\n if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n flashBridge.style.display = \"none\";\n (function removeSwfFromIE() {\n if (flashBridge.readyState === 4) {\n for (var prop in flashBridge) {\n if (typeof flashBridge[prop] === \"function\") {\n flashBridge[prop] = null;\n }\n }\n if (flashBridge.parentNode) {\n flashBridge.parentNode.removeChild(flashBridge);\n }\n if (htmlBridge.parentNode) {\n htmlBridge.parentNode.removeChild(htmlBridge);\n }\n } else {\n _setTimeout(removeSwfFromIE, 10);\n }\n })();\n } else {\n if (flashBridge.parentNode) {\n flashBridge.parentNode.removeChild(flashBridge);\n }\n if (htmlBridge.parentNode) {\n htmlBridge.parentNode.removeChild(htmlBridge);\n }\n }\n }\n _flashState.ready = null;\n _flashState.bridge = null;\n _flashState.deactivated = null;\n }\n };\n /**\n * Map the data format names of the \"clipData\" to Flash-friendly names.\n *\n * @returns A new transformed object.\n * @private\n */\n var _mapClipDataToFlash = function(clipData) {\n var newClipData = {}, formatMap = {};\n if (!(typeof clipData === \"object\" && clipData)) {\n return;\n }\n for (var dataFormat in clipData) {\n if (dataFormat && _hasOwn.call(clipData, dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n switch (dataFormat.toLowerCase()) {\n case \"text/plain\":\n case \"text\":\n case \"air:text\":\n case \"flash:text\":\n newClipData.text = clipData[dataFormat];\n formatMap.text = dataFormat;\n break;\n\n case \"text/html\":\n case \"html\":\n case \"air:html\":\n case \"flash:html\":\n newClipData.html = clipData[dataFormat];\n formatMap.html = dataFormat;\n break;\n\n case \"application/rtf\":\n case \"text/rtf\":\n case \"rtf\":\n case \"richtext\":\n case \"air:rtf\":\n case \"flash:rtf\":\n newClipData.rtf = clipData[dataFormat];\n formatMap.rtf = dataFormat;\n break;\n\n default:\n break;\n }\n }\n }\n return {\n data: newClipData,\n formatMap: formatMap\n };\n };\n /**\n * Map the data format names from Flash-friendly names back to their original \"clipData\" names (via a format mapping).\n *\n * @returns A new transformed object.\n * @private\n */\n var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n return clipResults;\n }\n var newResults = {};\n for (var prop in clipResults) {\n if (_hasOwn.call(clipResults, prop)) {\n if (prop !== \"success\" && prop !== \"data\") {\n newResults[prop] = clipResults[prop];\n continue;\n }\n newResults[prop] = {};\n var tmpHash = clipResults[prop];\n for (var dataFormat in tmpHash) {\n if (dataFormat && _hasOwn.call(tmpHash, dataFormat) && _hasOwn.call(formatMap, dataFormat)) {\n newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n }\n }\n }\n }\n return newResults;\n };\n /**\n * Will look at a path, and will create a \"?noCache={time}\" or \"&noCache={time}\"\n * query param string to return. Does NOT append that string to the original path.\n * This is useful because ExternalInterface often breaks when a Flash SWF is cached.\n *\n * @returns The `noCache` query param with necessary \"?\"/\"&\" prefix.\n * @private\n */\n var _cacheBust = function(path, options) {\n var cacheBust = options == null || options && options.cacheBust === true;\n if (cacheBust) {\n return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + _now();\n } else {\n return \"\";\n }\n };\n /**\n * Creates a query string for the FlashVars param.\n * Does NOT include the cache-busting query param.\n *\n * @returns FlashVars query string\n * @private\n */\n var _vars = function(options) {\n var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n if (options.trustedDomains) {\n if (typeof options.trustedDomains === \"string\") {\n domains = [ options.trustedDomains ];\n } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n domains = options.trustedDomains;\n }\n }\n if (domains && domains.length) {\n for (i = 0, len = domains.length; i < len; i++) {\n if (_hasOwn.call(domains, i) && domains[i] && typeof domains[i] === \"string\") {\n domain = _extractDomain(domains[i]);\n if (!domain) {\n continue;\n }\n if (domain === \"*\") {\n trustedOriginsExpanded.length = 0;\n trustedOriginsExpanded.push(domain);\n break;\n }\n trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, _window.location.protocol + \"//\" + domain ]);\n }\n }\n }\n if (trustedOriginsExpanded.length) {\n str += \"trustedOrigins=\" + _encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n }\n if (options.forceEnhancedClipboard === true) {\n str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n }\n if (typeof options.swfObjectId === \"string\" && options.swfObjectId) {\n str += (str ? \"&\" : \"\") + \"swfObjectId=\" + _encodeURIComponent(options.swfObjectId);\n }\n return str;\n };\n /**\n * Extract the domain (e.g. \"github.com\") from an origin (e.g. \"https://github.com\") or\n * URL (e.g. \"https://github.com/zeroclipboard/zeroclipboard/\").\n *\n * @returns the domain\n * @private\n */\n var _extractDomain = function(originOrUrl) {\n if (originOrUrl == null || originOrUrl === \"\") {\n return null;\n }\n originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n if (originOrUrl === \"\") {\n return null;\n }\n var protocolIndex = originOrUrl.indexOf(\"//\");\n originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n var pathIndex = originOrUrl.indexOf(\"/\");\n originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n return null;\n }\n return originOrUrl || null;\n };\n /**\n * Set `allowScriptAccess` based on `trustedDomains` and `window.location.host` vs. `swfPath`.\n *\n * @returns The appropriate script access level.\n * @private\n */\n var _determineScriptAccess = function() {\n var _extractAllDomains = function(origins) {\n var i, len, tmp, resultsArray = [];\n if (typeof origins === \"string\") {\n origins = [ origins ];\n }\n if (!(typeof origins === \"object\" && origins && typeof origins.length === \"number\")) {\n return resultsArray;\n }\n for (i = 0, len = origins.length; i < len; i++) {\n if (_hasOwn.call(origins, i) && (tmp = _extractDomain(origins[i]))) {\n if (tmp === \"*\") {\n resultsArray.length = 0;\n resultsArray.push(\"*\");\n break;\n }\n if (resultsArray.indexOf(tmp) === -1) {\n resultsArray.push(tmp);\n }\n }\n }\n return resultsArray;\n };\n return function(currentDomain, configOptions) {\n var swfDomain = _extractDomain(configOptions.swfPath);\n if (swfDomain === null) {\n swfDomain = currentDomain;\n }\n var trustedDomains = _extractAllDomains(configOptions.trustedDomains);\n var len = trustedDomains.length;\n if (len > 0) {\n if (len === 1 && trustedDomains[0] === \"*\") {\n return \"always\";\n }\n if (trustedDomains.indexOf(currentDomain) !== -1) {\n if (len === 1 && currentDomain === swfDomain) {\n return \"sameDomain\";\n }\n return \"always\";\n }\n }\n return \"never\";\n };\n }();\n /**\n * Get the currently active/focused DOM element.\n *\n * @returns the currently active/focused element, or `null`\n * @private\n */\n var _safeActiveElement = function() {\n try {\n return _document.activeElement;\n } catch (err) {\n return null;\n }\n };\n /**\n * Add a class to an element, if it doesn't already have it.\n *\n * @returns The element, with its new class added.\n * @private\n */\n var _addClass = function(element, value) {\n if (!element || element.nodeType !== 1) {\n return element;\n }\n if (element.classList) {\n if (!element.classList.contains(value)) {\n element.classList.add(value);\n }\n return element;\n }\n if (value && typeof value === \"string\") {\n var classNames = (value || \"\").split(/\\s+/);\n if (element.nodeType === 1) {\n if (!element.className) {\n element.className = value;\n } else {\n var className = \" \" + element.className + \" \", setClass = element.className;\n for (var c = 0, cl = classNames.length; c < cl; c++) {\n if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n setClass += \" \" + classNames[c];\n }\n }\n element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n }\n }\n }\n return element;\n };\n /**\n * Remove a class from an element, if it has it.\n *\n * @returns The element, with its class removed.\n * @private\n */\n var _removeClass = function(element, value) {\n if (!element || element.nodeType !== 1) {\n return element;\n }\n if (element.classList) {\n if (element.classList.contains(value)) {\n element.classList.remove(value);\n }\n return element;\n }\n if (typeof value === \"string\" && value) {\n var classNames = value.split(/\\s+/);\n if (element.nodeType === 1 && element.className) {\n var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n for (var c = 0, cl = classNames.length; c < cl; c++) {\n className = className.replace(\" \" + classNames[c] + \" \", \" \");\n }\n element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n }\n }\n return element;\n };\n /**\n * Attempt to interpret the element's CSS styling. If `prop` is `\"cursor\"`,\n * then we assume that it should be a hand (\"pointer\") cursor if the element\n * is an anchor element (\"a\" tag).\n *\n * @returns The computed style property.\n * @private\n */\n var _getStyle = function(el, prop) {\n var value = _window.getComputedStyle(el, null).getPropertyValue(prop);\n if (prop === \"cursor\") {\n if (!value || value === \"auto\") {\n if (el.nodeName === \"A\") {\n return \"pointer\";\n }\n }\n }\n return value;\n };\n /**\n * Get the zoom factor of the browser. Always returns `1.0`, except at\n * non-default zoom levels in IE<8 and some older versions of WebKit.\n *\n * @returns Floating unit percentage of the zoom factor (e.g. 150% = `1.5`).\n * @private\n */\n var _getZoomFactor = function() {\n var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n if (typeof _document.body.getBoundingClientRect === \"function\") {\n rect = _document.body.getBoundingClientRect();\n physicalWidth = rect.right - rect.left;\n logicalWidth = _document.body.offsetWidth;\n zoomFactor = _round(physicalWidth / logicalWidth * 100) / 100;\n }\n return zoomFactor;\n };\n /**\n * Get the DOM positioning info of an element.\n *\n * @returns Object containing the element's position, width, and height.\n * @private\n */\n var _getDOMObjectPosition = function(obj) {\n var info = {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n };\n if (obj.getBoundingClientRect) {\n var rect = obj.getBoundingClientRect();\n var pageXOffset, pageYOffset, zoomFactor;\n if (\"pageXOffset\" in _window && \"pageYOffset\" in _window) {\n pageXOffset = _window.pageXOffset;\n pageYOffset = _window.pageYOffset;\n } else {\n zoomFactor = _getZoomFactor();\n pageXOffset = _round(_document.documentElement.scrollLeft / zoomFactor);\n pageYOffset = _round(_document.documentElement.scrollTop / zoomFactor);\n }\n var leftBorderWidth = _document.documentElement.clientLeft || 0;\n var topBorderWidth = _document.documentElement.clientTop || 0;\n info.left = rect.left + pageXOffset - leftBorderWidth;\n info.top = rect.top + pageYOffset - topBorderWidth;\n info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n }\n return info;\n };\n /**\n * Reposition the Flash object to cover the currently activated element.\n *\n * @returns `undefined`\n * @private\n */\n var _reposition = function() {\n var htmlBridge;\n if (_currentElement && (htmlBridge = _getHtmlBridge(_flashState.bridge))) {\n var pos = _getDOMObjectPosition(_currentElement);\n _extend(htmlBridge.style, {\n width: pos.width + \"px\",\n height: pos.height + \"px\",\n top: pos.top + \"px\",\n left: pos.left + \"px\",\n zIndex: \"\" + _getSafeZIndex(_globalConfig.zIndex)\n });\n }\n };\n /**\n * Sends a signal to the Flash object to display the hand cursor if `true`.\n *\n * @returns `undefined`\n * @private\n */\n var _setHandCursor = function(enabled) {\n if (_flashState.ready === true) {\n if (_flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n _flashState.bridge.setHandCursor(enabled);\n } else {\n _flashState.ready = false;\n }\n }\n };\n /**\n * Get a safe value for `zIndex`\n *\n * @returns an integer, or \"auto\"\n * @private\n */\n var _getSafeZIndex = function(val) {\n if (/^(?:auto|inherit)$/.test(val)) {\n return val;\n }\n var zIndex;\n if (typeof val === \"number\" && !_isNaN(val)) {\n zIndex = val;\n } else if (typeof val === \"string\") {\n zIndex = _getSafeZIndex(_parseInt(val, 10));\n }\n return typeof zIndex === \"number\" ? zIndex : \"auto\";\n };\n /**\n * Detect the Flash Player status, version, and plugin type.\n *\n * @see {@link https://code.google.com/p/doctype-mirror/wiki/ArticleDetectFlash#The_code}\n * @see {@link http://stackoverflow.com/questions/12866060/detecting-pepper-ppapi-flash-with-javascript}\n *\n * @returns `undefined`\n * @private\n */\n var _detectFlashSupport = function(ActiveXObject) {\n var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n /**\n * Derived from Apple's suggested sniffer.\n * @param {String} desc e.g. \"Shockwave Flash 7.0 r61\"\n * @returns {String} \"7.0.61\"\n * @private\n */\n function parseFlashVersion(desc) {\n var matches = desc.match(/[\\d]+/g);\n matches.length = 3;\n return matches.join(\".\");\n }\n function isPepperFlash(flashPlayerFileName) {\n return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n }\n function inspectPlugin(plugin) {\n if (plugin) {\n hasFlash = true;\n if (plugin.version) {\n flashVersion = parseFlashVersion(plugin.version);\n }\n if (!flashVersion && plugin.description) {\n flashVersion = parseFlashVersion(plugin.description);\n }\n if (plugin.filename) {\n isPPAPI = isPepperFlash(plugin.filename);\n }\n }\n }\n if (_navigator.plugins && _navigator.plugins.length) {\n plugin = _navigator.plugins[\"Shockwave Flash\"];\n inspectPlugin(plugin);\n if (_navigator.plugins[\"Shockwave Flash 2.0\"]) {\n hasFlash = true;\n flashVersion = \"2.0.0.11\";\n }\n } else if (_navigator.mimeTypes && _navigator.mimeTypes.length) {\n mimeType = _navigator.mimeTypes[\"application/x-shockwave-flash\"];\n plugin = mimeType && mimeType.enabledPlugin;\n inspectPlugin(plugin);\n } else if (typeof ActiveXObject !== \"undefined\") {\n isActiveX = true;\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n hasFlash = true;\n flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n } catch (e1) {\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n hasFlash = true;\n flashVersion = \"6.0.21\";\n } catch (e2) {\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n hasFlash = true;\n flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n } catch (e3) {\n isActiveX = false;\n }\n }\n }\n }\n _flashState.disabled = hasFlash !== true;\n _flashState.outdated = flashVersion && _parseFloat(flashVersion) < _parseFloat(_minimumFlashVersion);\n _flashState.version = flashVersion || \"0.0.0\";\n _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n };\n /**\n * Invoke the Flash detection algorithms immediately upon inclusion so we're not waiting later.\n */\n _detectFlashSupport(_ActiveXObject);\n /**\n * A shell constructor for `ZeroClipboard` client instances.\n *\n * @constructor\n */\n var ZeroClipboard = function() {\n if (!(this instanceof ZeroClipboard)) {\n return new ZeroClipboard();\n }\n if (typeof ZeroClipboard._createClient === \"function\") {\n ZeroClipboard._createClient.apply(this, _args(arguments));\n }\n };\n /**\n * The ZeroClipboard library's version number.\n *\n * @static\n * @readonly\n * @property {string}\n */\n _defineProperty(ZeroClipboard, \"version\", {\n value: \"2.1.1\",\n writable: false,\n configurable: true,\n enumerable: true\n });\n /**\n * Update or get a copy of the ZeroClipboard global configuration.\n * Returns a copy of the current/updated configuration.\n *\n * @returns Object\n * @static\n */\n ZeroClipboard.config = function() {\n return _config.apply(this, _args(arguments));\n };\n /**\n * Diagnostic method that describes the state of the browser, Flash Player, and ZeroClipboard.\n *\n * @returns Object\n * @static\n */\n ZeroClipboard.state = function() {\n return _state.apply(this, _args(arguments));\n };\n /**\n * Check if Flash is unusable for any reason: disabled, outdated, deactivated, etc.\n *\n * @returns Boolean\n * @static\n */\n ZeroClipboard.isFlashUnusable = function() {\n return _isFlashUnusable.apply(this, _args(arguments));\n };\n /**\n * Register an event listener.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n ZeroClipboard.on = function() {\n return _on.apply(this, _args(arguments));\n };\n /**\n * Unregister an event listener.\n * If no `listener` function/object is provided, it will unregister all listeners for the provided `eventType`.\n * If no `eventType` is provided, it will unregister all listeners for every event type.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n ZeroClipboard.off = function() {\n return _off.apply(this, _args(arguments));\n };\n /**\n * Retrieve event listeners for an `eventType`.\n * If no `eventType` is provided, it will retrieve all listeners for every event type.\n *\n * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`\n */\n ZeroClipboard.handlers = function() {\n return _listeners.apply(this, _args(arguments));\n };\n /**\n * Event emission receiver from the Flash object, forwarding to any registered JavaScript event listeners.\n *\n * @returns For the \"copy\" event, returns the Flash-friendly \"clipData\" object; otherwise `undefined`.\n * @static\n */\n ZeroClipboard.emit = function() {\n return _emit.apply(this, _args(arguments));\n };\n /**\n * Create and embed the Flash object.\n *\n * @returns The Flash object\n * @static\n */\n ZeroClipboard.create = function() {\n return _create.apply(this, _args(arguments));\n };\n /**\n * Self-destruct and clean up everything, including the embedded Flash object.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.destroy = function() {\n return _destroy.apply(this, _args(arguments));\n };\n /**\n * Set the pending data for clipboard injection.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.setData = function() {\n return _setData.apply(this, _args(arguments));\n };\n /**\n * Clear the pending data for clipboard injection.\n * If no `format` is provided, all pending data formats will be cleared.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.clearData = function() {\n return _clearData.apply(this, _args(arguments));\n };\n /**\n * Get a copy of the pending data for clipboard injection.\n * If no `format` is provided, a copy of ALL pending data formats will be returned.\n *\n * @returns `String` or `Object`\n * @static\n */\n ZeroClipboard.getData = function() {\n return _getData.apply(this, _args(arguments));\n };\n /**\n * Sets the current HTML object that the Flash object should overlay. This will put the global\n * Flash object on top of the current element; depending on the setup, this may also set the\n * pending clipboard text data as well as the Flash object's wrapping element's title attribute\n * based on the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.focus = ZeroClipboard.activate = function() {\n return _focus.apply(this, _args(arguments));\n };\n /**\n * Un-overlays the Flash object. This will put the global Flash object off-screen; depending on\n * the setup, this may also unset the Flash object's wrapping element's title attribute based on\n * the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.blur = ZeroClipboard.deactivate = function() {\n return _blur.apply(this, _args(arguments));\n };\n /**\n * Returns the currently focused/\"activated\" HTML element that the Flash object is wrapping.\n *\n * @returns `HTMLElement` or `null`\n * @static\n */\n ZeroClipboard.activeElement = function() {\n return _activeElement.apply(this, _args(arguments));\n };\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return ZeroClipboard;\n });\n } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n module.exports = ZeroClipboard;\n } else {\n window.ZeroClipboard = ZeroClipboard;\n }\n})(function() {\n return this;\n}());"]} \ No newline at end of file +{"version":3,"file":"ZeroClipboard.Core.min.js","sources":["ZeroClipboard.Core.js"],"names":["window","undefined","_currentElement","_window","_document","document","_navigator","navigator","_setTimeout","setTimeout","_encodeURIComponent","encodeURIComponent","_ActiveXObject","ActiveXObject","_parseInt","Number","parseInt","_parseFloat","parseFloat","_isNaN","isNaN","_round","Math","round","_now","Date","now","_keys","Object","keys","_defineProperty","defineProperty","_hasOwn","prototype","hasOwnProperty","_slice","Array","slice","_args","argumentsObj","call","_extend","i","len","arg","prop","src","copy","args","arguments","target","length","_deepCopy","source","_pick","obj","newObj","_omit","indexOf","_deleteOwnProperties","_containedBy","el","ancestorEl","nodeType","ownerDocument","parentNode","_flashState","bridge","version","pluginType","disabled","outdated","unavailable","deactivated","overdue","ready","_minimumFlashVersion","_handlers","_clipData","_clipDataFormatMap","_eventMessages","error","flash-disabled","flash-outdated","flash-unavailable","flash-deactivated","flash-overdue","_swfPath","jsDir","tmpJsPath","jsPath","swfPath","currentScript","scripts","getElementsByTagName","readyState","split","lastIndexOf","_globalConfig","trustedDomains","location","host","cacheBust","forceEnhancedClipboard","flashLoadTimeout","autoActivate","bubbleEvents","containerId","containerClass","swfObjectId","hoverClass","activeClass","forceHandCursor","title","zIndex","_config","options","test","_isValidHtml4Id","Error","_state","browser","flash","zeroclipboard","ZeroClipboard","config","_isFlashUnusable","_on","eventType","listener","events","added","toLowerCase","on","replace","push","emit","type","errorTypes","name","_off","foundIndex","perEventHandlers","off","splice","_listeners","_emit","event","eventCopy","returnVal","tmp","_createEvent","_preprocessEvent","_dispatchCallbacks","this","_mapClipDataToFlash","data","formatMap","_create","isFlashUnusable","maxWait","_embedSwf","_destroy","clearData","blur","_unembedSwf","_setData","format","dataObj","dataFormat","_clearData","_getData","_focus","element","_removeClass","_addClass","newTitle","getAttribute","htmlBridge","_getHtmlBridge","setAttribute","useHandCursor","_getStyle","_setHandCursor","_reposition","_blur","removeAttribute","style","left","top","width","_activeElement","id","relatedTarget","currentTarget","timeStamp","msg","message","minimumVersion","clipboardData","setData","_mapClipResultsFromFlash","_getRelatedTarget","_addMouseData","targetEl","relatedTargetId","getElementById","srcElement","fromElement","toElement","pos","_getDOMObjectPosition","screenLeft","screenX","screenTop","screenY","scrollLeft","body","documentElement","scrollTop","pageX","_stageX","pageY","_stageY","clientX","clientY","moveX","movementX","moveY","movementY","x","y","offsetX","offsetY","layerX","layerY","_shouldPerformAsync","_dispatchCallback","func","context","async","apply","wildcardTypeHandlers","specificTypeHandlers","handlers","concat","originalContext","handleEvent","sourceIsSwf","_source","flashErrorNames","wasDeactivated","textContent","htmlContent","value","outerHTML","innerHTML","innerText","_safeActiveElement","focus","_fireMouseEvent","bubbles","cancelable","e","doc","defaults","view","defaultView","canBubble","detail","button","which","createEvent","dispatchEvent","ctrlKey","altKey","shiftKey","metaKey","initMouseEvent","_createHtmlBridge","container","createElement","className","position","height","_getSafeZIndex","flashBridge","nodeName","allowScriptAccess","_determineScriptAccess","allowNetworking","flashvars","_vars","swfUrl","_cacheBust","divToBeReplaced","appendChild","tmpDiv","oldIE","firstChild","replaceChild","display","removeSwfFromIE","removeChild","clipData","newClipData","text","html","rtf","clipResults","newResults","tmpHash","path","domain","domains","str","trustedOriginsExpanded","_extractDomain","protocol","join","originOrUrl","protocolIndex","pathIndex","_extractAllDomains","origins","resultsArray","currentDomain","configOptions","swfDomain","activeElement","err","classList","contains","add","classNames","setClass","c","cl","remove","getComputedStyle","getPropertyValue","_getZoomFactor","rect","physicalWidth","logicalWidth","zoomFactor","getBoundingClientRect","right","offsetWidth","info","pageXOffset","pageYOffset","leftBorderWidth","clientLeft","topBorderWidth","clientTop","bottom","enabled","setHandCursor","val","_detectFlashSupport","parseFlashVersion","desc","matches","match","isPepperFlash","flashPlayerFileName","inspectPlugin","plugin","hasFlash","flashVersion","description","filename","isPPAPI","ax","mimeType","isActiveX","plugins","mimeTypes","enabledPlugin","GetVariable","e1","e2","e3","_createClient","writable","configurable","enumerable","state","create","destroy","getData","activate","deactivate","define","amd","module","exports"],"mappings":"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","sourcesContent":["/*!\n * ZeroClipboard\n * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n * Copyright (c) 2014 Jon Rohan, James M. Greene\n * Licensed MIT\n * http://zeroclipboard.org/\n * v2.1.1\n */\n(function(window, undefined) {\n \"use strict\";\n /**\n * Store references to critically important global functions that may be\n * overridden on certain web pages.\n */\n var _window = window, _document = _window.document, _navigator = _window.navigator, _setTimeout = _window.setTimeout, _encodeURIComponent = _window.encodeURIComponent, _ActiveXObject = _window.ActiveXObject, _parseInt = _window.Number.parseInt || _window.parseInt, _parseFloat = _window.Number.parseFloat || _window.parseFloat, _isNaN = _window.Number.isNaN || _window.isNaN, _round = _window.Math.round, _now = _window.Date.now, _keys = _window.Object.keys, _defineProperty = _window.Object.defineProperty, _hasOwn = _window.Object.prototype.hasOwnProperty, _slice = _window.Array.prototype.slice;\n /**\n * Convert an `arguments` object into an Array.\n *\n * @returns The arguments as an Array\n * @private\n */\n var _args = function(argumentsObj) {\n return _slice.call(argumentsObj, 0);\n };\n /**\n * Shallow-copy the owned, enumerable properties of one object over to another, similar to jQuery's `$.extend`.\n *\n * @returns The target object, augmented\n * @private\n */\n var _extend = function() {\n var i, len, arg, prop, src, copy, args = _args(arguments), target = args[0] || {};\n for (i = 1, len = args.length; i < len; i++) {\n if ((arg = args[i]) != null) {\n for (prop in arg) {\n if (_hasOwn.call(arg, prop)) {\n src = target[prop];\n copy = arg[prop];\n if (target !== copy && copy !== undefined) {\n target[prop] = copy;\n }\n }\n }\n }\n }\n return target;\n };\n /**\n * Return a deep copy of the source object or array.\n *\n * @returns Object or Array\n * @private\n */\n var _deepCopy = function(source) {\n var copy, i, len, prop;\n if (typeof source !== \"object\" || source == null) {\n copy = source;\n } else if (typeof source.length === \"number\") {\n copy = [];\n for (i = 0, len = source.length; i < len; i++) {\n if (_hasOwn.call(source, i)) {\n copy[i] = _deepCopy(source[i]);\n }\n }\n } else {\n copy = {};\n for (prop in source) {\n if (_hasOwn.call(source, prop)) {\n copy[prop] = _deepCopy(source[prop]);\n }\n }\n }\n return copy;\n };\n /**\n * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to keep.\n * The inverse of `_omit`, mostly. The big difference is that these properties do NOT need to be enumerable to\n * be kept.\n *\n * @returns A new filtered object.\n * @private\n */\n var _pick = function(obj, keys) {\n var newObj = {};\n for (var i = 0, len = keys.length; i < len; i++) {\n if (keys[i] in obj) {\n newObj[keys[i]] = obj[keys[i]];\n }\n }\n return newObj;\n };\n /**\n * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to omit.\n * The inverse of `_pick`.\n *\n * @returns A new filtered object.\n * @private\n */\n var _omit = function(obj, keys) {\n var newObj = {};\n for (var prop in obj) {\n if (keys.indexOf(prop) === -1) {\n newObj[prop] = obj[prop];\n }\n }\n return newObj;\n };\n /**\n * Remove all owned, enumerable properties from an object.\n *\n * @returns The original object without its owned, enumerable properties.\n * @private\n */\n var _deleteOwnProperties = function(obj) {\n if (obj) {\n for (var prop in obj) {\n if (_hasOwn.call(obj, prop)) {\n delete obj[prop];\n }\n }\n }\n return obj;\n };\n /**\n * Determine if an element is contained within another element.\n *\n * @returns Boolean\n * @private\n */\n var _containedBy = function(el, ancestorEl) {\n if (el && el.nodeType === 1 && el.ownerDocument && ancestorEl && (ancestorEl.nodeType === 1 && ancestorEl.ownerDocument && ancestorEl.ownerDocument === el.ownerDocument || ancestorEl.nodeType === 9 && !ancestorEl.ownerDocument && ancestorEl === el.ownerDocument)) {\n do {\n if (el === ancestorEl) {\n return true;\n }\n el = el.parentNode;\n } while (el);\n }\n return false;\n };\n /**\n * Keep track of the state of the Flash object.\n * @private\n */\n var _flashState = {\n bridge: null,\n version: \"0.0.0\",\n pluginType: \"unknown\",\n disabled: null,\n outdated: null,\n unavailable: null,\n deactivated: null,\n overdue: null,\n ready: null\n };\n /**\n * The minimum Flash Player version required to use ZeroClipboard completely.\n * @readonly\n * @private\n */\n var _minimumFlashVersion = \"11.0.0\";\n /**\n * Keep track of all event listener registrations.\n * @private\n */\n var _handlers = {};\n /**\n * Keep track of the currently activated element.\n * @private\n */\n var _currentElement;\n /**\n * Keep track of data for the pending clipboard transaction.\n * @private\n */\n var _clipData = {};\n /**\n * Keep track of data formats for the pending clipboard transaction.\n * @private\n */\n var _clipDataFormatMap = null;\n /**\n * The `message` store for events\n * @private\n */\n var _eventMessages = {\n ready: \"Flash communication is established\",\n error: {\n \"flash-disabled\": \"Flash is disabled or not installed\",\n \"flash-outdated\": \"Flash is too outdated to support ZeroClipboard\",\n \"flash-unavailable\": \"Flash is unable to communicate bidirectionally with JavaScript\",\n \"flash-deactivated\": \"Flash is too outdated for your browser and/or is configured as click-to-activate\",\n \"flash-overdue\": \"Flash communication was established but NOT within the acceptable time limit\"\n }\n };\n /**\n * The presumed location of the \"ZeroClipboard.swf\" file, based on the location\n * of the executing JavaScript file (e.g. \"ZeroClipboard.js\", etc.).\n * @private\n */\n var _swfPath = function() {\n var i, jsDir, tmpJsPath, jsPath, swfPath = \"ZeroClipboard.swf\";\n if (!(_document.currentScript && (jsPath = _document.currentScript.src))) {\n var scripts = _document.getElementsByTagName(\"script\");\n if (\"readyState\" in scripts[0]) {\n for (i = scripts.length; i--; ) {\n if (scripts[i].readyState === \"interactive\" && (jsPath = scripts[i].src)) {\n break;\n }\n }\n } else if (_document.readyState === \"loading\") {\n jsPath = scripts[scripts.length - 1].src;\n } else {\n for (i = scripts.length; i--; ) {\n tmpJsPath = scripts[i].src;\n if (!tmpJsPath) {\n jsDir = null;\n break;\n }\n tmpJsPath = tmpJsPath.split(\"#\")[0].split(\"?\")[0];\n tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\"/\") + 1);\n if (jsDir == null) {\n jsDir = tmpJsPath;\n } else if (jsDir !== tmpJsPath) {\n jsDir = null;\n break;\n }\n }\n if (jsDir !== null) {\n jsPath = jsDir;\n }\n }\n }\n if (jsPath) {\n jsPath = jsPath.split(\"#\")[0].split(\"?\")[0];\n swfPath = jsPath.slice(0, jsPath.lastIndexOf(\"/\") + 1) + swfPath;\n }\n return swfPath;\n }();\n /**\n * ZeroClipboard configuration defaults for the Core module.\n * @private\n */\n var _globalConfig = {\n swfPath: _swfPath,\n trustedDomains: window.location.host ? [ window.location.host ] : [],\n cacheBust: true,\n forceEnhancedClipboard: false,\n flashLoadTimeout: 3e4,\n autoActivate: true,\n bubbleEvents: true,\n containerId: \"global-zeroclipboard-html-bridge\",\n containerClass: \"global-zeroclipboard-container\",\n swfObjectId: \"global-zeroclipboard-flash-bridge\",\n hoverClass: \"zeroclipboard-is-hover\",\n activeClass: \"zeroclipboard-is-active\",\n forceHandCursor: false,\n title: null,\n zIndex: 999999999\n };\n /**\n * The underlying implementation of `ZeroClipboard.config`.\n * @private\n */\n var _config = function(options) {\n if (typeof options === \"object\" && options !== null) {\n for (var prop in options) {\n if (_hasOwn.call(options, prop)) {\n if (/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(prop)) {\n _globalConfig[prop] = options[prop];\n } else if (_flashState.bridge == null) {\n if (prop === \"containerId\" || prop === \"swfObjectId\") {\n if (_isValidHtml4Id(options[prop])) {\n _globalConfig[prop] = options[prop];\n } else {\n throw new Error(\"The specified `\" + prop + \"` value is not valid as an HTML4 Element ID\");\n }\n } else {\n _globalConfig[prop] = options[prop];\n }\n }\n }\n }\n }\n if (typeof options === \"string\" && options) {\n if (_hasOwn.call(_globalConfig, options)) {\n return _globalConfig[options];\n }\n return;\n }\n return _deepCopy(_globalConfig);\n };\n /**\n * The underlying implementation of `ZeroClipboard.state`.\n * @private\n */\n var _state = function() {\n return {\n browser: _pick(_navigator, [ \"userAgent\", \"platform\", \"appName\" ]),\n flash: _omit(_flashState, [ \"bridge\" ]),\n zeroclipboard: {\n version: ZeroClipboard.version,\n config: ZeroClipboard.config()\n }\n };\n };\n /**\n * The underlying implementation of `ZeroClipboard.isFlashUnusable`.\n * @private\n */\n var _isFlashUnusable = function() {\n return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n };\n /**\n * The underlying implementation of `ZeroClipboard.on`.\n * @private\n */\n var _on = function(eventType, listener) {\n var i, len, events, added = {};\n if (typeof eventType === \"string\" && eventType) {\n events = eventType.toLowerCase().split(/\\s+/);\n } else if (typeof eventType === \"object\" && eventType && typeof listener === \"undefined\") {\n for (i in eventType) {\n if (_hasOwn.call(eventType, i) && typeof i === \"string\" && i && typeof eventType[i] === \"function\") {\n ZeroClipboard.on(i, eventType[i]);\n }\n }\n }\n if (events && events.length) {\n for (i = 0, len = events.length; i < len; i++) {\n eventType = events[i].replace(/^on/, \"\");\n added[eventType] = true;\n if (!_handlers[eventType]) {\n _handlers[eventType] = [];\n }\n _handlers[eventType].push(listener);\n }\n if (added.ready && _flashState.ready) {\n ZeroClipboard.emit({\n type: \"ready\"\n });\n }\n if (added.error) {\n var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n for (i = 0, len = errorTypes.length; i < len; i++) {\n if (_flashState[errorTypes[i]] === true) {\n ZeroClipboard.emit({\n type: \"error\",\n name: \"flash-\" + errorTypes[i]\n });\n break;\n }\n }\n }\n }\n return ZeroClipboard;\n };\n /**\n * The underlying implementation of `ZeroClipboard.off`.\n * @private\n */\n var _off = function(eventType, listener) {\n var i, len, foundIndex, events, perEventHandlers;\n if (arguments.length === 0) {\n events = _keys(_handlers);\n } else if (typeof eventType === \"string\" && eventType) {\n events = eventType.split(/\\s+/);\n } else if (typeof eventType === \"object\" && eventType && typeof listener === \"undefined\") {\n for (i in eventType) {\n if (_hasOwn.call(eventType, i) && typeof i === \"string\" && i && typeof eventType[i] === \"function\") {\n ZeroClipboard.off(i, eventType[i]);\n }\n }\n }\n if (events && events.length) {\n for (i = 0, len = events.length; i < len; i++) {\n eventType = events[i].toLowerCase().replace(/^on/, \"\");\n perEventHandlers = _handlers[eventType];\n if (perEventHandlers && perEventHandlers.length) {\n if (listener) {\n foundIndex = perEventHandlers.indexOf(listener);\n while (foundIndex !== -1) {\n perEventHandlers.splice(foundIndex, 1);\n foundIndex = perEventHandlers.indexOf(listener, foundIndex);\n }\n } else {\n perEventHandlers.length = 0;\n }\n }\n }\n }\n return ZeroClipboard;\n };\n /**\n * The underlying implementation of `ZeroClipboard.handlers`.\n * @private\n */\n var _listeners = function(eventType) {\n var copy;\n if (typeof eventType === \"string\" && eventType) {\n copy = _deepCopy(_handlers[eventType]) || null;\n } else {\n copy = _deepCopy(_handlers);\n }\n return copy;\n };\n /**\n * The underlying implementation of `ZeroClipboard.emit`.\n * @private\n */\n var _emit = function(event) {\n var eventCopy, returnVal, tmp;\n event = _createEvent(event);\n if (!event) {\n return;\n }\n if (_preprocessEvent(event)) {\n return;\n }\n if (event.type === \"ready\" && _flashState.overdue === true) {\n return ZeroClipboard.emit({\n type: \"error\",\n name: \"flash-overdue\"\n });\n }\n eventCopy = _extend({}, event);\n _dispatchCallbacks.call(this, eventCopy);\n if (event.type === \"copy\") {\n tmp = _mapClipDataToFlash(_clipData);\n returnVal = tmp.data;\n _clipDataFormatMap = tmp.formatMap;\n }\n return returnVal;\n };\n /**\n * The underlying implementation of `ZeroClipboard.create`.\n * @private\n */\n var _create = function() {\n if (typeof _flashState.ready !== \"boolean\") {\n _flashState.ready = false;\n }\n if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n var maxWait = _globalConfig.flashLoadTimeout;\n if (typeof maxWait === \"number\" && maxWait >= 0) {\n _setTimeout(function() {\n if (typeof _flashState.deactivated !== \"boolean\") {\n _flashState.deactivated = true;\n }\n if (_flashState.deactivated === true) {\n ZeroClipboard.emit({\n type: \"error\",\n name: \"flash-deactivated\"\n });\n }\n }, maxWait);\n }\n _flashState.overdue = false;\n _embedSwf();\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.destroy`.\n * @private\n */\n var _destroy = function() {\n ZeroClipboard.clearData();\n ZeroClipboard.blur();\n ZeroClipboard.emit(\"destroy\");\n _unembedSwf();\n ZeroClipboard.off();\n };\n /**\n * The underlying implementation of `ZeroClipboard.setData`.\n * @private\n */\n var _setData = function(format, data) {\n var dataObj;\n if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n dataObj = format;\n ZeroClipboard.clearData();\n } else if (typeof format === \"string\" && format) {\n dataObj = {};\n dataObj[format] = data;\n } else {\n return;\n }\n for (var dataFormat in dataObj) {\n if (typeof dataFormat === \"string\" && dataFormat && _hasOwn.call(dataObj, dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n _clipData[dataFormat] = dataObj[dataFormat];\n }\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.clearData`.\n * @private\n */\n var _clearData = function(format) {\n if (typeof format === \"undefined\") {\n _deleteOwnProperties(_clipData);\n _clipDataFormatMap = null;\n } else if (typeof format === \"string\" && _hasOwn.call(_clipData, format)) {\n delete _clipData[format];\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.getData`.\n * @private\n */\n var _getData = function(format) {\n if (typeof format === \"undefined\") {\n return _deepCopy(_clipData);\n } else if (typeof format === \"string\" && _hasOwn.call(_clipData, format)) {\n return _clipData[format];\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.focus`/`ZeroClipboard.activate`.\n * @private\n */\n var _focus = function(element) {\n if (!(element && element.nodeType === 1)) {\n return;\n }\n if (_currentElement) {\n _removeClass(_currentElement, _globalConfig.activeClass);\n if (_currentElement !== element) {\n _removeClass(_currentElement, _globalConfig.hoverClass);\n }\n }\n _currentElement = element;\n _addClass(element, _globalConfig.hoverClass);\n var newTitle = element.getAttribute(\"title\") || _globalConfig.title;\n if (typeof newTitle === \"string\" && newTitle) {\n var htmlBridge = _getHtmlBridge(_flashState.bridge);\n if (htmlBridge) {\n htmlBridge.setAttribute(\"title\", newTitle);\n }\n }\n var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n _setHandCursor(useHandCursor);\n _reposition();\n };\n /**\n * The underlying implementation of `ZeroClipboard.blur`/`ZeroClipboard.deactivate`.\n * @private\n */\n var _blur = function() {\n var htmlBridge = _getHtmlBridge(_flashState.bridge);\n if (htmlBridge) {\n htmlBridge.removeAttribute(\"title\");\n htmlBridge.style.left = \"0px\";\n htmlBridge.style.top = \"-9999px\";\n htmlBridge.style.width = \"1px\";\n htmlBridge.style.top = \"1px\";\n }\n if (_currentElement) {\n _removeClass(_currentElement, _globalConfig.hoverClass);\n _removeClass(_currentElement, _globalConfig.activeClass);\n _currentElement = null;\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.activeElement`.\n * @private\n */\n var _activeElement = function() {\n return _currentElement || null;\n };\n /**\n * Check if a value is a valid HTML4 `ID` or `Name` token.\n * @private\n */\n var _isValidHtml4Id = function(id) {\n return typeof id === \"string\" && id && /^[A-Za-z][A-Za-z0-9_:\\-\\.]*$/.test(id);\n };\n /**\n * Create or update an `event` object, based on the `eventType`.\n * @private\n */\n var _createEvent = function(event) {\n var eventType;\n if (typeof event === \"string\" && event) {\n eventType = event;\n event = {};\n } else if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n eventType = event.type;\n }\n if (!eventType) {\n return;\n }\n _extend(event, {\n type: eventType.toLowerCase(),\n target: event.target || _currentElement || null,\n relatedTarget: event.relatedTarget || null,\n currentTarget: _flashState && _flashState.bridge || null,\n timeStamp: event.timeStamp || _now() || null\n });\n var msg = _eventMessages[event.type];\n if (event.type === \"error\" && event.name && msg) {\n msg = msg[event.name];\n }\n if (msg) {\n event.message = msg;\n }\n if (event.type === \"ready\") {\n _extend(event, {\n target: null,\n version: _flashState.version\n });\n }\n if (event.type === \"error\") {\n if (/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n _extend(event, {\n target: null,\n minimumVersion: _minimumFlashVersion\n });\n }\n if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n _extend(event, {\n version: _flashState.version\n });\n }\n }\n if (event.type === \"copy\") {\n event.clipboardData = {\n setData: ZeroClipboard.setData,\n clearData: ZeroClipboard.clearData\n };\n }\n if (event.type === \"aftercopy\") {\n event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n }\n if (event.target && !event.relatedTarget) {\n event.relatedTarget = _getRelatedTarget(event.target);\n }\n event = _addMouseData(event);\n return event;\n };\n /**\n * Get a relatedTarget from the target's `data-clipboard-target` attribute\n * @private\n */\n var _getRelatedTarget = function(targetEl) {\n var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n return relatedTargetId ? _document.getElementById(relatedTargetId) : null;\n };\n /**\n * Add element and position data to `MouseEvent` instances\n * @private\n */\n var _addMouseData = function(event) {\n if (event && /^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n var srcElement = event.target;\n var fromElement = event.type === \"_mouseover\" && event.relatedTarget ? event.relatedTarget : undefined;\n var toElement = event.type === \"_mouseout\" && event.relatedTarget ? event.relatedTarget : undefined;\n var pos = _getDOMObjectPosition(srcElement);\n var screenLeft = _window.screenLeft || _window.screenX || 0;\n var screenTop = _window.screenTop || _window.screenY || 0;\n var scrollLeft = _document.body.scrollLeft + _document.documentElement.scrollLeft;\n var scrollTop = _document.body.scrollTop + _document.documentElement.scrollTop;\n var pageX = pos.left + (typeof event._stageX === \"number\" ? event._stageX : 0);\n var pageY = pos.top + (typeof event._stageY === \"number\" ? event._stageY : 0);\n var clientX = pageX - scrollLeft;\n var clientY = pageY - scrollTop;\n var screenX = screenLeft + clientX;\n var screenY = screenTop + clientY;\n var moveX = typeof event.movementX === \"number\" ? event.movementX : 0;\n var moveY = typeof event.movementY === \"number\" ? event.movementY : 0;\n delete event._stageX;\n delete event._stageY;\n _extend(event, {\n srcElement: srcElement,\n fromElement: fromElement,\n toElement: toElement,\n screenX: screenX,\n screenY: screenY,\n pageX: pageX,\n pageY: pageY,\n clientX: clientX,\n clientY: clientY,\n x: clientX,\n y: clientY,\n movementX: moveX,\n movementY: moveY,\n offsetX: 0,\n offsetY: 0,\n layerX: 0,\n layerY: 0\n });\n }\n return event;\n };\n /**\n * Determine if an event's registered handlers should be execute synchronously or asynchronously.\n *\n * @returns {boolean}\n * @private\n */\n var _shouldPerformAsync = function(event) {\n var eventType = event && typeof event.type === \"string\" && event.type || \"\";\n return !/^(?:(?:before)?copy|destroy)$/.test(eventType);\n };\n /**\n * Control if a callback should be executed asynchronously or not.\n *\n * @returns `undefined`\n * @private\n */\n var _dispatchCallback = function(func, context, args, async) {\n if (async) {\n _setTimeout(function() {\n func.apply(context, args);\n }, 0);\n } else {\n func.apply(context, args);\n }\n };\n /**\n * Handle the actual dispatching of events to client instances.\n *\n * @returns `undefined`\n * @private\n */\n var _dispatchCallbacks = function(event) {\n if (!(typeof event === \"object\" && event && event.type)) {\n return;\n }\n var async = _shouldPerformAsync(event);\n var wildcardTypeHandlers = _handlers[\"*\"] || [];\n var specificTypeHandlers = _handlers[event.type] || [];\n var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);\n if (handlers && handlers.length) {\n var i, len, func, context, eventCopy, originalContext = this;\n for (i = 0, len = handlers.length; i < len; i++) {\n func = handlers[i];\n context = originalContext;\n if (typeof func === \"string\" && typeof _window[func] === \"function\") {\n func = _window[func];\n }\n if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n context = func;\n func = func.handleEvent;\n }\n if (typeof func === \"function\") {\n eventCopy = _extend({}, event);\n _dispatchCallback(func, context, [ eventCopy ], async);\n }\n }\n }\n return this;\n };\n /**\n * Preprocess any special behaviors, reactions, or state changes after receiving this event.\n * Executes only once per event emitted, NOT once per client.\n * @private\n */\n var _preprocessEvent = function(event) {\n var element = event.target || _currentElement || null;\n var sourceIsSwf = event._source === \"swf\";\n delete event._source;\n var flashErrorNames = [ \"flash-disabled\", \"flash-outdated\", \"flash-unavailable\", \"flash-deactivated\", \"flash-overdue\" ];\n switch (event.type) {\n case \"error\":\n if (flashErrorNames.indexOf(event.name) !== -1) {\n _extend(_flashState, {\n disabled: event.name === \"flash-disabled\",\n outdated: event.name === \"flash-outdated\",\n unavailable: event.name === \"flash-unavailable\",\n deactivated: event.name === \"flash-deactivated\",\n overdue: event.name === \"flash-overdue\",\n ready: false\n });\n }\n break;\n\n case \"ready\":\n var wasDeactivated = _flashState.deactivated === true;\n _extend(_flashState, {\n disabled: false,\n outdated: false,\n unavailable: false,\n deactivated: false,\n overdue: wasDeactivated,\n ready: !wasDeactivated\n });\n break;\n\n case \"copy\":\n var textContent, htmlContent, targetEl = event.relatedTarget;\n if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n event.clipboardData.clearData();\n event.clipboardData.setData(\"text/plain\", textContent);\n if (htmlContent !== textContent) {\n event.clipboardData.setData(\"text/html\", htmlContent);\n }\n } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n event.clipboardData.clearData();\n event.clipboardData.setData(\"text/plain\", textContent);\n }\n break;\n\n case \"aftercopy\":\n ZeroClipboard.clearData();\n if (element && element !== _safeActiveElement() && element.focus) {\n element.focus();\n }\n break;\n\n case \"_mouseover\":\n ZeroClipboard.focus(element);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseenter\",\n bubbles: false,\n cancelable: false\n }));\n }\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseover\"\n }));\n }\n break;\n\n case \"_mouseout\":\n ZeroClipboard.blur();\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseleave\",\n bubbles: false,\n cancelable: false\n }));\n }\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseout\"\n }));\n }\n break;\n\n case \"_mousedown\":\n _addClass(element, _globalConfig.activeClass);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n\n case \"_mouseup\":\n _removeClass(element, _globalConfig.activeClass);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n\n case \"_click\":\n case \"_mousemove\":\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n }\n if (/^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n return true;\n }\n };\n /**\n * Dispatch a synthetic MouseEvent.\n *\n * @returns `undefined`\n * @private\n */\n var _fireMouseEvent = function(event) {\n if (!(event && typeof event.type === \"string\" && event)) {\n return;\n }\n var e, target = event.target || null, doc = target && target.ownerDocument || _document, defaults = {\n view: doc.defaultView || _window,\n canBubble: true,\n cancelable: true,\n detail: event.type === \"click\" ? 1 : 0,\n button: typeof event.which === \"number\" ? event.which - 1 : typeof event.button === \"number\" ? event.button : doc.createEvent ? 0 : 1\n }, args = _extend(defaults, event);\n if (!target) {\n return;\n }\n if (doc.createEvent && target.dispatchEvent) {\n args = [ args.type, args.canBubble, args.cancelable, args.view, args.detail, args.screenX, args.screenY, args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, args.relatedTarget ];\n e = doc.createEvent(\"MouseEvents\");\n if (e.initMouseEvent) {\n e.initMouseEvent.apply(e, args);\n e._source = \"js\";\n target.dispatchEvent(e);\n }\n }\n };\n /**\n * Create the HTML bridge element to embed the Flash object into.\n * @private\n */\n var _createHtmlBridge = function() {\n var container = _document.createElement(\"div\");\n container.id = _globalConfig.containerId;\n container.className = _globalConfig.containerClass;\n container.style.position = \"absolute\";\n container.style.left = \"0px\";\n container.style.top = \"-9999px\";\n container.style.width = \"1px\";\n container.style.height = \"1px\";\n container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n return container;\n };\n /**\n * Get the HTML element container that wraps the Flash bridge object/element.\n * @private\n */\n var _getHtmlBridge = function(flashBridge) {\n var htmlBridge = flashBridge && flashBridge.parentNode;\n while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n htmlBridge = htmlBridge.parentNode;\n }\n return htmlBridge || null;\n };\n /**\n * Create the SWF object.\n *\n * @returns The SWF object reference.\n * @private\n */\n var _embedSwf = function() {\n var len, flashBridge = _flashState.bridge, container = _getHtmlBridge(flashBridge);\n if (!flashBridge) {\n var allowScriptAccess = _determineScriptAccess(_window.location.host, _globalConfig);\n var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n var flashvars = _vars(_globalConfig);\n var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n container = _createHtmlBridge();\n var divToBeReplaced = _document.createElement(\"div\");\n container.appendChild(divToBeReplaced);\n _document.body.appendChild(container);\n var tmpDiv = _document.createElement(\"div\");\n var oldIE = _flashState.pluginType === \"activex\";\n tmpDiv.innerHTML = '\" + (oldIE ? '' : \"\") + '' + '' + '' + '' + '' + \"\";\n flashBridge = tmpDiv.firstChild;\n tmpDiv = null;\n flashBridge.ZeroClipboard = ZeroClipboard;\n container.replaceChild(flashBridge, divToBeReplaced);\n }\n if (!flashBridge) {\n flashBridge = _document[_globalConfig.swfObjectId];\n if (flashBridge && (len = flashBridge.length)) {\n flashBridge = flashBridge[len - 1];\n }\n if (!flashBridge && container) {\n flashBridge = container.firstChild;\n }\n }\n _flashState.bridge = flashBridge || null;\n return flashBridge;\n };\n /**\n * Destroy the SWF object.\n * @private\n */\n var _unembedSwf = function() {\n var flashBridge = _flashState.bridge;\n if (flashBridge) {\n var htmlBridge = _getHtmlBridge(flashBridge);\n if (htmlBridge) {\n if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n flashBridge.style.display = \"none\";\n (function removeSwfFromIE() {\n if (flashBridge.readyState === 4) {\n for (var prop in flashBridge) {\n if (typeof flashBridge[prop] === \"function\") {\n flashBridge[prop] = null;\n }\n }\n if (flashBridge.parentNode) {\n flashBridge.parentNode.removeChild(flashBridge);\n }\n if (htmlBridge.parentNode) {\n htmlBridge.parentNode.removeChild(htmlBridge);\n }\n } else {\n _setTimeout(removeSwfFromIE, 10);\n }\n })();\n } else {\n if (flashBridge.parentNode) {\n flashBridge.parentNode.removeChild(flashBridge);\n }\n if (htmlBridge.parentNode) {\n htmlBridge.parentNode.removeChild(htmlBridge);\n }\n }\n }\n _flashState.ready = null;\n _flashState.bridge = null;\n _flashState.deactivated = null;\n }\n };\n /**\n * Map the data format names of the \"clipData\" to Flash-friendly names.\n *\n * @returns A new transformed object.\n * @private\n */\n var _mapClipDataToFlash = function(clipData) {\n var newClipData = {}, formatMap = {};\n if (!(typeof clipData === \"object\" && clipData)) {\n return;\n }\n for (var dataFormat in clipData) {\n if (dataFormat && _hasOwn.call(clipData, dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n switch (dataFormat.toLowerCase()) {\n case \"text/plain\":\n case \"text\":\n case \"air:text\":\n case \"flash:text\":\n newClipData.text = clipData[dataFormat];\n formatMap.text = dataFormat;\n break;\n\n case \"text/html\":\n case \"html\":\n case \"air:html\":\n case \"flash:html\":\n newClipData.html = clipData[dataFormat];\n formatMap.html = dataFormat;\n break;\n\n case \"application/rtf\":\n case \"text/rtf\":\n case \"rtf\":\n case \"richtext\":\n case \"air:rtf\":\n case \"flash:rtf\":\n newClipData.rtf = clipData[dataFormat];\n formatMap.rtf = dataFormat;\n break;\n\n default:\n break;\n }\n }\n }\n return {\n data: newClipData,\n formatMap: formatMap\n };\n };\n /**\n * Map the data format names from Flash-friendly names back to their original \"clipData\" names (via a format mapping).\n *\n * @returns A new transformed object.\n * @private\n */\n var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n return clipResults;\n }\n var newResults = {};\n for (var prop in clipResults) {\n if (_hasOwn.call(clipResults, prop)) {\n if (prop !== \"success\" && prop !== \"data\") {\n newResults[prop] = clipResults[prop];\n continue;\n }\n newResults[prop] = {};\n var tmpHash = clipResults[prop];\n for (var dataFormat in tmpHash) {\n if (dataFormat && _hasOwn.call(tmpHash, dataFormat) && _hasOwn.call(formatMap, dataFormat)) {\n newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n }\n }\n }\n }\n return newResults;\n };\n /**\n * Will look at a path, and will create a \"?noCache={time}\" or \"&noCache={time}\"\n * query param string to return. Does NOT append that string to the original path.\n * This is useful because ExternalInterface often breaks when a Flash SWF is cached.\n *\n * @returns The `noCache` query param with necessary \"?\"/\"&\" prefix.\n * @private\n */\n var _cacheBust = function(path, options) {\n var cacheBust = options == null || options && options.cacheBust === true;\n if (cacheBust) {\n return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + _now();\n } else {\n return \"\";\n }\n };\n /**\n * Creates a query string for the FlashVars param.\n * Does NOT include the cache-busting query param.\n *\n * @returns FlashVars query string\n * @private\n */\n var _vars = function(options) {\n var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n if (options.trustedDomains) {\n if (typeof options.trustedDomains === \"string\") {\n domains = [ options.trustedDomains ];\n } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n domains = options.trustedDomains;\n }\n }\n if (domains && domains.length) {\n for (i = 0, len = domains.length; i < len; i++) {\n if (_hasOwn.call(domains, i) && domains[i] && typeof domains[i] === \"string\") {\n domain = _extractDomain(domains[i]);\n if (!domain) {\n continue;\n }\n if (domain === \"*\") {\n trustedOriginsExpanded.length = 0;\n trustedOriginsExpanded.push(domain);\n break;\n }\n trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, _window.location.protocol + \"//\" + domain ]);\n }\n }\n }\n if (trustedOriginsExpanded.length) {\n str += \"trustedOrigins=\" + _encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n }\n if (options.forceEnhancedClipboard === true) {\n str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n }\n if (typeof options.swfObjectId === \"string\" && options.swfObjectId) {\n str += (str ? \"&\" : \"\") + \"swfObjectId=\" + _encodeURIComponent(options.swfObjectId);\n }\n return str;\n };\n /**\n * Extract the domain (e.g. \"github.com\") from an origin (e.g. \"https://github.com\") or\n * URL (e.g. \"https://github.com/zeroclipboard/zeroclipboard/\").\n *\n * @returns the domain\n * @private\n */\n var _extractDomain = function(originOrUrl) {\n if (originOrUrl == null || originOrUrl === \"\") {\n return null;\n }\n originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n if (originOrUrl === \"\") {\n return null;\n }\n var protocolIndex = originOrUrl.indexOf(\"//\");\n originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n var pathIndex = originOrUrl.indexOf(\"/\");\n originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n return null;\n }\n return originOrUrl || null;\n };\n /**\n * Set `allowScriptAccess` based on `trustedDomains` and `window.location.host` vs. `swfPath`.\n *\n * @returns The appropriate script access level.\n * @private\n */\n var _determineScriptAccess = function() {\n var _extractAllDomains = function(origins) {\n var i, len, tmp, resultsArray = [];\n if (typeof origins === \"string\") {\n origins = [ origins ];\n }\n if (!(typeof origins === \"object\" && origins && typeof origins.length === \"number\")) {\n return resultsArray;\n }\n for (i = 0, len = origins.length; i < len; i++) {\n if (_hasOwn.call(origins, i) && (tmp = _extractDomain(origins[i]))) {\n if (tmp === \"*\") {\n resultsArray.length = 0;\n resultsArray.push(\"*\");\n break;\n }\n if (resultsArray.indexOf(tmp) === -1) {\n resultsArray.push(tmp);\n }\n }\n }\n return resultsArray;\n };\n return function(currentDomain, configOptions) {\n var swfDomain = _extractDomain(configOptions.swfPath);\n if (swfDomain === null) {\n swfDomain = currentDomain;\n }\n var trustedDomains = _extractAllDomains(configOptions.trustedDomains);\n var len = trustedDomains.length;\n if (len > 0) {\n if (len === 1 && trustedDomains[0] === \"*\") {\n return \"always\";\n }\n if (trustedDomains.indexOf(currentDomain) !== -1) {\n if (len === 1 && currentDomain === swfDomain) {\n return \"sameDomain\";\n }\n return \"always\";\n }\n }\n return \"never\";\n };\n }();\n /**\n * Get the currently active/focused DOM element.\n *\n * @returns the currently active/focused element, or `null`\n * @private\n */\n var _safeActiveElement = function() {\n try {\n return _document.activeElement;\n } catch (err) {\n return null;\n }\n };\n /**\n * Add a class to an element, if it doesn't already have it.\n *\n * @returns The element, with its new class added.\n * @private\n */\n var _addClass = function(element, value) {\n if (!element || element.nodeType !== 1) {\n return element;\n }\n if (element.classList) {\n if (!element.classList.contains(value)) {\n element.classList.add(value);\n }\n return element;\n }\n if (value && typeof value === \"string\") {\n var classNames = (value || \"\").split(/\\s+/);\n if (element.nodeType === 1) {\n if (!element.className) {\n element.className = value;\n } else {\n var className = \" \" + element.className + \" \", setClass = element.className;\n for (var c = 0, cl = classNames.length; c < cl; c++) {\n if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n setClass += \" \" + classNames[c];\n }\n }\n element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n }\n }\n }\n return element;\n };\n /**\n * Remove a class from an element, if it has it.\n *\n * @returns The element, with its class removed.\n * @private\n */\n var _removeClass = function(element, value) {\n if (!element || element.nodeType !== 1) {\n return element;\n }\n if (element.classList) {\n if (element.classList.contains(value)) {\n element.classList.remove(value);\n }\n return element;\n }\n if (typeof value === \"string\" && value) {\n var classNames = value.split(/\\s+/);\n if (element.nodeType === 1 && element.className) {\n var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n for (var c = 0, cl = classNames.length; c < cl; c++) {\n className = className.replace(\" \" + classNames[c] + \" \", \" \");\n }\n element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n }\n }\n return element;\n };\n /**\n * Attempt to interpret the element's CSS styling. If `prop` is `\"cursor\"`,\n * then we assume that it should be a hand (\"pointer\") cursor if the element\n * is an anchor element (\"a\" tag).\n *\n * @returns The computed style property.\n * @private\n */\n var _getStyle = function(el, prop) {\n var value = _window.getComputedStyle(el, null).getPropertyValue(prop);\n if (prop === \"cursor\") {\n if (!value || value === \"auto\") {\n if (el.nodeName === \"A\") {\n return \"pointer\";\n }\n }\n }\n return value;\n };\n /**\n * Get the zoom factor of the browser. Always returns `1.0`, except at\n * non-default zoom levels in IE<8 and some older versions of WebKit.\n *\n * @returns Floating unit percentage of the zoom factor (e.g. 150% = `1.5`).\n * @private\n */\n var _getZoomFactor = function() {\n var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n if (typeof _document.body.getBoundingClientRect === \"function\") {\n rect = _document.body.getBoundingClientRect();\n physicalWidth = rect.right - rect.left;\n logicalWidth = _document.body.offsetWidth;\n zoomFactor = _round(physicalWidth / logicalWidth * 100) / 100;\n }\n return zoomFactor;\n };\n /**\n * Get the DOM positioning info of an element.\n *\n * @returns Object containing the element's position, width, and height.\n * @private\n */\n var _getDOMObjectPosition = function(obj) {\n var info = {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n };\n if (obj.getBoundingClientRect) {\n var rect = obj.getBoundingClientRect();\n var pageXOffset, pageYOffset, zoomFactor;\n if (\"pageXOffset\" in _window && \"pageYOffset\" in _window) {\n pageXOffset = _window.pageXOffset;\n pageYOffset = _window.pageYOffset;\n } else {\n zoomFactor = _getZoomFactor();\n pageXOffset = _round(_document.documentElement.scrollLeft / zoomFactor);\n pageYOffset = _round(_document.documentElement.scrollTop / zoomFactor);\n }\n var leftBorderWidth = _document.documentElement.clientLeft || 0;\n var topBorderWidth = _document.documentElement.clientTop || 0;\n info.left = rect.left + pageXOffset - leftBorderWidth;\n info.top = rect.top + pageYOffset - topBorderWidth;\n info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n }\n return info;\n };\n /**\n * Reposition the Flash object to cover the currently activated element.\n *\n * @returns `undefined`\n * @private\n */\n var _reposition = function() {\n var htmlBridge;\n if (_currentElement && (htmlBridge = _getHtmlBridge(_flashState.bridge))) {\n var pos = _getDOMObjectPosition(_currentElement);\n _extend(htmlBridge.style, {\n width: pos.width + \"px\",\n height: pos.height + \"px\",\n top: pos.top + \"px\",\n left: pos.left + \"px\",\n zIndex: \"\" + _getSafeZIndex(_globalConfig.zIndex)\n });\n }\n };\n /**\n * Sends a signal to the Flash object to display the hand cursor if `true`.\n *\n * @returns `undefined`\n * @private\n */\n var _setHandCursor = function(enabled) {\n if (_flashState.ready === true) {\n if (_flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n _flashState.bridge.setHandCursor(enabled);\n } else {\n _flashState.ready = false;\n }\n }\n };\n /**\n * Get a safe value for `zIndex`\n *\n * @returns an integer, or \"auto\"\n * @private\n */\n var _getSafeZIndex = function(val) {\n if (/^(?:auto|inherit)$/.test(val)) {\n return val;\n }\n var zIndex;\n if (typeof val === \"number\" && !_isNaN(val)) {\n zIndex = val;\n } else if (typeof val === \"string\") {\n zIndex = _getSafeZIndex(_parseInt(val, 10));\n }\n return typeof zIndex === \"number\" ? zIndex : \"auto\";\n };\n /**\n * Detect the Flash Player status, version, and plugin type.\n *\n * @see {@link https://code.google.com/p/doctype-mirror/wiki/ArticleDetectFlash#The_code}\n * @see {@link http://stackoverflow.com/questions/12866060/detecting-pepper-ppapi-flash-with-javascript}\n *\n * @returns `undefined`\n * @private\n */\n var _detectFlashSupport = function(ActiveXObject) {\n var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n /**\n * Derived from Apple's suggested sniffer.\n * @param {String} desc e.g. \"Shockwave Flash 7.0 r61\"\n * @returns {String} \"7.0.61\"\n * @private\n */\n function parseFlashVersion(desc) {\n var matches = desc.match(/[\\d]+/g);\n matches.length = 3;\n return matches.join(\".\");\n }\n function isPepperFlash(flashPlayerFileName) {\n return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n }\n function inspectPlugin(plugin) {\n if (plugin) {\n hasFlash = true;\n if (plugin.version) {\n flashVersion = parseFlashVersion(plugin.version);\n }\n if (!flashVersion && plugin.description) {\n flashVersion = parseFlashVersion(plugin.description);\n }\n if (plugin.filename) {\n isPPAPI = isPepperFlash(plugin.filename);\n }\n }\n }\n if (_navigator.plugins && _navigator.plugins.length) {\n plugin = _navigator.plugins[\"Shockwave Flash\"];\n inspectPlugin(plugin);\n if (_navigator.plugins[\"Shockwave Flash 2.0\"]) {\n hasFlash = true;\n flashVersion = \"2.0.0.11\";\n }\n } else if (_navigator.mimeTypes && _navigator.mimeTypes.length) {\n mimeType = _navigator.mimeTypes[\"application/x-shockwave-flash\"];\n plugin = mimeType && mimeType.enabledPlugin;\n inspectPlugin(plugin);\n } else if (typeof ActiveXObject !== \"undefined\") {\n isActiveX = true;\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n hasFlash = true;\n flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n } catch (e1) {\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n hasFlash = true;\n flashVersion = \"6.0.21\";\n } catch (e2) {\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n hasFlash = true;\n flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n } catch (e3) {\n isActiveX = false;\n }\n }\n }\n }\n _flashState.disabled = hasFlash !== true;\n _flashState.outdated = flashVersion && _parseFloat(flashVersion) < _parseFloat(_minimumFlashVersion);\n _flashState.version = flashVersion || \"0.0.0\";\n _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n };\n /**\n * Invoke the Flash detection algorithms immediately upon inclusion so we're not waiting later.\n */\n _detectFlashSupport(_ActiveXObject);\n /**\n * A shell constructor for `ZeroClipboard` client instances.\n *\n * @constructor\n */\n var ZeroClipboard = function() {\n if (!(this instanceof ZeroClipboard)) {\n return new ZeroClipboard();\n }\n if (typeof ZeroClipboard._createClient === \"function\") {\n ZeroClipboard._createClient.apply(this, _args(arguments));\n }\n };\n /**\n * The ZeroClipboard library's version number.\n *\n * @static\n * @readonly\n * @property {string}\n */\n _defineProperty(ZeroClipboard, \"version\", {\n value: \"2.1.1\",\n writable: false,\n configurable: true,\n enumerable: true\n });\n /**\n * Update or get a copy of the ZeroClipboard global configuration.\n * Returns a copy of the current/updated configuration.\n *\n * @returns Object\n * @static\n */\n ZeroClipboard.config = function() {\n return _config.apply(this, _args(arguments));\n };\n /**\n * Diagnostic method that describes the state of the browser, Flash Player, and ZeroClipboard.\n *\n * @returns Object\n * @static\n */\n ZeroClipboard.state = function() {\n return _state.apply(this, _args(arguments));\n };\n /**\n * Check if Flash is unusable for any reason: disabled, outdated, deactivated, etc.\n *\n * @returns Boolean\n * @static\n */\n ZeroClipboard.isFlashUnusable = function() {\n return _isFlashUnusable.apply(this, _args(arguments));\n };\n /**\n * Register an event listener.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n ZeroClipboard.on = function() {\n return _on.apply(this, _args(arguments));\n };\n /**\n * Unregister an event listener.\n * If no `listener` function/object is provided, it will unregister all listeners for the provided `eventType`.\n * If no `eventType` is provided, it will unregister all listeners for every event type.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n ZeroClipboard.off = function() {\n return _off.apply(this, _args(arguments));\n };\n /**\n * Retrieve event listeners for an `eventType`.\n * If no `eventType` is provided, it will retrieve all listeners for every event type.\n *\n * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`\n */\n ZeroClipboard.handlers = function() {\n return _listeners.apply(this, _args(arguments));\n };\n /**\n * Event emission receiver from the Flash object, forwarding to any registered JavaScript event listeners.\n *\n * @returns For the \"copy\" event, returns the Flash-friendly \"clipData\" object; otherwise `undefined`.\n * @static\n */\n ZeroClipboard.emit = function() {\n return _emit.apply(this, _args(arguments));\n };\n /**\n * Create and embed the Flash object.\n *\n * @returns The Flash object\n * @static\n */\n ZeroClipboard.create = function() {\n return _create.apply(this, _args(arguments));\n };\n /**\n * Self-destruct and clean up everything, including the embedded Flash object.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.destroy = function() {\n return _destroy.apply(this, _args(arguments));\n };\n /**\n * Set the pending data for clipboard injection.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.setData = function() {\n return _setData.apply(this, _args(arguments));\n };\n /**\n * Clear the pending data for clipboard injection.\n * If no `format` is provided, all pending data formats will be cleared.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.clearData = function() {\n return _clearData.apply(this, _args(arguments));\n };\n /**\n * Get a copy of the pending data for clipboard injection.\n * If no `format` is provided, a copy of ALL pending data formats will be returned.\n *\n * @returns `String` or `Object`\n * @static\n */\n ZeroClipboard.getData = function() {\n return _getData.apply(this, _args(arguments));\n };\n /**\n * Sets the current HTML object that the Flash object should overlay. This will put the global\n * Flash object on top of the current element; depending on the setup, this may also set the\n * pending clipboard text data as well as the Flash object's wrapping element's title attribute\n * based on the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.focus = ZeroClipboard.activate = function() {\n return _focus.apply(this, _args(arguments));\n };\n /**\n * Un-overlays the Flash object. This will put the global Flash object off-screen; depending on\n * the setup, this may also unset the Flash object's wrapping element's title attribute based on\n * the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.blur = ZeroClipboard.deactivate = function() {\n return _blur.apply(this, _args(arguments));\n };\n /**\n * Returns the currently focused/\"activated\" HTML element that the Flash object is wrapping.\n *\n * @returns `HTMLElement` or `null`\n * @static\n */\n ZeroClipboard.activeElement = function() {\n return _activeElement.apply(this, _args(arguments));\n };\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return ZeroClipboard;\n });\n } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n module.exports = ZeroClipboard;\n } else {\n window.ZeroClipboard = ZeroClipboard;\n }\n})(function() {\n return this || window;\n}());"]} \ No newline at end of file diff --git a/dist/ZeroClipboard.js b/dist/ZeroClipboard.js index 73ad31aa..162f575e 100644 --- a/dist/ZeroClipboard.js +++ b/dist/ZeroClipboard.js @@ -2201,5 +2201,5 @@ window.ZeroClipboard = ZeroClipboard; } })(function() { - return this; + return this || window; }()); \ No newline at end of file diff --git a/dist/ZeroClipboard.min.js b/dist/ZeroClipboard.min.js index 65e4974a..02ea934b 100644 --- a/dist/ZeroClipboard.min.js +++ b/dist/ZeroClipboard.min.js @@ -6,5 +6,5 @@ * http://zeroclipboard.org/ * v2.1.1 */ -!function(a,b){"use strict";var c,d=a,e=d.document,f=d.navigator,g=d.setTimeout,h=d.encodeURIComponent,i=d.ActiveXObject,j=d.Number.parseInt||d.parseInt,k=d.Number.parseFloat||d.parseFloat,l=d.Number.isNaN||d.isNaN,m=d.Math.round,n=d.Date.now,o=d.Object.keys,p=d.Object.defineProperty,q=d.Object.prototype.hasOwnProperty,r=d.Array.prototype.slice,s=function(a){return r.call(a,0)},t=function(){var a,c,d,e,f,g,h=s(arguments),i=h[0]||{};for(a=1,c=h.length;c>a;a++)if(null!=(d=h[a]))for(e in d)q.call(d,e)&&(f=i[e],g=d[e],i!==g&&g!==b&&(i[e]=g));return i},u=function(a){var b,c,d,e;if("object"!=typeof a||null==a)b=a;else if("number"==typeof a.length)for(b=[],c=0,d=a.length;d>c;c++)q.call(a,c)&&(b[c]=u(a[c]));else{b={};for(e in a)q.call(a,e)&&(b[e]=u(a[e]))}return b},v=function(a,b){for(var c={},d=0,e=b.length;e>d;d++)b[d]in a&&(c[b[d]]=a[b[d]]);return c},w=function(a,b){var c={};for(var d in a)-1===b.indexOf(d)&&(c[d]=a[d]);return c},x=function(a){if(a)for(var b in a)q.call(a,b)&&delete a[b];return a},y=function(a,b){if(a&&1===a.nodeType&&a.ownerDocument&&b&&(1===b.nodeType&&b.ownerDocument&&b.ownerDocument===a.ownerDocument||9===b.nodeType&&!b.ownerDocument&&b===a.ownerDocument))do{if(a===b)return!0;a=a.parentNode}while(a);return!1},z={bridge:null,version:"0.0.0",pluginType:"unknown",disabled:null,outdated:null,unavailable:null,deactivated:null,overdue:null,ready:null},A="11.0.0",B={},C={},D=null,E={ready:"Flash communication is established",error:{"flash-disabled":"Flash is disabled or not installed","flash-outdated":"Flash is too outdated to support ZeroClipboard","flash-unavailable":"Flash is unable to communicate bidirectionally with JavaScript","flash-deactivated":"Flash is too outdated for your browser and/or is configured as click-to-activate","flash-overdue":"Flash communication was established but NOT within the acceptable time limit"}},F=function(){var a,b,c,d,f="ZeroClipboard.swf";if(!e.currentScript||!(d=e.currentScript.src)){var g=e.getElementsByTagName("script");if("readyState"in g[0])for(a=g.length;a--&&("interactive"!==g[a].readyState||!(d=g[a].src)););else if("loading"===e.readyState)d=g[g.length-1].src;else{for(a=g.length;a--;){if(c=g[a].src,!c){b=null;break}if(c=c.split("#")[0].split("?")[0],c=c.slice(0,c.lastIndexOf("/")+1),null==b)b=c;else if(b!==c){b=null;break}}null!==b&&(d=b)}}return d&&(d=d.split("#")[0].split("?")[0],f=d.slice(0,d.lastIndexOf("/")+1)+f),f}(),G={swfPath:F,trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceEnhancedClipboard:!1,flashLoadTimeout:3e4,autoActivate:!0,bubbleEvents:!0,containerId:"global-zeroclipboard-html-bridge",containerClass:"global-zeroclipboard-container",swfObjectId:"global-zeroclipboard-flash-bridge",hoverClass:"zeroclipboard-is-hover",activeClass:"zeroclipboard-is-active",forceHandCursor:!1,title:null,zIndex:999999999},H=function(a){if("object"==typeof a&&null!==a)for(var b in a)if(q.call(a,b))if(/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(b))G[b]=a[b];else if(null==z.bridge)if("containerId"===b||"swfObjectId"===b){if(!W(a[b]))throw new Error("The specified `"+b+"` value is not valid as an HTML4 Element ID");G[b]=a[b]}else G[b]=a[b];{if("string"!=typeof a||!a)return u(G);if(q.call(G,a))return G[a]}},I=function(){return{browser:v(f,["userAgent","platform","appName"]),flash:w(z,["bridge"]),zeroclipboard:{version:xb.version,config:xb.config()}}},J=function(){return!!(z.disabled||z.outdated||z.unavailable||z.deactivated)},K=function(a,b){var c,d,e,f={};if("string"==typeof a&&a)e=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)q.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&xb.on(c,a[c]);if(e&&e.length){for(c=0,d=e.length;d>c;c++)a=e[c].replace(/^on/,""),f[a]=!0,B[a]||(B[a]=[]),B[a].push(b);if(f.ready&&z.ready&&xb.emit({type:"ready"}),f.error){var g=["disabled","outdated","unavailable","deactivated","overdue"];for(c=0,d=g.length;d>c;c++)if(z[g[c]]===!0){xb.emit({type:"error",name:"flash-"+g[c]});break}}}return xb},L=function(a,b){var c,d,e,f,g;if(0===arguments.length)f=o(B);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)q.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&xb.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=B[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return xb},M=function(a){var b;return b="string"==typeof a&&a?u(B[a])||null:u(B)},N=function(a){var b,c,d;return a=X(a),a&&!bb(a)?"ready"===a.type&&z.overdue===!0?xb.emit({type:"error",name:"flash-overdue"}):(b=t({},a),ab.call(this,b),"copy"===a.type&&(d=hb(C),c=d.data,D=d.formatMap),c):void 0},O=function(){if("boolean"!=typeof z.ready&&(z.ready=!1),!xb.isFlashUnusable()&&null===z.bridge){var a=G.flashLoadTimeout;"number"==typeof a&&a>=0&&g(function(){"boolean"!=typeof z.deactivated&&(z.deactivated=!0),z.deactivated===!0&&xb.emit({type:"error",name:"flash-deactivated"})},a),z.overdue=!1,fb()}},P=function(){xb.clearData(),xb.blur(),xb.emit("destroy"),gb(),xb.off()},Q=function(a,b){var c;if("object"==typeof a&&a&&"undefined"==typeof b)c=a,xb.clearData();else{if("string"!=typeof a||!a)return;c={},c[a]=b}for(var d in c)"string"==typeof d&&d&&q.call(c,d)&&"string"==typeof c[d]&&c[d]&&(C[d]=c[d])},R=function(a){"undefined"==typeof a?(x(C),D=null):"string"==typeof a&&q.call(C,a)&&delete C[a]},S=function(a){return"undefined"==typeof a?u(C):"string"==typeof a&&q.call(C,a)?C[a]:void 0},T=function(a){if(a&&1===a.nodeType){c&&(pb(c,G.activeClass),c!==a&&pb(c,G.hoverClass)),c=a,ob(a,G.hoverClass);var b=a.getAttribute("title")||G.title;if("string"==typeof b&&b){var d=eb(z.bridge);d&&d.setAttribute("title",b)}var e=G.forceHandCursor===!0||"pointer"===qb(a,"cursor");ub(e),tb()}},U=function(){var a=eb(z.bridge);a&&(a.removeAttribute("title"),a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.top="1px"),c&&(pb(c,G.hoverClass),pb(c,G.activeClass),c=null)},V=function(){return c||null},W=function(a){return"string"==typeof a&&a&&/^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(a)},X=function(a){var b;if("string"==typeof a&&a?(b=a,a={}):"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(b=a.type),b){t(a,{type:b.toLowerCase(),target:a.target||c||null,relatedTarget:a.relatedTarget||null,currentTarget:z&&z.bridge||null,timeStamp:a.timeStamp||n()||null});var d=E[a.type];return"error"===a.type&&a.name&&d&&(d=d[a.name]),d&&(a.message=d),"ready"===a.type&&t(a,{target:null,version:z.version}),"error"===a.type&&(/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(a.name)&&t(a,{target:null,minimumVersion:A}),/^flash-(outdated|unavailable|deactivated|overdue)$/.test(a.name)&&t(a,{version:z.version})),"copy"===a.type&&(a.clipboardData={setData:xb.setData,clearData:xb.clearData}),"aftercopy"===a.type&&(a=ib(a,D)),a.target&&!a.relatedTarget&&(a.relatedTarget=Y(a.target)),a=Z(a)}},Y=function(a){var b=a&&a.getAttribute&&a.getAttribute("data-clipboard-target");return b?e.getElementById(b):null},Z=function(a){if(a&&/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)){var c=a.target,f="_mouseover"===a.type&&a.relatedTarget?a.relatedTarget:b,g="_mouseout"===a.type&&a.relatedTarget?a.relatedTarget:b,h=sb(c),i=d.screenLeft||d.screenX||0,j=d.screenTop||d.screenY||0,k=e.body.scrollLeft+e.documentElement.scrollLeft,l=e.body.scrollTop+e.documentElement.scrollTop,m=h.left+("number"==typeof a._stageX?a._stageX:0),n=h.top+("number"==typeof a._stageY?a._stageY:0),o=m-k,p=n-l,q=i+o,r=j+p,s="number"==typeof a.movementX?a.movementX:0,u="number"==typeof a.movementY?a.movementY:0;delete a._stageX,delete a._stageY,t(a,{srcElement:c,fromElement:f,toElement:g,screenX:q,screenY:r,pageX:m,pageY:n,clientX:o,clientY:p,x:o,y:p,movementX:s,movementY:u,offsetX:0,offsetY:0,layerX:0,layerY:0})}return a},$=function(a){var b=a&&"string"==typeof a.type&&a.type||"";return!/^(?:(?:before)?copy|destroy)$/.test(b)},_=function(a,b,c,d){d?g(function(){a.apply(b,c)},0):a.apply(b,c)},ab=function(a){if("object"==typeof a&&a&&a.type){var b=$(a),c=B["*"]||[],e=B[a.type]||[],f=c.concat(e);if(f&&f.length){var g,h,i,j,k,l=this;for(g=0,h=f.length;h>g;g++)i=f[g],j=l,"string"==typeof i&&"function"==typeof d[i]&&(i=d[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=t({},a),_(i,j,[k],b))}return this}},bb=function(a){var b=a.target||c||null,d="swf"===a._source;delete a._source;var e=["flash-disabled","flash-outdated","flash-unavailable","flash-deactivated","flash-overdue"];switch(a.type){case"error":-1!==e.indexOf(a.name)&&t(z,{disabled:"flash-disabled"===a.name,outdated:"flash-outdated"===a.name,unavailable:"flash-unavailable"===a.name,deactivated:"flash-deactivated"===a.name,overdue:"flash-overdue"===a.name,ready:!1});break;case"ready":var f=z.deactivated===!0;t(z,{disabled:!1,outdated:!1,unavailable:!1,deactivated:!1,overdue:f,ready:!f});break;case"copy":var g,h,i=a.relatedTarget;!C["text/html"]&&!C["text/plain"]&&i&&(h=i.value||i.outerHTML||i.innerHTML)&&(g=i.value||i.textContent||i.innerText)?(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",g),h!==g&&a.clipboardData.setData("text/html",h)):!C["text/plain"]&&a.target&&(g=a.target.getAttribute("data-clipboard-text"))&&(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",g));break;case"aftercopy":xb.clearData(),b&&b!==nb()&&b.focus&&b.focus();break;case"_mouseover":xb.focus(b),G.bubbleEvents===!0&&d&&(b&&b!==a.relatedTarget&&!y(a.relatedTarget,b)&&cb(t({},a,{type:"mouseenter",bubbles:!1,cancelable:!1})),cb(t({},a,{type:"mouseover"})));break;case"_mouseout":xb.blur(),G.bubbleEvents===!0&&d&&(b&&b!==a.relatedTarget&&!y(a.relatedTarget,b)&&cb(t({},a,{type:"mouseleave",bubbles:!1,cancelable:!1})),cb(t({},a,{type:"mouseout"})));break;case"_mousedown":ob(b,G.activeClass),G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}));break;case"_mouseup":pb(b,G.activeClass),G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}));break;case"_click":case"_mousemove":G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}))}return/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)?!0:void 0},cb=function(a){if(a&&"string"==typeof a.type&&a){var b,c=a.target||null,f=c&&c.ownerDocument||e,g={view:f.defaultView||d,canBubble:!0,cancelable:!0,detail:"click"===a.type?1:0,button:"number"==typeof a.which?a.which-1:"number"==typeof a.button?a.button:f.createEvent?0:1},h=t(g,a);c&&f.createEvent&&c.dispatchEvent&&(h=[h.type,h.canBubble,h.cancelable,h.view,h.detail,h.screenX,h.screenY,h.clientX,h.clientY,h.ctrlKey,h.altKey,h.shiftKey,h.metaKey,h.button,h.relatedTarget],b=f.createEvent("MouseEvents"),b.initMouseEvent&&(b.initMouseEvent.apply(b,h),b._source="js",c.dispatchEvent(b)))}},db=function(){var a=e.createElement("div");return a.id=G.containerId,a.className=G.containerClass,a.style.position="absolute",a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.height="1px",a.style.zIndex=""+vb(G.zIndex),a},eb=function(a){for(var b=a&&a.parentNode;b&&"OBJECT"===b.nodeName&&b.parentNode;)b=b.parentNode;return b||null},fb=function(){var a,b=z.bridge,c=eb(b);if(!b){var f=mb(d.location.host,G),g="never"===f?"none":"all",h=kb(G),i=G.swfPath+jb(G.swfPath,G);c=db();var j=e.createElement("div");c.appendChild(j),e.body.appendChild(c);var k=e.createElement("div"),l="activex"===z.pluginType;k.innerHTML='"+(l?'':"")+'',b=k.firstChild,k=null,b.ZeroClipboard=xb,c.replaceChild(b,j)}return b||(b=e[G.swfObjectId],b&&(a=b.length)&&(b=b[a-1]),!b&&c&&(b=c.firstChild)),z.bridge=b||null,b},gb=function(){var a=z.bridge;if(a){var b=eb(a);b&&("activex"===z.pluginType&&"readyState"in a?(a.style.display="none",function c(){if(4===a.readyState){for(var d in a)"function"==typeof a[d]&&(a[d]=null);a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b)}else g(c,10)}()):(a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b))),z.ready=null,z.bridge=null,z.deactivated=null}},hb=function(a){var b={},c={};if("object"==typeof a&&a){for(var d in a)if(d&&q.call(a,d)&&"string"==typeof a[d]&&a[d])switch(d.toLowerCase()){case"text/plain":case"text":case"air:text":case"flash:text":b.text=a[d],c.text=d;break;case"text/html":case"html":case"air:html":case"flash:html":b.html=a[d],c.html=d;break;case"application/rtf":case"text/rtf":case"rtf":case"richtext":case"air:rtf":case"flash:rtf":b.rtf=a[d],c.rtf=d}return{data:b,formatMap:c}}},ib=function(a,b){if("object"!=typeof a||!a||"object"!=typeof b||!b)return a;var c={};for(var d in a)if(q.call(a,d)){if("success"!==d&&"data"!==d){c[d]=a[d];continue}c[d]={};var e=a[d];for(var f in e)f&&q.call(e,f)&&q.call(b,f)&&(c[d][b[f]]=e[f])}return c},jb=function(a,b){var c=null==b||b&&b.cacheBust===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+n():""},kb=function(a){var b,c,e,f,g="",i=[];if(a.trustedDomains&&("string"==typeof a.trustedDomains?f=[a.trustedDomains]:"object"==typeof a.trustedDomains&&"length"in a.trustedDomains&&(f=a.trustedDomains)),f&&f.length)for(b=0,c=f.length;c>b;b++)if(q.call(f,b)&&f[b]&&"string"==typeof f[b]){if(e=lb(f[b]),!e)continue;if("*"===e){i.length=0,i.push(e);break}i.push.apply(i,[e,"//"+e,d.location.protocol+"//"+e])}return i.length&&(g+="trustedOrigins="+h(i.join(","))),a.forceEnhancedClipboard===!0&&(g+=(g?"&":"")+"forceEnhancedClipboard=true"),"string"==typeof a.swfObjectId&&a.swfObjectId&&(g+=(g?"&":"")+"swfObjectId="+h(a.swfObjectId)),g},lb=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},mb=function(){var a=function(a){var b,c,d,e=[];if("string"==typeof a&&(a=[a]),"object"!=typeof a||!a||"number"!=typeof a.length)return e;for(b=0,c=a.length;c>b;b++)if(q.call(a,b)&&(d=lb(a[b]))){if("*"===d){e.length=0,e.push("*");break}-1===e.indexOf(d)&&e.push(d)}return e};return function(b,c){var d=lb(c.swfPath);null===d&&(d=b);var e=a(c.trustedDomains),f=e.length;if(f>0){if(1===f&&"*"===e[0])return"always";if(-1!==e.indexOf(b))return 1===f&&b===d?"sameDomain":"always"}return"never"}}(),nb=function(){try{return e.activeElement}catch(a){return null}},ob=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)||a.classList.add(b),a;if(b&&"string"==typeof b){var c=(b||"").split(/\s+/);if(1===a.nodeType)if(a.className){for(var d=" "+a.className+" ",e=a.className,f=0,g=c.length;g>f;f++)d.indexOf(" "+c[f]+" ")<0&&(e+=" "+c[f]);a.className=e.replace(/^\s+|\s+$/g,"")}else a.className=b}return a},pb=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)&&a.classList.remove(b),a;if("string"==typeof b&&b){var c=b.split(/\s+/);if(1===a.nodeType&&a.className){for(var d=(" "+a.className+" ").replace(/[\n\t]/g," "),e=0,f=c.length;f>e;e++)d=d.replace(" "+c[e]+" "," ");a.className=d.replace(/^\s+|\s+$/g,"")}}return a},qb=function(a,b){var c=d.getComputedStyle(a,null).getPropertyValue(b);return"cursor"!==b||c&&"auto"!==c||"A"!==a.nodeName?c:"pointer"},rb=function(){var a,b,c,d=1;return"function"==typeof e.body.getBoundingClientRect&&(a=e.body.getBoundingClientRect(),b=a.right-a.left,c=e.body.offsetWidth,d=m(b/c*100)/100),d},sb=function(a){var b={left:0,top:0,width:0,height:0};if(a.getBoundingClientRect){var c,f,g,h=a.getBoundingClientRect();"pageXOffset"in d&&"pageYOffset"in d?(c=d.pageXOffset,f=d.pageYOffset):(g=rb(),c=m(e.documentElement.scrollLeft/g),f=m(e.documentElement.scrollTop/g));var i=e.documentElement.clientLeft||0,j=e.documentElement.clientTop||0;b.left=h.left+c-i,b.top=h.top+f-j,b.width="width"in h?h.width:h.right-h.left,b.height="height"in h?h.height:h.bottom-h.top}return b},tb=function(){var a;if(c&&(a=eb(z.bridge))){var b=sb(c);t(a.style,{width:b.width+"px",height:b.height+"px",top:b.top+"px",left:b.left+"px",zIndex:""+vb(G.zIndex)})}},ub=function(a){z.ready===!0&&(z.bridge&&"function"==typeof z.bridge.setHandCursor?z.bridge.setHandCursor(a):z.ready=!1)},vb=function(a){if(/^(?:auto|inherit)$/.test(a))return a;var b;return"number"!=typeof a||l(a)?"string"==typeof a&&(b=vb(j(a,10))):b=a,"number"==typeof b?b:"auto"},wb=function(a){function b(a){var b=a.match(/[\d]+/g);return b.length=3,b.join(".")}function c(a){return!!a&&(a=a.toLowerCase())&&(/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(a)||"chrome.plugin"===a.slice(-13))}function d(a){a&&(i=!0,a.version&&(m=b(a.version)),!m&&a.description&&(m=b(a.description)),a.filename&&(l=c(a.filename)))}var e,g,h,i=!1,j=!1,l=!1,m="";if(f.plugins&&f.plugins.length)e=f.plugins["Shockwave Flash"],d(e),f.plugins["Shockwave Flash 2.0"]&&(i=!0,m="2.0.0.11");else if(f.mimeTypes&&f.mimeTypes.length)h=f.mimeTypes["application/x-shockwave-flash"],e=h&&h.enabledPlugin,d(e);else if("undefined"!=typeof a){j=!0;try{g=new a("ShockwaveFlash.ShockwaveFlash.7"),i=!0,m=b(g.GetVariable("$version"))}catch(n){try{g=new a("ShockwaveFlash.ShockwaveFlash.6"),i=!0,m="6.0.21"}catch(o){try{g=new a("ShockwaveFlash.ShockwaveFlash"),i=!0,m=b(g.GetVariable("$version"))}catch(p){j=!1}}}}z.disabled=i!==!0,z.outdated=m&&k(m)c;c++)a=e[c].replace(/^on/,""),f[a]=!0,g[a]||(g[a]=[]),g[a].push(b);if(f.ready&&z.ready&&this.emit({type:"ready",client:this}),f.error){var h=["disabled","outdated","unavailable","deactivated","overdue"];for(c=0,d=h.length;d>c;c++)if(z[h[c]]){this.emit({type:"error",name:"flash-"+h[c],client:this});break}}}return this},Fb=function(a,b){var c,d,e,f,g,h=zb[this.id]&&zb[this.id].handlers;if(0===arguments.length)f=o(h);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)q.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=h[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return this},Gb=function(a){var b=null,c=zb[this.id]&&zb[this.id].handlers;return c&&(b="string"==typeof a&&a?c[a]?c[a].slice(0):[]:u(c)),b},Hb=function(a){if(Mb.call(this,a)){"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(a=t({},a));var b=t({},X(a),{client:this});Nb.call(this,b)}return this},Ib=function(a){a=Ob(a);for(var b=0;b0,d=!a.target||c&&-1!==b.indexOf(a.target),e=a.relatedTarget&&c&&-1!==b.indexOf(a.relatedTarget),f=a.client&&a.client===this;return d||e||f?!0:!1},Nb=function(a){if("object"==typeof a&&a&&a.type){var b=$(a),c=zb[this.id]&&zb[this.id].handlers["*"]||[],e=zb[this.id]&&zb[this.id].handlers[a.type]||[],f=c.concat(e);if(f&&f.length){var g,h,i,j,k,l=this;for(g=0,h=f.length;h>g;g++)i=f[g],j=l,"string"==typeof i&&"function"==typeof d[i]&&(i=d[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=t({},a),_(i,j,[k],b))}return this}},Ob=function(a){return"string"==typeof a&&(a=[]),"number"!=typeof a.length?[a]:a},Pb=function(a){if(a&&1===a.nodeType){var b=function(a){(a||(a=d.event))&&("js"!==a._source&&(a.stopImmediatePropagation(),a.preventDefault()),delete a._source)},c=function(c){(c||(c=d.event))&&(b(c),xb.focus(a))};a.addEventListener("mouseover",c,!1),a.addEventListener("mouseout",b,!1),a.addEventListener("mouseenter",b,!1),a.addEventListener("mouseleave",b,!1),a.addEventListener("mousemove",b,!1),Cb[a.zcClippingId]={mouseover:c,mouseout:b,mouseenter:b,mouseleave:b,mousemove:b}}},Qb=function(a){if(a&&1===a.nodeType){var b=Cb[a.zcClippingId];if("object"==typeof b&&b){for(var c,d,e=["move","leave","enter","out","over"],f=0,g=e.length;g>f;f++)c="mouse"+e[f],d=b[c],"function"==typeof d&&a.removeEventListener(c,d,!1);delete Cb[a.zcClippingId]}}};xb._createClient=function(){Db.apply(this,s(arguments))},xb.prototype.on=function(){return Eb.apply(this,s(arguments))},xb.prototype.off=function(){return Fb.apply(this,s(arguments))},xb.prototype.handlers=function(){return Gb.apply(this,s(arguments))},xb.prototype.emit=function(){return Hb.apply(this,s(arguments))},xb.prototype.clip=function(){return Ib.apply(this,s(arguments))},xb.prototype.unclip=function(){return Jb.apply(this,s(arguments))},xb.prototype.elements=function(){return Kb.apply(this,s(arguments))},xb.prototype.destroy=function(){return Lb.apply(this,s(arguments))},xb.prototype.setText=function(a){return xb.setData("text/plain",a),this},xb.prototype.setHtml=function(a){return xb.setData("text/html",a),this},xb.prototype.setRichText=function(a){return xb.setData("application/rtf",a),this},xb.prototype.setData=function(){return xb.setData.apply(this,s(arguments)),this},xb.prototype.clearData=function(){return xb.clearData.apply(this,s(arguments)),this},xb.prototype.getData=function(){return xb.getData.apply(this,s(arguments))},"function"==typeof define&&define.amd?define(function(){return xb}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports?module.exports=xb:a.ZeroClipboard=xb}(function(){return this}()); +!function(a,b){"use strict";var c,d=a,e=d.document,f=d.navigator,g=d.setTimeout,h=d.encodeURIComponent,i=d.ActiveXObject,j=d.Number.parseInt||d.parseInt,k=d.Number.parseFloat||d.parseFloat,l=d.Number.isNaN||d.isNaN,m=d.Math.round,n=d.Date.now,o=d.Object.keys,p=d.Object.defineProperty,q=d.Object.prototype.hasOwnProperty,r=d.Array.prototype.slice,s=function(a){return r.call(a,0)},t=function(){var a,c,d,e,f,g,h=s(arguments),i=h[0]||{};for(a=1,c=h.length;c>a;a++)if(null!=(d=h[a]))for(e in d)q.call(d,e)&&(f=i[e],g=d[e],i!==g&&g!==b&&(i[e]=g));return i},u=function(a){var b,c,d,e;if("object"!=typeof a||null==a)b=a;else if("number"==typeof a.length)for(b=[],c=0,d=a.length;d>c;c++)q.call(a,c)&&(b[c]=u(a[c]));else{b={};for(e in a)q.call(a,e)&&(b[e]=u(a[e]))}return b},v=function(a,b){for(var c={},d=0,e=b.length;e>d;d++)b[d]in a&&(c[b[d]]=a[b[d]]);return c},w=function(a,b){var c={};for(var d in a)-1===b.indexOf(d)&&(c[d]=a[d]);return c},x=function(a){if(a)for(var b in a)q.call(a,b)&&delete a[b];return a},y=function(a,b){if(a&&1===a.nodeType&&a.ownerDocument&&b&&(1===b.nodeType&&b.ownerDocument&&b.ownerDocument===a.ownerDocument||9===b.nodeType&&!b.ownerDocument&&b===a.ownerDocument))do{if(a===b)return!0;a=a.parentNode}while(a);return!1},z={bridge:null,version:"0.0.0",pluginType:"unknown",disabled:null,outdated:null,unavailable:null,deactivated:null,overdue:null,ready:null},A="11.0.0",B={},C={},D=null,E={ready:"Flash communication is established",error:{"flash-disabled":"Flash is disabled or not installed","flash-outdated":"Flash is too outdated to support ZeroClipboard","flash-unavailable":"Flash is unable to communicate bidirectionally with JavaScript","flash-deactivated":"Flash is too outdated for your browser and/or is configured as click-to-activate","flash-overdue":"Flash communication was established but NOT within the acceptable time limit"}},F=function(){var a,b,c,d,f="ZeroClipboard.swf";if(!e.currentScript||!(d=e.currentScript.src)){var g=e.getElementsByTagName("script");if("readyState"in g[0])for(a=g.length;a--&&("interactive"!==g[a].readyState||!(d=g[a].src)););else if("loading"===e.readyState)d=g[g.length-1].src;else{for(a=g.length;a--;){if(c=g[a].src,!c){b=null;break}if(c=c.split("#")[0].split("?")[0],c=c.slice(0,c.lastIndexOf("/")+1),null==b)b=c;else if(b!==c){b=null;break}}null!==b&&(d=b)}}return d&&(d=d.split("#")[0].split("?")[0],f=d.slice(0,d.lastIndexOf("/")+1)+f),f}(),G={swfPath:F,trustedDomains:a.location.host?[a.location.host]:[],cacheBust:!0,forceEnhancedClipboard:!1,flashLoadTimeout:3e4,autoActivate:!0,bubbleEvents:!0,containerId:"global-zeroclipboard-html-bridge",containerClass:"global-zeroclipboard-container",swfObjectId:"global-zeroclipboard-flash-bridge",hoverClass:"zeroclipboard-is-hover",activeClass:"zeroclipboard-is-active",forceHandCursor:!1,title:null,zIndex:999999999},H=function(a){if("object"==typeof a&&null!==a)for(var b in a)if(q.call(a,b))if(/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(b))G[b]=a[b];else if(null==z.bridge)if("containerId"===b||"swfObjectId"===b){if(!W(a[b]))throw new Error("The specified `"+b+"` value is not valid as an HTML4 Element ID");G[b]=a[b]}else G[b]=a[b];{if("string"!=typeof a||!a)return u(G);if(q.call(G,a))return G[a]}},I=function(){return{browser:v(f,["userAgent","platform","appName"]),flash:w(z,["bridge"]),zeroclipboard:{version:xb.version,config:xb.config()}}},J=function(){return!!(z.disabled||z.outdated||z.unavailable||z.deactivated)},K=function(a,b){var c,d,e,f={};if("string"==typeof a&&a)e=a.toLowerCase().split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)q.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&xb.on(c,a[c]);if(e&&e.length){for(c=0,d=e.length;d>c;c++)a=e[c].replace(/^on/,""),f[a]=!0,B[a]||(B[a]=[]),B[a].push(b);if(f.ready&&z.ready&&xb.emit({type:"ready"}),f.error){var g=["disabled","outdated","unavailable","deactivated","overdue"];for(c=0,d=g.length;d>c;c++)if(z[g[c]]===!0){xb.emit({type:"error",name:"flash-"+g[c]});break}}}return xb},L=function(a,b){var c,d,e,f,g;if(0===arguments.length)f=o(B);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)q.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&xb.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=B[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return xb},M=function(a){var b;return b="string"==typeof a&&a?u(B[a])||null:u(B)},N=function(a){var b,c,d;return a=X(a),a&&!bb(a)?"ready"===a.type&&z.overdue===!0?xb.emit({type:"error",name:"flash-overdue"}):(b=t({},a),ab.call(this,b),"copy"===a.type&&(d=hb(C),c=d.data,D=d.formatMap),c):void 0},O=function(){if("boolean"!=typeof z.ready&&(z.ready=!1),!xb.isFlashUnusable()&&null===z.bridge){var a=G.flashLoadTimeout;"number"==typeof a&&a>=0&&g(function(){"boolean"!=typeof z.deactivated&&(z.deactivated=!0),z.deactivated===!0&&xb.emit({type:"error",name:"flash-deactivated"})},a),z.overdue=!1,fb()}},P=function(){xb.clearData(),xb.blur(),xb.emit("destroy"),gb(),xb.off()},Q=function(a,b){var c;if("object"==typeof a&&a&&"undefined"==typeof b)c=a,xb.clearData();else{if("string"!=typeof a||!a)return;c={},c[a]=b}for(var d in c)"string"==typeof d&&d&&q.call(c,d)&&"string"==typeof c[d]&&c[d]&&(C[d]=c[d])},R=function(a){"undefined"==typeof a?(x(C),D=null):"string"==typeof a&&q.call(C,a)&&delete C[a]},S=function(a){return"undefined"==typeof a?u(C):"string"==typeof a&&q.call(C,a)?C[a]:void 0},T=function(a){if(a&&1===a.nodeType){c&&(pb(c,G.activeClass),c!==a&&pb(c,G.hoverClass)),c=a,ob(a,G.hoverClass);var b=a.getAttribute("title")||G.title;if("string"==typeof b&&b){var d=eb(z.bridge);d&&d.setAttribute("title",b)}var e=G.forceHandCursor===!0||"pointer"===qb(a,"cursor");ub(e),tb()}},U=function(){var a=eb(z.bridge);a&&(a.removeAttribute("title"),a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.top="1px"),c&&(pb(c,G.hoverClass),pb(c,G.activeClass),c=null)},V=function(){return c||null},W=function(a){return"string"==typeof a&&a&&/^[A-Za-z][A-Za-z0-9_:\-\.]*$/.test(a)},X=function(a){var b;if("string"==typeof a&&a?(b=a,a={}):"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(b=a.type),b){t(a,{type:b.toLowerCase(),target:a.target||c||null,relatedTarget:a.relatedTarget||null,currentTarget:z&&z.bridge||null,timeStamp:a.timeStamp||n()||null});var d=E[a.type];return"error"===a.type&&a.name&&d&&(d=d[a.name]),d&&(a.message=d),"ready"===a.type&&t(a,{target:null,version:z.version}),"error"===a.type&&(/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(a.name)&&t(a,{target:null,minimumVersion:A}),/^flash-(outdated|unavailable|deactivated|overdue)$/.test(a.name)&&t(a,{version:z.version})),"copy"===a.type&&(a.clipboardData={setData:xb.setData,clearData:xb.clearData}),"aftercopy"===a.type&&(a=ib(a,D)),a.target&&!a.relatedTarget&&(a.relatedTarget=Y(a.target)),a=Z(a)}},Y=function(a){var b=a&&a.getAttribute&&a.getAttribute("data-clipboard-target");return b?e.getElementById(b):null},Z=function(a){if(a&&/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)){var c=a.target,f="_mouseover"===a.type&&a.relatedTarget?a.relatedTarget:b,g="_mouseout"===a.type&&a.relatedTarget?a.relatedTarget:b,h=sb(c),i=d.screenLeft||d.screenX||0,j=d.screenTop||d.screenY||0,k=e.body.scrollLeft+e.documentElement.scrollLeft,l=e.body.scrollTop+e.documentElement.scrollTop,m=h.left+("number"==typeof a._stageX?a._stageX:0),n=h.top+("number"==typeof a._stageY?a._stageY:0),o=m-k,p=n-l,q=i+o,r=j+p,s="number"==typeof a.movementX?a.movementX:0,u="number"==typeof a.movementY?a.movementY:0;delete a._stageX,delete a._stageY,t(a,{srcElement:c,fromElement:f,toElement:g,screenX:q,screenY:r,pageX:m,pageY:n,clientX:o,clientY:p,x:o,y:p,movementX:s,movementY:u,offsetX:0,offsetY:0,layerX:0,layerY:0})}return a},$=function(a){var b=a&&"string"==typeof a.type&&a.type||"";return!/^(?:(?:before)?copy|destroy)$/.test(b)},_=function(a,b,c,d){d?g(function(){a.apply(b,c)},0):a.apply(b,c)},ab=function(a){if("object"==typeof a&&a&&a.type){var b=$(a),c=B["*"]||[],e=B[a.type]||[],f=c.concat(e);if(f&&f.length){var g,h,i,j,k,l=this;for(g=0,h=f.length;h>g;g++)i=f[g],j=l,"string"==typeof i&&"function"==typeof d[i]&&(i=d[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=t({},a),_(i,j,[k],b))}return this}},bb=function(a){var b=a.target||c||null,d="swf"===a._source;delete a._source;var e=["flash-disabled","flash-outdated","flash-unavailable","flash-deactivated","flash-overdue"];switch(a.type){case"error":-1!==e.indexOf(a.name)&&t(z,{disabled:"flash-disabled"===a.name,outdated:"flash-outdated"===a.name,unavailable:"flash-unavailable"===a.name,deactivated:"flash-deactivated"===a.name,overdue:"flash-overdue"===a.name,ready:!1});break;case"ready":var f=z.deactivated===!0;t(z,{disabled:!1,outdated:!1,unavailable:!1,deactivated:!1,overdue:f,ready:!f});break;case"copy":var g,h,i=a.relatedTarget;!C["text/html"]&&!C["text/plain"]&&i&&(h=i.value||i.outerHTML||i.innerHTML)&&(g=i.value||i.textContent||i.innerText)?(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",g),h!==g&&a.clipboardData.setData("text/html",h)):!C["text/plain"]&&a.target&&(g=a.target.getAttribute("data-clipboard-text"))&&(a.clipboardData.clearData(),a.clipboardData.setData("text/plain",g));break;case"aftercopy":xb.clearData(),b&&b!==nb()&&b.focus&&b.focus();break;case"_mouseover":xb.focus(b),G.bubbleEvents===!0&&d&&(b&&b!==a.relatedTarget&&!y(a.relatedTarget,b)&&cb(t({},a,{type:"mouseenter",bubbles:!1,cancelable:!1})),cb(t({},a,{type:"mouseover"})));break;case"_mouseout":xb.blur(),G.bubbleEvents===!0&&d&&(b&&b!==a.relatedTarget&&!y(a.relatedTarget,b)&&cb(t({},a,{type:"mouseleave",bubbles:!1,cancelable:!1})),cb(t({},a,{type:"mouseout"})));break;case"_mousedown":ob(b,G.activeClass),G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}));break;case"_mouseup":pb(b,G.activeClass),G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}));break;case"_click":case"_mousemove":G.bubbleEvents===!0&&d&&cb(t({},a,{type:a.type.slice(1)}))}return/^_(?:click|mouse(?:over|out|down|up|move))$/.test(a.type)?!0:void 0},cb=function(a){if(a&&"string"==typeof a.type&&a){var b,c=a.target||null,f=c&&c.ownerDocument||e,g={view:f.defaultView||d,canBubble:!0,cancelable:!0,detail:"click"===a.type?1:0,button:"number"==typeof a.which?a.which-1:"number"==typeof a.button?a.button:f.createEvent?0:1},h=t(g,a);c&&f.createEvent&&c.dispatchEvent&&(h=[h.type,h.canBubble,h.cancelable,h.view,h.detail,h.screenX,h.screenY,h.clientX,h.clientY,h.ctrlKey,h.altKey,h.shiftKey,h.metaKey,h.button,h.relatedTarget],b=f.createEvent("MouseEvents"),b.initMouseEvent&&(b.initMouseEvent.apply(b,h),b._source="js",c.dispatchEvent(b)))}},db=function(){var a=e.createElement("div");return a.id=G.containerId,a.className=G.containerClass,a.style.position="absolute",a.style.left="0px",a.style.top="-9999px",a.style.width="1px",a.style.height="1px",a.style.zIndex=""+vb(G.zIndex),a},eb=function(a){for(var b=a&&a.parentNode;b&&"OBJECT"===b.nodeName&&b.parentNode;)b=b.parentNode;return b||null},fb=function(){var a,b=z.bridge,c=eb(b);if(!b){var f=mb(d.location.host,G),g="never"===f?"none":"all",h=kb(G),i=G.swfPath+jb(G.swfPath,G);c=db();var j=e.createElement("div");c.appendChild(j),e.body.appendChild(c);var k=e.createElement("div"),l="activex"===z.pluginType;k.innerHTML='"+(l?'':"")+'',b=k.firstChild,k=null,b.ZeroClipboard=xb,c.replaceChild(b,j)}return b||(b=e[G.swfObjectId],b&&(a=b.length)&&(b=b[a-1]),!b&&c&&(b=c.firstChild)),z.bridge=b||null,b},gb=function(){var a=z.bridge;if(a){var b=eb(a);b&&("activex"===z.pluginType&&"readyState"in a?(a.style.display="none",function c(){if(4===a.readyState){for(var d in a)"function"==typeof a[d]&&(a[d]=null);a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b)}else g(c,10)}()):(a.parentNode&&a.parentNode.removeChild(a),b.parentNode&&b.parentNode.removeChild(b))),z.ready=null,z.bridge=null,z.deactivated=null}},hb=function(a){var b={},c={};if("object"==typeof a&&a){for(var d in a)if(d&&q.call(a,d)&&"string"==typeof a[d]&&a[d])switch(d.toLowerCase()){case"text/plain":case"text":case"air:text":case"flash:text":b.text=a[d],c.text=d;break;case"text/html":case"html":case"air:html":case"flash:html":b.html=a[d],c.html=d;break;case"application/rtf":case"text/rtf":case"rtf":case"richtext":case"air:rtf":case"flash:rtf":b.rtf=a[d],c.rtf=d}return{data:b,formatMap:c}}},ib=function(a,b){if("object"!=typeof a||!a||"object"!=typeof b||!b)return a;var c={};for(var d in a)if(q.call(a,d)){if("success"!==d&&"data"!==d){c[d]=a[d];continue}c[d]={};var e=a[d];for(var f in e)f&&q.call(e,f)&&q.call(b,f)&&(c[d][b[f]]=e[f])}return c},jb=function(a,b){var c=null==b||b&&b.cacheBust===!0;return c?(-1===a.indexOf("?")?"?":"&")+"noCache="+n():""},kb=function(a){var b,c,e,f,g="",i=[];if(a.trustedDomains&&("string"==typeof a.trustedDomains?f=[a.trustedDomains]:"object"==typeof a.trustedDomains&&"length"in a.trustedDomains&&(f=a.trustedDomains)),f&&f.length)for(b=0,c=f.length;c>b;b++)if(q.call(f,b)&&f[b]&&"string"==typeof f[b]){if(e=lb(f[b]),!e)continue;if("*"===e){i.length=0,i.push(e);break}i.push.apply(i,[e,"//"+e,d.location.protocol+"//"+e])}return i.length&&(g+="trustedOrigins="+h(i.join(","))),a.forceEnhancedClipboard===!0&&(g+=(g?"&":"")+"forceEnhancedClipboard=true"),"string"==typeof a.swfObjectId&&a.swfObjectId&&(g+=(g?"&":"")+"swfObjectId="+h(a.swfObjectId)),g},lb=function(a){if(null==a||""===a)return null;if(a=a.replace(/^\s+|\s+$/g,""),""===a)return null;var b=a.indexOf("//");a=-1===b?a:a.slice(b+2);var c=a.indexOf("/");return a=-1===c?a:-1===b||0===c?null:a.slice(0,c),a&&".swf"===a.slice(-4).toLowerCase()?null:a||null},mb=function(){var a=function(a){var b,c,d,e=[];if("string"==typeof a&&(a=[a]),"object"!=typeof a||!a||"number"!=typeof a.length)return e;for(b=0,c=a.length;c>b;b++)if(q.call(a,b)&&(d=lb(a[b]))){if("*"===d){e.length=0,e.push("*");break}-1===e.indexOf(d)&&e.push(d)}return e};return function(b,c){var d=lb(c.swfPath);null===d&&(d=b);var e=a(c.trustedDomains),f=e.length;if(f>0){if(1===f&&"*"===e[0])return"always";if(-1!==e.indexOf(b))return 1===f&&b===d?"sameDomain":"always"}return"never"}}(),nb=function(){try{return e.activeElement}catch(a){return null}},ob=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)||a.classList.add(b),a;if(b&&"string"==typeof b){var c=(b||"").split(/\s+/);if(1===a.nodeType)if(a.className){for(var d=" "+a.className+" ",e=a.className,f=0,g=c.length;g>f;f++)d.indexOf(" "+c[f]+" ")<0&&(e+=" "+c[f]);a.className=e.replace(/^\s+|\s+$/g,"")}else a.className=b}return a},pb=function(a,b){if(!a||1!==a.nodeType)return a;if(a.classList)return a.classList.contains(b)&&a.classList.remove(b),a;if("string"==typeof b&&b){var c=b.split(/\s+/);if(1===a.nodeType&&a.className){for(var d=(" "+a.className+" ").replace(/[\n\t]/g," "),e=0,f=c.length;f>e;e++)d=d.replace(" "+c[e]+" "," ");a.className=d.replace(/^\s+|\s+$/g,"")}}return a},qb=function(a,b){var c=d.getComputedStyle(a,null).getPropertyValue(b);return"cursor"!==b||c&&"auto"!==c||"A"!==a.nodeName?c:"pointer"},rb=function(){var a,b,c,d=1;return"function"==typeof e.body.getBoundingClientRect&&(a=e.body.getBoundingClientRect(),b=a.right-a.left,c=e.body.offsetWidth,d=m(b/c*100)/100),d},sb=function(a){var b={left:0,top:0,width:0,height:0};if(a.getBoundingClientRect){var c,f,g,h=a.getBoundingClientRect();"pageXOffset"in d&&"pageYOffset"in d?(c=d.pageXOffset,f=d.pageYOffset):(g=rb(),c=m(e.documentElement.scrollLeft/g),f=m(e.documentElement.scrollTop/g));var i=e.documentElement.clientLeft||0,j=e.documentElement.clientTop||0;b.left=h.left+c-i,b.top=h.top+f-j,b.width="width"in h?h.width:h.right-h.left,b.height="height"in h?h.height:h.bottom-h.top}return b},tb=function(){var a;if(c&&(a=eb(z.bridge))){var b=sb(c);t(a.style,{width:b.width+"px",height:b.height+"px",top:b.top+"px",left:b.left+"px",zIndex:""+vb(G.zIndex)})}},ub=function(a){z.ready===!0&&(z.bridge&&"function"==typeof z.bridge.setHandCursor?z.bridge.setHandCursor(a):z.ready=!1)},vb=function(a){if(/^(?:auto|inherit)$/.test(a))return a;var b;return"number"!=typeof a||l(a)?"string"==typeof a&&(b=vb(j(a,10))):b=a,"number"==typeof b?b:"auto"},wb=function(a){function b(a){var b=a.match(/[\d]+/g);return b.length=3,b.join(".")}function c(a){return!!a&&(a=a.toLowerCase())&&(/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(a)||"chrome.plugin"===a.slice(-13))}function d(a){a&&(i=!0,a.version&&(m=b(a.version)),!m&&a.description&&(m=b(a.description)),a.filename&&(l=c(a.filename)))}var e,g,h,i=!1,j=!1,l=!1,m="";if(f.plugins&&f.plugins.length)e=f.plugins["Shockwave Flash"],d(e),f.plugins["Shockwave Flash 2.0"]&&(i=!0,m="2.0.0.11");else if(f.mimeTypes&&f.mimeTypes.length)h=f.mimeTypes["application/x-shockwave-flash"],e=h&&h.enabledPlugin,d(e);else if("undefined"!=typeof a){j=!0;try{g=new a("ShockwaveFlash.ShockwaveFlash.7"),i=!0,m=b(g.GetVariable("$version"))}catch(n){try{g=new a("ShockwaveFlash.ShockwaveFlash.6"),i=!0,m="6.0.21"}catch(o){try{g=new a("ShockwaveFlash.ShockwaveFlash"),i=!0,m=b(g.GetVariable("$version"))}catch(p){j=!1}}}}z.disabled=i!==!0,z.outdated=m&&k(m)c;c++)a=e[c].replace(/^on/,""),f[a]=!0,g[a]||(g[a]=[]),g[a].push(b);if(f.ready&&z.ready&&this.emit({type:"ready",client:this}),f.error){var h=["disabled","outdated","unavailable","deactivated","overdue"];for(c=0,d=h.length;d>c;c++)if(z[h[c]]){this.emit({type:"error",name:"flash-"+h[c],client:this});break}}}return this},Fb=function(a,b){var c,d,e,f,g,h=zb[this.id]&&zb[this.id].handlers;if(0===arguments.length)f=o(h);else if("string"==typeof a&&a)f=a.split(/\s+/);else if("object"==typeof a&&a&&"undefined"==typeof b)for(c in a)q.call(a,c)&&"string"==typeof c&&c&&"function"==typeof a[c]&&this.off(c,a[c]);if(f&&f.length)for(c=0,d=f.length;d>c;c++)if(a=f[c].toLowerCase().replace(/^on/,""),g=h[a],g&&g.length)if(b)for(e=g.indexOf(b);-1!==e;)g.splice(e,1),e=g.indexOf(b,e);else g.length=0;return this},Gb=function(a){var b=null,c=zb[this.id]&&zb[this.id].handlers;return c&&(b="string"==typeof a&&a?c[a]?c[a].slice(0):[]:u(c)),b},Hb=function(a){if(Mb.call(this,a)){"object"==typeof a&&a&&"string"==typeof a.type&&a.type&&(a=t({},a));var b=t({},X(a),{client:this});Nb.call(this,b)}return this},Ib=function(a){a=Ob(a);for(var b=0;b0,d=!a.target||c&&-1!==b.indexOf(a.target),e=a.relatedTarget&&c&&-1!==b.indexOf(a.relatedTarget),f=a.client&&a.client===this;return d||e||f?!0:!1},Nb=function(a){if("object"==typeof a&&a&&a.type){var b=$(a),c=zb[this.id]&&zb[this.id].handlers["*"]||[],e=zb[this.id]&&zb[this.id].handlers[a.type]||[],f=c.concat(e);if(f&&f.length){var g,h,i,j,k,l=this;for(g=0,h=f.length;h>g;g++)i=f[g],j=l,"string"==typeof i&&"function"==typeof d[i]&&(i=d[i]),"object"==typeof i&&i&&"function"==typeof i.handleEvent&&(j=i,i=i.handleEvent),"function"==typeof i&&(k=t({},a),_(i,j,[k],b))}return this}},Ob=function(a){return"string"==typeof a&&(a=[]),"number"!=typeof a.length?[a]:a},Pb=function(a){if(a&&1===a.nodeType){var b=function(a){(a||(a=d.event))&&("js"!==a._source&&(a.stopImmediatePropagation(),a.preventDefault()),delete a._source)},c=function(c){(c||(c=d.event))&&(b(c),xb.focus(a))};a.addEventListener("mouseover",c,!1),a.addEventListener("mouseout",b,!1),a.addEventListener("mouseenter",b,!1),a.addEventListener("mouseleave",b,!1),a.addEventListener("mousemove",b,!1),Cb[a.zcClippingId]={mouseover:c,mouseout:b,mouseenter:b,mouseleave:b,mousemove:b}}},Qb=function(a){if(a&&1===a.nodeType){var b=Cb[a.zcClippingId];if("object"==typeof b&&b){for(var c,d,e=["move","leave","enter","out","over"],f=0,g=e.length;g>f;f++)c="mouse"+e[f],d=b[c],"function"==typeof d&&a.removeEventListener(c,d,!1);delete Cb[a.zcClippingId]}}};xb._createClient=function(){Db.apply(this,s(arguments))},xb.prototype.on=function(){return Eb.apply(this,s(arguments))},xb.prototype.off=function(){return Fb.apply(this,s(arguments))},xb.prototype.handlers=function(){return Gb.apply(this,s(arguments))},xb.prototype.emit=function(){return Hb.apply(this,s(arguments))},xb.prototype.clip=function(){return Ib.apply(this,s(arguments))},xb.prototype.unclip=function(){return Jb.apply(this,s(arguments))},xb.prototype.elements=function(){return Kb.apply(this,s(arguments))},xb.prototype.destroy=function(){return Lb.apply(this,s(arguments))},xb.prototype.setText=function(a){return xb.setData("text/plain",a),this},xb.prototype.setHtml=function(a){return xb.setData("text/html",a),this},xb.prototype.setRichText=function(a){return xb.setData("application/rtf",a),this},xb.prototype.setData=function(){return xb.setData.apply(this,s(arguments)),this},xb.prototype.clearData=function(){return xb.clearData.apply(this,s(arguments)),this},xb.prototype.getData=function(){return xb.getData.apply(this,s(arguments))},"function"==typeof define&&define.amd?define(function(){return xb}):"object"==typeof module&&module&&"object"==typeof module.exports&&module.exports?module.exports=xb:a.ZeroClipboard=xb}(function(){return this||window}()); //# sourceMappingURL=ZeroClipboard.min.map \ No newline at end of file diff --git a/dist/ZeroClipboard.min.map b/dist/ZeroClipboard.min.map index 5e144829..7e572ef8 100644 --- a/dist/ZeroClipboard.min.map +++ b/dist/ZeroClipboard.min.map @@ -1 +1 @@ -{"version":3,"file":"ZeroClipboard.min.js","sources":["ZeroClipboard.js"],"names":["window","undefined","_currentElement","_window","_document","document","_navigator","navigator","_setTimeout","setTimeout","_encodeURIComponent","encodeURIComponent","_ActiveXObject","ActiveXObject","_parseInt","Number","parseInt","_parseFloat","parseFloat","_isNaN","isNaN","_round","Math","round","_now","Date","now","_keys","Object","keys","_defineProperty","defineProperty","_hasOwn","prototype","hasOwnProperty","_slice","Array","slice","_args","argumentsObj","call","_extend","i","len","arg","prop","src","copy","args","arguments","target","length","_deepCopy","source","_pick","obj","newObj","_omit","indexOf","_deleteOwnProperties","_containedBy","el","ancestorEl","nodeType","ownerDocument","parentNode","_flashState","bridge","version","pluginType","disabled","outdated","unavailable","deactivated","overdue","ready","_minimumFlashVersion","_handlers","_clipData","_clipDataFormatMap","_eventMessages","error","flash-disabled","flash-outdated","flash-unavailable","flash-deactivated","flash-overdue","_swfPath","jsDir","tmpJsPath","jsPath","swfPath","currentScript","scripts","getElementsByTagName","readyState","split","lastIndexOf","_globalConfig","trustedDomains","location","host","cacheBust","forceEnhancedClipboard","flashLoadTimeout","autoActivate","bubbleEvents","containerId","containerClass","swfObjectId","hoverClass","activeClass","forceHandCursor","title","zIndex","_config","options","test","_isValidHtml4Id","Error","_state","browser","flash","zeroclipboard","ZeroClipboard","config","_isFlashUnusable","_on","eventType","listener","events","added","toLowerCase","on","replace","push","emit","type","errorTypes","name","_off","foundIndex","perEventHandlers","off","splice","_listeners","_emit","event","eventCopy","returnVal","tmp","_createEvent","_preprocessEvent","_dispatchCallbacks","this","_mapClipDataToFlash","data","formatMap","_create","isFlashUnusable","maxWait","_embedSwf","_destroy","clearData","blur","_unembedSwf","_setData","format","dataObj","dataFormat","_clearData","_getData","_focus","element","_removeClass","_addClass","newTitle","getAttribute","htmlBridge","_getHtmlBridge","setAttribute","useHandCursor","_getStyle","_setHandCursor","_reposition","_blur","removeAttribute","style","left","top","width","_activeElement","id","relatedTarget","currentTarget","timeStamp","msg","message","minimumVersion","clipboardData","setData","_mapClipResultsFromFlash","_getRelatedTarget","_addMouseData","targetEl","relatedTargetId","getElementById","srcElement","fromElement","toElement","pos","_getDOMObjectPosition","screenLeft","screenX","screenTop","screenY","scrollLeft","body","documentElement","scrollTop","pageX","_stageX","pageY","_stageY","clientX","clientY","moveX","movementX","moveY","movementY","x","y","offsetX","offsetY","layerX","layerY","_shouldPerformAsync","_dispatchCallback","func","context","async","apply","wildcardTypeHandlers","specificTypeHandlers","handlers","concat","originalContext","handleEvent","sourceIsSwf","_source","flashErrorNames","wasDeactivated","textContent","htmlContent","value","outerHTML","innerHTML","innerText","_safeActiveElement","focus","_fireMouseEvent","bubbles","cancelable","e","doc","defaults","view","defaultView","canBubble","detail","button","which","createEvent","dispatchEvent","ctrlKey","altKey","shiftKey","metaKey","initMouseEvent","_createHtmlBridge","container","createElement","className","position","height","_getSafeZIndex","flashBridge","nodeName","allowScriptAccess","_determineScriptAccess","allowNetworking","flashvars","_vars","swfUrl","_cacheBust","divToBeReplaced","appendChild","tmpDiv","oldIE","firstChild","replaceChild","display","removeSwfFromIE","removeChild","clipData","newClipData","text","html","rtf","clipResults","newResults","tmpHash","path","domain","domains","str","trustedOriginsExpanded","_extractDomain","protocol","join","originOrUrl","protocolIndex","pathIndex","_extractAllDomains","origins","resultsArray","currentDomain","configOptions","swfDomain","activeElement","err","classList","contains","add","classNames","setClass","c","cl","remove","getComputedStyle","getPropertyValue","_getZoomFactor","rect","physicalWidth","logicalWidth","zoomFactor","getBoundingClientRect","right","offsetWidth","info","pageXOffset","pageYOffset","leftBorderWidth","clientLeft","topBorderWidth","clientTop","bottom","enabled","setHandCursor","val","_detectFlashSupport","parseFlashVersion","desc","matches","match","isPepperFlash","flashPlayerFileName","inspectPlugin","plugin","hasFlash","flashVersion","description","filename","isPPAPI","ax","mimeType","isActiveX","plugins","mimeTypes","enabledPlugin","GetVariable","e1","e2","e3","_createClient","writable","configurable","enumerable","state","create","destroy","getData","activate","deactivate","_clientIdCounter","_clientMeta","_elementIdCounter","_elementMeta","_mouseHandlers","_clientConstructor","elements","client","instance","clip","_clientOn","_clientOff","_clientListeners","_clientEmit","_clientShouldEmit","_clientDispatchCallbacks","_clientClip","_prepClip","zcClippingId","_addMouseHandlers","clippedElements","_clientUnclip","meta","arrayIndex","clientIds","_removeMouseHandlers","_clientElements","_clientDestroy","unclip","clippedEls","hasClippedEls","goodTarget","goodRelTarget","goodClient","_suppressMouseEvents","stopImmediatePropagation","preventDefault","_elementMouseOver","addEventListener","mouseover","mouseout","mouseenter","mouseleave","mousemove","mouseHandlers","key","mouseEvents","removeEventListener","setText","setHtml","setRichText","richText","define","amd","module","exports"],"mappings":"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","sourcesContent":["/*!\n * ZeroClipboard\n * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n * Copyright (c) 2014 Jon Rohan, James M. Greene\n * Licensed MIT\n * http://zeroclipboard.org/\n * v2.1.1\n */\n(function(window, undefined) {\n \"use strict\";\n /**\n * Store references to critically important global functions that may be\n * overridden on certain web pages.\n */\n var _window = window, _document = _window.document, _navigator = _window.navigator, _setTimeout = _window.setTimeout, _encodeURIComponent = _window.encodeURIComponent, _ActiveXObject = _window.ActiveXObject, _parseInt = _window.Number.parseInt || _window.parseInt, _parseFloat = _window.Number.parseFloat || _window.parseFloat, _isNaN = _window.Number.isNaN || _window.isNaN, _round = _window.Math.round, _now = _window.Date.now, _keys = _window.Object.keys, _defineProperty = _window.Object.defineProperty, _hasOwn = _window.Object.prototype.hasOwnProperty, _slice = _window.Array.prototype.slice;\n /**\n * Convert an `arguments` object into an Array.\n *\n * @returns The arguments as an Array\n * @private\n */\n var _args = function(argumentsObj) {\n return _slice.call(argumentsObj, 0);\n };\n /**\n * Shallow-copy the owned, enumerable properties of one object over to another, similar to jQuery's `$.extend`.\n *\n * @returns The target object, augmented\n * @private\n */\n var _extend = function() {\n var i, len, arg, prop, src, copy, args = _args(arguments), target = args[0] || {};\n for (i = 1, len = args.length; i < len; i++) {\n if ((arg = args[i]) != null) {\n for (prop in arg) {\n if (_hasOwn.call(arg, prop)) {\n src = target[prop];\n copy = arg[prop];\n if (target !== copy && copy !== undefined) {\n target[prop] = copy;\n }\n }\n }\n }\n }\n return target;\n };\n /**\n * Return a deep copy of the source object or array.\n *\n * @returns Object or Array\n * @private\n */\n var _deepCopy = function(source) {\n var copy, i, len, prop;\n if (typeof source !== \"object\" || source == null) {\n copy = source;\n } else if (typeof source.length === \"number\") {\n copy = [];\n for (i = 0, len = source.length; i < len; i++) {\n if (_hasOwn.call(source, i)) {\n copy[i] = _deepCopy(source[i]);\n }\n }\n } else {\n copy = {};\n for (prop in source) {\n if (_hasOwn.call(source, prop)) {\n copy[prop] = _deepCopy(source[prop]);\n }\n }\n }\n return copy;\n };\n /**\n * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to keep.\n * The inverse of `_omit`, mostly. The big difference is that these properties do NOT need to be enumerable to\n * be kept.\n *\n * @returns A new filtered object.\n * @private\n */\n var _pick = function(obj, keys) {\n var newObj = {};\n for (var i = 0, len = keys.length; i < len; i++) {\n if (keys[i] in obj) {\n newObj[keys[i]] = obj[keys[i]];\n }\n }\n return newObj;\n };\n /**\n * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to omit.\n * The inverse of `_pick`.\n *\n * @returns A new filtered object.\n * @private\n */\n var _omit = function(obj, keys) {\n var newObj = {};\n for (var prop in obj) {\n if (keys.indexOf(prop) === -1) {\n newObj[prop] = obj[prop];\n }\n }\n return newObj;\n };\n /**\n * Remove all owned, enumerable properties from an object.\n *\n * @returns The original object without its owned, enumerable properties.\n * @private\n */\n var _deleteOwnProperties = function(obj) {\n if (obj) {\n for (var prop in obj) {\n if (_hasOwn.call(obj, prop)) {\n delete obj[prop];\n }\n }\n }\n return obj;\n };\n /**\n * Determine if an element is contained within another element.\n *\n * @returns Boolean\n * @private\n */\n var _containedBy = function(el, ancestorEl) {\n if (el && el.nodeType === 1 && el.ownerDocument && ancestorEl && (ancestorEl.nodeType === 1 && ancestorEl.ownerDocument && ancestorEl.ownerDocument === el.ownerDocument || ancestorEl.nodeType === 9 && !ancestorEl.ownerDocument && ancestorEl === el.ownerDocument)) {\n do {\n if (el === ancestorEl) {\n return true;\n }\n el = el.parentNode;\n } while (el);\n }\n return false;\n };\n /**\n * Keep track of the state of the Flash object.\n * @private\n */\n var _flashState = {\n bridge: null,\n version: \"0.0.0\",\n pluginType: \"unknown\",\n disabled: null,\n outdated: null,\n unavailable: null,\n deactivated: null,\n overdue: null,\n ready: null\n };\n /**\n * The minimum Flash Player version required to use ZeroClipboard completely.\n * @readonly\n * @private\n */\n var _minimumFlashVersion = \"11.0.0\";\n /**\n * Keep track of all event listener registrations.\n * @private\n */\n var _handlers = {};\n /**\n * Keep track of the currently activated element.\n * @private\n */\n var _currentElement;\n /**\n * Keep track of data for the pending clipboard transaction.\n * @private\n */\n var _clipData = {};\n /**\n * Keep track of data formats for the pending clipboard transaction.\n * @private\n */\n var _clipDataFormatMap = null;\n /**\n * The `message` store for events\n * @private\n */\n var _eventMessages = {\n ready: \"Flash communication is established\",\n error: {\n \"flash-disabled\": \"Flash is disabled or not installed\",\n \"flash-outdated\": \"Flash is too outdated to support ZeroClipboard\",\n \"flash-unavailable\": \"Flash is unable to communicate bidirectionally with JavaScript\",\n \"flash-deactivated\": \"Flash is too outdated for your browser and/or is configured as click-to-activate\",\n \"flash-overdue\": \"Flash communication was established but NOT within the acceptable time limit\"\n }\n };\n /**\n * The presumed location of the \"ZeroClipboard.swf\" file, based on the location\n * of the executing JavaScript file (e.g. \"ZeroClipboard.js\", etc.).\n * @private\n */\n var _swfPath = function() {\n var i, jsDir, tmpJsPath, jsPath, swfPath = \"ZeroClipboard.swf\";\n if (!(_document.currentScript && (jsPath = _document.currentScript.src))) {\n var scripts = _document.getElementsByTagName(\"script\");\n if (\"readyState\" in scripts[0]) {\n for (i = scripts.length; i--; ) {\n if (scripts[i].readyState === \"interactive\" && (jsPath = scripts[i].src)) {\n break;\n }\n }\n } else if (_document.readyState === \"loading\") {\n jsPath = scripts[scripts.length - 1].src;\n } else {\n for (i = scripts.length; i--; ) {\n tmpJsPath = scripts[i].src;\n if (!tmpJsPath) {\n jsDir = null;\n break;\n }\n tmpJsPath = tmpJsPath.split(\"#\")[0].split(\"?\")[0];\n tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\"/\") + 1);\n if (jsDir == null) {\n jsDir = tmpJsPath;\n } else if (jsDir !== tmpJsPath) {\n jsDir = null;\n break;\n }\n }\n if (jsDir !== null) {\n jsPath = jsDir;\n }\n }\n }\n if (jsPath) {\n jsPath = jsPath.split(\"#\")[0].split(\"?\")[0];\n swfPath = jsPath.slice(0, jsPath.lastIndexOf(\"/\") + 1) + swfPath;\n }\n return swfPath;\n }();\n /**\n * ZeroClipboard configuration defaults for the Core module.\n * @private\n */\n var _globalConfig = {\n swfPath: _swfPath,\n trustedDomains: window.location.host ? [ window.location.host ] : [],\n cacheBust: true,\n forceEnhancedClipboard: false,\n flashLoadTimeout: 3e4,\n autoActivate: true,\n bubbleEvents: true,\n containerId: \"global-zeroclipboard-html-bridge\",\n containerClass: \"global-zeroclipboard-container\",\n swfObjectId: \"global-zeroclipboard-flash-bridge\",\n hoverClass: \"zeroclipboard-is-hover\",\n activeClass: \"zeroclipboard-is-active\",\n forceHandCursor: false,\n title: null,\n zIndex: 999999999\n };\n /**\n * The underlying implementation of `ZeroClipboard.config`.\n * @private\n */\n var _config = function(options) {\n if (typeof options === \"object\" && options !== null) {\n for (var prop in options) {\n if (_hasOwn.call(options, prop)) {\n if (/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(prop)) {\n _globalConfig[prop] = options[prop];\n } else if (_flashState.bridge == null) {\n if (prop === \"containerId\" || prop === \"swfObjectId\") {\n if (_isValidHtml4Id(options[prop])) {\n _globalConfig[prop] = options[prop];\n } else {\n throw new Error(\"The specified `\" + prop + \"` value is not valid as an HTML4 Element ID\");\n }\n } else {\n _globalConfig[prop] = options[prop];\n }\n }\n }\n }\n }\n if (typeof options === \"string\" && options) {\n if (_hasOwn.call(_globalConfig, options)) {\n return _globalConfig[options];\n }\n return;\n }\n return _deepCopy(_globalConfig);\n };\n /**\n * The underlying implementation of `ZeroClipboard.state`.\n * @private\n */\n var _state = function() {\n return {\n browser: _pick(_navigator, [ \"userAgent\", \"platform\", \"appName\" ]),\n flash: _omit(_flashState, [ \"bridge\" ]),\n zeroclipboard: {\n version: ZeroClipboard.version,\n config: ZeroClipboard.config()\n }\n };\n };\n /**\n * The underlying implementation of `ZeroClipboard.isFlashUnusable`.\n * @private\n */\n var _isFlashUnusable = function() {\n return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n };\n /**\n * The underlying implementation of `ZeroClipboard.on`.\n * @private\n */\n var _on = function(eventType, listener) {\n var i, len, events, added = {};\n if (typeof eventType === \"string\" && eventType) {\n events = eventType.toLowerCase().split(/\\s+/);\n } else if (typeof eventType === \"object\" && eventType && typeof listener === \"undefined\") {\n for (i in eventType) {\n if (_hasOwn.call(eventType, i) && typeof i === \"string\" && i && typeof eventType[i] === \"function\") {\n ZeroClipboard.on(i, eventType[i]);\n }\n }\n }\n if (events && events.length) {\n for (i = 0, len = events.length; i < len; i++) {\n eventType = events[i].replace(/^on/, \"\");\n added[eventType] = true;\n if (!_handlers[eventType]) {\n _handlers[eventType] = [];\n }\n _handlers[eventType].push(listener);\n }\n if (added.ready && _flashState.ready) {\n ZeroClipboard.emit({\n type: \"ready\"\n });\n }\n if (added.error) {\n var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n for (i = 0, len = errorTypes.length; i < len; i++) {\n if (_flashState[errorTypes[i]] === true) {\n ZeroClipboard.emit({\n type: \"error\",\n name: \"flash-\" + errorTypes[i]\n });\n break;\n }\n }\n }\n }\n return ZeroClipboard;\n };\n /**\n * The underlying implementation of `ZeroClipboard.off`.\n * @private\n */\n var _off = function(eventType, listener) {\n var i, len, foundIndex, events, perEventHandlers;\n if (arguments.length === 0) {\n events = _keys(_handlers);\n } else if (typeof eventType === \"string\" && eventType) {\n events = eventType.split(/\\s+/);\n } else if (typeof eventType === \"object\" && eventType && typeof listener === \"undefined\") {\n for (i in eventType) {\n if (_hasOwn.call(eventType, i) && typeof i === \"string\" && i && typeof eventType[i] === \"function\") {\n ZeroClipboard.off(i, eventType[i]);\n }\n }\n }\n if (events && events.length) {\n for (i = 0, len = events.length; i < len; i++) {\n eventType = events[i].toLowerCase().replace(/^on/, \"\");\n perEventHandlers = _handlers[eventType];\n if (perEventHandlers && perEventHandlers.length) {\n if (listener) {\n foundIndex = perEventHandlers.indexOf(listener);\n while (foundIndex !== -1) {\n perEventHandlers.splice(foundIndex, 1);\n foundIndex = perEventHandlers.indexOf(listener, foundIndex);\n }\n } else {\n perEventHandlers.length = 0;\n }\n }\n }\n }\n return ZeroClipboard;\n };\n /**\n * The underlying implementation of `ZeroClipboard.handlers`.\n * @private\n */\n var _listeners = function(eventType) {\n var copy;\n if (typeof eventType === \"string\" && eventType) {\n copy = _deepCopy(_handlers[eventType]) || null;\n } else {\n copy = _deepCopy(_handlers);\n }\n return copy;\n };\n /**\n * The underlying implementation of `ZeroClipboard.emit`.\n * @private\n */\n var _emit = function(event) {\n var eventCopy, returnVal, tmp;\n event = _createEvent(event);\n if (!event) {\n return;\n }\n if (_preprocessEvent(event)) {\n return;\n }\n if (event.type === \"ready\" && _flashState.overdue === true) {\n return ZeroClipboard.emit({\n type: \"error\",\n name: \"flash-overdue\"\n });\n }\n eventCopy = _extend({}, event);\n _dispatchCallbacks.call(this, eventCopy);\n if (event.type === \"copy\") {\n tmp = _mapClipDataToFlash(_clipData);\n returnVal = tmp.data;\n _clipDataFormatMap = tmp.formatMap;\n }\n return returnVal;\n };\n /**\n * The underlying implementation of `ZeroClipboard.create`.\n * @private\n */\n var _create = function() {\n if (typeof _flashState.ready !== \"boolean\") {\n _flashState.ready = false;\n }\n if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n var maxWait = _globalConfig.flashLoadTimeout;\n if (typeof maxWait === \"number\" && maxWait >= 0) {\n _setTimeout(function() {\n if (typeof _flashState.deactivated !== \"boolean\") {\n _flashState.deactivated = true;\n }\n if (_flashState.deactivated === true) {\n ZeroClipboard.emit({\n type: \"error\",\n name: \"flash-deactivated\"\n });\n }\n }, maxWait);\n }\n _flashState.overdue = false;\n _embedSwf();\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.destroy`.\n * @private\n */\n var _destroy = function() {\n ZeroClipboard.clearData();\n ZeroClipboard.blur();\n ZeroClipboard.emit(\"destroy\");\n _unembedSwf();\n ZeroClipboard.off();\n };\n /**\n * The underlying implementation of `ZeroClipboard.setData`.\n * @private\n */\n var _setData = function(format, data) {\n var dataObj;\n if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n dataObj = format;\n ZeroClipboard.clearData();\n } else if (typeof format === \"string\" && format) {\n dataObj = {};\n dataObj[format] = data;\n } else {\n return;\n }\n for (var dataFormat in dataObj) {\n if (typeof dataFormat === \"string\" && dataFormat && _hasOwn.call(dataObj, dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n _clipData[dataFormat] = dataObj[dataFormat];\n }\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.clearData`.\n * @private\n */\n var _clearData = function(format) {\n if (typeof format === \"undefined\") {\n _deleteOwnProperties(_clipData);\n _clipDataFormatMap = null;\n } else if (typeof format === \"string\" && _hasOwn.call(_clipData, format)) {\n delete _clipData[format];\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.getData`.\n * @private\n */\n var _getData = function(format) {\n if (typeof format === \"undefined\") {\n return _deepCopy(_clipData);\n } else if (typeof format === \"string\" && _hasOwn.call(_clipData, format)) {\n return _clipData[format];\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.focus`/`ZeroClipboard.activate`.\n * @private\n */\n var _focus = function(element) {\n if (!(element && element.nodeType === 1)) {\n return;\n }\n if (_currentElement) {\n _removeClass(_currentElement, _globalConfig.activeClass);\n if (_currentElement !== element) {\n _removeClass(_currentElement, _globalConfig.hoverClass);\n }\n }\n _currentElement = element;\n _addClass(element, _globalConfig.hoverClass);\n var newTitle = element.getAttribute(\"title\") || _globalConfig.title;\n if (typeof newTitle === \"string\" && newTitle) {\n var htmlBridge = _getHtmlBridge(_flashState.bridge);\n if (htmlBridge) {\n htmlBridge.setAttribute(\"title\", newTitle);\n }\n }\n var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n _setHandCursor(useHandCursor);\n _reposition();\n };\n /**\n * The underlying implementation of `ZeroClipboard.blur`/`ZeroClipboard.deactivate`.\n * @private\n */\n var _blur = function() {\n var htmlBridge = _getHtmlBridge(_flashState.bridge);\n if (htmlBridge) {\n htmlBridge.removeAttribute(\"title\");\n htmlBridge.style.left = \"0px\";\n htmlBridge.style.top = \"-9999px\";\n htmlBridge.style.width = \"1px\";\n htmlBridge.style.top = \"1px\";\n }\n if (_currentElement) {\n _removeClass(_currentElement, _globalConfig.hoverClass);\n _removeClass(_currentElement, _globalConfig.activeClass);\n _currentElement = null;\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.activeElement`.\n * @private\n */\n var _activeElement = function() {\n return _currentElement || null;\n };\n /**\n * Check if a value is a valid HTML4 `ID` or `Name` token.\n * @private\n */\n var _isValidHtml4Id = function(id) {\n return typeof id === \"string\" && id && /^[A-Za-z][A-Za-z0-9_:\\-\\.]*$/.test(id);\n };\n /**\n * Create or update an `event` object, based on the `eventType`.\n * @private\n */\n var _createEvent = function(event) {\n var eventType;\n if (typeof event === \"string\" && event) {\n eventType = event;\n event = {};\n } else if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n eventType = event.type;\n }\n if (!eventType) {\n return;\n }\n _extend(event, {\n type: eventType.toLowerCase(),\n target: event.target || _currentElement || null,\n relatedTarget: event.relatedTarget || null,\n currentTarget: _flashState && _flashState.bridge || null,\n timeStamp: event.timeStamp || _now() || null\n });\n var msg = _eventMessages[event.type];\n if (event.type === \"error\" && event.name && msg) {\n msg = msg[event.name];\n }\n if (msg) {\n event.message = msg;\n }\n if (event.type === \"ready\") {\n _extend(event, {\n target: null,\n version: _flashState.version\n });\n }\n if (event.type === \"error\") {\n if (/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n _extend(event, {\n target: null,\n minimumVersion: _minimumFlashVersion\n });\n }\n if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n _extend(event, {\n version: _flashState.version\n });\n }\n }\n if (event.type === \"copy\") {\n event.clipboardData = {\n setData: ZeroClipboard.setData,\n clearData: ZeroClipboard.clearData\n };\n }\n if (event.type === \"aftercopy\") {\n event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n }\n if (event.target && !event.relatedTarget) {\n event.relatedTarget = _getRelatedTarget(event.target);\n }\n event = _addMouseData(event);\n return event;\n };\n /**\n * Get a relatedTarget from the target's `data-clipboard-target` attribute\n * @private\n */\n var _getRelatedTarget = function(targetEl) {\n var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n return relatedTargetId ? _document.getElementById(relatedTargetId) : null;\n };\n /**\n * Add element and position data to `MouseEvent` instances\n * @private\n */\n var _addMouseData = function(event) {\n if (event && /^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n var srcElement = event.target;\n var fromElement = event.type === \"_mouseover\" && event.relatedTarget ? event.relatedTarget : undefined;\n var toElement = event.type === \"_mouseout\" && event.relatedTarget ? event.relatedTarget : undefined;\n var pos = _getDOMObjectPosition(srcElement);\n var screenLeft = _window.screenLeft || _window.screenX || 0;\n var screenTop = _window.screenTop || _window.screenY || 0;\n var scrollLeft = _document.body.scrollLeft + _document.documentElement.scrollLeft;\n var scrollTop = _document.body.scrollTop + _document.documentElement.scrollTop;\n var pageX = pos.left + (typeof event._stageX === \"number\" ? event._stageX : 0);\n var pageY = pos.top + (typeof event._stageY === \"number\" ? event._stageY : 0);\n var clientX = pageX - scrollLeft;\n var clientY = pageY - scrollTop;\n var screenX = screenLeft + clientX;\n var screenY = screenTop + clientY;\n var moveX = typeof event.movementX === \"number\" ? event.movementX : 0;\n var moveY = typeof event.movementY === \"number\" ? event.movementY : 0;\n delete event._stageX;\n delete event._stageY;\n _extend(event, {\n srcElement: srcElement,\n fromElement: fromElement,\n toElement: toElement,\n screenX: screenX,\n screenY: screenY,\n pageX: pageX,\n pageY: pageY,\n clientX: clientX,\n clientY: clientY,\n x: clientX,\n y: clientY,\n movementX: moveX,\n movementY: moveY,\n offsetX: 0,\n offsetY: 0,\n layerX: 0,\n layerY: 0\n });\n }\n return event;\n };\n /**\n * Determine if an event's registered handlers should be execute synchronously or asynchronously.\n *\n * @returns {boolean}\n * @private\n */\n var _shouldPerformAsync = function(event) {\n var eventType = event && typeof event.type === \"string\" && event.type || \"\";\n return !/^(?:(?:before)?copy|destroy)$/.test(eventType);\n };\n /**\n * Control if a callback should be executed asynchronously or not.\n *\n * @returns `undefined`\n * @private\n */\n var _dispatchCallback = function(func, context, args, async) {\n if (async) {\n _setTimeout(function() {\n func.apply(context, args);\n }, 0);\n } else {\n func.apply(context, args);\n }\n };\n /**\n * Handle the actual dispatching of events to client instances.\n *\n * @returns `undefined`\n * @private\n */\n var _dispatchCallbacks = function(event) {\n if (!(typeof event === \"object\" && event && event.type)) {\n return;\n }\n var async = _shouldPerformAsync(event);\n var wildcardTypeHandlers = _handlers[\"*\"] || [];\n var specificTypeHandlers = _handlers[event.type] || [];\n var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);\n if (handlers && handlers.length) {\n var i, len, func, context, eventCopy, originalContext = this;\n for (i = 0, len = handlers.length; i < len; i++) {\n func = handlers[i];\n context = originalContext;\n if (typeof func === \"string\" && typeof _window[func] === \"function\") {\n func = _window[func];\n }\n if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n context = func;\n func = func.handleEvent;\n }\n if (typeof func === \"function\") {\n eventCopy = _extend({}, event);\n _dispatchCallback(func, context, [ eventCopy ], async);\n }\n }\n }\n return this;\n };\n /**\n * Preprocess any special behaviors, reactions, or state changes after receiving this event.\n * Executes only once per event emitted, NOT once per client.\n * @private\n */\n var _preprocessEvent = function(event) {\n var element = event.target || _currentElement || null;\n var sourceIsSwf = event._source === \"swf\";\n delete event._source;\n var flashErrorNames = [ \"flash-disabled\", \"flash-outdated\", \"flash-unavailable\", \"flash-deactivated\", \"flash-overdue\" ];\n switch (event.type) {\n case \"error\":\n if (flashErrorNames.indexOf(event.name) !== -1) {\n _extend(_flashState, {\n disabled: event.name === \"flash-disabled\",\n outdated: event.name === \"flash-outdated\",\n unavailable: event.name === \"flash-unavailable\",\n deactivated: event.name === \"flash-deactivated\",\n overdue: event.name === \"flash-overdue\",\n ready: false\n });\n }\n break;\n\n case \"ready\":\n var wasDeactivated = _flashState.deactivated === true;\n _extend(_flashState, {\n disabled: false,\n outdated: false,\n unavailable: false,\n deactivated: false,\n overdue: wasDeactivated,\n ready: !wasDeactivated\n });\n break;\n\n case \"copy\":\n var textContent, htmlContent, targetEl = event.relatedTarget;\n if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n event.clipboardData.clearData();\n event.clipboardData.setData(\"text/plain\", textContent);\n if (htmlContent !== textContent) {\n event.clipboardData.setData(\"text/html\", htmlContent);\n }\n } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n event.clipboardData.clearData();\n event.clipboardData.setData(\"text/plain\", textContent);\n }\n break;\n\n case \"aftercopy\":\n ZeroClipboard.clearData();\n if (element && element !== _safeActiveElement() && element.focus) {\n element.focus();\n }\n break;\n\n case \"_mouseover\":\n ZeroClipboard.focus(element);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseenter\",\n bubbles: false,\n cancelable: false\n }));\n }\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseover\"\n }));\n }\n break;\n\n case \"_mouseout\":\n ZeroClipboard.blur();\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseleave\",\n bubbles: false,\n cancelable: false\n }));\n }\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseout\"\n }));\n }\n break;\n\n case \"_mousedown\":\n _addClass(element, _globalConfig.activeClass);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n\n case \"_mouseup\":\n _removeClass(element, _globalConfig.activeClass);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n\n case \"_click\":\n case \"_mousemove\":\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n }\n if (/^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n return true;\n }\n };\n /**\n * Dispatch a synthetic MouseEvent.\n *\n * @returns `undefined`\n * @private\n */\n var _fireMouseEvent = function(event) {\n if (!(event && typeof event.type === \"string\" && event)) {\n return;\n }\n var e, target = event.target || null, doc = target && target.ownerDocument || _document, defaults = {\n view: doc.defaultView || _window,\n canBubble: true,\n cancelable: true,\n detail: event.type === \"click\" ? 1 : 0,\n button: typeof event.which === \"number\" ? event.which - 1 : typeof event.button === \"number\" ? event.button : doc.createEvent ? 0 : 1\n }, args = _extend(defaults, event);\n if (!target) {\n return;\n }\n if (doc.createEvent && target.dispatchEvent) {\n args = [ args.type, args.canBubble, args.cancelable, args.view, args.detail, args.screenX, args.screenY, args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, args.relatedTarget ];\n e = doc.createEvent(\"MouseEvents\");\n if (e.initMouseEvent) {\n e.initMouseEvent.apply(e, args);\n e._source = \"js\";\n target.dispatchEvent(e);\n }\n }\n };\n /**\n * Create the HTML bridge element to embed the Flash object into.\n * @private\n */\n var _createHtmlBridge = function() {\n var container = _document.createElement(\"div\");\n container.id = _globalConfig.containerId;\n container.className = _globalConfig.containerClass;\n container.style.position = \"absolute\";\n container.style.left = \"0px\";\n container.style.top = \"-9999px\";\n container.style.width = \"1px\";\n container.style.height = \"1px\";\n container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n return container;\n };\n /**\n * Get the HTML element container that wraps the Flash bridge object/element.\n * @private\n */\n var _getHtmlBridge = function(flashBridge) {\n var htmlBridge = flashBridge && flashBridge.parentNode;\n while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n htmlBridge = htmlBridge.parentNode;\n }\n return htmlBridge || null;\n };\n /**\n * Create the SWF object.\n *\n * @returns The SWF object reference.\n * @private\n */\n var _embedSwf = function() {\n var len, flashBridge = _flashState.bridge, container = _getHtmlBridge(flashBridge);\n if (!flashBridge) {\n var allowScriptAccess = _determineScriptAccess(_window.location.host, _globalConfig);\n var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n var flashvars = _vars(_globalConfig);\n var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n container = _createHtmlBridge();\n var divToBeReplaced = _document.createElement(\"div\");\n container.appendChild(divToBeReplaced);\n _document.body.appendChild(container);\n var tmpDiv = _document.createElement(\"div\");\n var oldIE = _flashState.pluginType === \"activex\";\n tmpDiv.innerHTML = '\" + (oldIE ? '' : \"\") + '' + '' + '' + '' + '' + \"\";\n flashBridge = tmpDiv.firstChild;\n tmpDiv = null;\n flashBridge.ZeroClipboard = ZeroClipboard;\n container.replaceChild(flashBridge, divToBeReplaced);\n }\n if (!flashBridge) {\n flashBridge = _document[_globalConfig.swfObjectId];\n if (flashBridge && (len = flashBridge.length)) {\n flashBridge = flashBridge[len - 1];\n }\n if (!flashBridge && container) {\n flashBridge = container.firstChild;\n }\n }\n _flashState.bridge = flashBridge || null;\n return flashBridge;\n };\n /**\n * Destroy the SWF object.\n * @private\n */\n var _unembedSwf = function() {\n var flashBridge = _flashState.bridge;\n if (flashBridge) {\n var htmlBridge = _getHtmlBridge(flashBridge);\n if (htmlBridge) {\n if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n flashBridge.style.display = \"none\";\n (function removeSwfFromIE() {\n if (flashBridge.readyState === 4) {\n for (var prop in flashBridge) {\n if (typeof flashBridge[prop] === \"function\") {\n flashBridge[prop] = null;\n }\n }\n if (flashBridge.parentNode) {\n flashBridge.parentNode.removeChild(flashBridge);\n }\n if (htmlBridge.parentNode) {\n htmlBridge.parentNode.removeChild(htmlBridge);\n }\n } else {\n _setTimeout(removeSwfFromIE, 10);\n }\n })();\n } else {\n if (flashBridge.parentNode) {\n flashBridge.parentNode.removeChild(flashBridge);\n }\n if (htmlBridge.parentNode) {\n htmlBridge.parentNode.removeChild(htmlBridge);\n }\n }\n }\n _flashState.ready = null;\n _flashState.bridge = null;\n _flashState.deactivated = null;\n }\n };\n /**\n * Map the data format names of the \"clipData\" to Flash-friendly names.\n *\n * @returns A new transformed object.\n * @private\n */\n var _mapClipDataToFlash = function(clipData) {\n var newClipData = {}, formatMap = {};\n if (!(typeof clipData === \"object\" && clipData)) {\n return;\n }\n for (var dataFormat in clipData) {\n if (dataFormat && _hasOwn.call(clipData, dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n switch (dataFormat.toLowerCase()) {\n case \"text/plain\":\n case \"text\":\n case \"air:text\":\n case \"flash:text\":\n newClipData.text = clipData[dataFormat];\n formatMap.text = dataFormat;\n break;\n\n case \"text/html\":\n case \"html\":\n case \"air:html\":\n case \"flash:html\":\n newClipData.html = clipData[dataFormat];\n formatMap.html = dataFormat;\n break;\n\n case \"application/rtf\":\n case \"text/rtf\":\n case \"rtf\":\n case \"richtext\":\n case \"air:rtf\":\n case \"flash:rtf\":\n newClipData.rtf = clipData[dataFormat];\n formatMap.rtf = dataFormat;\n break;\n\n default:\n break;\n }\n }\n }\n return {\n data: newClipData,\n formatMap: formatMap\n };\n };\n /**\n * Map the data format names from Flash-friendly names back to their original \"clipData\" names (via a format mapping).\n *\n * @returns A new transformed object.\n * @private\n */\n var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n return clipResults;\n }\n var newResults = {};\n for (var prop in clipResults) {\n if (_hasOwn.call(clipResults, prop)) {\n if (prop !== \"success\" && prop !== \"data\") {\n newResults[prop] = clipResults[prop];\n continue;\n }\n newResults[prop] = {};\n var tmpHash = clipResults[prop];\n for (var dataFormat in tmpHash) {\n if (dataFormat && _hasOwn.call(tmpHash, dataFormat) && _hasOwn.call(formatMap, dataFormat)) {\n newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n }\n }\n }\n }\n return newResults;\n };\n /**\n * Will look at a path, and will create a \"?noCache={time}\" or \"&noCache={time}\"\n * query param string to return. Does NOT append that string to the original path.\n * This is useful because ExternalInterface often breaks when a Flash SWF is cached.\n *\n * @returns The `noCache` query param with necessary \"?\"/\"&\" prefix.\n * @private\n */\n var _cacheBust = function(path, options) {\n var cacheBust = options == null || options && options.cacheBust === true;\n if (cacheBust) {\n return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + _now();\n } else {\n return \"\";\n }\n };\n /**\n * Creates a query string for the FlashVars param.\n * Does NOT include the cache-busting query param.\n *\n * @returns FlashVars query string\n * @private\n */\n var _vars = function(options) {\n var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n if (options.trustedDomains) {\n if (typeof options.trustedDomains === \"string\") {\n domains = [ options.trustedDomains ];\n } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n domains = options.trustedDomains;\n }\n }\n if (domains && domains.length) {\n for (i = 0, len = domains.length; i < len; i++) {\n if (_hasOwn.call(domains, i) && domains[i] && typeof domains[i] === \"string\") {\n domain = _extractDomain(domains[i]);\n if (!domain) {\n continue;\n }\n if (domain === \"*\") {\n trustedOriginsExpanded.length = 0;\n trustedOriginsExpanded.push(domain);\n break;\n }\n trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, _window.location.protocol + \"//\" + domain ]);\n }\n }\n }\n if (trustedOriginsExpanded.length) {\n str += \"trustedOrigins=\" + _encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n }\n if (options.forceEnhancedClipboard === true) {\n str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n }\n if (typeof options.swfObjectId === \"string\" && options.swfObjectId) {\n str += (str ? \"&\" : \"\") + \"swfObjectId=\" + _encodeURIComponent(options.swfObjectId);\n }\n return str;\n };\n /**\n * Extract the domain (e.g. \"github.com\") from an origin (e.g. \"https://github.com\") or\n * URL (e.g. \"https://github.com/zeroclipboard/zeroclipboard/\").\n *\n * @returns the domain\n * @private\n */\n var _extractDomain = function(originOrUrl) {\n if (originOrUrl == null || originOrUrl === \"\") {\n return null;\n }\n originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n if (originOrUrl === \"\") {\n return null;\n }\n var protocolIndex = originOrUrl.indexOf(\"//\");\n originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n var pathIndex = originOrUrl.indexOf(\"/\");\n originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n return null;\n }\n return originOrUrl || null;\n };\n /**\n * Set `allowScriptAccess` based on `trustedDomains` and `window.location.host` vs. `swfPath`.\n *\n * @returns The appropriate script access level.\n * @private\n */\n var _determineScriptAccess = function() {\n var _extractAllDomains = function(origins) {\n var i, len, tmp, resultsArray = [];\n if (typeof origins === \"string\") {\n origins = [ origins ];\n }\n if (!(typeof origins === \"object\" && origins && typeof origins.length === \"number\")) {\n return resultsArray;\n }\n for (i = 0, len = origins.length; i < len; i++) {\n if (_hasOwn.call(origins, i) && (tmp = _extractDomain(origins[i]))) {\n if (tmp === \"*\") {\n resultsArray.length = 0;\n resultsArray.push(\"*\");\n break;\n }\n if (resultsArray.indexOf(tmp) === -1) {\n resultsArray.push(tmp);\n }\n }\n }\n return resultsArray;\n };\n return function(currentDomain, configOptions) {\n var swfDomain = _extractDomain(configOptions.swfPath);\n if (swfDomain === null) {\n swfDomain = currentDomain;\n }\n var trustedDomains = _extractAllDomains(configOptions.trustedDomains);\n var len = trustedDomains.length;\n if (len > 0) {\n if (len === 1 && trustedDomains[0] === \"*\") {\n return \"always\";\n }\n if (trustedDomains.indexOf(currentDomain) !== -1) {\n if (len === 1 && currentDomain === swfDomain) {\n return \"sameDomain\";\n }\n return \"always\";\n }\n }\n return \"never\";\n };\n }();\n /**\n * Get the currently active/focused DOM element.\n *\n * @returns the currently active/focused element, or `null`\n * @private\n */\n var _safeActiveElement = function() {\n try {\n return _document.activeElement;\n } catch (err) {\n return null;\n }\n };\n /**\n * Add a class to an element, if it doesn't already have it.\n *\n * @returns The element, with its new class added.\n * @private\n */\n var _addClass = function(element, value) {\n if (!element || element.nodeType !== 1) {\n return element;\n }\n if (element.classList) {\n if (!element.classList.contains(value)) {\n element.classList.add(value);\n }\n return element;\n }\n if (value && typeof value === \"string\") {\n var classNames = (value || \"\").split(/\\s+/);\n if (element.nodeType === 1) {\n if (!element.className) {\n element.className = value;\n } else {\n var className = \" \" + element.className + \" \", setClass = element.className;\n for (var c = 0, cl = classNames.length; c < cl; c++) {\n if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n setClass += \" \" + classNames[c];\n }\n }\n element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n }\n }\n }\n return element;\n };\n /**\n * Remove a class from an element, if it has it.\n *\n * @returns The element, with its class removed.\n * @private\n */\n var _removeClass = function(element, value) {\n if (!element || element.nodeType !== 1) {\n return element;\n }\n if (element.classList) {\n if (element.classList.contains(value)) {\n element.classList.remove(value);\n }\n return element;\n }\n if (typeof value === \"string\" && value) {\n var classNames = value.split(/\\s+/);\n if (element.nodeType === 1 && element.className) {\n var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n for (var c = 0, cl = classNames.length; c < cl; c++) {\n className = className.replace(\" \" + classNames[c] + \" \", \" \");\n }\n element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n }\n }\n return element;\n };\n /**\n * Attempt to interpret the element's CSS styling. If `prop` is `\"cursor\"`,\n * then we assume that it should be a hand (\"pointer\") cursor if the element\n * is an anchor element (\"a\" tag).\n *\n * @returns The computed style property.\n * @private\n */\n var _getStyle = function(el, prop) {\n var value = _window.getComputedStyle(el, null).getPropertyValue(prop);\n if (prop === \"cursor\") {\n if (!value || value === \"auto\") {\n if (el.nodeName === \"A\") {\n return \"pointer\";\n }\n }\n }\n return value;\n };\n /**\n * Get the zoom factor of the browser. Always returns `1.0`, except at\n * non-default zoom levels in IE<8 and some older versions of WebKit.\n *\n * @returns Floating unit percentage of the zoom factor (e.g. 150% = `1.5`).\n * @private\n */\n var _getZoomFactor = function() {\n var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n if (typeof _document.body.getBoundingClientRect === \"function\") {\n rect = _document.body.getBoundingClientRect();\n physicalWidth = rect.right - rect.left;\n logicalWidth = _document.body.offsetWidth;\n zoomFactor = _round(physicalWidth / logicalWidth * 100) / 100;\n }\n return zoomFactor;\n };\n /**\n * Get the DOM positioning info of an element.\n *\n * @returns Object containing the element's position, width, and height.\n * @private\n */\n var _getDOMObjectPosition = function(obj) {\n var info = {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n };\n if (obj.getBoundingClientRect) {\n var rect = obj.getBoundingClientRect();\n var pageXOffset, pageYOffset, zoomFactor;\n if (\"pageXOffset\" in _window && \"pageYOffset\" in _window) {\n pageXOffset = _window.pageXOffset;\n pageYOffset = _window.pageYOffset;\n } else {\n zoomFactor = _getZoomFactor();\n pageXOffset = _round(_document.documentElement.scrollLeft / zoomFactor);\n pageYOffset = _round(_document.documentElement.scrollTop / zoomFactor);\n }\n var leftBorderWidth = _document.documentElement.clientLeft || 0;\n var topBorderWidth = _document.documentElement.clientTop || 0;\n info.left = rect.left + pageXOffset - leftBorderWidth;\n info.top = rect.top + pageYOffset - topBorderWidth;\n info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n }\n return info;\n };\n /**\n * Reposition the Flash object to cover the currently activated element.\n *\n * @returns `undefined`\n * @private\n */\n var _reposition = function() {\n var htmlBridge;\n if (_currentElement && (htmlBridge = _getHtmlBridge(_flashState.bridge))) {\n var pos = _getDOMObjectPosition(_currentElement);\n _extend(htmlBridge.style, {\n width: pos.width + \"px\",\n height: pos.height + \"px\",\n top: pos.top + \"px\",\n left: pos.left + \"px\",\n zIndex: \"\" + _getSafeZIndex(_globalConfig.zIndex)\n });\n }\n };\n /**\n * Sends a signal to the Flash object to display the hand cursor if `true`.\n *\n * @returns `undefined`\n * @private\n */\n var _setHandCursor = function(enabled) {\n if (_flashState.ready === true) {\n if (_flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n _flashState.bridge.setHandCursor(enabled);\n } else {\n _flashState.ready = false;\n }\n }\n };\n /**\n * Get a safe value for `zIndex`\n *\n * @returns an integer, or \"auto\"\n * @private\n */\n var _getSafeZIndex = function(val) {\n if (/^(?:auto|inherit)$/.test(val)) {\n return val;\n }\n var zIndex;\n if (typeof val === \"number\" && !_isNaN(val)) {\n zIndex = val;\n } else if (typeof val === \"string\") {\n zIndex = _getSafeZIndex(_parseInt(val, 10));\n }\n return typeof zIndex === \"number\" ? zIndex : \"auto\";\n };\n /**\n * Detect the Flash Player status, version, and plugin type.\n *\n * @see {@link https://code.google.com/p/doctype-mirror/wiki/ArticleDetectFlash#The_code}\n * @see {@link http://stackoverflow.com/questions/12866060/detecting-pepper-ppapi-flash-with-javascript}\n *\n * @returns `undefined`\n * @private\n */\n var _detectFlashSupport = function(ActiveXObject) {\n var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n /**\n * Derived from Apple's suggested sniffer.\n * @param {String} desc e.g. \"Shockwave Flash 7.0 r61\"\n * @returns {String} \"7.0.61\"\n * @private\n */\n function parseFlashVersion(desc) {\n var matches = desc.match(/[\\d]+/g);\n matches.length = 3;\n return matches.join(\".\");\n }\n function isPepperFlash(flashPlayerFileName) {\n return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n }\n function inspectPlugin(plugin) {\n if (plugin) {\n hasFlash = true;\n if (plugin.version) {\n flashVersion = parseFlashVersion(plugin.version);\n }\n if (!flashVersion && plugin.description) {\n flashVersion = parseFlashVersion(plugin.description);\n }\n if (plugin.filename) {\n isPPAPI = isPepperFlash(plugin.filename);\n }\n }\n }\n if (_navigator.plugins && _navigator.plugins.length) {\n plugin = _navigator.plugins[\"Shockwave Flash\"];\n inspectPlugin(plugin);\n if (_navigator.plugins[\"Shockwave Flash 2.0\"]) {\n hasFlash = true;\n flashVersion = \"2.0.0.11\";\n }\n } else if (_navigator.mimeTypes && _navigator.mimeTypes.length) {\n mimeType = _navigator.mimeTypes[\"application/x-shockwave-flash\"];\n plugin = mimeType && mimeType.enabledPlugin;\n inspectPlugin(plugin);\n } else if (typeof ActiveXObject !== \"undefined\") {\n isActiveX = true;\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n hasFlash = true;\n flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n } catch (e1) {\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n hasFlash = true;\n flashVersion = \"6.0.21\";\n } catch (e2) {\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n hasFlash = true;\n flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n } catch (e3) {\n isActiveX = false;\n }\n }\n }\n }\n _flashState.disabled = hasFlash !== true;\n _flashState.outdated = flashVersion && _parseFloat(flashVersion) < _parseFloat(_minimumFlashVersion);\n _flashState.version = flashVersion || \"0.0.0\";\n _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n };\n /**\n * Invoke the Flash detection algorithms immediately upon inclusion so we're not waiting later.\n */\n _detectFlashSupport(_ActiveXObject);\n /**\n * A shell constructor for `ZeroClipboard` client instances.\n *\n * @constructor\n */\n var ZeroClipboard = function() {\n if (!(this instanceof ZeroClipboard)) {\n return new ZeroClipboard();\n }\n if (typeof ZeroClipboard._createClient === \"function\") {\n ZeroClipboard._createClient.apply(this, _args(arguments));\n }\n };\n /**\n * The ZeroClipboard library's version number.\n *\n * @static\n * @readonly\n * @property {string}\n */\n _defineProperty(ZeroClipboard, \"version\", {\n value: \"2.1.1\",\n writable: false,\n configurable: true,\n enumerable: true\n });\n /**\n * Update or get a copy of the ZeroClipboard global configuration.\n * Returns a copy of the current/updated configuration.\n *\n * @returns Object\n * @static\n */\n ZeroClipboard.config = function() {\n return _config.apply(this, _args(arguments));\n };\n /**\n * Diagnostic method that describes the state of the browser, Flash Player, and ZeroClipboard.\n *\n * @returns Object\n * @static\n */\n ZeroClipboard.state = function() {\n return _state.apply(this, _args(arguments));\n };\n /**\n * Check if Flash is unusable for any reason: disabled, outdated, deactivated, etc.\n *\n * @returns Boolean\n * @static\n */\n ZeroClipboard.isFlashUnusable = function() {\n return _isFlashUnusable.apply(this, _args(arguments));\n };\n /**\n * Register an event listener.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n ZeroClipboard.on = function() {\n return _on.apply(this, _args(arguments));\n };\n /**\n * Unregister an event listener.\n * If no `listener` function/object is provided, it will unregister all listeners for the provided `eventType`.\n * If no `eventType` is provided, it will unregister all listeners for every event type.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n ZeroClipboard.off = function() {\n return _off.apply(this, _args(arguments));\n };\n /**\n * Retrieve event listeners for an `eventType`.\n * If no `eventType` is provided, it will retrieve all listeners for every event type.\n *\n * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`\n */\n ZeroClipboard.handlers = function() {\n return _listeners.apply(this, _args(arguments));\n };\n /**\n * Event emission receiver from the Flash object, forwarding to any registered JavaScript event listeners.\n *\n * @returns For the \"copy\" event, returns the Flash-friendly \"clipData\" object; otherwise `undefined`.\n * @static\n */\n ZeroClipboard.emit = function() {\n return _emit.apply(this, _args(arguments));\n };\n /**\n * Create and embed the Flash object.\n *\n * @returns The Flash object\n * @static\n */\n ZeroClipboard.create = function() {\n return _create.apply(this, _args(arguments));\n };\n /**\n * Self-destruct and clean up everything, including the embedded Flash object.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.destroy = function() {\n return _destroy.apply(this, _args(arguments));\n };\n /**\n * Set the pending data for clipboard injection.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.setData = function() {\n return _setData.apply(this, _args(arguments));\n };\n /**\n * Clear the pending data for clipboard injection.\n * If no `format` is provided, all pending data formats will be cleared.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.clearData = function() {\n return _clearData.apply(this, _args(arguments));\n };\n /**\n * Get a copy of the pending data for clipboard injection.\n * If no `format` is provided, a copy of ALL pending data formats will be returned.\n *\n * @returns `String` or `Object`\n * @static\n */\n ZeroClipboard.getData = function() {\n return _getData.apply(this, _args(arguments));\n };\n /**\n * Sets the current HTML object that the Flash object should overlay. This will put the global\n * Flash object on top of the current element; depending on the setup, this may also set the\n * pending clipboard text data as well as the Flash object's wrapping element's title attribute\n * based on the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.focus = ZeroClipboard.activate = function() {\n return _focus.apply(this, _args(arguments));\n };\n /**\n * Un-overlays the Flash object. This will put the global Flash object off-screen; depending on\n * the setup, this may also unset the Flash object's wrapping element's title attribute based on\n * the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.blur = ZeroClipboard.deactivate = function() {\n return _blur.apply(this, _args(arguments));\n };\n /**\n * Returns the currently focused/\"activated\" HTML element that the Flash object is wrapping.\n *\n * @returns `HTMLElement` or `null`\n * @static\n */\n ZeroClipboard.activeElement = function() {\n return _activeElement.apply(this, _args(arguments));\n };\n /**\n * Keep track of the ZeroClipboard client instance counter.\n */\n var _clientIdCounter = 0;\n /**\n * Keep track of the state of the client instances.\n *\n * Entry structure:\n * _clientMeta[client.id] = {\n * instance: client,\n * elements: [],\n * handlers: {}\n * };\n */\n var _clientMeta = {};\n /**\n * Keep track of the ZeroClipboard clipped elements counter.\n */\n var _elementIdCounter = 0;\n /**\n * Keep track of the state of the clipped element relationships to clients.\n *\n * Entry structure:\n * _elementMeta[element.zcClippingId] = [client1.id, client2.id];\n */\n var _elementMeta = {};\n /**\n * Keep track of the state of the mouse event handlers for clipped elements.\n *\n * Entry structure:\n * _mouseHandlers[element.zcClippingId] = {\n * mouseover: function(event) {},\n * mouseout: function(event) {},\n * mouseenter: function(event) {},\n * mouseleave: function(event) {},\n * mousemove: function(event) {}\n * };\n */\n var _mouseHandlers = {};\n /**\n * Extending the ZeroClipboard configuration defaults for the Client module.\n */\n _extend(_globalConfig, {\n autoActivate: true\n });\n /**\n * The real constructor for `ZeroClipboard` client instances.\n * @private\n */\n var _clientConstructor = function(elements) {\n var client = this;\n client.id = \"\" + _clientIdCounter++;\n _clientMeta[client.id] = {\n instance: client,\n elements: [],\n handlers: {}\n };\n if (elements) {\n client.clip(elements);\n }\n ZeroClipboard.on(\"*\", function(event) {\n return client.emit(event);\n });\n ZeroClipboard.on(\"destroy\", function() {\n client.destroy();\n });\n ZeroClipboard.create();\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.on`.\n * @private\n */\n var _clientOn = function(eventType, listener) {\n var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n if (typeof eventType === \"string\" && eventType) {\n events = eventType.toLowerCase().split(/\\s+/);\n } else if (typeof eventType === \"object\" && eventType && typeof listener === \"undefined\") {\n for (i in eventType) {\n if (_hasOwn.call(eventType, i) && typeof i === \"string\" && i && typeof eventType[i] === \"function\") {\n this.on(i, eventType[i]);\n }\n }\n }\n if (events && events.length) {\n for (i = 0, len = events.length; i < len; i++) {\n eventType = events[i].replace(/^on/, \"\");\n added[eventType] = true;\n if (!handlers[eventType]) {\n handlers[eventType] = [];\n }\n handlers[eventType].push(listener);\n }\n if (added.ready && _flashState.ready) {\n this.emit({\n type: \"ready\",\n client: this\n });\n }\n if (added.error) {\n var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n for (i = 0, len = errorTypes.length; i < len; i++) {\n if (_flashState[errorTypes[i]]) {\n this.emit({\n type: \"error\",\n name: \"flash-\" + errorTypes[i],\n client: this\n });\n break;\n }\n }\n }\n }\n return this;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.off`.\n * @private\n */\n var _clientOff = function(eventType, listener) {\n var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n if (arguments.length === 0) {\n events = _keys(handlers);\n } else if (typeof eventType === \"string\" && eventType) {\n events = eventType.split(/\\s+/);\n } else if (typeof eventType === \"object\" && eventType && typeof listener === \"undefined\") {\n for (i in eventType) {\n if (_hasOwn.call(eventType, i) && typeof i === \"string\" && i && typeof eventType[i] === \"function\") {\n this.off(i, eventType[i]);\n }\n }\n }\n if (events && events.length) {\n for (i = 0, len = events.length; i < len; i++) {\n eventType = events[i].toLowerCase().replace(/^on/, \"\");\n perEventHandlers = handlers[eventType];\n if (perEventHandlers && perEventHandlers.length) {\n if (listener) {\n foundIndex = perEventHandlers.indexOf(listener);\n while (foundIndex !== -1) {\n perEventHandlers.splice(foundIndex, 1);\n foundIndex = perEventHandlers.indexOf(listener, foundIndex);\n }\n } else {\n perEventHandlers.length = 0;\n }\n }\n }\n }\n return this;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.handlers`.\n * @private\n */\n var _clientListeners = function(eventType) {\n var copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n if (handlers) {\n if (typeof eventType === \"string\" && eventType) {\n copy = handlers[eventType] ? handlers[eventType].slice(0) : [];\n } else {\n copy = _deepCopy(handlers);\n }\n }\n return copy;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.emit`.\n * @private\n */\n var _clientEmit = function(event) {\n if (_clientShouldEmit.call(this, event)) {\n if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n event = _extend({}, event);\n }\n var eventCopy = _extend({}, _createEvent(event), {\n client: this\n });\n _clientDispatchCallbacks.call(this, eventCopy);\n }\n return this;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.clip`.\n * @private\n */\n var _clientClip = function(elements) {\n elements = _prepClip(elements);\n for (var i = 0; i < elements.length; i++) {\n if (_hasOwn.call(elements, i) && elements[i] && elements[i].nodeType === 1) {\n if (!elements[i].zcClippingId) {\n elements[i].zcClippingId = \"zcClippingId_\" + _elementIdCounter++;\n _elementMeta[elements[i].zcClippingId] = [ this.id ];\n if (_globalConfig.autoActivate === true) {\n _addMouseHandlers(elements[i]);\n }\n } else if (_elementMeta[elements[i].zcClippingId].indexOf(this.id) === -1) {\n _elementMeta[elements[i].zcClippingId].push(this.id);\n }\n var clippedElements = _clientMeta[this.id] && _clientMeta[this.id].elements;\n if (clippedElements.indexOf(elements[i]) === -1) {\n clippedElements.push(elements[i]);\n }\n }\n }\n return this;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.unclip`.\n * @private\n */\n var _clientUnclip = function(elements) {\n var meta = _clientMeta[this.id];\n if (!meta) {\n return this;\n }\n var clippedElements = meta.elements;\n var arrayIndex;\n if (typeof elements === \"undefined\") {\n elements = clippedElements.slice(0);\n } else {\n elements = _prepClip(elements);\n }\n for (var i = elements.length; i--; ) {\n if (_hasOwn.call(elements, i) && elements[i] && elements[i].nodeType === 1) {\n arrayIndex = 0;\n while ((arrayIndex = clippedElements.indexOf(elements[i], arrayIndex)) !== -1) {\n clippedElements.splice(arrayIndex, 1);\n }\n var clientIds = _elementMeta[elements[i].zcClippingId];\n if (clientIds) {\n arrayIndex = 0;\n while ((arrayIndex = clientIds.indexOf(this.id, arrayIndex)) !== -1) {\n clientIds.splice(arrayIndex, 1);\n }\n if (clientIds.length === 0) {\n if (_globalConfig.autoActivate === true) {\n _removeMouseHandlers(elements[i]);\n }\n delete elements[i].zcClippingId;\n }\n }\n }\n }\n return this;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.elements`.\n * @private\n */\n var _clientElements = function() {\n var meta = _clientMeta[this.id];\n return meta && meta.elements ? meta.elements.slice(0) : [];\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.destroy`.\n * @private\n */\n var _clientDestroy = function() {\n this.unclip();\n this.off();\n delete _clientMeta[this.id];\n };\n /**\n * Inspect an Event to see if the Client (`this`) should honor it for emission.\n * @private\n */\n var _clientShouldEmit = function(event) {\n if (!(event && event.type)) {\n return false;\n }\n if (event.client && event.client !== this) {\n return false;\n }\n var clippedEls = _clientMeta[this.id] && _clientMeta[this.id].elements;\n var hasClippedEls = !!clippedEls && clippedEls.length > 0;\n var goodTarget = !event.target || hasClippedEls && clippedEls.indexOf(event.target) !== -1;\n var goodRelTarget = event.relatedTarget && hasClippedEls && clippedEls.indexOf(event.relatedTarget) !== -1;\n var goodClient = event.client && event.client === this;\n if (!(goodTarget || goodRelTarget || goodClient)) {\n return false;\n }\n return true;\n };\n /**\n * Handle the actual dispatching of events to a client instance.\n *\n * @returns `this`\n * @private\n */\n var _clientDispatchCallbacks = function(event) {\n if (!(typeof event === \"object\" && event && event.type)) {\n return;\n }\n var async = _shouldPerformAsync(event);\n var wildcardTypeHandlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[\"*\"] || [];\n var specificTypeHandlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type] || [];\n var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);\n if (handlers && handlers.length) {\n var i, len, func, context, eventCopy, originalContext = this;\n for (i = 0, len = handlers.length; i < len; i++) {\n func = handlers[i];\n context = originalContext;\n if (typeof func === \"string\" && typeof _window[func] === \"function\") {\n func = _window[func];\n }\n if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n context = func;\n func = func.handleEvent;\n }\n if (typeof func === \"function\") {\n eventCopy = _extend({}, event);\n _dispatchCallback(func, context, [ eventCopy ], async);\n }\n }\n }\n return this;\n };\n /**\n * Prepares the elements for clipping/unclipping.\n *\n * @returns An Array of elements.\n * @private\n */\n var _prepClip = function(elements) {\n if (typeof elements === \"string\") {\n elements = [];\n }\n return typeof elements.length !== \"number\" ? [ elements ] : elements;\n };\n /**\n * Add a `mouseover` handler function for a clipped element.\n *\n * @returns `undefined`\n * @private\n */\n var _addMouseHandlers = function(element) {\n if (!(element && element.nodeType === 1)) {\n return;\n }\n var _suppressMouseEvents = function(event) {\n if (!(event || (event = _window.event))) {\n return;\n }\n if (event._source !== \"js\") {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n delete event._source;\n };\n var _elementMouseOver = function(event) {\n if (!(event || (event = _window.event))) {\n return;\n }\n _suppressMouseEvents(event);\n ZeroClipboard.focus(element);\n };\n element.addEventListener(\"mouseover\", _elementMouseOver, false);\n element.addEventListener(\"mouseout\", _suppressMouseEvents, false);\n element.addEventListener(\"mouseenter\", _suppressMouseEvents, false);\n element.addEventListener(\"mouseleave\", _suppressMouseEvents, false);\n element.addEventListener(\"mousemove\", _suppressMouseEvents, false);\n _mouseHandlers[element.zcClippingId] = {\n mouseover: _elementMouseOver,\n mouseout: _suppressMouseEvents,\n mouseenter: _suppressMouseEvents,\n mouseleave: _suppressMouseEvents,\n mousemove: _suppressMouseEvents\n };\n };\n /**\n * Remove a `mouseover` handler function for a clipped element.\n *\n * @returns `undefined`\n * @private\n */\n var _removeMouseHandlers = function(element) {\n if (!(element && element.nodeType === 1)) {\n return;\n }\n var mouseHandlers = _mouseHandlers[element.zcClippingId];\n if (!(typeof mouseHandlers === \"object\" && mouseHandlers)) {\n return;\n }\n var key, val, mouseEvents = [ \"move\", \"leave\", \"enter\", \"out\", \"over\" ];\n for (var i = 0, len = mouseEvents.length; i < len; i++) {\n key = \"mouse\" + mouseEvents[i];\n val = mouseHandlers[key];\n if (typeof val === \"function\") {\n element.removeEventListener(key, val, false);\n }\n }\n delete _mouseHandlers[element.zcClippingId];\n };\n /**\n * Creates a new ZeroClipboard client instance.\n * Optionally, auto-`clip` an element or collection of elements.\n *\n * @constructor\n */\n ZeroClipboard._createClient = function() {\n _clientConstructor.apply(this, _args(arguments));\n };\n /**\n * Register an event listener to the client.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.on = function() {\n return _clientOn.apply(this, _args(arguments));\n };\n /**\n * Unregister an event handler from the client.\n * If no `listener` function/object is provided, it will unregister all handlers for the provided `eventType`.\n * If no `eventType` is provided, it will unregister all handlers for every event type.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.off = function() {\n return _clientOff.apply(this, _args(arguments));\n };\n /**\n * Retrieve event listeners for an `eventType` from the client.\n * If no `eventType` is provided, it will retrieve all listeners for every event type.\n *\n * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`\n */\n ZeroClipboard.prototype.handlers = function() {\n return _clientListeners.apply(this, _args(arguments));\n };\n /**\n * Event emission receiver from the Flash object for this client's registered JavaScript event listeners.\n *\n * @returns For the \"copy\" event, returns the Flash-friendly \"clipData\" object; otherwise `undefined`.\n */\n ZeroClipboard.prototype.emit = function() {\n return _clientEmit.apply(this, _args(arguments));\n };\n /**\n * Register clipboard actions for new element(s) to the client.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.clip = function() {\n return _clientClip.apply(this, _args(arguments));\n };\n /**\n * Unregister the clipboard actions of previously registered element(s) on the page.\n * If no elements are provided, ALL registered elements will be unregistered.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.unclip = function() {\n return _clientUnclip.apply(this, _args(arguments));\n };\n /**\n * Get all of the elements to which this client is clipped.\n *\n * @returns array of clipped elements\n */\n ZeroClipboard.prototype.elements = function() {\n return _clientElements.apply(this, _args(arguments));\n };\n /**\n * Self-destruct and clean up everything for a single client.\n * This will NOT destroy the embedded Flash object.\n *\n * @returns `undefined`\n */\n ZeroClipboard.prototype.destroy = function() {\n return _clientDestroy.apply(this, _args(arguments));\n };\n /**\n * Stores the pending plain text to inject into the clipboard.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.setText = function(text) {\n ZeroClipboard.setData(\"text/plain\", text);\n return this;\n };\n /**\n * Stores the pending HTML text to inject into the clipboard.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.setHtml = function(html) {\n ZeroClipboard.setData(\"text/html\", html);\n return this;\n };\n /**\n * Stores the pending rich text (RTF) to inject into the clipboard.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.setRichText = function(richText) {\n ZeroClipboard.setData(\"application/rtf\", richText);\n return this;\n };\n /**\n * Stores the pending data to inject into the clipboard.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.setData = function() {\n ZeroClipboard.setData.apply(this, _args(arguments));\n return this;\n };\n /**\n * Clears the pending data to inject into the clipboard.\n * If no `format` is provided, all pending data formats will be cleared.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.clearData = function() {\n ZeroClipboard.clearData.apply(this, _args(arguments));\n return this;\n };\n /**\n * Gets a copy of the pending data to inject into the clipboard.\n * If no `format` is provided, a copy of ALL pending data formats will be returned.\n *\n * @returns `String` or `Object`\n */\n ZeroClipboard.prototype.getData = function() {\n return ZeroClipboard.getData.apply(this, _args(arguments));\n };\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return ZeroClipboard;\n });\n } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n module.exports = ZeroClipboard;\n } else {\n window.ZeroClipboard = ZeroClipboard;\n }\n})(function() {\n return this;\n}());"]} \ No newline at end of file +{"version":3,"file":"ZeroClipboard.min.js","sources":["ZeroClipboard.js"],"names":["window","undefined","_currentElement","_window","_document","document","_navigator","navigator","_setTimeout","setTimeout","_encodeURIComponent","encodeURIComponent","_ActiveXObject","ActiveXObject","_parseInt","Number","parseInt","_parseFloat","parseFloat","_isNaN","isNaN","_round","Math","round","_now","Date","now","_keys","Object","keys","_defineProperty","defineProperty","_hasOwn","prototype","hasOwnProperty","_slice","Array","slice","_args","argumentsObj","call","_extend","i","len","arg","prop","src","copy","args","arguments","target","length","_deepCopy","source","_pick","obj","newObj","_omit","indexOf","_deleteOwnProperties","_containedBy","el","ancestorEl","nodeType","ownerDocument","parentNode","_flashState","bridge","version","pluginType","disabled","outdated","unavailable","deactivated","overdue","ready","_minimumFlashVersion","_handlers","_clipData","_clipDataFormatMap","_eventMessages","error","flash-disabled","flash-outdated","flash-unavailable","flash-deactivated","flash-overdue","_swfPath","jsDir","tmpJsPath","jsPath","swfPath","currentScript","scripts","getElementsByTagName","readyState","split","lastIndexOf","_globalConfig","trustedDomains","location","host","cacheBust","forceEnhancedClipboard","flashLoadTimeout","autoActivate","bubbleEvents","containerId","containerClass","swfObjectId","hoverClass","activeClass","forceHandCursor","title","zIndex","_config","options","test","_isValidHtml4Id","Error","_state","browser","flash","zeroclipboard","ZeroClipboard","config","_isFlashUnusable","_on","eventType","listener","events","added","toLowerCase","on","replace","push","emit","type","errorTypes","name","_off","foundIndex","perEventHandlers","off","splice","_listeners","_emit","event","eventCopy","returnVal","tmp","_createEvent","_preprocessEvent","_dispatchCallbacks","this","_mapClipDataToFlash","data","formatMap","_create","isFlashUnusable","maxWait","_embedSwf","_destroy","clearData","blur","_unembedSwf","_setData","format","dataObj","dataFormat","_clearData","_getData","_focus","element","_removeClass","_addClass","newTitle","getAttribute","htmlBridge","_getHtmlBridge","setAttribute","useHandCursor","_getStyle","_setHandCursor","_reposition","_blur","removeAttribute","style","left","top","width","_activeElement","id","relatedTarget","currentTarget","timeStamp","msg","message","minimumVersion","clipboardData","setData","_mapClipResultsFromFlash","_getRelatedTarget","_addMouseData","targetEl","relatedTargetId","getElementById","srcElement","fromElement","toElement","pos","_getDOMObjectPosition","screenLeft","screenX","screenTop","screenY","scrollLeft","body","documentElement","scrollTop","pageX","_stageX","pageY","_stageY","clientX","clientY","moveX","movementX","moveY","movementY","x","y","offsetX","offsetY","layerX","layerY","_shouldPerformAsync","_dispatchCallback","func","context","async","apply","wildcardTypeHandlers","specificTypeHandlers","handlers","concat","originalContext","handleEvent","sourceIsSwf","_source","flashErrorNames","wasDeactivated","textContent","htmlContent","value","outerHTML","innerHTML","innerText","_safeActiveElement","focus","_fireMouseEvent","bubbles","cancelable","e","doc","defaults","view","defaultView","canBubble","detail","button","which","createEvent","dispatchEvent","ctrlKey","altKey","shiftKey","metaKey","initMouseEvent","_createHtmlBridge","container","createElement","className","position","height","_getSafeZIndex","flashBridge","nodeName","allowScriptAccess","_determineScriptAccess","allowNetworking","flashvars","_vars","swfUrl","_cacheBust","divToBeReplaced","appendChild","tmpDiv","oldIE","firstChild","replaceChild","display","removeSwfFromIE","removeChild","clipData","newClipData","text","html","rtf","clipResults","newResults","tmpHash","path","domain","domains","str","trustedOriginsExpanded","_extractDomain","protocol","join","originOrUrl","protocolIndex","pathIndex","_extractAllDomains","origins","resultsArray","currentDomain","configOptions","swfDomain","activeElement","err","classList","contains","add","classNames","setClass","c","cl","remove","getComputedStyle","getPropertyValue","_getZoomFactor","rect","physicalWidth","logicalWidth","zoomFactor","getBoundingClientRect","right","offsetWidth","info","pageXOffset","pageYOffset","leftBorderWidth","clientLeft","topBorderWidth","clientTop","bottom","enabled","setHandCursor","val","_detectFlashSupport","parseFlashVersion","desc","matches","match","isPepperFlash","flashPlayerFileName","inspectPlugin","plugin","hasFlash","flashVersion","description","filename","isPPAPI","ax","mimeType","isActiveX","plugins","mimeTypes","enabledPlugin","GetVariable","e1","e2","e3","_createClient","writable","configurable","enumerable","state","create","destroy","getData","activate","deactivate","_clientIdCounter","_clientMeta","_elementIdCounter","_elementMeta","_mouseHandlers","_clientConstructor","elements","client","instance","clip","_clientOn","_clientOff","_clientListeners","_clientEmit","_clientShouldEmit","_clientDispatchCallbacks","_clientClip","_prepClip","zcClippingId","_addMouseHandlers","clippedElements","_clientUnclip","meta","arrayIndex","clientIds","_removeMouseHandlers","_clientElements","_clientDestroy","unclip","clippedEls","hasClippedEls","goodTarget","goodRelTarget","goodClient","_suppressMouseEvents","stopImmediatePropagation","preventDefault","_elementMouseOver","addEventListener","mouseover","mouseout","mouseenter","mouseleave","mousemove","mouseHandlers","key","mouseEvents","removeEventListener","setText","setHtml","setRichText","richText","define","amd","module","exports"],"mappings":"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","sourcesContent":["/*!\n * ZeroClipboard\n * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n * Copyright (c) 2014 Jon Rohan, James M. Greene\n * Licensed MIT\n * http://zeroclipboard.org/\n * v2.1.1\n */\n(function(window, undefined) {\n \"use strict\";\n /**\n * Store references to critically important global functions that may be\n * overridden on certain web pages.\n */\n var _window = window, _document = _window.document, _navigator = _window.navigator, _setTimeout = _window.setTimeout, _encodeURIComponent = _window.encodeURIComponent, _ActiveXObject = _window.ActiveXObject, _parseInt = _window.Number.parseInt || _window.parseInt, _parseFloat = _window.Number.parseFloat || _window.parseFloat, _isNaN = _window.Number.isNaN || _window.isNaN, _round = _window.Math.round, _now = _window.Date.now, _keys = _window.Object.keys, _defineProperty = _window.Object.defineProperty, _hasOwn = _window.Object.prototype.hasOwnProperty, _slice = _window.Array.prototype.slice;\n /**\n * Convert an `arguments` object into an Array.\n *\n * @returns The arguments as an Array\n * @private\n */\n var _args = function(argumentsObj) {\n return _slice.call(argumentsObj, 0);\n };\n /**\n * Shallow-copy the owned, enumerable properties of one object over to another, similar to jQuery's `$.extend`.\n *\n * @returns The target object, augmented\n * @private\n */\n var _extend = function() {\n var i, len, arg, prop, src, copy, args = _args(arguments), target = args[0] || {};\n for (i = 1, len = args.length; i < len; i++) {\n if ((arg = args[i]) != null) {\n for (prop in arg) {\n if (_hasOwn.call(arg, prop)) {\n src = target[prop];\n copy = arg[prop];\n if (target !== copy && copy !== undefined) {\n target[prop] = copy;\n }\n }\n }\n }\n }\n return target;\n };\n /**\n * Return a deep copy of the source object or array.\n *\n * @returns Object or Array\n * @private\n */\n var _deepCopy = function(source) {\n var copy, i, len, prop;\n if (typeof source !== \"object\" || source == null) {\n copy = source;\n } else if (typeof source.length === \"number\") {\n copy = [];\n for (i = 0, len = source.length; i < len; i++) {\n if (_hasOwn.call(source, i)) {\n copy[i] = _deepCopy(source[i]);\n }\n }\n } else {\n copy = {};\n for (prop in source) {\n if (_hasOwn.call(source, prop)) {\n copy[prop] = _deepCopy(source[prop]);\n }\n }\n }\n return copy;\n };\n /**\n * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to keep.\n * The inverse of `_omit`, mostly. The big difference is that these properties do NOT need to be enumerable to\n * be kept.\n *\n * @returns A new filtered object.\n * @private\n */\n var _pick = function(obj, keys) {\n var newObj = {};\n for (var i = 0, len = keys.length; i < len; i++) {\n if (keys[i] in obj) {\n newObj[keys[i]] = obj[keys[i]];\n }\n }\n return newObj;\n };\n /**\n * Makes a shallow copy of `obj` (like `_extend`) but filters its properties based on a list of `keys` to omit.\n * The inverse of `_pick`.\n *\n * @returns A new filtered object.\n * @private\n */\n var _omit = function(obj, keys) {\n var newObj = {};\n for (var prop in obj) {\n if (keys.indexOf(prop) === -1) {\n newObj[prop] = obj[prop];\n }\n }\n return newObj;\n };\n /**\n * Remove all owned, enumerable properties from an object.\n *\n * @returns The original object without its owned, enumerable properties.\n * @private\n */\n var _deleteOwnProperties = function(obj) {\n if (obj) {\n for (var prop in obj) {\n if (_hasOwn.call(obj, prop)) {\n delete obj[prop];\n }\n }\n }\n return obj;\n };\n /**\n * Determine if an element is contained within another element.\n *\n * @returns Boolean\n * @private\n */\n var _containedBy = function(el, ancestorEl) {\n if (el && el.nodeType === 1 && el.ownerDocument && ancestorEl && (ancestorEl.nodeType === 1 && ancestorEl.ownerDocument && ancestorEl.ownerDocument === el.ownerDocument || ancestorEl.nodeType === 9 && !ancestorEl.ownerDocument && ancestorEl === el.ownerDocument)) {\n do {\n if (el === ancestorEl) {\n return true;\n }\n el = el.parentNode;\n } while (el);\n }\n return false;\n };\n /**\n * Keep track of the state of the Flash object.\n * @private\n */\n var _flashState = {\n bridge: null,\n version: \"0.0.0\",\n pluginType: \"unknown\",\n disabled: null,\n outdated: null,\n unavailable: null,\n deactivated: null,\n overdue: null,\n ready: null\n };\n /**\n * The minimum Flash Player version required to use ZeroClipboard completely.\n * @readonly\n * @private\n */\n var _minimumFlashVersion = \"11.0.0\";\n /**\n * Keep track of all event listener registrations.\n * @private\n */\n var _handlers = {};\n /**\n * Keep track of the currently activated element.\n * @private\n */\n var _currentElement;\n /**\n * Keep track of data for the pending clipboard transaction.\n * @private\n */\n var _clipData = {};\n /**\n * Keep track of data formats for the pending clipboard transaction.\n * @private\n */\n var _clipDataFormatMap = null;\n /**\n * The `message` store for events\n * @private\n */\n var _eventMessages = {\n ready: \"Flash communication is established\",\n error: {\n \"flash-disabled\": \"Flash is disabled or not installed\",\n \"flash-outdated\": \"Flash is too outdated to support ZeroClipboard\",\n \"flash-unavailable\": \"Flash is unable to communicate bidirectionally with JavaScript\",\n \"flash-deactivated\": \"Flash is too outdated for your browser and/or is configured as click-to-activate\",\n \"flash-overdue\": \"Flash communication was established but NOT within the acceptable time limit\"\n }\n };\n /**\n * The presumed location of the \"ZeroClipboard.swf\" file, based on the location\n * of the executing JavaScript file (e.g. \"ZeroClipboard.js\", etc.).\n * @private\n */\n var _swfPath = function() {\n var i, jsDir, tmpJsPath, jsPath, swfPath = \"ZeroClipboard.swf\";\n if (!(_document.currentScript && (jsPath = _document.currentScript.src))) {\n var scripts = _document.getElementsByTagName(\"script\");\n if (\"readyState\" in scripts[0]) {\n for (i = scripts.length; i--; ) {\n if (scripts[i].readyState === \"interactive\" && (jsPath = scripts[i].src)) {\n break;\n }\n }\n } else if (_document.readyState === \"loading\") {\n jsPath = scripts[scripts.length - 1].src;\n } else {\n for (i = scripts.length; i--; ) {\n tmpJsPath = scripts[i].src;\n if (!tmpJsPath) {\n jsDir = null;\n break;\n }\n tmpJsPath = tmpJsPath.split(\"#\")[0].split(\"?\")[0];\n tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\"/\") + 1);\n if (jsDir == null) {\n jsDir = tmpJsPath;\n } else if (jsDir !== tmpJsPath) {\n jsDir = null;\n break;\n }\n }\n if (jsDir !== null) {\n jsPath = jsDir;\n }\n }\n }\n if (jsPath) {\n jsPath = jsPath.split(\"#\")[0].split(\"?\")[0];\n swfPath = jsPath.slice(0, jsPath.lastIndexOf(\"/\") + 1) + swfPath;\n }\n return swfPath;\n }();\n /**\n * ZeroClipboard configuration defaults for the Core module.\n * @private\n */\n var _globalConfig = {\n swfPath: _swfPath,\n trustedDomains: window.location.host ? [ window.location.host ] : [],\n cacheBust: true,\n forceEnhancedClipboard: false,\n flashLoadTimeout: 3e4,\n autoActivate: true,\n bubbleEvents: true,\n containerId: \"global-zeroclipboard-html-bridge\",\n containerClass: \"global-zeroclipboard-container\",\n swfObjectId: \"global-zeroclipboard-flash-bridge\",\n hoverClass: \"zeroclipboard-is-hover\",\n activeClass: \"zeroclipboard-is-active\",\n forceHandCursor: false,\n title: null,\n zIndex: 999999999\n };\n /**\n * The underlying implementation of `ZeroClipboard.config`.\n * @private\n */\n var _config = function(options) {\n if (typeof options === \"object\" && options !== null) {\n for (var prop in options) {\n if (_hasOwn.call(options, prop)) {\n if (/^(?:forceHandCursor|title|zIndex|bubbleEvents)$/.test(prop)) {\n _globalConfig[prop] = options[prop];\n } else if (_flashState.bridge == null) {\n if (prop === \"containerId\" || prop === \"swfObjectId\") {\n if (_isValidHtml4Id(options[prop])) {\n _globalConfig[prop] = options[prop];\n } else {\n throw new Error(\"The specified `\" + prop + \"` value is not valid as an HTML4 Element ID\");\n }\n } else {\n _globalConfig[prop] = options[prop];\n }\n }\n }\n }\n }\n if (typeof options === \"string\" && options) {\n if (_hasOwn.call(_globalConfig, options)) {\n return _globalConfig[options];\n }\n return;\n }\n return _deepCopy(_globalConfig);\n };\n /**\n * The underlying implementation of `ZeroClipboard.state`.\n * @private\n */\n var _state = function() {\n return {\n browser: _pick(_navigator, [ \"userAgent\", \"platform\", \"appName\" ]),\n flash: _omit(_flashState, [ \"bridge\" ]),\n zeroclipboard: {\n version: ZeroClipboard.version,\n config: ZeroClipboard.config()\n }\n };\n };\n /**\n * The underlying implementation of `ZeroClipboard.isFlashUnusable`.\n * @private\n */\n var _isFlashUnusable = function() {\n return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n };\n /**\n * The underlying implementation of `ZeroClipboard.on`.\n * @private\n */\n var _on = function(eventType, listener) {\n var i, len, events, added = {};\n if (typeof eventType === \"string\" && eventType) {\n events = eventType.toLowerCase().split(/\\s+/);\n } else if (typeof eventType === \"object\" && eventType && typeof listener === \"undefined\") {\n for (i in eventType) {\n if (_hasOwn.call(eventType, i) && typeof i === \"string\" && i && typeof eventType[i] === \"function\") {\n ZeroClipboard.on(i, eventType[i]);\n }\n }\n }\n if (events && events.length) {\n for (i = 0, len = events.length; i < len; i++) {\n eventType = events[i].replace(/^on/, \"\");\n added[eventType] = true;\n if (!_handlers[eventType]) {\n _handlers[eventType] = [];\n }\n _handlers[eventType].push(listener);\n }\n if (added.ready && _flashState.ready) {\n ZeroClipboard.emit({\n type: \"ready\"\n });\n }\n if (added.error) {\n var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n for (i = 0, len = errorTypes.length; i < len; i++) {\n if (_flashState[errorTypes[i]] === true) {\n ZeroClipboard.emit({\n type: \"error\",\n name: \"flash-\" + errorTypes[i]\n });\n break;\n }\n }\n }\n }\n return ZeroClipboard;\n };\n /**\n * The underlying implementation of `ZeroClipboard.off`.\n * @private\n */\n var _off = function(eventType, listener) {\n var i, len, foundIndex, events, perEventHandlers;\n if (arguments.length === 0) {\n events = _keys(_handlers);\n } else if (typeof eventType === \"string\" && eventType) {\n events = eventType.split(/\\s+/);\n } else if (typeof eventType === \"object\" && eventType && typeof listener === \"undefined\") {\n for (i in eventType) {\n if (_hasOwn.call(eventType, i) && typeof i === \"string\" && i && typeof eventType[i] === \"function\") {\n ZeroClipboard.off(i, eventType[i]);\n }\n }\n }\n if (events && events.length) {\n for (i = 0, len = events.length; i < len; i++) {\n eventType = events[i].toLowerCase().replace(/^on/, \"\");\n perEventHandlers = _handlers[eventType];\n if (perEventHandlers && perEventHandlers.length) {\n if (listener) {\n foundIndex = perEventHandlers.indexOf(listener);\n while (foundIndex !== -1) {\n perEventHandlers.splice(foundIndex, 1);\n foundIndex = perEventHandlers.indexOf(listener, foundIndex);\n }\n } else {\n perEventHandlers.length = 0;\n }\n }\n }\n }\n return ZeroClipboard;\n };\n /**\n * The underlying implementation of `ZeroClipboard.handlers`.\n * @private\n */\n var _listeners = function(eventType) {\n var copy;\n if (typeof eventType === \"string\" && eventType) {\n copy = _deepCopy(_handlers[eventType]) || null;\n } else {\n copy = _deepCopy(_handlers);\n }\n return copy;\n };\n /**\n * The underlying implementation of `ZeroClipboard.emit`.\n * @private\n */\n var _emit = function(event) {\n var eventCopy, returnVal, tmp;\n event = _createEvent(event);\n if (!event) {\n return;\n }\n if (_preprocessEvent(event)) {\n return;\n }\n if (event.type === \"ready\" && _flashState.overdue === true) {\n return ZeroClipboard.emit({\n type: \"error\",\n name: \"flash-overdue\"\n });\n }\n eventCopy = _extend({}, event);\n _dispatchCallbacks.call(this, eventCopy);\n if (event.type === \"copy\") {\n tmp = _mapClipDataToFlash(_clipData);\n returnVal = tmp.data;\n _clipDataFormatMap = tmp.formatMap;\n }\n return returnVal;\n };\n /**\n * The underlying implementation of `ZeroClipboard.create`.\n * @private\n */\n var _create = function() {\n if (typeof _flashState.ready !== \"boolean\") {\n _flashState.ready = false;\n }\n if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n var maxWait = _globalConfig.flashLoadTimeout;\n if (typeof maxWait === \"number\" && maxWait >= 0) {\n _setTimeout(function() {\n if (typeof _flashState.deactivated !== \"boolean\") {\n _flashState.deactivated = true;\n }\n if (_flashState.deactivated === true) {\n ZeroClipboard.emit({\n type: \"error\",\n name: \"flash-deactivated\"\n });\n }\n }, maxWait);\n }\n _flashState.overdue = false;\n _embedSwf();\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.destroy`.\n * @private\n */\n var _destroy = function() {\n ZeroClipboard.clearData();\n ZeroClipboard.blur();\n ZeroClipboard.emit(\"destroy\");\n _unembedSwf();\n ZeroClipboard.off();\n };\n /**\n * The underlying implementation of `ZeroClipboard.setData`.\n * @private\n */\n var _setData = function(format, data) {\n var dataObj;\n if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n dataObj = format;\n ZeroClipboard.clearData();\n } else if (typeof format === \"string\" && format) {\n dataObj = {};\n dataObj[format] = data;\n } else {\n return;\n }\n for (var dataFormat in dataObj) {\n if (typeof dataFormat === \"string\" && dataFormat && _hasOwn.call(dataObj, dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n _clipData[dataFormat] = dataObj[dataFormat];\n }\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.clearData`.\n * @private\n */\n var _clearData = function(format) {\n if (typeof format === \"undefined\") {\n _deleteOwnProperties(_clipData);\n _clipDataFormatMap = null;\n } else if (typeof format === \"string\" && _hasOwn.call(_clipData, format)) {\n delete _clipData[format];\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.getData`.\n * @private\n */\n var _getData = function(format) {\n if (typeof format === \"undefined\") {\n return _deepCopy(_clipData);\n } else if (typeof format === \"string\" && _hasOwn.call(_clipData, format)) {\n return _clipData[format];\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.focus`/`ZeroClipboard.activate`.\n * @private\n */\n var _focus = function(element) {\n if (!(element && element.nodeType === 1)) {\n return;\n }\n if (_currentElement) {\n _removeClass(_currentElement, _globalConfig.activeClass);\n if (_currentElement !== element) {\n _removeClass(_currentElement, _globalConfig.hoverClass);\n }\n }\n _currentElement = element;\n _addClass(element, _globalConfig.hoverClass);\n var newTitle = element.getAttribute(\"title\") || _globalConfig.title;\n if (typeof newTitle === \"string\" && newTitle) {\n var htmlBridge = _getHtmlBridge(_flashState.bridge);\n if (htmlBridge) {\n htmlBridge.setAttribute(\"title\", newTitle);\n }\n }\n var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n _setHandCursor(useHandCursor);\n _reposition();\n };\n /**\n * The underlying implementation of `ZeroClipboard.blur`/`ZeroClipboard.deactivate`.\n * @private\n */\n var _blur = function() {\n var htmlBridge = _getHtmlBridge(_flashState.bridge);\n if (htmlBridge) {\n htmlBridge.removeAttribute(\"title\");\n htmlBridge.style.left = \"0px\";\n htmlBridge.style.top = \"-9999px\";\n htmlBridge.style.width = \"1px\";\n htmlBridge.style.top = \"1px\";\n }\n if (_currentElement) {\n _removeClass(_currentElement, _globalConfig.hoverClass);\n _removeClass(_currentElement, _globalConfig.activeClass);\n _currentElement = null;\n }\n };\n /**\n * The underlying implementation of `ZeroClipboard.activeElement`.\n * @private\n */\n var _activeElement = function() {\n return _currentElement || null;\n };\n /**\n * Check if a value is a valid HTML4 `ID` or `Name` token.\n * @private\n */\n var _isValidHtml4Id = function(id) {\n return typeof id === \"string\" && id && /^[A-Za-z][A-Za-z0-9_:\\-\\.]*$/.test(id);\n };\n /**\n * Create or update an `event` object, based on the `eventType`.\n * @private\n */\n var _createEvent = function(event) {\n var eventType;\n if (typeof event === \"string\" && event) {\n eventType = event;\n event = {};\n } else if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n eventType = event.type;\n }\n if (!eventType) {\n return;\n }\n _extend(event, {\n type: eventType.toLowerCase(),\n target: event.target || _currentElement || null,\n relatedTarget: event.relatedTarget || null,\n currentTarget: _flashState && _flashState.bridge || null,\n timeStamp: event.timeStamp || _now() || null\n });\n var msg = _eventMessages[event.type];\n if (event.type === \"error\" && event.name && msg) {\n msg = msg[event.name];\n }\n if (msg) {\n event.message = msg;\n }\n if (event.type === \"ready\") {\n _extend(event, {\n target: null,\n version: _flashState.version\n });\n }\n if (event.type === \"error\") {\n if (/^flash-(disabled|outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n _extend(event, {\n target: null,\n minimumVersion: _minimumFlashVersion\n });\n }\n if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n _extend(event, {\n version: _flashState.version\n });\n }\n }\n if (event.type === \"copy\") {\n event.clipboardData = {\n setData: ZeroClipboard.setData,\n clearData: ZeroClipboard.clearData\n };\n }\n if (event.type === \"aftercopy\") {\n event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n }\n if (event.target && !event.relatedTarget) {\n event.relatedTarget = _getRelatedTarget(event.target);\n }\n event = _addMouseData(event);\n return event;\n };\n /**\n * Get a relatedTarget from the target's `data-clipboard-target` attribute\n * @private\n */\n var _getRelatedTarget = function(targetEl) {\n var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n return relatedTargetId ? _document.getElementById(relatedTargetId) : null;\n };\n /**\n * Add element and position data to `MouseEvent` instances\n * @private\n */\n var _addMouseData = function(event) {\n if (event && /^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n var srcElement = event.target;\n var fromElement = event.type === \"_mouseover\" && event.relatedTarget ? event.relatedTarget : undefined;\n var toElement = event.type === \"_mouseout\" && event.relatedTarget ? event.relatedTarget : undefined;\n var pos = _getDOMObjectPosition(srcElement);\n var screenLeft = _window.screenLeft || _window.screenX || 0;\n var screenTop = _window.screenTop || _window.screenY || 0;\n var scrollLeft = _document.body.scrollLeft + _document.documentElement.scrollLeft;\n var scrollTop = _document.body.scrollTop + _document.documentElement.scrollTop;\n var pageX = pos.left + (typeof event._stageX === \"number\" ? event._stageX : 0);\n var pageY = pos.top + (typeof event._stageY === \"number\" ? event._stageY : 0);\n var clientX = pageX - scrollLeft;\n var clientY = pageY - scrollTop;\n var screenX = screenLeft + clientX;\n var screenY = screenTop + clientY;\n var moveX = typeof event.movementX === \"number\" ? event.movementX : 0;\n var moveY = typeof event.movementY === \"number\" ? event.movementY : 0;\n delete event._stageX;\n delete event._stageY;\n _extend(event, {\n srcElement: srcElement,\n fromElement: fromElement,\n toElement: toElement,\n screenX: screenX,\n screenY: screenY,\n pageX: pageX,\n pageY: pageY,\n clientX: clientX,\n clientY: clientY,\n x: clientX,\n y: clientY,\n movementX: moveX,\n movementY: moveY,\n offsetX: 0,\n offsetY: 0,\n layerX: 0,\n layerY: 0\n });\n }\n return event;\n };\n /**\n * Determine if an event's registered handlers should be execute synchronously or asynchronously.\n *\n * @returns {boolean}\n * @private\n */\n var _shouldPerformAsync = function(event) {\n var eventType = event && typeof event.type === \"string\" && event.type || \"\";\n return !/^(?:(?:before)?copy|destroy)$/.test(eventType);\n };\n /**\n * Control if a callback should be executed asynchronously or not.\n *\n * @returns `undefined`\n * @private\n */\n var _dispatchCallback = function(func, context, args, async) {\n if (async) {\n _setTimeout(function() {\n func.apply(context, args);\n }, 0);\n } else {\n func.apply(context, args);\n }\n };\n /**\n * Handle the actual dispatching of events to client instances.\n *\n * @returns `undefined`\n * @private\n */\n var _dispatchCallbacks = function(event) {\n if (!(typeof event === \"object\" && event && event.type)) {\n return;\n }\n var async = _shouldPerformAsync(event);\n var wildcardTypeHandlers = _handlers[\"*\"] || [];\n var specificTypeHandlers = _handlers[event.type] || [];\n var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);\n if (handlers && handlers.length) {\n var i, len, func, context, eventCopy, originalContext = this;\n for (i = 0, len = handlers.length; i < len; i++) {\n func = handlers[i];\n context = originalContext;\n if (typeof func === \"string\" && typeof _window[func] === \"function\") {\n func = _window[func];\n }\n if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n context = func;\n func = func.handleEvent;\n }\n if (typeof func === \"function\") {\n eventCopy = _extend({}, event);\n _dispatchCallback(func, context, [ eventCopy ], async);\n }\n }\n }\n return this;\n };\n /**\n * Preprocess any special behaviors, reactions, or state changes after receiving this event.\n * Executes only once per event emitted, NOT once per client.\n * @private\n */\n var _preprocessEvent = function(event) {\n var element = event.target || _currentElement || null;\n var sourceIsSwf = event._source === \"swf\";\n delete event._source;\n var flashErrorNames = [ \"flash-disabled\", \"flash-outdated\", \"flash-unavailable\", \"flash-deactivated\", \"flash-overdue\" ];\n switch (event.type) {\n case \"error\":\n if (flashErrorNames.indexOf(event.name) !== -1) {\n _extend(_flashState, {\n disabled: event.name === \"flash-disabled\",\n outdated: event.name === \"flash-outdated\",\n unavailable: event.name === \"flash-unavailable\",\n deactivated: event.name === \"flash-deactivated\",\n overdue: event.name === \"flash-overdue\",\n ready: false\n });\n }\n break;\n\n case \"ready\":\n var wasDeactivated = _flashState.deactivated === true;\n _extend(_flashState, {\n disabled: false,\n outdated: false,\n unavailable: false,\n deactivated: false,\n overdue: wasDeactivated,\n ready: !wasDeactivated\n });\n break;\n\n case \"copy\":\n var textContent, htmlContent, targetEl = event.relatedTarget;\n if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n event.clipboardData.clearData();\n event.clipboardData.setData(\"text/plain\", textContent);\n if (htmlContent !== textContent) {\n event.clipboardData.setData(\"text/html\", htmlContent);\n }\n } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n event.clipboardData.clearData();\n event.clipboardData.setData(\"text/plain\", textContent);\n }\n break;\n\n case \"aftercopy\":\n ZeroClipboard.clearData();\n if (element && element !== _safeActiveElement() && element.focus) {\n element.focus();\n }\n break;\n\n case \"_mouseover\":\n ZeroClipboard.focus(element);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseenter\",\n bubbles: false,\n cancelable: false\n }));\n }\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseover\"\n }));\n }\n break;\n\n case \"_mouseout\":\n ZeroClipboard.blur();\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n if (element && element !== event.relatedTarget && !_containedBy(event.relatedTarget, element)) {\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseleave\",\n bubbles: false,\n cancelable: false\n }));\n }\n _fireMouseEvent(_extend({}, event, {\n type: \"mouseout\"\n }));\n }\n break;\n\n case \"_mousedown\":\n _addClass(element, _globalConfig.activeClass);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n\n case \"_mouseup\":\n _removeClass(element, _globalConfig.activeClass);\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n\n case \"_click\":\n case \"_mousemove\":\n if (_globalConfig.bubbleEvents === true && sourceIsSwf) {\n _fireMouseEvent(_extend({}, event, {\n type: event.type.slice(1)\n }));\n }\n break;\n }\n if (/^_(?:click|mouse(?:over|out|down|up|move))$/.test(event.type)) {\n return true;\n }\n };\n /**\n * Dispatch a synthetic MouseEvent.\n *\n * @returns `undefined`\n * @private\n */\n var _fireMouseEvent = function(event) {\n if (!(event && typeof event.type === \"string\" && event)) {\n return;\n }\n var e, target = event.target || null, doc = target && target.ownerDocument || _document, defaults = {\n view: doc.defaultView || _window,\n canBubble: true,\n cancelable: true,\n detail: event.type === \"click\" ? 1 : 0,\n button: typeof event.which === \"number\" ? event.which - 1 : typeof event.button === \"number\" ? event.button : doc.createEvent ? 0 : 1\n }, args = _extend(defaults, event);\n if (!target) {\n return;\n }\n if (doc.createEvent && target.dispatchEvent) {\n args = [ args.type, args.canBubble, args.cancelable, args.view, args.detail, args.screenX, args.screenY, args.clientX, args.clientY, args.ctrlKey, args.altKey, args.shiftKey, args.metaKey, args.button, args.relatedTarget ];\n e = doc.createEvent(\"MouseEvents\");\n if (e.initMouseEvent) {\n e.initMouseEvent.apply(e, args);\n e._source = \"js\";\n target.dispatchEvent(e);\n }\n }\n };\n /**\n * Create the HTML bridge element to embed the Flash object into.\n * @private\n */\n var _createHtmlBridge = function() {\n var container = _document.createElement(\"div\");\n container.id = _globalConfig.containerId;\n container.className = _globalConfig.containerClass;\n container.style.position = \"absolute\";\n container.style.left = \"0px\";\n container.style.top = \"-9999px\";\n container.style.width = \"1px\";\n container.style.height = \"1px\";\n container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n return container;\n };\n /**\n * Get the HTML element container that wraps the Flash bridge object/element.\n * @private\n */\n var _getHtmlBridge = function(flashBridge) {\n var htmlBridge = flashBridge && flashBridge.parentNode;\n while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n htmlBridge = htmlBridge.parentNode;\n }\n return htmlBridge || null;\n };\n /**\n * Create the SWF object.\n *\n * @returns The SWF object reference.\n * @private\n */\n var _embedSwf = function() {\n var len, flashBridge = _flashState.bridge, container = _getHtmlBridge(flashBridge);\n if (!flashBridge) {\n var allowScriptAccess = _determineScriptAccess(_window.location.host, _globalConfig);\n var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n var flashvars = _vars(_globalConfig);\n var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n container = _createHtmlBridge();\n var divToBeReplaced = _document.createElement(\"div\");\n container.appendChild(divToBeReplaced);\n _document.body.appendChild(container);\n var tmpDiv = _document.createElement(\"div\");\n var oldIE = _flashState.pluginType === \"activex\";\n tmpDiv.innerHTML = '\" + (oldIE ? '' : \"\") + '' + '' + '' + '' + '' + \"\";\n flashBridge = tmpDiv.firstChild;\n tmpDiv = null;\n flashBridge.ZeroClipboard = ZeroClipboard;\n container.replaceChild(flashBridge, divToBeReplaced);\n }\n if (!flashBridge) {\n flashBridge = _document[_globalConfig.swfObjectId];\n if (flashBridge && (len = flashBridge.length)) {\n flashBridge = flashBridge[len - 1];\n }\n if (!flashBridge && container) {\n flashBridge = container.firstChild;\n }\n }\n _flashState.bridge = flashBridge || null;\n return flashBridge;\n };\n /**\n * Destroy the SWF object.\n * @private\n */\n var _unembedSwf = function() {\n var flashBridge = _flashState.bridge;\n if (flashBridge) {\n var htmlBridge = _getHtmlBridge(flashBridge);\n if (htmlBridge) {\n if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n flashBridge.style.display = \"none\";\n (function removeSwfFromIE() {\n if (flashBridge.readyState === 4) {\n for (var prop in flashBridge) {\n if (typeof flashBridge[prop] === \"function\") {\n flashBridge[prop] = null;\n }\n }\n if (flashBridge.parentNode) {\n flashBridge.parentNode.removeChild(flashBridge);\n }\n if (htmlBridge.parentNode) {\n htmlBridge.parentNode.removeChild(htmlBridge);\n }\n } else {\n _setTimeout(removeSwfFromIE, 10);\n }\n })();\n } else {\n if (flashBridge.parentNode) {\n flashBridge.parentNode.removeChild(flashBridge);\n }\n if (htmlBridge.parentNode) {\n htmlBridge.parentNode.removeChild(htmlBridge);\n }\n }\n }\n _flashState.ready = null;\n _flashState.bridge = null;\n _flashState.deactivated = null;\n }\n };\n /**\n * Map the data format names of the \"clipData\" to Flash-friendly names.\n *\n * @returns A new transformed object.\n * @private\n */\n var _mapClipDataToFlash = function(clipData) {\n var newClipData = {}, formatMap = {};\n if (!(typeof clipData === \"object\" && clipData)) {\n return;\n }\n for (var dataFormat in clipData) {\n if (dataFormat && _hasOwn.call(clipData, dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n switch (dataFormat.toLowerCase()) {\n case \"text/plain\":\n case \"text\":\n case \"air:text\":\n case \"flash:text\":\n newClipData.text = clipData[dataFormat];\n formatMap.text = dataFormat;\n break;\n\n case \"text/html\":\n case \"html\":\n case \"air:html\":\n case \"flash:html\":\n newClipData.html = clipData[dataFormat];\n formatMap.html = dataFormat;\n break;\n\n case \"application/rtf\":\n case \"text/rtf\":\n case \"rtf\":\n case \"richtext\":\n case \"air:rtf\":\n case \"flash:rtf\":\n newClipData.rtf = clipData[dataFormat];\n formatMap.rtf = dataFormat;\n break;\n\n default:\n break;\n }\n }\n }\n return {\n data: newClipData,\n formatMap: formatMap\n };\n };\n /**\n * Map the data format names from Flash-friendly names back to their original \"clipData\" names (via a format mapping).\n *\n * @returns A new transformed object.\n * @private\n */\n var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n return clipResults;\n }\n var newResults = {};\n for (var prop in clipResults) {\n if (_hasOwn.call(clipResults, prop)) {\n if (prop !== \"success\" && prop !== \"data\") {\n newResults[prop] = clipResults[prop];\n continue;\n }\n newResults[prop] = {};\n var tmpHash = clipResults[prop];\n for (var dataFormat in tmpHash) {\n if (dataFormat && _hasOwn.call(tmpHash, dataFormat) && _hasOwn.call(formatMap, dataFormat)) {\n newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n }\n }\n }\n }\n return newResults;\n };\n /**\n * Will look at a path, and will create a \"?noCache={time}\" or \"&noCache={time}\"\n * query param string to return. Does NOT append that string to the original path.\n * This is useful because ExternalInterface often breaks when a Flash SWF is cached.\n *\n * @returns The `noCache` query param with necessary \"?\"/\"&\" prefix.\n * @private\n */\n var _cacheBust = function(path, options) {\n var cacheBust = options == null || options && options.cacheBust === true;\n if (cacheBust) {\n return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + _now();\n } else {\n return \"\";\n }\n };\n /**\n * Creates a query string for the FlashVars param.\n * Does NOT include the cache-busting query param.\n *\n * @returns FlashVars query string\n * @private\n */\n var _vars = function(options) {\n var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n if (options.trustedDomains) {\n if (typeof options.trustedDomains === \"string\") {\n domains = [ options.trustedDomains ];\n } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n domains = options.trustedDomains;\n }\n }\n if (domains && domains.length) {\n for (i = 0, len = domains.length; i < len; i++) {\n if (_hasOwn.call(domains, i) && domains[i] && typeof domains[i] === \"string\") {\n domain = _extractDomain(domains[i]);\n if (!domain) {\n continue;\n }\n if (domain === \"*\") {\n trustedOriginsExpanded.length = 0;\n trustedOriginsExpanded.push(domain);\n break;\n }\n trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, _window.location.protocol + \"//\" + domain ]);\n }\n }\n }\n if (trustedOriginsExpanded.length) {\n str += \"trustedOrigins=\" + _encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n }\n if (options.forceEnhancedClipboard === true) {\n str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n }\n if (typeof options.swfObjectId === \"string\" && options.swfObjectId) {\n str += (str ? \"&\" : \"\") + \"swfObjectId=\" + _encodeURIComponent(options.swfObjectId);\n }\n return str;\n };\n /**\n * Extract the domain (e.g. \"github.com\") from an origin (e.g. \"https://github.com\") or\n * URL (e.g. \"https://github.com/zeroclipboard/zeroclipboard/\").\n *\n * @returns the domain\n * @private\n */\n var _extractDomain = function(originOrUrl) {\n if (originOrUrl == null || originOrUrl === \"\") {\n return null;\n }\n originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n if (originOrUrl === \"\") {\n return null;\n }\n var protocolIndex = originOrUrl.indexOf(\"//\");\n originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n var pathIndex = originOrUrl.indexOf(\"/\");\n originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n return null;\n }\n return originOrUrl || null;\n };\n /**\n * Set `allowScriptAccess` based on `trustedDomains` and `window.location.host` vs. `swfPath`.\n *\n * @returns The appropriate script access level.\n * @private\n */\n var _determineScriptAccess = function() {\n var _extractAllDomains = function(origins) {\n var i, len, tmp, resultsArray = [];\n if (typeof origins === \"string\") {\n origins = [ origins ];\n }\n if (!(typeof origins === \"object\" && origins && typeof origins.length === \"number\")) {\n return resultsArray;\n }\n for (i = 0, len = origins.length; i < len; i++) {\n if (_hasOwn.call(origins, i) && (tmp = _extractDomain(origins[i]))) {\n if (tmp === \"*\") {\n resultsArray.length = 0;\n resultsArray.push(\"*\");\n break;\n }\n if (resultsArray.indexOf(tmp) === -1) {\n resultsArray.push(tmp);\n }\n }\n }\n return resultsArray;\n };\n return function(currentDomain, configOptions) {\n var swfDomain = _extractDomain(configOptions.swfPath);\n if (swfDomain === null) {\n swfDomain = currentDomain;\n }\n var trustedDomains = _extractAllDomains(configOptions.trustedDomains);\n var len = trustedDomains.length;\n if (len > 0) {\n if (len === 1 && trustedDomains[0] === \"*\") {\n return \"always\";\n }\n if (trustedDomains.indexOf(currentDomain) !== -1) {\n if (len === 1 && currentDomain === swfDomain) {\n return \"sameDomain\";\n }\n return \"always\";\n }\n }\n return \"never\";\n };\n }();\n /**\n * Get the currently active/focused DOM element.\n *\n * @returns the currently active/focused element, or `null`\n * @private\n */\n var _safeActiveElement = function() {\n try {\n return _document.activeElement;\n } catch (err) {\n return null;\n }\n };\n /**\n * Add a class to an element, if it doesn't already have it.\n *\n * @returns The element, with its new class added.\n * @private\n */\n var _addClass = function(element, value) {\n if (!element || element.nodeType !== 1) {\n return element;\n }\n if (element.classList) {\n if (!element.classList.contains(value)) {\n element.classList.add(value);\n }\n return element;\n }\n if (value && typeof value === \"string\") {\n var classNames = (value || \"\").split(/\\s+/);\n if (element.nodeType === 1) {\n if (!element.className) {\n element.className = value;\n } else {\n var className = \" \" + element.className + \" \", setClass = element.className;\n for (var c = 0, cl = classNames.length; c < cl; c++) {\n if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n setClass += \" \" + classNames[c];\n }\n }\n element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n }\n }\n }\n return element;\n };\n /**\n * Remove a class from an element, if it has it.\n *\n * @returns The element, with its class removed.\n * @private\n */\n var _removeClass = function(element, value) {\n if (!element || element.nodeType !== 1) {\n return element;\n }\n if (element.classList) {\n if (element.classList.contains(value)) {\n element.classList.remove(value);\n }\n return element;\n }\n if (typeof value === \"string\" && value) {\n var classNames = value.split(/\\s+/);\n if (element.nodeType === 1 && element.className) {\n var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n for (var c = 0, cl = classNames.length; c < cl; c++) {\n className = className.replace(\" \" + classNames[c] + \" \", \" \");\n }\n element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n }\n }\n return element;\n };\n /**\n * Attempt to interpret the element's CSS styling. If `prop` is `\"cursor\"`,\n * then we assume that it should be a hand (\"pointer\") cursor if the element\n * is an anchor element (\"a\" tag).\n *\n * @returns The computed style property.\n * @private\n */\n var _getStyle = function(el, prop) {\n var value = _window.getComputedStyle(el, null).getPropertyValue(prop);\n if (prop === \"cursor\") {\n if (!value || value === \"auto\") {\n if (el.nodeName === \"A\") {\n return \"pointer\";\n }\n }\n }\n return value;\n };\n /**\n * Get the zoom factor of the browser. Always returns `1.0`, except at\n * non-default zoom levels in IE<8 and some older versions of WebKit.\n *\n * @returns Floating unit percentage of the zoom factor (e.g. 150% = `1.5`).\n * @private\n */\n var _getZoomFactor = function() {\n var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n if (typeof _document.body.getBoundingClientRect === \"function\") {\n rect = _document.body.getBoundingClientRect();\n physicalWidth = rect.right - rect.left;\n logicalWidth = _document.body.offsetWidth;\n zoomFactor = _round(physicalWidth / logicalWidth * 100) / 100;\n }\n return zoomFactor;\n };\n /**\n * Get the DOM positioning info of an element.\n *\n * @returns Object containing the element's position, width, and height.\n * @private\n */\n var _getDOMObjectPosition = function(obj) {\n var info = {\n left: 0,\n top: 0,\n width: 0,\n height: 0\n };\n if (obj.getBoundingClientRect) {\n var rect = obj.getBoundingClientRect();\n var pageXOffset, pageYOffset, zoomFactor;\n if (\"pageXOffset\" in _window && \"pageYOffset\" in _window) {\n pageXOffset = _window.pageXOffset;\n pageYOffset = _window.pageYOffset;\n } else {\n zoomFactor = _getZoomFactor();\n pageXOffset = _round(_document.documentElement.scrollLeft / zoomFactor);\n pageYOffset = _round(_document.documentElement.scrollTop / zoomFactor);\n }\n var leftBorderWidth = _document.documentElement.clientLeft || 0;\n var topBorderWidth = _document.documentElement.clientTop || 0;\n info.left = rect.left + pageXOffset - leftBorderWidth;\n info.top = rect.top + pageYOffset - topBorderWidth;\n info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n }\n return info;\n };\n /**\n * Reposition the Flash object to cover the currently activated element.\n *\n * @returns `undefined`\n * @private\n */\n var _reposition = function() {\n var htmlBridge;\n if (_currentElement && (htmlBridge = _getHtmlBridge(_flashState.bridge))) {\n var pos = _getDOMObjectPosition(_currentElement);\n _extend(htmlBridge.style, {\n width: pos.width + \"px\",\n height: pos.height + \"px\",\n top: pos.top + \"px\",\n left: pos.left + \"px\",\n zIndex: \"\" + _getSafeZIndex(_globalConfig.zIndex)\n });\n }\n };\n /**\n * Sends a signal to the Flash object to display the hand cursor if `true`.\n *\n * @returns `undefined`\n * @private\n */\n var _setHandCursor = function(enabled) {\n if (_flashState.ready === true) {\n if (_flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n _flashState.bridge.setHandCursor(enabled);\n } else {\n _flashState.ready = false;\n }\n }\n };\n /**\n * Get a safe value for `zIndex`\n *\n * @returns an integer, or \"auto\"\n * @private\n */\n var _getSafeZIndex = function(val) {\n if (/^(?:auto|inherit)$/.test(val)) {\n return val;\n }\n var zIndex;\n if (typeof val === \"number\" && !_isNaN(val)) {\n zIndex = val;\n } else if (typeof val === \"string\") {\n zIndex = _getSafeZIndex(_parseInt(val, 10));\n }\n return typeof zIndex === \"number\" ? zIndex : \"auto\";\n };\n /**\n * Detect the Flash Player status, version, and plugin type.\n *\n * @see {@link https://code.google.com/p/doctype-mirror/wiki/ArticleDetectFlash#The_code}\n * @see {@link http://stackoverflow.com/questions/12866060/detecting-pepper-ppapi-flash-with-javascript}\n *\n * @returns `undefined`\n * @private\n */\n var _detectFlashSupport = function(ActiveXObject) {\n var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n /**\n * Derived from Apple's suggested sniffer.\n * @param {String} desc e.g. \"Shockwave Flash 7.0 r61\"\n * @returns {String} \"7.0.61\"\n * @private\n */\n function parseFlashVersion(desc) {\n var matches = desc.match(/[\\d]+/g);\n matches.length = 3;\n return matches.join(\".\");\n }\n function isPepperFlash(flashPlayerFileName) {\n return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n }\n function inspectPlugin(plugin) {\n if (plugin) {\n hasFlash = true;\n if (plugin.version) {\n flashVersion = parseFlashVersion(plugin.version);\n }\n if (!flashVersion && plugin.description) {\n flashVersion = parseFlashVersion(plugin.description);\n }\n if (plugin.filename) {\n isPPAPI = isPepperFlash(plugin.filename);\n }\n }\n }\n if (_navigator.plugins && _navigator.plugins.length) {\n plugin = _navigator.plugins[\"Shockwave Flash\"];\n inspectPlugin(plugin);\n if (_navigator.plugins[\"Shockwave Flash 2.0\"]) {\n hasFlash = true;\n flashVersion = \"2.0.0.11\";\n }\n } else if (_navigator.mimeTypes && _navigator.mimeTypes.length) {\n mimeType = _navigator.mimeTypes[\"application/x-shockwave-flash\"];\n plugin = mimeType && mimeType.enabledPlugin;\n inspectPlugin(plugin);\n } else if (typeof ActiveXObject !== \"undefined\") {\n isActiveX = true;\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n hasFlash = true;\n flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n } catch (e1) {\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n hasFlash = true;\n flashVersion = \"6.0.21\";\n } catch (e2) {\n try {\n ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n hasFlash = true;\n flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n } catch (e3) {\n isActiveX = false;\n }\n }\n }\n }\n _flashState.disabled = hasFlash !== true;\n _flashState.outdated = flashVersion && _parseFloat(flashVersion) < _parseFloat(_minimumFlashVersion);\n _flashState.version = flashVersion || \"0.0.0\";\n _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n };\n /**\n * Invoke the Flash detection algorithms immediately upon inclusion so we're not waiting later.\n */\n _detectFlashSupport(_ActiveXObject);\n /**\n * A shell constructor for `ZeroClipboard` client instances.\n *\n * @constructor\n */\n var ZeroClipboard = function() {\n if (!(this instanceof ZeroClipboard)) {\n return new ZeroClipboard();\n }\n if (typeof ZeroClipboard._createClient === \"function\") {\n ZeroClipboard._createClient.apply(this, _args(arguments));\n }\n };\n /**\n * The ZeroClipboard library's version number.\n *\n * @static\n * @readonly\n * @property {string}\n */\n _defineProperty(ZeroClipboard, \"version\", {\n value: \"2.1.1\",\n writable: false,\n configurable: true,\n enumerable: true\n });\n /**\n * Update or get a copy of the ZeroClipboard global configuration.\n * Returns a copy of the current/updated configuration.\n *\n * @returns Object\n * @static\n */\n ZeroClipboard.config = function() {\n return _config.apply(this, _args(arguments));\n };\n /**\n * Diagnostic method that describes the state of the browser, Flash Player, and ZeroClipboard.\n *\n * @returns Object\n * @static\n */\n ZeroClipboard.state = function() {\n return _state.apply(this, _args(arguments));\n };\n /**\n * Check if Flash is unusable for any reason: disabled, outdated, deactivated, etc.\n *\n * @returns Boolean\n * @static\n */\n ZeroClipboard.isFlashUnusable = function() {\n return _isFlashUnusable.apply(this, _args(arguments));\n };\n /**\n * Register an event listener.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n ZeroClipboard.on = function() {\n return _on.apply(this, _args(arguments));\n };\n /**\n * Unregister an event listener.\n * If no `listener` function/object is provided, it will unregister all listeners for the provided `eventType`.\n * If no `eventType` is provided, it will unregister all listeners for every event type.\n *\n * @returns `ZeroClipboard`\n * @static\n */\n ZeroClipboard.off = function() {\n return _off.apply(this, _args(arguments));\n };\n /**\n * Retrieve event listeners for an `eventType`.\n * If no `eventType` is provided, it will retrieve all listeners for every event type.\n *\n * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`\n */\n ZeroClipboard.handlers = function() {\n return _listeners.apply(this, _args(arguments));\n };\n /**\n * Event emission receiver from the Flash object, forwarding to any registered JavaScript event listeners.\n *\n * @returns For the \"copy\" event, returns the Flash-friendly \"clipData\" object; otherwise `undefined`.\n * @static\n */\n ZeroClipboard.emit = function() {\n return _emit.apply(this, _args(arguments));\n };\n /**\n * Create and embed the Flash object.\n *\n * @returns The Flash object\n * @static\n */\n ZeroClipboard.create = function() {\n return _create.apply(this, _args(arguments));\n };\n /**\n * Self-destruct and clean up everything, including the embedded Flash object.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.destroy = function() {\n return _destroy.apply(this, _args(arguments));\n };\n /**\n * Set the pending data for clipboard injection.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.setData = function() {\n return _setData.apply(this, _args(arguments));\n };\n /**\n * Clear the pending data for clipboard injection.\n * If no `format` is provided, all pending data formats will be cleared.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.clearData = function() {\n return _clearData.apply(this, _args(arguments));\n };\n /**\n * Get a copy of the pending data for clipboard injection.\n * If no `format` is provided, a copy of ALL pending data formats will be returned.\n *\n * @returns `String` or `Object`\n * @static\n */\n ZeroClipboard.getData = function() {\n return _getData.apply(this, _args(arguments));\n };\n /**\n * Sets the current HTML object that the Flash object should overlay. This will put the global\n * Flash object on top of the current element; depending on the setup, this may also set the\n * pending clipboard text data as well as the Flash object's wrapping element's title attribute\n * based on the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.focus = ZeroClipboard.activate = function() {\n return _focus.apply(this, _args(arguments));\n };\n /**\n * Un-overlays the Flash object. This will put the global Flash object off-screen; depending on\n * the setup, this may also unset the Flash object's wrapping element's title attribute based on\n * the underlying HTML element and ZeroClipboard configuration.\n *\n * @returns `undefined`\n * @static\n */\n ZeroClipboard.blur = ZeroClipboard.deactivate = function() {\n return _blur.apply(this, _args(arguments));\n };\n /**\n * Returns the currently focused/\"activated\" HTML element that the Flash object is wrapping.\n *\n * @returns `HTMLElement` or `null`\n * @static\n */\n ZeroClipboard.activeElement = function() {\n return _activeElement.apply(this, _args(arguments));\n };\n /**\n * Keep track of the ZeroClipboard client instance counter.\n */\n var _clientIdCounter = 0;\n /**\n * Keep track of the state of the client instances.\n *\n * Entry structure:\n * _clientMeta[client.id] = {\n * instance: client,\n * elements: [],\n * handlers: {}\n * };\n */\n var _clientMeta = {};\n /**\n * Keep track of the ZeroClipboard clipped elements counter.\n */\n var _elementIdCounter = 0;\n /**\n * Keep track of the state of the clipped element relationships to clients.\n *\n * Entry structure:\n * _elementMeta[element.zcClippingId] = [client1.id, client2.id];\n */\n var _elementMeta = {};\n /**\n * Keep track of the state of the mouse event handlers for clipped elements.\n *\n * Entry structure:\n * _mouseHandlers[element.zcClippingId] = {\n * mouseover: function(event) {},\n * mouseout: function(event) {},\n * mouseenter: function(event) {},\n * mouseleave: function(event) {},\n * mousemove: function(event) {}\n * };\n */\n var _mouseHandlers = {};\n /**\n * Extending the ZeroClipboard configuration defaults for the Client module.\n */\n _extend(_globalConfig, {\n autoActivate: true\n });\n /**\n * The real constructor for `ZeroClipboard` client instances.\n * @private\n */\n var _clientConstructor = function(elements) {\n var client = this;\n client.id = \"\" + _clientIdCounter++;\n _clientMeta[client.id] = {\n instance: client,\n elements: [],\n handlers: {}\n };\n if (elements) {\n client.clip(elements);\n }\n ZeroClipboard.on(\"*\", function(event) {\n return client.emit(event);\n });\n ZeroClipboard.on(\"destroy\", function() {\n client.destroy();\n });\n ZeroClipboard.create();\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.on`.\n * @private\n */\n var _clientOn = function(eventType, listener) {\n var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n if (typeof eventType === \"string\" && eventType) {\n events = eventType.toLowerCase().split(/\\s+/);\n } else if (typeof eventType === \"object\" && eventType && typeof listener === \"undefined\") {\n for (i in eventType) {\n if (_hasOwn.call(eventType, i) && typeof i === \"string\" && i && typeof eventType[i] === \"function\") {\n this.on(i, eventType[i]);\n }\n }\n }\n if (events && events.length) {\n for (i = 0, len = events.length; i < len; i++) {\n eventType = events[i].replace(/^on/, \"\");\n added[eventType] = true;\n if (!handlers[eventType]) {\n handlers[eventType] = [];\n }\n handlers[eventType].push(listener);\n }\n if (added.ready && _flashState.ready) {\n this.emit({\n type: \"ready\",\n client: this\n });\n }\n if (added.error) {\n var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n for (i = 0, len = errorTypes.length; i < len; i++) {\n if (_flashState[errorTypes[i]]) {\n this.emit({\n type: \"error\",\n name: \"flash-\" + errorTypes[i],\n client: this\n });\n break;\n }\n }\n }\n }\n return this;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.off`.\n * @private\n */\n var _clientOff = function(eventType, listener) {\n var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n if (arguments.length === 0) {\n events = _keys(handlers);\n } else if (typeof eventType === \"string\" && eventType) {\n events = eventType.split(/\\s+/);\n } else if (typeof eventType === \"object\" && eventType && typeof listener === \"undefined\") {\n for (i in eventType) {\n if (_hasOwn.call(eventType, i) && typeof i === \"string\" && i && typeof eventType[i] === \"function\") {\n this.off(i, eventType[i]);\n }\n }\n }\n if (events && events.length) {\n for (i = 0, len = events.length; i < len; i++) {\n eventType = events[i].toLowerCase().replace(/^on/, \"\");\n perEventHandlers = handlers[eventType];\n if (perEventHandlers && perEventHandlers.length) {\n if (listener) {\n foundIndex = perEventHandlers.indexOf(listener);\n while (foundIndex !== -1) {\n perEventHandlers.splice(foundIndex, 1);\n foundIndex = perEventHandlers.indexOf(listener, foundIndex);\n }\n } else {\n perEventHandlers.length = 0;\n }\n }\n }\n }\n return this;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.handlers`.\n * @private\n */\n var _clientListeners = function(eventType) {\n var copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n if (handlers) {\n if (typeof eventType === \"string\" && eventType) {\n copy = handlers[eventType] ? handlers[eventType].slice(0) : [];\n } else {\n copy = _deepCopy(handlers);\n }\n }\n return copy;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.emit`.\n * @private\n */\n var _clientEmit = function(event) {\n if (_clientShouldEmit.call(this, event)) {\n if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n event = _extend({}, event);\n }\n var eventCopy = _extend({}, _createEvent(event), {\n client: this\n });\n _clientDispatchCallbacks.call(this, eventCopy);\n }\n return this;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.clip`.\n * @private\n */\n var _clientClip = function(elements) {\n elements = _prepClip(elements);\n for (var i = 0; i < elements.length; i++) {\n if (_hasOwn.call(elements, i) && elements[i] && elements[i].nodeType === 1) {\n if (!elements[i].zcClippingId) {\n elements[i].zcClippingId = \"zcClippingId_\" + _elementIdCounter++;\n _elementMeta[elements[i].zcClippingId] = [ this.id ];\n if (_globalConfig.autoActivate === true) {\n _addMouseHandlers(elements[i]);\n }\n } else if (_elementMeta[elements[i].zcClippingId].indexOf(this.id) === -1) {\n _elementMeta[elements[i].zcClippingId].push(this.id);\n }\n var clippedElements = _clientMeta[this.id] && _clientMeta[this.id].elements;\n if (clippedElements.indexOf(elements[i]) === -1) {\n clippedElements.push(elements[i]);\n }\n }\n }\n return this;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.unclip`.\n * @private\n */\n var _clientUnclip = function(elements) {\n var meta = _clientMeta[this.id];\n if (!meta) {\n return this;\n }\n var clippedElements = meta.elements;\n var arrayIndex;\n if (typeof elements === \"undefined\") {\n elements = clippedElements.slice(0);\n } else {\n elements = _prepClip(elements);\n }\n for (var i = elements.length; i--; ) {\n if (_hasOwn.call(elements, i) && elements[i] && elements[i].nodeType === 1) {\n arrayIndex = 0;\n while ((arrayIndex = clippedElements.indexOf(elements[i], arrayIndex)) !== -1) {\n clippedElements.splice(arrayIndex, 1);\n }\n var clientIds = _elementMeta[elements[i].zcClippingId];\n if (clientIds) {\n arrayIndex = 0;\n while ((arrayIndex = clientIds.indexOf(this.id, arrayIndex)) !== -1) {\n clientIds.splice(arrayIndex, 1);\n }\n if (clientIds.length === 0) {\n if (_globalConfig.autoActivate === true) {\n _removeMouseHandlers(elements[i]);\n }\n delete elements[i].zcClippingId;\n }\n }\n }\n }\n return this;\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.elements`.\n * @private\n */\n var _clientElements = function() {\n var meta = _clientMeta[this.id];\n return meta && meta.elements ? meta.elements.slice(0) : [];\n };\n /**\n * The underlying implementation of `ZeroClipboard.Client.prototype.destroy`.\n * @private\n */\n var _clientDestroy = function() {\n this.unclip();\n this.off();\n delete _clientMeta[this.id];\n };\n /**\n * Inspect an Event to see if the Client (`this`) should honor it for emission.\n * @private\n */\n var _clientShouldEmit = function(event) {\n if (!(event && event.type)) {\n return false;\n }\n if (event.client && event.client !== this) {\n return false;\n }\n var clippedEls = _clientMeta[this.id] && _clientMeta[this.id].elements;\n var hasClippedEls = !!clippedEls && clippedEls.length > 0;\n var goodTarget = !event.target || hasClippedEls && clippedEls.indexOf(event.target) !== -1;\n var goodRelTarget = event.relatedTarget && hasClippedEls && clippedEls.indexOf(event.relatedTarget) !== -1;\n var goodClient = event.client && event.client === this;\n if (!(goodTarget || goodRelTarget || goodClient)) {\n return false;\n }\n return true;\n };\n /**\n * Handle the actual dispatching of events to a client instance.\n *\n * @returns `this`\n * @private\n */\n var _clientDispatchCallbacks = function(event) {\n if (!(typeof event === \"object\" && event && event.type)) {\n return;\n }\n var async = _shouldPerformAsync(event);\n var wildcardTypeHandlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[\"*\"] || [];\n var specificTypeHandlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type] || [];\n var handlers = wildcardTypeHandlers.concat(specificTypeHandlers);\n if (handlers && handlers.length) {\n var i, len, func, context, eventCopy, originalContext = this;\n for (i = 0, len = handlers.length; i < len; i++) {\n func = handlers[i];\n context = originalContext;\n if (typeof func === \"string\" && typeof _window[func] === \"function\") {\n func = _window[func];\n }\n if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n context = func;\n func = func.handleEvent;\n }\n if (typeof func === \"function\") {\n eventCopy = _extend({}, event);\n _dispatchCallback(func, context, [ eventCopy ], async);\n }\n }\n }\n return this;\n };\n /**\n * Prepares the elements for clipping/unclipping.\n *\n * @returns An Array of elements.\n * @private\n */\n var _prepClip = function(elements) {\n if (typeof elements === \"string\") {\n elements = [];\n }\n return typeof elements.length !== \"number\" ? [ elements ] : elements;\n };\n /**\n * Add a `mouseover` handler function for a clipped element.\n *\n * @returns `undefined`\n * @private\n */\n var _addMouseHandlers = function(element) {\n if (!(element && element.nodeType === 1)) {\n return;\n }\n var _suppressMouseEvents = function(event) {\n if (!(event || (event = _window.event))) {\n return;\n }\n if (event._source !== \"js\") {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n delete event._source;\n };\n var _elementMouseOver = function(event) {\n if (!(event || (event = _window.event))) {\n return;\n }\n _suppressMouseEvents(event);\n ZeroClipboard.focus(element);\n };\n element.addEventListener(\"mouseover\", _elementMouseOver, false);\n element.addEventListener(\"mouseout\", _suppressMouseEvents, false);\n element.addEventListener(\"mouseenter\", _suppressMouseEvents, false);\n element.addEventListener(\"mouseleave\", _suppressMouseEvents, false);\n element.addEventListener(\"mousemove\", _suppressMouseEvents, false);\n _mouseHandlers[element.zcClippingId] = {\n mouseover: _elementMouseOver,\n mouseout: _suppressMouseEvents,\n mouseenter: _suppressMouseEvents,\n mouseleave: _suppressMouseEvents,\n mousemove: _suppressMouseEvents\n };\n };\n /**\n * Remove a `mouseover` handler function for a clipped element.\n *\n * @returns `undefined`\n * @private\n */\n var _removeMouseHandlers = function(element) {\n if (!(element && element.nodeType === 1)) {\n return;\n }\n var mouseHandlers = _mouseHandlers[element.zcClippingId];\n if (!(typeof mouseHandlers === \"object\" && mouseHandlers)) {\n return;\n }\n var key, val, mouseEvents = [ \"move\", \"leave\", \"enter\", \"out\", \"over\" ];\n for (var i = 0, len = mouseEvents.length; i < len; i++) {\n key = \"mouse\" + mouseEvents[i];\n val = mouseHandlers[key];\n if (typeof val === \"function\") {\n element.removeEventListener(key, val, false);\n }\n }\n delete _mouseHandlers[element.zcClippingId];\n };\n /**\n * Creates a new ZeroClipboard client instance.\n * Optionally, auto-`clip` an element or collection of elements.\n *\n * @constructor\n */\n ZeroClipboard._createClient = function() {\n _clientConstructor.apply(this, _args(arguments));\n };\n /**\n * Register an event listener to the client.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.on = function() {\n return _clientOn.apply(this, _args(arguments));\n };\n /**\n * Unregister an event handler from the client.\n * If no `listener` function/object is provided, it will unregister all handlers for the provided `eventType`.\n * If no `eventType` is provided, it will unregister all handlers for every event type.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.off = function() {\n return _clientOff.apply(this, _args(arguments));\n };\n /**\n * Retrieve event listeners for an `eventType` from the client.\n * If no `eventType` is provided, it will retrieve all listeners for every event type.\n *\n * @returns array of listeners for the `eventType`; if no `eventType`, then a map/hash object of listeners for all event types; or `null`\n */\n ZeroClipboard.prototype.handlers = function() {\n return _clientListeners.apply(this, _args(arguments));\n };\n /**\n * Event emission receiver from the Flash object for this client's registered JavaScript event listeners.\n *\n * @returns For the \"copy\" event, returns the Flash-friendly \"clipData\" object; otherwise `undefined`.\n */\n ZeroClipboard.prototype.emit = function() {\n return _clientEmit.apply(this, _args(arguments));\n };\n /**\n * Register clipboard actions for new element(s) to the client.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.clip = function() {\n return _clientClip.apply(this, _args(arguments));\n };\n /**\n * Unregister the clipboard actions of previously registered element(s) on the page.\n * If no elements are provided, ALL registered elements will be unregistered.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.unclip = function() {\n return _clientUnclip.apply(this, _args(arguments));\n };\n /**\n * Get all of the elements to which this client is clipped.\n *\n * @returns array of clipped elements\n */\n ZeroClipboard.prototype.elements = function() {\n return _clientElements.apply(this, _args(arguments));\n };\n /**\n * Self-destruct and clean up everything for a single client.\n * This will NOT destroy the embedded Flash object.\n *\n * @returns `undefined`\n */\n ZeroClipboard.prototype.destroy = function() {\n return _clientDestroy.apply(this, _args(arguments));\n };\n /**\n * Stores the pending plain text to inject into the clipboard.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.setText = function(text) {\n ZeroClipboard.setData(\"text/plain\", text);\n return this;\n };\n /**\n * Stores the pending HTML text to inject into the clipboard.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.setHtml = function(html) {\n ZeroClipboard.setData(\"text/html\", html);\n return this;\n };\n /**\n * Stores the pending rich text (RTF) to inject into the clipboard.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.setRichText = function(richText) {\n ZeroClipboard.setData(\"application/rtf\", richText);\n return this;\n };\n /**\n * Stores the pending data to inject into the clipboard.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.setData = function() {\n ZeroClipboard.setData.apply(this, _args(arguments));\n return this;\n };\n /**\n * Clears the pending data to inject into the clipboard.\n * If no `format` is provided, all pending data formats will be cleared.\n *\n * @returns `this`\n */\n ZeroClipboard.prototype.clearData = function() {\n ZeroClipboard.clearData.apply(this, _args(arguments));\n return this;\n };\n /**\n * Gets a copy of the pending data to inject into the clipboard.\n * If no `format` is provided, a copy of ALL pending data formats will be returned.\n *\n * @returns `String` or `Object`\n */\n ZeroClipboard.prototype.getData = function() {\n return ZeroClipboard.getData.apply(this, _args(arguments));\n };\n if (typeof define === \"function\" && define.amd) {\n define(function() {\n return ZeroClipboard;\n });\n } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n module.exports = ZeroClipboard;\n } else {\n window.ZeroClipboard = ZeroClipboard;\n }\n})(function() {\n return this || window;\n}());"]} \ No newline at end of file diff --git a/src/js/end.js b/src/js/end.js index aab38f6d..9ff87ef0 100644 --- a/src/js/end.js +++ b/src/js/end.js @@ -17,5 +17,5 @@ else { })((function() { /*jshint strict: false */ - return this; + return this || window; })());