From 59bfbce44674e52aefbe883233ffaea93d750a8f Mon Sep 17 00:00:00 2001 From: yujian <yujian@163.com> Date: 星期一, 25 十一月 2019 09:56:17 +0800 Subject: [PATCH] Merge branch 'div' of ssh://193.112.35.168:29418/fanli-server into div --- fanli/src/main/webapp/admin/new/js/third-party/zeroclipboard/ZeroClipboard.js | 2510 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 1,255 insertions(+), 1,255 deletions(-) diff --git a/fanli/src/main/webapp/admin/new/js/third-party/zeroclipboard/ZeroClipboard.js b/fanli/src/main/webapp/admin/new/js/third-party/zeroclipboard/ZeroClipboard.js index 1d5d868..15b2a94 100644 --- a/fanli/src/main/webapp/admin/new/js/third-party/zeroclipboard/ZeroClipboard.js +++ b/fanli/src/main/webapp/admin/new/js/third-party/zeroclipboard/ZeroClipboard.js @@ -1,1256 +1,1256 @@ -/*! -* ZeroClipboard -* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface. -* Copyright (c) 2014 Jon Rohan, James M. Greene -* Licensed MIT -* http://zeroclipboard.org/ -* v2.0.0-beta.5 -*/ -(function(window) { - "use strict"; - var _currentElement; - var _flashState = { - bridge: null, - version: "0.0.0", - pluginType: "unknown", - disabled: null, - outdated: null, - unavailable: null, - deactivated: null, - overdue: null, - ready: null - }; - var _clipData = {}; - var _clipDataFormatMap = null; - var _clientIdCounter = 0; - var _clientMeta = {}; - var _elementIdCounter = 0; - var _elementMeta = {}; - var _swfPath = function() { - var i, jsDir, tmpJsPath, jsPath, swfPath = "ZeroClipboard.swf"; - if (!(document.currentScript && (jsPath = document.currentScript.src))) { - var scripts = document.getElementsByTagName("script"); - if ("readyState" in scripts[0]) { - for (i = scripts.length; i--; ) { - if (scripts[i].readyState === "interactive" && (jsPath = scripts[i].src)) { - break; - } - } - } else if (document.readyState === "loading") { - jsPath = scripts[scripts.length - 1].src; - } else { - for (i = scripts.length; i--; ) { - tmpJsPath = scripts[i].src; - if (!tmpJsPath) { - jsDir = null; - break; - } - tmpJsPath = tmpJsPath.split("#")[0].split("?")[0]; - tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf("/") + 1); - if (jsDir == null) { - jsDir = tmpJsPath; - } else if (jsDir !== tmpJsPath) { - jsDir = null; - break; - } - } - if (jsDir !== null) { - jsPath = jsDir; - } - } - } - if (jsPath) { - jsPath = jsPath.split("#")[0].split("?")[0]; - swfPath = jsPath.slice(0, jsPath.lastIndexOf("/") + 1) + swfPath; - } - return swfPath; - }(); - var _camelizeCssPropName = function() { - var matcherRegex = /\-([a-z])/g, replacerFn = function(match, group) { - return group.toUpperCase(); - }; - return function(prop) { - return prop.replace(matcherRegex, replacerFn); - }; - }(); - var _getStyle = function(el, prop) { - var value, camelProp, tagName; - if (window.getComputedStyle) { - value = window.getComputedStyle(el, null).getPropertyValue(prop); - } else { - camelProp = _camelizeCssPropName(prop); - if (el.currentStyle) { - value = el.currentStyle[camelProp]; - } else { - value = el.style[camelProp]; - } - } - if (prop === "cursor") { - if (!value || value === "auto") { - tagName = el.tagName.toLowerCase(); - if (tagName === "a") { - return "pointer"; - } - } - } - return value; - }; - var _elementMouseOver = function(event) { - if (!event) { - event = window.event; - } - var target; - if (this !== window) { - target = this; - } else if (event.target) { - target = event.target; - } else if (event.srcElement) { - target = event.srcElement; - } - ZeroClipboard.activate(target); - }; - var _addEventHandler = function(element, method, func) { - if (!element || element.nodeType !== 1) { - return; - } - if (element.addEventListener) { - element.addEventListener(method, func, false); - } else if (element.attachEvent) { - element.attachEvent("on" + method, func); - } - }; - var _removeEventHandler = function(element, method, func) { - if (!element || element.nodeType !== 1) { - return; - } - if (element.removeEventListener) { - element.removeEventListener(method, func, false); - } else if (element.detachEvent) { - element.detachEvent("on" + method, func); - } - }; - var _addClass = function(element, value) { - if (!element || element.nodeType !== 1) { - return element; - } - if (element.classList) { - if (!element.classList.contains(value)) { - element.classList.add(value); - } - return element; - } - if (value && typeof value === "string") { - var classNames = (value || "").split(/\s+/); - if (element.nodeType === 1) { - if (!element.className) { - element.className = value; - } else { - var className = " " + element.className + " ", setClass = element.className; - for (var c = 0, cl = classNames.length; c < cl; c++) { - if (className.indexOf(" " + classNames[c] + " ") < 0) { - setClass += " " + classNames[c]; - } - } - element.className = setClass.replace(/^\s+|\s+$/g, ""); - } - } - } - return element; - }; - var _removeClass = function(element, value) { - if (!element || element.nodeType !== 1) { - return element; - } - if (element.classList) { - if (element.classList.contains(value)) { - element.classList.remove(value); - } - return element; - } - if (value && typeof value === "string" || value === undefined) { - var classNames = (value || "").split(/\s+/); - if (element.nodeType === 1 && element.className) { - if (value) { - var className = (" " + element.className + " ").replace(/[\n\t]/g, " "); - for (var c = 0, cl = classNames.length; c < cl; c++) { - className = className.replace(" " + classNames[c] + " ", " "); - } - element.className = className.replace(/^\s+|\s+$/g, ""); - } else { - element.className = ""; - } - } - } - return element; - }; - var _getZoomFactor = function() { - var rect, physicalWidth, logicalWidth, zoomFactor = 1; - if (typeof document.body.getBoundingClientRect === "function") { - rect = document.body.getBoundingClientRect(); - physicalWidth = rect.right - rect.left; - logicalWidth = document.body.offsetWidth; - zoomFactor = Math.round(physicalWidth / logicalWidth * 100) / 100; - } - return zoomFactor; - }; - var _getDOMObjectPosition = function(obj, defaultZIndex) { - var info = { - left: 0, - top: 0, - width: 0, - height: 0, - zIndex: _getSafeZIndex(defaultZIndex) - 1 - }; - if (obj.getBoundingClientRect) { - var rect = obj.getBoundingClientRect(); - var pageXOffset, pageYOffset, zoomFactor; - if ("pageXOffset" in window && "pageYOffset" in window) { - pageXOffset = window.pageXOffset; - pageYOffset = window.pageYOffset; - } else { - zoomFactor = _getZoomFactor(); - pageXOffset = Math.round(document.documentElement.scrollLeft / zoomFactor); - pageYOffset = Math.round(document.documentElement.scrollTop / zoomFactor); - } - var leftBorderWidth = document.documentElement.clientLeft || 0; - var topBorderWidth = document.documentElement.clientTop || 0; - info.left = rect.left + pageXOffset - leftBorderWidth; - info.top = rect.top + pageYOffset - topBorderWidth; - info.width = "width" in rect ? rect.width : rect.right - rect.left; - info.height = "height" in rect ? rect.height : rect.bottom - rect.top; - } - return info; - }; - var _cacheBust = function(path, options) { - var cacheBust = options == null || options && options.cacheBust === true; - if (cacheBust) { - return (path.indexOf("?") === -1 ? "?" : "&") + "noCache=" + new Date().getTime(); - } else { - return ""; - } - }; - var _vars = function(options) { - var i, len, domain, domains, str = "", trustedOriginsExpanded = []; - if (options.trustedDomains) { - if (typeof options.trustedDomains === "string") { - domains = [ options.trustedDomains ]; - } else if (typeof options.trustedDomains === "object" && "length" in options.trustedDomains) { - domains = options.trustedDomains; - } - } - if (domains && domains.length) { - for (i = 0, len = domains.length; i < len; i++) { - if (domains.hasOwnProperty(i) && domains[i] && typeof domains[i] === "string") { - domain = _extractDomain(domains[i]); - if (!domain) { - continue; - } - if (domain === "*") { - trustedOriginsExpanded = [ domain ]; - break; - } - trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, "//" + domain, window.location.protocol + "//" + domain ]); - } - } - } - if (trustedOriginsExpanded.length) { - str += "trustedOrigins=" + encodeURIComponent(trustedOriginsExpanded.join(",")); - } - if (options.forceEnhancedClipboard === true) { - str += (str ? "&" : "") + "forceEnhancedClipboard=true"; - } - return str; - }; - var _inArray = function(elem, array, fromIndex) { - if (typeof array.indexOf === "function") { - return array.indexOf(elem, fromIndex); - } - var i, len = array.length; - if (typeof fromIndex === "undefined") { - fromIndex = 0; - } else if (fromIndex < 0) { - fromIndex = len + fromIndex; - } - for (i = fromIndex; i < len; i++) { - if (array.hasOwnProperty(i) && array[i] === elem) { - return i; - } - } - return -1; - }; - var _prepClip = function(elements) { - if (typeof elements === "string") { - throw new TypeError("ZeroClipboard doesn't accept query strings."); - } - return typeof elements.length !== "number" ? [ elements ] : elements; - }; - var _dispatchCallback = function(func, context, args, async) { - if (async) { - window.setTimeout(function() { - func.apply(context, args); - }, 0); - } else { - func.apply(context, args); - } - }; - var _getSafeZIndex = function(val) { - var zIndex, tmp; - if (val) { - if (typeof val === "number" && val > 0) { - zIndex = val; - } else if (typeof val === "string" && (tmp = parseInt(val, 10)) && !isNaN(tmp) && tmp > 0) { - zIndex = tmp; - } - } - if (!zIndex) { - if (typeof _globalConfig.zIndex === "number" && _globalConfig.zIndex > 0) { - zIndex = _globalConfig.zIndex; - } else if (typeof _globalConfig.zIndex === "string" && (tmp = parseInt(_globalConfig.zIndex, 10)) && !isNaN(tmp) && tmp > 0) { - zIndex = tmp; - } - } - return zIndex || 0; - }; - var _extend = function() { - var i, len, arg, prop, src, copy, target = arguments[0] || {}; - for (i = 1, len = arguments.length; i < len; i++) { - if ((arg = arguments[i]) != null) { - for (prop in arg) { - if (arg.hasOwnProperty(prop)) { - src = target[prop]; - copy = arg[prop]; - if (target === copy) { - continue; - } - if (copy !== undefined) { - target[prop] = copy; - } - } - } - } - } - return target; - }; - var _extractDomain = function(originOrUrl) { - if (originOrUrl == null || originOrUrl === "") { - return null; - } - originOrUrl = originOrUrl.replace(/^\s+|\s+$/g, ""); - if (originOrUrl === "") { - return null; - } - var protocolIndex = originOrUrl.indexOf("//"); - originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2); - var pathIndex = originOrUrl.indexOf("/"); - originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex); - if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === ".swf") { - return null; - } - return originOrUrl || null; - }; - var _determineScriptAccess = function() { - var _extractAllDomains = function(origins, resultsArray) { - var i, len, tmp; - if (origins == null || resultsArray[0] === "*") { - return; - } - if (typeof origins === "string") { - origins = [ origins ]; - } - if (!(typeof origins === "object" && typeof origins.length === "number")) { - return; - } - for (i = 0, len = origins.length; i < len; i++) { - if (origins.hasOwnProperty(i) && (tmp = _extractDomain(origins[i]))) { - if (tmp === "*") { - resultsArray.length = 0; - resultsArray.push("*"); - break; - } - if (_inArray(tmp, resultsArray) === -1) { - resultsArray.push(tmp); - } - } - } - }; - return function(currentDomain, configOptions) { - var swfDomain = _extractDomain(configOptions.swfPath); - if (swfDomain === null) { - swfDomain = currentDomain; - } - var trustedDomains = []; - _extractAllDomains(configOptions.trustedOrigins, trustedDomains); - _extractAllDomains(configOptions.trustedDomains, trustedDomains); - var len = trustedDomains.length; - if (len > 0) { - if (len === 1 && trustedDomains[0] === "*") { - return "always"; - } - if (_inArray(currentDomain, trustedDomains) !== -1) { - if (len === 1 && currentDomain === swfDomain) { - return "sameDomain"; - } - return "always"; - } - } - return "never"; - }; - }(); - var _objectKeys = function(obj) { - if (obj == null) { - return []; - } - if (Object.keys) { - return Object.keys(obj); - } - var keys = []; - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - keys.push(prop); - } - } - return keys; - }; - var _deleteOwnProperties = function(obj) { - if (obj) { - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - delete obj[prop]; - } - } - } - return obj; - }; - var _safeActiveElement = function() { - try { - return document.activeElement; - } catch (err) {} - return null; - }; - var _pick = function(obj, keys) { - var newObj = {}; - for (var i = 0, len = keys.length; i < len; i++) { - if (keys[i] in obj) { - newObj[keys[i]] = obj[keys[i]]; - } - } - return newObj; - }; - var _omit = function(obj, keys) { - var newObj = {}; - for (var prop in obj) { - if (_inArray(prop, keys) === -1) { - newObj[prop] = obj[prop]; - } - } - return newObj; - }; - var _mapClipDataToFlash = function(clipData) { - var newClipData = {}, formatMap = {}; - if (!(typeof clipData === "object" && clipData)) { - return; - } - for (var dataFormat in clipData) { - if (dataFormat && clipData.hasOwnProperty(dataFormat) && typeof clipData[dataFormat] === "string" && clipData[dataFormat]) { - switch (dataFormat.toLowerCase()) { - case "text/plain": - case "text": - case "air:text": - case "flash:text": - newClipData.text = clipData[dataFormat]; - formatMap.text = dataFormat; - break; - - case "text/html": - case "html": - case "air:html": - case "flash:html": - newClipData.html = clipData[dataFormat]; - formatMap.html = dataFormat; - break; - - case "application/rtf": - case "text/rtf": - case "rtf": - case "richtext": - case "air:rtf": - case "flash:rtf": - newClipData.rtf = clipData[dataFormat]; - formatMap.rtf = dataFormat; - break; - - default: - break; - } - } - } - return { - data: newClipData, - formatMap: formatMap - }; - }; - var _mapClipResultsFromFlash = function(clipResults, formatMap) { - if (!(typeof clipResults === "object" && clipResults && typeof formatMap === "object" && formatMap)) { - return clipResults; - } - var newResults = {}; - for (var prop in clipResults) { - if (clipResults.hasOwnProperty(prop)) { - if (prop !== "success" && prop !== "data") { - newResults[prop] = clipResults[prop]; - continue; - } - newResults[prop] = {}; - var tmpHash = clipResults[prop]; - for (var dataFormat in tmpHash) { - if (dataFormat && tmpHash.hasOwnProperty(dataFormat) && formatMap.hasOwnProperty(dataFormat)) { - newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat]; - } - } - } - } - return newResults; - }; - var _args = function(arraySlice) { - return function(args) { - return arraySlice.call(args, 0); - }; - }(window.Array.prototype.slice); - var _detectFlashSupport = function() { - var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = ""; - function parseFlashVersion(desc) { - var matches = desc.match(/[\d]+/g); - matches.length = 3; - return matches.join("."); - } - function isPepperFlash(flashPlayerFileName) { - return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === "chrome.plugin"); - } - function inspectPlugin(plugin) { - if (plugin) { - hasFlash = true; - if (plugin.version) { - flashVersion = parseFlashVersion(plugin.version); - } - if (!flashVersion && plugin.description) { - flashVersion = parseFlashVersion(plugin.description); - } - if (plugin.filename) { - isPPAPI = isPepperFlash(plugin.filename); - } - } - } - if (navigator.plugins && navigator.plugins.length) { - plugin = navigator.plugins["Shockwave Flash"]; - inspectPlugin(plugin); - if (navigator.plugins["Shockwave Flash 2.0"]) { - hasFlash = true; - flashVersion = "2.0.0.11"; - } - } else if (navigator.mimeTypes && navigator.mimeTypes.length) { - mimeType = navigator.mimeTypes["application/x-shockwave-flash"]; - plugin = mimeType && mimeType.enabledPlugin; - inspectPlugin(plugin); - } else if (typeof ActiveXObject !== "undefined") { - isActiveX = true; - try { - ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); - hasFlash = true; - flashVersion = parseFlashVersion(ax.GetVariable("$version")); - } catch (e1) { - try { - ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); - hasFlash = true; - flashVersion = "6.0.21"; - } catch (e2) { - try { - ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); - hasFlash = true; - flashVersion = parseFlashVersion(ax.GetVariable("$version")); - } catch (e3) { - isActiveX = false; - } - } - } - } - _flashState.disabled = hasFlash !== true; - _flashState.outdated = flashVersion && parseFloat(flashVersion) < 11; - _flashState.version = flashVersion || "0.0.0"; - _flashState.pluginType = isPPAPI ? "pepper" : isActiveX ? "activex" : hasFlash ? "netscape" : "unknown"; - }; - _detectFlashSupport(); - var ZeroClipboard = function(elements) { - if (!(this instanceof ZeroClipboard)) { - return new ZeroClipboard(elements); - } - this.id = "" + _clientIdCounter++; - _clientMeta[this.id] = { - instance: this, - elements: [], - handlers: {} - }; - if (elements) { - this.clip(elements); - } - if (typeof _flashState.ready !== "boolean") { - _flashState.ready = false; - } - if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) { - var _client = this; - var maxWait = _globalConfig.flashLoadTimeout; - if (typeof maxWait === "number" && maxWait >= 0) { - setTimeout(function() { - if (typeof _flashState.deactivated !== "boolean") { - _flashState.deactivated = true; - } - if (_flashState.deactivated === true) { - ZeroClipboard.emit({ - type: "error", - name: "flash-deactivated", - client: _client - }); - } - }, maxWait); - } - _flashState.overdue = false; - _bridge(); - } - }; - ZeroClipboard.prototype.setText = function(text) { - ZeroClipboard.setData("text/plain", text); - return this; - }; - ZeroClipboard.prototype.setHtml = function(html) { - ZeroClipboard.setData("text/html", html); - return this; - }; - ZeroClipboard.prototype.setRichText = function(richText) { - ZeroClipboard.setData("application/rtf", richText); - return this; - }; - ZeroClipboard.prototype.setData = function() { - ZeroClipboard.setData.apply(ZeroClipboard, _args(arguments)); - return this; - }; - ZeroClipboard.prototype.clearData = function() { - ZeroClipboard.clearData.apply(ZeroClipboard, _args(arguments)); - return this; - }; - ZeroClipboard.prototype.setSize = function(width, height) { - _setSize(width, height); - return this; - }; - var _setHandCursor = function(enabled) { - if (_flashState.ready === true && _flashState.bridge && typeof _flashState.bridge.setHandCursor === "function") { - _flashState.bridge.setHandCursor(enabled); - } else { - _flashState.ready = false; - } - }; - ZeroClipboard.prototype.destroy = function() { - this.unclip(); - this.off(); - delete _clientMeta[this.id]; - }; - var _getAllClients = function() { - var i, len, client, clients = [], clientIds = _objectKeys(_clientMeta); - for (i = 0, len = clientIds.length; i < len; i++) { - client = _clientMeta[clientIds[i]].instance; - if (client && client instanceof ZeroClipboard) { - clients.push(client); - } - } - return clients; - }; - ZeroClipboard.version = "2.0.0-beta.5"; - var _globalConfig = { - swfPath: _swfPath, - trustedDomains: window.location.host ? [ window.location.host ] : [], - cacheBust: true, - forceHandCursor: false, - forceEnhancedClipboard: false, - zIndex: 999999999, - debug: false, - title: null, - autoActivate: true, - flashLoadTimeout: 3e4 - }; - ZeroClipboard.isFlashUnusable = function() { - return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated); - }; - ZeroClipboard.config = function(options) { - if (typeof options === "object" && options !== null) { - _extend(_globalConfig, options); - } - if (typeof options === "string" && options) { - if (_globalConfig.hasOwnProperty(options)) { - return _globalConfig[options]; - } - return; - } - var copy = {}; - for (var prop in _globalConfig) { - if (_globalConfig.hasOwnProperty(prop)) { - if (typeof _globalConfig[prop] === "object" && _globalConfig[prop] !== null) { - if ("length" in _globalConfig[prop]) { - copy[prop] = _globalConfig[prop].slice(0); - } else { - copy[prop] = _extend({}, _globalConfig[prop]); - } - } else { - copy[prop] = _globalConfig[prop]; - } - } - } - return copy; - }; - ZeroClipboard.destroy = function() { - ZeroClipboard.deactivate(); - for (var clientId in _clientMeta) { - if (_clientMeta.hasOwnProperty(clientId) && _clientMeta[clientId]) { - var client = _clientMeta[clientId].instance; - if (client && typeof client.destroy === "function") { - client.destroy(); - } - } - } - var flashBridge = _flashState.bridge; - if (flashBridge) { - var htmlBridge = _getHtmlBridge(flashBridge); - if (htmlBridge) { - if (_flashState.pluginType === "activex" && "readyState" in flashBridge) { - flashBridge.style.display = "none"; - (function removeSwfFromIE() { - if (flashBridge.readyState === 4) { - for (var prop in flashBridge) { - if (typeof flashBridge[prop] === "function") { - flashBridge[prop] = null; - } - } - flashBridge.parentNode.removeChild(flashBridge); - if (htmlBridge.parentNode) { - htmlBridge.parentNode.removeChild(htmlBridge); - } - } else { - setTimeout(removeSwfFromIE, 10); - } - })(); - } else { - flashBridge.parentNode.removeChild(flashBridge); - if (htmlBridge.parentNode) { - htmlBridge.parentNode.removeChild(htmlBridge); - } - } - } - _flashState.ready = null; - _flashState.bridge = null; - _flashState.deactivated = null; - } - ZeroClipboard.clearData(); - }; - ZeroClipboard.activate = function(element) { - if (_currentElement) { - _removeClass(_currentElement, _globalConfig.hoverClass); - _removeClass(_currentElement, _globalConfig.activeClass); - } - _currentElement = element; - _addClass(element, _globalConfig.hoverClass); - _reposition(); - var newTitle = _globalConfig.title || element.getAttribute("title"); - if (newTitle) { - var htmlBridge = _getHtmlBridge(_flashState.bridge); - if (htmlBridge) { - htmlBridge.setAttribute("title", newTitle); - } - } - var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, "cursor") === "pointer"; - _setHandCursor(useHandCursor); - }; - ZeroClipboard.deactivate = function() { - var htmlBridge = _getHtmlBridge(_flashState.bridge); - if (htmlBridge) { - htmlBridge.removeAttribute("title"); - htmlBridge.style.left = "0px"; - htmlBridge.style.top = "-9999px"; - _setSize(1, 1); - } - if (_currentElement) { - _removeClass(_currentElement, _globalConfig.hoverClass); - _removeClass(_currentElement, _globalConfig.activeClass); - _currentElement = null; - } - }; - ZeroClipboard.state = function() { - return { - browser: _pick(window.navigator, [ "userAgent", "platform", "appName" ]), - flash: _omit(_flashState, [ "bridge" ]), - zeroclipboard: { - version: ZeroClipboard.version, - config: ZeroClipboard.config() - } - }; - }; - ZeroClipboard.setData = function(format, data) { - var dataObj; - if (typeof format === "object" && format && typeof data === "undefined") { - dataObj = format; - ZeroClipboard.clearData(); - } else if (typeof format === "string" && format) { - dataObj = {}; - dataObj[format] = data; - } else { - return; - } - for (var dataFormat in dataObj) { - if (dataFormat && dataObj.hasOwnProperty(dataFormat) && typeof dataObj[dataFormat] === "string" && dataObj[dataFormat]) { - _clipData[dataFormat] = dataObj[dataFormat]; - } - } - }; - ZeroClipboard.clearData = function(format) { - if (typeof format === "undefined") { - _deleteOwnProperties(_clipData); - _clipDataFormatMap = null; - } else if (typeof format === "string" && _clipData.hasOwnProperty(format)) { - delete _clipData[format]; - } - }; - var _bridge = function() { - var flashBridge, len; - var container = document.getElementById("global-zeroclipboard-html-bridge"); - if (!container) { - var allowScriptAccess = _determineScriptAccess(window.location.host, _globalConfig); - var allowNetworking = allowScriptAccess === "never" ? "none" : "all"; - var flashvars = _vars(_globalConfig); - var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig); - container = _createHtmlBridge(); - var divToBeReplaced = document.createElement("div"); - container.appendChild(divToBeReplaced); - document.body.appendChild(container); - var tmpDiv = document.createElement("div"); - var oldIE = _flashState.pluginType === "activex"; - tmpDiv.innerHTML = '<object id="global-zeroclipboard-flash-bridge" name="global-zeroclipboard-flash-bridge" ' + 'width="100%" height="100%" ' + (oldIE ? 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"' : 'type="application/x-shockwave-flash" data="' + swfUrl + '"') + ">" + (oldIE ? '<param name="movie" value="' + swfUrl + '"/>' : "") + '<param name="allowScriptAccess" value="' + allowScriptAccess + '"/>' + '<param name="allowNetworking" value="' + allowNetworking + '"/>' + '<param name="menu" value="false"/>' + '<param name="wmode" value="transparent"/>' + '<param name="flashvars" value="' + flashvars + '"/>' + "</object>"; - flashBridge = tmpDiv.firstChild; - tmpDiv = null; - flashBridge.ZeroClipboard = ZeroClipboard; - container.replaceChild(flashBridge, divToBeReplaced); - } - if (!flashBridge) { - flashBridge = document["global-zeroclipboard-flash-bridge"]; - if (flashBridge && (len = flashBridge.length)) { - flashBridge = flashBridge[len - 1]; - } - if (!flashBridge) { - flashBridge = container.firstChild; - } - } - _flashState.bridge = flashBridge || null; - }; - var _createHtmlBridge = function() { - var container = document.createElement("div"); - container.id = "global-zeroclipboard-html-bridge"; - container.className = "global-zeroclipboard-container"; - container.style.position = "absolute"; - container.style.left = "0px"; - container.style.top = "-9999px"; - container.style.width = "1px"; - container.style.height = "1px"; - container.style.zIndex = "" + _getSafeZIndex(_globalConfig.zIndex); - return container; - }; - var _getHtmlBridge = function(flashBridge) { - var htmlBridge = flashBridge && flashBridge.parentNode; - while (htmlBridge && htmlBridge.nodeName === "OBJECT" && htmlBridge.parentNode) { - htmlBridge = htmlBridge.parentNode; - } - return htmlBridge || null; - }; - var _reposition = function() { - if (_currentElement) { - var pos = _getDOMObjectPosition(_currentElement, _globalConfig.zIndex); - var htmlBridge = _getHtmlBridge(_flashState.bridge); - if (htmlBridge) { - htmlBridge.style.top = pos.top + "px"; - htmlBridge.style.left = pos.left + "px"; - htmlBridge.style.width = pos.width + "px"; - htmlBridge.style.height = pos.height + "px"; - htmlBridge.style.zIndex = pos.zIndex + 1; - } - _setSize(pos.width, pos.height); - } - }; - var _setSize = function(width, height) { - var htmlBridge = _getHtmlBridge(_flashState.bridge); - if (htmlBridge) { - htmlBridge.style.width = width + "px"; - htmlBridge.style.height = height + "px"; - } - }; - ZeroClipboard.emit = function(event) { - var eventType, eventObj, performCallbackAsync, clients, i, len, eventCopy, returnVal, tmp; - if (typeof event === "string" && event) { - eventType = event; - } - if (typeof event === "object" && event && typeof event.type === "string" && event.type) { - eventType = event.type; - eventObj = event; - } - if (!eventType) { - return; - } - event = _createEvent(eventType, eventObj); - _preprocessEvent(event); - if (event.type === "ready" && _flashState.overdue === true) { - return ZeroClipboard.emit({ - type: "error", - name: "flash-overdue" - }); - } - performCallbackAsync = !/^(before)?copy$/.test(event.type); - if (event.client) { - _dispatchClientCallbacks.call(event.client, event, performCallbackAsync); - } else { - clients = event.target && event.target !== window && _globalConfig.autoActivate === true ? _getAllClientsClippedToElement(event.target) : _getAllClients(); - for (i = 0, len = clients.length; i < len; i++) { - eventCopy = _extend({}, event, { - client: clients[i] - }); - _dispatchClientCallbacks.call(clients[i], eventCopy, performCallbackAsync); - } - } - if (event.type === "copy") { - tmp = _mapClipDataToFlash(_clipData); - returnVal = tmp.data; - _clipDataFormatMap = tmp.formatMap; - } - return returnVal; - }; - var _dispatchClientCallbacks = function(event, async) { - var handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type]; - if (handlers && handlers.length) { - var i, len, func, context, originalContext = this; - for (i = 0, len = handlers.length; i < len; i++) { - func = handlers[i]; - context = originalContext; - if (typeof func === "string" && typeof window[func] === "function") { - func = window[func]; - } - if (typeof func === "object" && func && typeof func.handleEvent === "function") { - context = func; - func = func.handleEvent; - } - if (typeof func === "function") { - _dispatchCallback(func, context, [ event ], async); - } - } - } - return this; - }; - var _eventMessages = { - 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" - } - }; - var _createEvent = function(eventType, event) { - if (!(eventType || event && event.type)) { - return; - } - event = event || {}; - eventType = (eventType || event.type).toLowerCase(); - _extend(event, { - type: eventType, - target: event.target || _currentElement || null, - relatedTarget: event.relatedTarget || null, - currentTarget: _flashState && _flashState.bridge || null - }); - var msg = _eventMessages[event.type]; - if (event.type === "error" && event.name && msg) { - msg = msg[event.name]; - } - if (msg) { - event.message = msg; - } - if (event.type === "ready") { - _extend(event, { - target: null, - version: _flashState.version - }); - } - if (event.type === "error") { - event.target = null; - if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) { - _extend(event, { - version: _flashState.version, - minimumVersion: "11.0.0" - }); - } - } - if (event.type === "copy") { - event.clipboardData = { - setData: ZeroClipboard.setData, - clearData: ZeroClipboard.clearData - }; - } - if (event.type === "aftercopy") { - event = _mapClipResultsFromFlash(event, _clipDataFormatMap); - } - if (event.target && !event.relatedTarget) { - event.relatedTarget = _getRelatedTarget(event.target); - } - return event; - }; - var _getRelatedTarget = function(targetEl) { - var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute("data-clipboard-target"); - return relatedTargetId ? document.getElementById(relatedTargetId) : null; - }; - var _preprocessEvent = function(event) { - var element = event.target || _currentElement; - switch (event.type) { - case "error": - if (_inArray(event.name, [ "flash-disabled", "flash-outdated", "flash-deactivated", "flash-overdue" ])) { - _extend(_flashState, { - disabled: event.name === "flash-disabled", - outdated: event.name === "flash-outdated", - unavailable: event.name === "flash-unavailable", - deactivated: event.name === "flash-deactivated", - overdue: event.name === "flash-overdue", - ready: false - }); - } - break; - - case "ready": - var wasDeactivated = _flashState.deactivated === true; - _extend(_flashState, { - disabled: false, - outdated: false, - unavailable: false, - deactivated: false, - overdue: wasDeactivated, - ready: !wasDeactivated - }); - break; - - case "copy": - var textContent, htmlContent, targetEl = event.relatedTarget; - if (!(_clipData["text/html"] || _clipData["text/plain"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) { - event.clipboardData.clearData(); - event.clipboardData.setData("text/plain", textContent); - if (htmlContent !== textContent) { - event.clipboardData.setData("text/html", htmlContent); - } - } else if (!_clipData["text/plain"] && event.target && (textContent = event.target.getAttribute("data-clipboard-text"))) { - event.clipboardData.clearData(); - event.clipboardData.setData("text/plain", textContent); - } - break; - - case "aftercopy": - ZeroClipboard.clearData(); - if (element && element !== _safeActiveElement() && element.focus) { - element.focus(); - } - break; - - case "mouseover": - _addClass(element, _globalConfig.hoverClass); - break; - - case "mouseout": - if (_globalConfig.autoActivate === true) { - ZeroClipboard.deactivate(); - } - break; - - case "mousedown": - _addClass(element, _globalConfig.activeClass); - break; - - case "mouseup": - _removeClass(element, _globalConfig.activeClass); - break; - } - }; - ZeroClipboard.prototype.on = function(eventName, func) { - var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers; - if (typeof eventName === "string" && eventName) { - events = eventName.toLowerCase().split(/\s+/); - } else if (typeof eventName === "object" && eventName && typeof func === "undefined") { - for (i in eventName) { - if (eventName.hasOwnProperty(i) && typeof i === "string" && i && typeof eventName[i] === "function") { - this.on(i, eventName[i]); - } - } - } - if (events && events.length) { - for (i = 0, len = events.length; i < len; i++) { - eventName = events[i].replace(/^on/, ""); - added[eventName] = true; - if (!handlers[eventName]) { - handlers[eventName] = []; - } - handlers[eventName].push(func); - } - if (added.ready && _flashState.ready) { - ZeroClipboard.emit({ - type: "ready", - client: this - }); - } - if (added.error) { - var errorTypes = [ "disabled", "outdated", "unavailable", "deactivated", "overdue" ]; - for (i = 0, len = errorTypes.length; i < len; i++) { - if (_flashState[errorTypes[i]]) { - ZeroClipboard.emit({ - type: "error", - name: "flash-" + errorTypes[i], - client: this - }); - break; - } - } - } - } - return this; - }; - ZeroClipboard.prototype.off = function(eventName, func) { - var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers; - if (arguments.length === 0) { - events = _objectKeys(handlers); - } else if (typeof eventName === "string" && eventName) { - events = eventName.split(/\s+/); - } else if (typeof eventName === "object" && eventName && typeof func === "undefined") { - for (i in eventName) { - if (eventName.hasOwnProperty(i) && typeof i === "string" && i && typeof eventName[i] === "function") { - this.off(i, eventName[i]); - } - } - } - if (events && events.length) { - for (i = 0, len = events.length; i < len; i++) { - eventName = events[i].toLowerCase().replace(/^on/, ""); - perEventHandlers = handlers[eventName]; - if (perEventHandlers && perEventHandlers.length) { - if (func) { - foundIndex = _inArray(func, perEventHandlers); - while (foundIndex !== -1) { - perEventHandlers.splice(foundIndex, 1); - foundIndex = _inArray(func, perEventHandlers, foundIndex); - } - } else { - handlers[eventName].length = 0; - } - } - } - } - return this; - }; - ZeroClipboard.prototype.handlers = function(eventName) { - var prop, copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers; - if (handlers) { - if (typeof eventName === "string" && eventName) { - return handlers[eventName] ? handlers[eventName].slice(0) : null; - } - copy = {}; - for (prop in handlers) { - if (handlers.hasOwnProperty(prop) && handlers[prop]) { - copy[prop] = handlers[prop].slice(0); - } - } - } - return copy; - }; - ZeroClipboard.prototype.clip = function(elements) { - elements = _prepClip(elements); - for (var i = 0; i < elements.length; i++) { - if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) { - if (!elements[i].zcClippingId) { - elements[i].zcClippingId = "zcClippingId_" + _elementIdCounter++; - _elementMeta[elements[i].zcClippingId] = [ this.id ]; - if (_globalConfig.autoActivate === true) { - _addEventHandler(elements[i], "mouseover", _elementMouseOver); - } - } else if (_inArray(this.id, _elementMeta[elements[i].zcClippingId]) === -1) { - _elementMeta[elements[i].zcClippingId].push(this.id); - } - var clippedElements = _clientMeta[this.id].elements; - if (_inArray(elements[i], clippedElements) === -1) { - clippedElements.push(elements[i]); - } - } - } - return this; - }; - ZeroClipboard.prototype.unclip = function(elements) { - var meta = _clientMeta[this.id]; - if (!meta) { - return this; - } - var clippedElements = meta.elements; - var arrayIndex; - if (typeof elements === "undefined") { - elements = clippedElements.slice(0); - } else { - elements = _prepClip(elements); - } - for (var i = elements.length; i--; ) { - if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) { - arrayIndex = 0; - while ((arrayIndex = _inArray(elements[i], clippedElements, arrayIndex)) !== -1) { - clippedElements.splice(arrayIndex, 1); - } - var clientIds = _elementMeta[elements[i].zcClippingId]; - if (clientIds) { - arrayIndex = 0; - while ((arrayIndex = _inArray(this.id, clientIds, arrayIndex)) !== -1) { - clientIds.splice(arrayIndex, 1); - } - if (clientIds.length === 0) { - if (_globalConfig.autoActivate === true) { - _removeEventHandler(elements[i], "mouseover", _elementMouseOver); - } - delete elements[i].zcClippingId; - } - } - } - } - return this; - }; - ZeroClipboard.prototype.elements = function() { - var meta = _clientMeta[this.id]; - return meta && meta.elements ? meta.elements.slice(0) : []; - }; - var _getAllClientsClippedToElement = function(element) { - var elementMetaId, clientIds, i, len, client, clients = []; - if (element && element.nodeType === 1 && (elementMetaId = element.zcClippingId) && _elementMeta.hasOwnProperty(elementMetaId)) { - clientIds = _elementMeta[elementMetaId]; - if (clientIds && clientIds.length) { - for (i = 0, len = clientIds.length; i < len; i++) { - client = _clientMeta[clientIds[i]].instance; - if (client && client instanceof ZeroClipboard) { - clients.push(client); - } - } - } - } - return clients; - }; - _globalConfig.hoverClass = "zeroclipboard-is-hover"; - _globalConfig.activeClass = "zeroclipboard-is-active"; - if (typeof define === "function" && define.amd) { - define(function() { - return ZeroClipboard; - }); - } else if (typeof module === "object" && module && typeof module.exports === "object" && module.exports) { - module.exports = ZeroClipboard; - } else { - window.ZeroClipboard = ZeroClipboard; - } -})(function() { - return this; +/*! +* ZeroClipboard +* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface. +* Copyright (c) 2014 Jon Rohan, James M. Greene +* Licensed MIT +* http://zeroclipboard.org/ +* v2.0.0-beta.5 +*/ +(function(window) { + "use strict"; + var _currentElement; + var _flashState = { + bridge: null, + version: "0.0.0", + pluginType: "unknown", + disabled: null, + outdated: null, + unavailable: null, + deactivated: null, + overdue: null, + ready: null + }; + var _clipData = {}; + var _clipDataFormatMap = null; + var _clientIdCounter = 0; + var _clientMeta = {}; + var _elementIdCounter = 0; + var _elementMeta = {}; + var _swfPath = function() { + var i, jsDir, tmpJsPath, jsPath, swfPath = "ZeroClipboard.swf"; + if (!(document.currentScript && (jsPath = document.currentScript.src))) { + var scripts = document.getElementsByTagName("script"); + if ("readyState" in scripts[0]) { + for (i = scripts.length; i--; ) { + if (scripts[i].readyState === "interactive" && (jsPath = scripts[i].src)) { + break; + } + } + } else if (document.readyState === "loading") { + jsPath = scripts[scripts.length - 1].src; + } else { + for (i = scripts.length; i--; ) { + tmpJsPath = scripts[i].src; + if (!tmpJsPath) { + jsDir = null; + break; + } + tmpJsPath = tmpJsPath.split("#")[0].split("?")[0]; + tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf("/") + 1); + if (jsDir == null) { + jsDir = tmpJsPath; + } else if (jsDir !== tmpJsPath) { + jsDir = null; + break; + } + } + if (jsDir !== null) { + jsPath = jsDir; + } + } + } + if (jsPath) { + jsPath = jsPath.split("#")[0].split("?")[0]; + swfPath = jsPath.slice(0, jsPath.lastIndexOf("/") + 1) + swfPath; + } + return swfPath; + }(); + var _camelizeCssPropName = function() { + var matcherRegex = /\-([a-z])/g, replacerFn = function(match, group) { + return group.toUpperCase(); + }; + return function(prop) { + return prop.replace(matcherRegex, replacerFn); + }; + }(); + var _getStyle = function(el, prop) { + var value, camelProp, tagName; + if (window.getComputedStyle) { + value = window.getComputedStyle(el, null).getPropertyValue(prop); + } else { + camelProp = _camelizeCssPropName(prop); + if (el.currentStyle) { + value = el.currentStyle[camelProp]; + } else { + value = el.style[camelProp]; + } + } + if (prop === "cursor") { + if (!value || value === "auto") { + tagName = el.tagName.toLowerCase(); + if (tagName === "a") { + return "pointer"; + } + } + } + return value; + }; + var _elementMouseOver = function(event) { + if (!event) { + event = window.event; + } + var target; + if (this !== window) { + target = this; + } else if (event.target) { + target = event.target; + } else if (event.srcElement) { + target = event.srcElement; + } + ZeroClipboard.activate(target); + }; + var _addEventHandler = function(element, method, func) { + if (!element || element.nodeType !== 1) { + return; + } + if (element.addEventListener) { + element.addEventListener(method, func, false); + } else if (element.attachEvent) { + element.attachEvent("on" + method, func); + } + }; + var _removeEventHandler = function(element, method, func) { + if (!element || element.nodeType !== 1) { + return; + } + if (element.removeEventListener) { + element.removeEventListener(method, func, false); + } else if (element.detachEvent) { + element.detachEvent("on" + method, func); + } + }; + var _addClass = function(element, value) { + if (!element || element.nodeType !== 1) { + return element; + } + if (element.classList) { + if (!element.classList.contains(value)) { + element.classList.add(value); + } + return element; + } + if (value && typeof value === "string") { + var classNames = (value || "").split(/\s+/); + if (element.nodeType === 1) { + if (!element.className) { + element.className = value; + } else { + var className = " " + element.className + " ", setClass = element.className; + for (var c = 0, cl = classNames.length; c < cl; c++) { + if (className.indexOf(" " + classNames[c] + " ") < 0) { + setClass += " " + classNames[c]; + } + } + element.className = setClass.replace(/^\s+|\s+$/g, ""); + } + } + } + return element; + }; + var _removeClass = function(element, value) { + if (!element || element.nodeType !== 1) { + return element; + } + if (element.classList) { + if (element.classList.contains(value)) { + element.classList.remove(value); + } + return element; + } + if (value && typeof value === "string" || value === undefined) { + var classNames = (value || "").split(/\s+/); + if (element.nodeType === 1 && element.className) { + if (value) { + var className = (" " + element.className + " ").replace(/[\n\t]/g, " "); + for (var c = 0, cl = classNames.length; c < cl; c++) { + className = className.replace(" " + classNames[c] + " ", " "); + } + element.className = className.replace(/^\s+|\s+$/g, ""); + } else { + element.className = ""; + } + } + } + return element; + }; + var _getZoomFactor = function() { + var rect, physicalWidth, logicalWidth, zoomFactor = 1; + if (typeof document.body.getBoundingClientRect === "function") { + rect = document.body.getBoundingClientRect(); + physicalWidth = rect.right - rect.left; + logicalWidth = document.body.offsetWidth; + zoomFactor = Math.round(physicalWidth / logicalWidth * 100) / 100; + } + return zoomFactor; + }; + var _getDOMObjectPosition = function(obj, defaultZIndex) { + var info = { + left: 0, + top: 0, + width: 0, + height: 0, + zIndex: _getSafeZIndex(defaultZIndex) - 1 + }; + if (obj.getBoundingClientRect) { + var rect = obj.getBoundingClientRect(); + var pageXOffset, pageYOffset, zoomFactor; + if ("pageXOffset" in window && "pageYOffset" in window) { + pageXOffset = window.pageXOffset; + pageYOffset = window.pageYOffset; + } else { + zoomFactor = _getZoomFactor(); + pageXOffset = Math.round(document.documentElement.scrollLeft / zoomFactor); + pageYOffset = Math.round(document.documentElement.scrollTop / zoomFactor); + } + var leftBorderWidth = document.documentElement.clientLeft || 0; + var topBorderWidth = document.documentElement.clientTop || 0; + info.left = rect.left + pageXOffset - leftBorderWidth; + info.top = rect.top + pageYOffset - topBorderWidth; + info.width = "width" in rect ? rect.width : rect.right - rect.left; + info.height = "height" in rect ? rect.height : rect.bottom - rect.top; + } + return info; + }; + var _cacheBust = function(path, options) { + var cacheBust = options == null || options && options.cacheBust === true; + if (cacheBust) { + return (path.indexOf("?") === -1 ? "?" : "&") + "noCache=" + new Date().getTime(); + } else { + return ""; + } + }; + var _vars = function(options) { + var i, len, domain, domains, str = "", trustedOriginsExpanded = []; + if (options.trustedDomains) { + if (typeof options.trustedDomains === "string") { + domains = [ options.trustedDomains ]; + } else if (typeof options.trustedDomains === "object" && "length" in options.trustedDomains) { + domains = options.trustedDomains; + } + } + if (domains && domains.length) { + for (i = 0, len = domains.length; i < len; i++) { + if (domains.hasOwnProperty(i) && domains[i] && typeof domains[i] === "string") { + domain = _extractDomain(domains[i]); + if (!domain) { + continue; + } + if (domain === "*") { + trustedOriginsExpanded = [ domain ]; + break; + } + trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, "//" + domain, window.location.protocol + "//" + domain ]); + } + } + } + if (trustedOriginsExpanded.length) { + str += "trustedOrigins=" + encodeURIComponent(trustedOriginsExpanded.join(",")); + } + if (options.forceEnhancedClipboard === true) { + str += (str ? "&" : "") + "forceEnhancedClipboard=true"; + } + return str; + }; + var _inArray = function(elem, array, fromIndex) { + if (typeof array.indexOf === "function") { + return array.indexOf(elem, fromIndex); + } + var i, len = array.length; + if (typeof fromIndex === "undefined") { + fromIndex = 0; + } else if (fromIndex < 0) { + fromIndex = len + fromIndex; + } + for (i = fromIndex; i < len; i++) { + if (array.hasOwnProperty(i) && array[i] === elem) { + return i; + } + } + return -1; + }; + var _prepClip = function(elements) { + if (typeof elements === "string") { + throw new TypeError("ZeroClipboard doesn't accept query strings."); + } + return typeof elements.length !== "number" ? [ elements ] : elements; + }; + var _dispatchCallback = function(func, context, args, async) { + if (async) { + window.setTimeout(function() { + func.apply(context, args); + }, 0); + } else { + func.apply(context, args); + } + }; + var _getSafeZIndex = function(val) { + var zIndex, tmp; + if (val) { + if (typeof val === "number" && val > 0) { + zIndex = val; + } else if (typeof val === "string" && (tmp = parseInt(val, 10)) && !isNaN(tmp) && tmp > 0) { + zIndex = tmp; + } + } + if (!zIndex) { + if (typeof _globalConfig.zIndex === "number" && _globalConfig.zIndex > 0) { + zIndex = _globalConfig.zIndex; + } else if (typeof _globalConfig.zIndex === "string" && (tmp = parseInt(_globalConfig.zIndex, 10)) && !isNaN(tmp) && tmp > 0) { + zIndex = tmp; + } + } + return zIndex || 0; + }; + var _extend = function() { + var i, len, arg, prop, src, copy, target = arguments[0] || {}; + for (i = 1, len = arguments.length; i < len; i++) { + if ((arg = arguments[i]) != null) { + for (prop in arg) { + if (arg.hasOwnProperty(prop)) { + src = target[prop]; + copy = arg[prop]; + if (target === copy) { + continue; + } + if (copy !== undefined) { + target[prop] = copy; + } + } + } + } + } + return target; + }; + var _extractDomain = function(originOrUrl) { + if (originOrUrl == null || originOrUrl === "") { + return null; + } + originOrUrl = originOrUrl.replace(/^\s+|\s+$/g, ""); + if (originOrUrl === "") { + return null; + } + var protocolIndex = originOrUrl.indexOf("//"); + originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2); + var pathIndex = originOrUrl.indexOf("/"); + originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex); + if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === ".swf") { + return null; + } + return originOrUrl || null; + }; + var _determineScriptAccess = function() { + var _extractAllDomains = function(origins, resultsArray) { + var i, len, tmp; + if (origins == null || resultsArray[0] === "*") { + return; + } + if (typeof origins === "string") { + origins = [ origins ]; + } + if (!(typeof origins === "object" && typeof origins.length === "number")) { + return; + } + for (i = 0, len = origins.length; i < len; i++) { + if (origins.hasOwnProperty(i) && (tmp = _extractDomain(origins[i]))) { + if (tmp === "*") { + resultsArray.length = 0; + resultsArray.push("*"); + break; + } + if (_inArray(tmp, resultsArray) === -1) { + resultsArray.push(tmp); + } + } + } + }; + return function(currentDomain, configOptions) { + var swfDomain = _extractDomain(configOptions.swfPath); + if (swfDomain === null) { + swfDomain = currentDomain; + } + var trustedDomains = []; + _extractAllDomains(configOptions.trustedOrigins, trustedDomains); + _extractAllDomains(configOptions.trustedDomains, trustedDomains); + var len = trustedDomains.length; + if (len > 0) { + if (len === 1 && trustedDomains[0] === "*") { + return "always"; + } + if (_inArray(currentDomain, trustedDomains) !== -1) { + if (len === 1 && currentDomain === swfDomain) { + return "sameDomain"; + } + return "always"; + } + } + return "never"; + }; + }(); + var _objectKeys = function(obj) { + if (obj == null) { + return []; + } + if (Object.keys) { + return Object.keys(obj); + } + var keys = []; + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + keys.push(prop); + } + } + return keys; + }; + var _deleteOwnProperties = function(obj) { + if (obj) { + for (var prop in obj) { + if (obj.hasOwnProperty(prop)) { + delete obj[prop]; + } + } + } + return obj; + }; + var _safeActiveElement = function() { + try { + return document.activeElement; + } catch (err) {} + return null; + }; + var _pick = function(obj, keys) { + var newObj = {}; + for (var i = 0, len = keys.length; i < len; i++) { + if (keys[i] in obj) { + newObj[keys[i]] = obj[keys[i]]; + } + } + return newObj; + }; + var _omit = function(obj, keys) { + var newObj = {}; + for (var prop in obj) { + if (_inArray(prop, keys) === -1) { + newObj[prop] = obj[prop]; + } + } + return newObj; + }; + var _mapClipDataToFlash = function(clipData) { + var newClipData = {}, formatMap = {}; + if (!(typeof clipData === "object" && clipData)) { + return; + } + for (var dataFormat in clipData) { + if (dataFormat && clipData.hasOwnProperty(dataFormat) && typeof clipData[dataFormat] === "string" && clipData[dataFormat]) { + switch (dataFormat.toLowerCase()) { + case "text/plain": + case "text": + case "air:text": + case "flash:text": + newClipData.text = clipData[dataFormat]; + formatMap.text = dataFormat; + break; + + case "text/html": + case "html": + case "air:html": + case "flash:html": + newClipData.html = clipData[dataFormat]; + formatMap.html = dataFormat; + break; + + case "application/rtf": + case "text/rtf": + case "rtf": + case "richtext": + case "air:rtf": + case "flash:rtf": + newClipData.rtf = clipData[dataFormat]; + formatMap.rtf = dataFormat; + break; + + default: + break; + } + } + } + return { + data: newClipData, + formatMap: formatMap + }; + }; + var _mapClipResultsFromFlash = function(clipResults, formatMap) { + if (!(typeof clipResults === "object" && clipResults && typeof formatMap === "object" && formatMap)) { + return clipResults; + } + var newResults = {}; + for (var prop in clipResults) { + if (clipResults.hasOwnProperty(prop)) { + if (prop !== "success" && prop !== "data") { + newResults[prop] = clipResults[prop]; + continue; + } + newResults[prop] = {}; + var tmpHash = clipResults[prop]; + for (var dataFormat in tmpHash) { + if (dataFormat && tmpHash.hasOwnProperty(dataFormat) && formatMap.hasOwnProperty(dataFormat)) { + newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat]; + } + } + } + } + return newResults; + }; + var _args = function(arraySlice) { + return function(args) { + return arraySlice.call(args, 0); + }; + }(window.Array.prototype.slice); + var _detectFlashSupport = function() { + var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = ""; + function parseFlashVersion(desc) { + var matches = desc.match(/[\d]+/g); + matches.length = 3; + return matches.join("."); + } + function isPepperFlash(flashPlayerFileName) { + return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\.dll|libpepflashplayer\.so|pepperflashplayer\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === "chrome.plugin"); + } + function inspectPlugin(plugin) { + if (plugin) { + hasFlash = true; + if (plugin.version) { + flashVersion = parseFlashVersion(plugin.version); + } + if (!flashVersion && plugin.description) { + flashVersion = parseFlashVersion(plugin.description); + } + if (plugin.filename) { + isPPAPI = isPepperFlash(plugin.filename); + } + } + } + if (navigator.plugins && navigator.plugins.length) { + plugin = navigator.plugins["Shockwave Flash"]; + inspectPlugin(plugin); + if (navigator.plugins["Shockwave Flash 2.0"]) { + hasFlash = true; + flashVersion = "2.0.0.11"; + } + } else if (navigator.mimeTypes && navigator.mimeTypes.length) { + mimeType = navigator.mimeTypes["application/x-shockwave-flash"]; + plugin = mimeType && mimeType.enabledPlugin; + inspectPlugin(plugin); + } else if (typeof ActiveXObject !== "undefined") { + isActiveX = true; + try { + ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); + hasFlash = true; + flashVersion = parseFlashVersion(ax.GetVariable("$version")); + } catch (e1) { + try { + ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); + hasFlash = true; + flashVersion = "6.0.21"; + } catch (e2) { + try { + ax = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); + hasFlash = true; + flashVersion = parseFlashVersion(ax.GetVariable("$version")); + } catch (e3) { + isActiveX = false; + } + } + } + } + _flashState.disabled = hasFlash !== true; + _flashState.outdated = flashVersion && parseFloat(flashVersion) < 11; + _flashState.version = flashVersion || "0.0.0"; + _flashState.pluginType = isPPAPI ? "pepper" : isActiveX ? "activex" : hasFlash ? "netscape" : "unknown"; + }; + _detectFlashSupport(); + var ZeroClipboard = function(elements) { + if (!(this instanceof ZeroClipboard)) { + return new ZeroClipboard(elements); + } + this.id = "" + _clientIdCounter++; + _clientMeta[this.id] = { + instance: this, + elements: [], + handlers: {} + }; + if (elements) { + this.clip(elements); + } + if (typeof _flashState.ready !== "boolean") { + _flashState.ready = false; + } + if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) { + var _client = this; + var maxWait = _globalConfig.flashLoadTimeout; + if (typeof maxWait === "number" && maxWait >= 0) { + setTimeout(function() { + if (typeof _flashState.deactivated !== "boolean") { + _flashState.deactivated = true; + } + if (_flashState.deactivated === true) { + ZeroClipboard.emit({ + type: "error", + name: "flash-deactivated", + client: _client + }); + } + }, maxWait); + } + _flashState.overdue = false; + _bridge(); + } + }; + ZeroClipboard.prototype.setText = function(text) { + ZeroClipboard.setData("text/plain", text); + return this; + }; + ZeroClipboard.prototype.setHtml = function(html) { + ZeroClipboard.setData("text/html", html); + return this; + }; + ZeroClipboard.prototype.setRichText = function(richText) { + ZeroClipboard.setData("application/rtf", richText); + return this; + }; + ZeroClipboard.prototype.setData = function() { + ZeroClipboard.setData.apply(ZeroClipboard, _args(arguments)); + return this; + }; + ZeroClipboard.prototype.clearData = function() { + ZeroClipboard.clearData.apply(ZeroClipboard, _args(arguments)); + return this; + }; + ZeroClipboard.prototype.setSize = function(width, height) { + _setSize(width, height); + return this; + }; + var _setHandCursor = function(enabled) { + if (_flashState.ready === true && _flashState.bridge && typeof _flashState.bridge.setHandCursor === "function") { + _flashState.bridge.setHandCursor(enabled); + } else { + _flashState.ready = false; + } + }; + ZeroClipboard.prototype.destroy = function() { + this.unclip(); + this.off(); + delete _clientMeta[this.id]; + }; + var _getAllClients = function() { + var i, len, client, clients = [], clientIds = _objectKeys(_clientMeta); + for (i = 0, len = clientIds.length; i < len; i++) { + client = _clientMeta[clientIds[i]].instance; + if (client && client instanceof ZeroClipboard) { + clients.push(client); + } + } + return clients; + }; + ZeroClipboard.version = "2.0.0-beta.5"; + var _globalConfig = { + swfPath: _swfPath, + trustedDomains: window.location.host ? [ window.location.host ] : [], + cacheBust: true, + forceHandCursor: false, + forceEnhancedClipboard: false, + zIndex: 999999999, + debug: false, + title: null, + autoActivate: true, + flashLoadTimeout: 3e4 + }; + ZeroClipboard.isFlashUnusable = function() { + return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated); + }; + ZeroClipboard.config = function(options) { + if (typeof options === "object" && options !== null) { + _extend(_globalConfig, options); + } + if (typeof options === "string" && options) { + if (_globalConfig.hasOwnProperty(options)) { + return _globalConfig[options]; + } + return; + } + var copy = {}; + for (var prop in _globalConfig) { + if (_globalConfig.hasOwnProperty(prop)) { + if (typeof _globalConfig[prop] === "object" && _globalConfig[prop] !== null) { + if ("length" in _globalConfig[prop]) { + copy[prop] = _globalConfig[prop].slice(0); + } else { + copy[prop] = _extend({}, _globalConfig[prop]); + } + } else { + copy[prop] = _globalConfig[prop]; + } + } + } + return copy; + }; + ZeroClipboard.destroy = function() { + ZeroClipboard.deactivate(); + for (var clientId in _clientMeta) { + if (_clientMeta.hasOwnProperty(clientId) && _clientMeta[clientId]) { + var client = _clientMeta[clientId].instance; + if (client && typeof client.destroy === "function") { + client.destroy(); + } + } + } + var flashBridge = _flashState.bridge; + if (flashBridge) { + var htmlBridge = _getHtmlBridge(flashBridge); + if (htmlBridge) { + if (_flashState.pluginType === "activex" && "readyState" in flashBridge) { + flashBridge.style.display = "none"; + (function removeSwfFromIE() { + if (flashBridge.readyState === 4) { + for (var prop in flashBridge) { + if (typeof flashBridge[prop] === "function") { + flashBridge[prop] = null; + } + } + flashBridge.parentNode.removeChild(flashBridge); + if (htmlBridge.parentNode) { + htmlBridge.parentNode.removeChild(htmlBridge); + } + } else { + setTimeout(removeSwfFromIE, 10); + } + })(); + } else { + flashBridge.parentNode.removeChild(flashBridge); + if (htmlBridge.parentNode) { + htmlBridge.parentNode.removeChild(htmlBridge); + } + } + } + _flashState.ready = null; + _flashState.bridge = null; + _flashState.deactivated = null; + } + ZeroClipboard.clearData(); + }; + ZeroClipboard.activate = function(element) { + if (_currentElement) { + _removeClass(_currentElement, _globalConfig.hoverClass); + _removeClass(_currentElement, _globalConfig.activeClass); + } + _currentElement = element; + _addClass(element, _globalConfig.hoverClass); + _reposition(); + var newTitle = _globalConfig.title || element.getAttribute("title"); + if (newTitle) { + var htmlBridge = _getHtmlBridge(_flashState.bridge); + if (htmlBridge) { + htmlBridge.setAttribute("title", newTitle); + } + } + var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, "cursor") === "pointer"; + _setHandCursor(useHandCursor); + }; + ZeroClipboard.deactivate = function() { + var htmlBridge = _getHtmlBridge(_flashState.bridge); + if (htmlBridge) { + htmlBridge.removeAttribute("title"); + htmlBridge.style.left = "0px"; + htmlBridge.style.top = "-9999px"; + _setSize(1, 1); + } + if (_currentElement) { + _removeClass(_currentElement, _globalConfig.hoverClass); + _removeClass(_currentElement, _globalConfig.activeClass); + _currentElement = null; + } + }; + ZeroClipboard.state = function() { + return { + browser: _pick(window.navigator, [ "userAgent", "platform", "appName" ]), + flash: _omit(_flashState, [ "bridge" ]), + zeroclipboard: { + version: ZeroClipboard.version, + config: ZeroClipboard.config() + } + }; + }; + ZeroClipboard.setData = function(format, data) { + var dataObj; + if (typeof format === "object" && format && typeof data === "undefined") { + dataObj = format; + ZeroClipboard.clearData(); + } else if (typeof format === "string" && format) { + dataObj = {}; + dataObj[format] = data; + } else { + return; + } + for (var dataFormat in dataObj) { + if (dataFormat && dataObj.hasOwnProperty(dataFormat) && typeof dataObj[dataFormat] === "string" && dataObj[dataFormat]) { + _clipData[dataFormat] = dataObj[dataFormat]; + } + } + }; + ZeroClipboard.clearData = function(format) { + if (typeof format === "undefined") { + _deleteOwnProperties(_clipData); + _clipDataFormatMap = null; + } else if (typeof format === "string" && _clipData.hasOwnProperty(format)) { + delete _clipData[format]; + } + }; + var _bridge = function() { + var flashBridge, len; + var container = document.getElementById("global-zeroclipboard-html-bridge"); + if (!container) { + var allowScriptAccess = _determineScriptAccess(window.location.host, _globalConfig); + var allowNetworking = allowScriptAccess === "never" ? "none" : "all"; + var flashvars = _vars(_globalConfig); + var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig); + container = _createHtmlBridge(); + var divToBeReplaced = document.createElement("div"); + container.appendChild(divToBeReplaced); + document.body.appendChild(container); + var tmpDiv = document.createElement("div"); + var oldIE = _flashState.pluginType === "activex"; + tmpDiv.innerHTML = '<object id="global-zeroclipboard-flash-bridge" name="global-zeroclipboard-flash-bridge" ' + 'width="100%" height="100%" ' + (oldIE ? 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"' : 'type="application/x-shockwave-flash" data="' + swfUrl + '"') + ">" + (oldIE ? '<param name="movie" value="' + swfUrl + '"/>' : "") + '<param name="allowScriptAccess" value="' + allowScriptAccess + '"/>' + '<param name="allowNetworking" value="' + allowNetworking + '"/>' + '<param name="menu" value="false"/>' + '<param name="wmode" value="transparent"/>' + '<param name="flashvars" value="' + flashvars + '"/>' + "</object>"; + flashBridge = tmpDiv.firstChild; + tmpDiv = null; + flashBridge.ZeroClipboard = ZeroClipboard; + container.replaceChild(flashBridge, divToBeReplaced); + } + if (!flashBridge) { + flashBridge = document["global-zeroclipboard-flash-bridge"]; + if (flashBridge && (len = flashBridge.length)) { + flashBridge = flashBridge[len - 1]; + } + if (!flashBridge) { + flashBridge = container.firstChild; + } + } + _flashState.bridge = flashBridge || null; + }; + var _createHtmlBridge = function() { + var container = document.createElement("div"); + container.id = "global-zeroclipboard-html-bridge"; + container.className = "global-zeroclipboard-container"; + container.style.position = "absolute"; + container.style.left = "0px"; + container.style.top = "-9999px"; + container.style.width = "1px"; + container.style.height = "1px"; + container.style.zIndex = "" + _getSafeZIndex(_globalConfig.zIndex); + return container; + }; + var _getHtmlBridge = function(flashBridge) { + var htmlBridge = flashBridge && flashBridge.parentNode; + while (htmlBridge && htmlBridge.nodeName === "OBJECT" && htmlBridge.parentNode) { + htmlBridge = htmlBridge.parentNode; + } + return htmlBridge || null; + }; + var _reposition = function() { + if (_currentElement) { + var pos = _getDOMObjectPosition(_currentElement, _globalConfig.zIndex); + var htmlBridge = _getHtmlBridge(_flashState.bridge); + if (htmlBridge) { + htmlBridge.style.top = pos.top + "px"; + htmlBridge.style.left = pos.left + "px"; + htmlBridge.style.width = pos.width + "px"; + htmlBridge.style.height = pos.height + "px"; + htmlBridge.style.zIndex = pos.zIndex + 1; + } + _setSize(pos.width, pos.height); + } + }; + var _setSize = function(width, height) { + var htmlBridge = _getHtmlBridge(_flashState.bridge); + if (htmlBridge) { + htmlBridge.style.width = width + "px"; + htmlBridge.style.height = height + "px"; + } + }; + ZeroClipboard.emit = function(event) { + var eventType, eventObj, performCallbackAsync, clients, i, len, eventCopy, returnVal, tmp; + if (typeof event === "string" && event) { + eventType = event; + } + if (typeof event === "object" && event && typeof event.type === "string" && event.type) { + eventType = event.type; + eventObj = event; + } + if (!eventType) { + return; + } + event = _createEvent(eventType, eventObj); + _preprocessEvent(event); + if (event.type === "ready" && _flashState.overdue === true) { + return ZeroClipboard.emit({ + type: "error", + name: "flash-overdue" + }); + } + performCallbackAsync = !/^(before)?copy$/.test(event.type); + if (event.client) { + _dispatchClientCallbacks.call(event.client, event, performCallbackAsync); + } else { + clients = event.target && event.target !== window && _globalConfig.autoActivate === true ? _getAllClientsClippedToElement(event.target) : _getAllClients(); + for (i = 0, len = clients.length; i < len; i++) { + eventCopy = _extend({}, event, { + client: clients[i] + }); + _dispatchClientCallbacks.call(clients[i], eventCopy, performCallbackAsync); + } + } + if (event.type === "copy") { + tmp = _mapClipDataToFlash(_clipData); + returnVal = tmp.data; + _clipDataFormatMap = tmp.formatMap; + } + return returnVal; + }; + var _dispatchClientCallbacks = function(event, async) { + var handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type]; + if (handlers && handlers.length) { + var i, len, func, context, originalContext = this; + for (i = 0, len = handlers.length; i < len; i++) { + func = handlers[i]; + context = originalContext; + if (typeof func === "string" && typeof window[func] === "function") { + func = window[func]; + } + if (typeof func === "object" && func && typeof func.handleEvent === "function") { + context = func; + func = func.handleEvent; + } + if (typeof func === "function") { + _dispatchCallback(func, context, [ event ], async); + } + } + } + return this; + }; + var _eventMessages = { + 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" + } + }; + var _createEvent = function(eventType, event) { + if (!(eventType || event && event.type)) { + return; + } + event = event || {}; + eventType = (eventType || event.type).toLowerCase(); + _extend(event, { + type: eventType, + target: event.target || _currentElement || null, + relatedTarget: event.relatedTarget || null, + currentTarget: _flashState && _flashState.bridge || null + }); + var msg = _eventMessages[event.type]; + if (event.type === "error" && event.name && msg) { + msg = msg[event.name]; + } + if (msg) { + event.message = msg; + } + if (event.type === "ready") { + _extend(event, { + target: null, + version: _flashState.version + }); + } + if (event.type === "error") { + event.target = null; + if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) { + _extend(event, { + version: _flashState.version, + minimumVersion: "11.0.0" + }); + } + } + if (event.type === "copy") { + event.clipboardData = { + setData: ZeroClipboard.setData, + clearData: ZeroClipboard.clearData + }; + } + if (event.type === "aftercopy") { + event = _mapClipResultsFromFlash(event, _clipDataFormatMap); + } + if (event.target && !event.relatedTarget) { + event.relatedTarget = _getRelatedTarget(event.target); + } + return event; + }; + var _getRelatedTarget = function(targetEl) { + var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute("data-clipboard-target"); + return relatedTargetId ? document.getElementById(relatedTargetId) : null; + }; + var _preprocessEvent = function(event) { + var element = event.target || _currentElement; + switch (event.type) { + case "error": + if (_inArray(event.name, [ "flash-disabled", "flash-outdated", "flash-deactivated", "flash-overdue" ])) { + _extend(_flashState, { + disabled: event.name === "flash-disabled", + outdated: event.name === "flash-outdated", + unavailable: event.name === "flash-unavailable", + deactivated: event.name === "flash-deactivated", + overdue: event.name === "flash-overdue", + ready: false + }); + } + break; + + case "ready": + var wasDeactivated = _flashState.deactivated === true; + _extend(_flashState, { + disabled: false, + outdated: false, + unavailable: false, + deactivated: false, + overdue: wasDeactivated, + ready: !wasDeactivated + }); + break; + + case "copy": + var textContent, htmlContent, targetEl = event.relatedTarget; + if (!(_clipData["text/html"] || _clipData["text/plain"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) { + event.clipboardData.clearData(); + event.clipboardData.setData("text/plain", textContent); + if (htmlContent !== textContent) { + event.clipboardData.setData("text/html", htmlContent); + } + } else if (!_clipData["text/plain"] && event.target && (textContent = event.target.getAttribute("data-clipboard-text"))) { + event.clipboardData.clearData(); + event.clipboardData.setData("text/plain", textContent); + } + break; + + case "aftercopy": + ZeroClipboard.clearData(); + if (element && element !== _safeActiveElement() && element.focus) { + element.focus(); + } + break; + + case "mouseover": + _addClass(element, _globalConfig.hoverClass); + break; + + case "mouseout": + if (_globalConfig.autoActivate === true) { + ZeroClipboard.deactivate(); + } + break; + + case "mousedown": + _addClass(element, _globalConfig.activeClass); + break; + + case "mouseup": + _removeClass(element, _globalConfig.activeClass); + break; + } + }; + ZeroClipboard.prototype.on = function(eventName, func) { + var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers; + if (typeof eventName === "string" && eventName) { + events = eventName.toLowerCase().split(/\s+/); + } else if (typeof eventName === "object" && eventName && typeof func === "undefined") { + for (i in eventName) { + if (eventName.hasOwnProperty(i) && typeof i === "string" && i && typeof eventName[i] === "function") { + this.on(i, eventName[i]); + } + } + } + if (events && events.length) { + for (i = 0, len = events.length; i < len; i++) { + eventName = events[i].replace(/^on/, ""); + added[eventName] = true; + if (!handlers[eventName]) { + handlers[eventName] = []; + } + handlers[eventName].push(func); + } + if (added.ready && _flashState.ready) { + ZeroClipboard.emit({ + type: "ready", + client: this + }); + } + if (added.error) { + var errorTypes = [ "disabled", "outdated", "unavailable", "deactivated", "overdue" ]; + for (i = 0, len = errorTypes.length; i < len; i++) { + if (_flashState[errorTypes[i]]) { + ZeroClipboard.emit({ + type: "error", + name: "flash-" + errorTypes[i], + client: this + }); + break; + } + } + } + } + return this; + }; + ZeroClipboard.prototype.off = function(eventName, func) { + var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers; + if (arguments.length === 0) { + events = _objectKeys(handlers); + } else if (typeof eventName === "string" && eventName) { + events = eventName.split(/\s+/); + } else if (typeof eventName === "object" && eventName && typeof func === "undefined") { + for (i in eventName) { + if (eventName.hasOwnProperty(i) && typeof i === "string" && i && typeof eventName[i] === "function") { + this.off(i, eventName[i]); + } + } + } + if (events && events.length) { + for (i = 0, len = events.length; i < len; i++) { + eventName = events[i].toLowerCase().replace(/^on/, ""); + perEventHandlers = handlers[eventName]; + if (perEventHandlers && perEventHandlers.length) { + if (func) { + foundIndex = _inArray(func, perEventHandlers); + while (foundIndex !== -1) { + perEventHandlers.splice(foundIndex, 1); + foundIndex = _inArray(func, perEventHandlers, foundIndex); + } + } else { + handlers[eventName].length = 0; + } + } + } + } + return this; + }; + ZeroClipboard.prototype.handlers = function(eventName) { + var prop, copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers; + if (handlers) { + if (typeof eventName === "string" && eventName) { + return handlers[eventName] ? handlers[eventName].slice(0) : null; + } + copy = {}; + for (prop in handlers) { + if (handlers.hasOwnProperty(prop) && handlers[prop]) { + copy[prop] = handlers[prop].slice(0); + } + } + } + return copy; + }; + ZeroClipboard.prototype.clip = function(elements) { + elements = _prepClip(elements); + for (var i = 0; i < elements.length; i++) { + if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) { + if (!elements[i].zcClippingId) { + elements[i].zcClippingId = "zcClippingId_" + _elementIdCounter++; + _elementMeta[elements[i].zcClippingId] = [ this.id ]; + if (_globalConfig.autoActivate === true) { + _addEventHandler(elements[i], "mouseover", _elementMouseOver); + } + } else if (_inArray(this.id, _elementMeta[elements[i].zcClippingId]) === -1) { + _elementMeta[elements[i].zcClippingId].push(this.id); + } + var clippedElements = _clientMeta[this.id].elements; + if (_inArray(elements[i], clippedElements) === -1) { + clippedElements.push(elements[i]); + } + } + } + return this; + }; + ZeroClipboard.prototype.unclip = function(elements) { + var meta = _clientMeta[this.id]; + if (!meta) { + return this; + } + var clippedElements = meta.elements; + var arrayIndex; + if (typeof elements === "undefined") { + elements = clippedElements.slice(0); + } else { + elements = _prepClip(elements); + } + for (var i = elements.length; i--; ) { + if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) { + arrayIndex = 0; + while ((arrayIndex = _inArray(elements[i], clippedElements, arrayIndex)) !== -1) { + clippedElements.splice(arrayIndex, 1); + } + var clientIds = _elementMeta[elements[i].zcClippingId]; + if (clientIds) { + arrayIndex = 0; + while ((arrayIndex = _inArray(this.id, clientIds, arrayIndex)) !== -1) { + clientIds.splice(arrayIndex, 1); + } + if (clientIds.length === 0) { + if (_globalConfig.autoActivate === true) { + _removeEventHandler(elements[i], "mouseover", _elementMouseOver); + } + delete elements[i].zcClippingId; + } + } + } + } + return this; + }; + ZeroClipboard.prototype.elements = function() { + var meta = _clientMeta[this.id]; + return meta && meta.elements ? meta.elements.slice(0) : []; + }; + var _getAllClientsClippedToElement = function(element) { + var elementMetaId, clientIds, i, len, client, clients = []; + if (element && element.nodeType === 1 && (elementMetaId = element.zcClippingId) && _elementMeta.hasOwnProperty(elementMetaId)) { + clientIds = _elementMeta[elementMetaId]; + if (clientIds && clientIds.length) { + for (i = 0, len = clientIds.length; i < len; i++) { + client = _clientMeta[clientIds[i]].instance; + if (client && client instanceof ZeroClipboard) { + clients.push(client); + } + } + } + } + return clients; + }; + _globalConfig.hoverClass = "zeroclipboard-is-hover"; + _globalConfig.activeClass = "zeroclipboard-is-active"; + if (typeof define === "function" && define.amd) { + define(function() { + return ZeroClipboard; + }); + } else if (typeof module === "object" && module && typeof module.exports === "object" && module.exports) { + module.exports = ZeroClipboard; + } else { + window.ZeroClipboard = ZeroClipboard; + } +})(function() { + return this; }()); \ No newline at end of file -- Gitblit v1.8.0