zeroclipboard-rails 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 280a54fda3995addc8e49028cdfaf16523ab9be3
4
- data.tar.gz: f710fb9e61b70433cbfb27acf977fec8dc5d28fc
3
+ metadata.gz: c0e30c574d43c8901a4d17de7cccd0f2cf2f5d1a
4
+ data.tar.gz: 2c8b393dde31058ea8e1a98b7e56367050de44bf
5
5
  SHA512:
6
- metadata.gz: 5e83ad2d4aa16e215a2148f39263507e4521d979ecaecf7b6a23eb77ac48477a4d3488f9a365bdeae4da346ee68ce2aca2a4ceccd8e86186e9a7c4d18ce5d9b7
7
- data.tar.gz: db0b9eae971839d0ec2ca7498bf15fba4cd2197040c335db68897cf1e21fafe759f09978154ec919f97bac1d5a837af3d9c5e9454fd17fdab5babe6bf7d01b20
6
+ metadata.gz: 90c89be1bee79a9be5dabfb5a12450b0a48492afbcdee0dc242a1dfc6daa0df3dbc34d0f2cdbe7b984cadd87f3de5ed96f0a500b136bda83451aeea05064bf82
7
+ data.tar.gz: a8d2a43dd97ac0227c7fdeeb3e4920acbc4f521b4358eadc9a26249e54c834e3e2c2a4c65e3b992d398872c47749b054bd50f1de6e2ee52d35b01572b0b200d7
data/README.md CHANGED
@@ -152,6 +152,13 @@ This gem is merely a wrapper around [ZeroClipboard](https://github.com/zeroclipb
152
152
  No patch for CSS zoom bug which still remains
153
153
  </td>
154
154
  </tr>
155
+ <tr>
156
+ <td><a href="https://rubygems.org/gems/zeroclipboard-rails/versions/0.0.11">0.0.11</a></td>
157
+ <td><a href="https://github.com/zeroclipboard/ZeroClipboard/tree/v1.3.1">1.3.1</a></td>
158
+ <td>
159
+ No patch for CSS zoom bug which still remains
160
+ </td>
161
+ </tr>
155
162
  </table>
156
163
 
157
164
 
@@ -1,13 +1,67 @@
1
1
  /*!
2
2
  * ZeroClipboard
3
3
  * The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.
4
- * Copyright (c) 2013 Jon Rohan, James M. Greene
4
+ * Copyright (c) 2014 Jon Rohan, James M. Greene
5
5
  * Licensed MIT
6
6
  * http://zeroclipboard.org/
7
- * v1.2.3
7
+ * v1.3.1
8
8
  */
9
9
  (function() {
10
10
  "use strict";
11
+ var currentElement;
12
+ var flashState = {
13
+ bridge: null,
14
+ version: "0.0.0",
15
+ disabled: null,
16
+ outdated: null,
17
+ ready: null
18
+ };
19
+ var _clipData = {};
20
+ var clientIdCounter = 0;
21
+ var _clientMeta = {};
22
+ var elementIdCounter = 0;
23
+ var _elementMeta = {};
24
+ var _amdModuleId = null;
25
+ var _cjsModuleId = null;
26
+ var _swfPath = function() {
27
+ var i, jsDir, tmpJsPath, jsPath, swfPath = "ZeroClipboard.swf";
28
+ if (document.currentScript && (jsPath = document.currentScript.src)) {} else {
29
+ var scripts = document.getElementsByTagName("script");
30
+ if ("readyState" in scripts[0]) {
31
+ for (i = scripts.length; i--; ) {
32
+ if (scripts[i].readyState === "interactive" && (jsPath = scripts[i].src)) {
33
+ break;
34
+ }
35
+ }
36
+ } else if (document.readyState === "loading") {
37
+ jsPath = scripts[scripts.length - 1].src;
38
+ } else {
39
+ for (i = scripts.length; i--; ) {
40
+ tmpJsPath = scripts[i].src;
41
+ if (!tmpJsPath) {
42
+ jsDir = null;
43
+ break;
44
+ }
45
+ tmpJsPath = tmpJsPath.split("#")[0].split("?")[0];
46
+ tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf("/") + 1);
47
+ if (jsDir == null) {
48
+ jsDir = tmpJsPath;
49
+ } else if (jsDir !== tmpJsPath) {
50
+ jsDir = null;
51
+ break;
52
+ }
53
+ }
54
+ if (jsDir !== null) {
55
+ jsPath = jsDir;
56
+ }
57
+ }
58
+ }
59
+ if (jsPath) {
60
+ jsPath = jsPath.split("#")[0].split("?")[0];
61
+ swfPath = jsPath.slice(0, jsPath.lastIndexOf("/") + 1) + swfPath;
62
+ }
63
+ return swfPath;
64
+ }();
11
65
  var _camelizeCssPropName = function() {
12
66
  var matcherRegex = /\-([a-z])/g, replacerFn = function(match, group) {
13
67
  return group.toUpperCase();
@@ -31,18 +85,14 @@
31
85
  if (prop === "cursor") {
32
86
  if (!value || value === "auto") {
33
87
  tagName = el.tagName.toLowerCase();
34
- possiblePointers = [ "a" ];
35
- for (i = 0, len = possiblePointers.length; i < len; i++) {
36
- if (tagName === possiblePointers[i]) {
37
- return "pointer";
38
- }
88
+ if (tagName === "a") {
89
+ return "pointer";
39
90
  }
40
91
  }
41
92
  }
42
93
  return value;
43
94
  };
44
95
  var _elementMouseOver = function(event) {
45
- if (!ZeroClipboard.prototype._singleton) return;
46
96
  if (!event) {
47
97
  event = window.event;
48
98
  }
@@ -54,9 +104,12 @@
54
104
  } else if (event.srcElement) {
55
105
  target = event.srcElement;
56
106
  }
57
- ZeroClipboard.prototype._singleton.setCurrent(target);
107
+ ZeroClipboard.activate(target);
58
108
  };
59
109
  var _addEventHandler = function(element, method, func) {
110
+ if (!element || element.nodeType !== 1) {
111
+ return;
112
+ }
60
113
  if (element.addEventListener) {
61
114
  element.addEventListener(method, func, false);
62
115
  } else if (element.attachEvent) {
@@ -64,6 +117,9 @@
64
117
  }
65
118
  };
66
119
  var _removeEventHandler = function(element, method, func) {
120
+ if (!element || element.nodeType !== 1) {
121
+ return;
122
+ }
67
123
  if (element.removeEventListener) {
68
124
  element.removeEventListener(method, func, false);
69
125
  } else if (element.detachEvent) {
@@ -71,8 +127,13 @@
71
127
  }
72
128
  };
73
129
  var _addClass = function(element, value) {
74
- if (element.addClass) {
75
- element.addClass(value);
130
+ if (!element || element.nodeType !== 1) {
131
+ return element;
132
+ }
133
+ if (element.classList) {
134
+ if (!element.classList.contains(value)) {
135
+ element.classList.add(value);
136
+ }
76
137
  return element;
77
138
  }
78
139
  if (value && typeof value === "string") {
@@ -94,8 +155,13 @@
94
155
  return element;
95
156
  };
96
157
  var _removeClass = function(element, value) {
97
- if (element.removeClass) {
98
- element.removeClass(value);
158
+ if (!element || element.nodeType !== 1) {
159
+ return element;
160
+ }
161
+ if (element.classList) {
162
+ if (element.classList.contains(value)) {
163
+ element.classList.remove(value);
164
+ }
99
165
  return element;
100
166
  }
101
167
  if (value && typeof value === "string" || value === undefined) {
@@ -124,18 +190,14 @@
124
190
  }
125
191
  return zoomFactor;
126
192
  };
127
- var _getDOMObjectPosition = function(obj) {
193
+ var _getDOMObjectPosition = function(obj, defaultZIndex) {
128
194
  var info = {
129
195
  left: 0,
130
196
  top: 0,
131
197
  width: 0,
132
198
  height: 0,
133
- zIndex: 999999999
199
+ zIndex: _getSafeZIndex(defaultZIndex) - 1
134
200
  };
135
- var zi = _getStyle(obj, "z-index");
136
- if (zi && zi !== "auto") {
137
- info.zIndex = parseInt(zi, 10);
138
- }
139
201
  if (obj.getBoundingClientRect) {
140
202
  var rect = obj.getBoundingClientRect();
141
203
  var pageXOffset, pageYOffset, zoomFactor;
@@ -156,309 +218,783 @@
156
218
  }
157
219
  return info;
158
220
  };
159
- var _noCache = function(path, options) {
160
- var useNoCache = !(options && options.useNoCache === false);
161
- if (useNoCache) {
162
- return (path.indexOf("?") === -1 ? "?" : "&") + "nocache=" + new Date().getTime();
221
+ var _cacheBust = function(path, options) {
222
+ var cacheBust = options == null || options && options.cacheBust === true && options.useNoCache === true;
223
+ if (cacheBust) {
224
+ return (path.indexOf("?") === -1 ? "?" : "&") + "noCache=" + new Date().getTime();
163
225
  } else {
164
226
  return "";
165
227
  }
166
228
  };
167
229
  var _vars = function(options) {
168
- var str = [];
169
- var origins = [];
230
+ var i, len, domain, str = [], domains = [], trustedOriginsExpanded = [];
170
231
  if (options.trustedOrigins) {
171
232
  if (typeof options.trustedOrigins === "string") {
172
- origins.push(options.trustedOrigins);
233
+ domains.push(options.trustedOrigins);
173
234
  } else if (typeof options.trustedOrigins === "object" && "length" in options.trustedOrigins) {
174
- origins = origins.concat(options.trustedOrigins);
235
+ domains = domains.concat(options.trustedOrigins);
175
236
  }
176
237
  }
177
238
  if (options.trustedDomains) {
178
239
  if (typeof options.trustedDomains === "string") {
179
- origins.push(options.trustedDomains);
240
+ domains.push(options.trustedDomains);
180
241
  } else if (typeof options.trustedDomains === "object" && "length" in options.trustedDomains) {
181
- origins = origins.concat(options.trustedDomains);
242
+ domains = domains.concat(options.trustedDomains);
182
243
  }
183
244
  }
184
- if (origins.length) {
185
- str.push("trustedOrigins=" + encodeURIComponent(origins.join(",")));
245
+ if (domains.length) {
246
+ for (i = 0, len = domains.length; i < len; i++) {
247
+ if (domains.hasOwnProperty(i) && domains[i] && typeof domains[i] === "string") {
248
+ domain = _extractDomain(domains[i]);
249
+ if (!domain) {
250
+ continue;
251
+ }
252
+ if (domain === "*") {
253
+ trustedOriginsExpanded = [ domain ];
254
+ break;
255
+ }
256
+ trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, "//" + domain, window.location.protocol + "//" + domain ]);
257
+ }
258
+ }
186
259
  }
187
- if (typeof options.amdModuleId === "string" && options.amdModuleId) {
188
- str.push("amdModuleId=" + encodeURIComponent(options.amdModuleId));
260
+ if (trustedOriginsExpanded.length) {
261
+ str.push("trustedOrigins=" + encodeURIComponent(trustedOriginsExpanded.join(",")));
189
262
  }
190
- if (typeof options.cjsModuleId === "string" && options.cjsModuleId) {
191
- str.push("cjsModuleId=" + encodeURIComponent(options.cjsModuleId));
263
+ if (typeof options.jsModuleId === "string" && options.jsModuleId) {
264
+ str.push("jsModuleId=" + encodeURIComponent(options.jsModuleId));
192
265
  }
193
266
  return str.join("&");
194
267
  };
195
- var _inArray = function(elem, array) {
196
- if (array.indexOf) {
197
- return array.indexOf(elem);
268
+ var _inArray = function(elem, array, fromIndex) {
269
+ if (typeof array.indexOf === "function") {
270
+ return array.indexOf(elem, fromIndex);
271
+ }
272
+ var i, len = array.length;
273
+ if (typeof fromIndex === "undefined") {
274
+ fromIndex = 0;
275
+ } else if (fromIndex < 0) {
276
+ fromIndex = len + fromIndex;
198
277
  }
199
- for (var i = 0, length = array.length; i < length; i++) {
200
- if (array[i] === elem) {
278
+ for (i = fromIndex; i < len; i++) {
279
+ if (array.hasOwnProperty(i) && array[i] === elem) {
201
280
  return i;
202
281
  }
203
282
  }
204
283
  return -1;
205
284
  };
206
- var _prepGlue = function(elements) {
285
+ var _prepClip = function(elements) {
207
286
  if (typeof elements === "string") throw new TypeError("ZeroClipboard doesn't accept query strings.");
208
287
  if (!elements.length) return [ elements ];
209
288
  return elements;
210
289
  };
211
- var _dispatchCallback = function(func, element, instance, args, async) {
290
+ var _dispatchCallback = function(func, context, args, async) {
212
291
  if (async) {
213
292
  window.setTimeout(function() {
214
- func.call(element, instance, args);
293
+ func.apply(context, args);
215
294
  }, 0);
216
295
  } else {
217
- func.call(element, instance, args);
296
+ func.apply(context, args);
297
+ }
298
+ };
299
+ var _getSafeZIndex = function(val) {
300
+ var zIndex, tmp;
301
+ if (val) {
302
+ if (typeof val === "number" && val > 0) {
303
+ zIndex = val;
304
+ } else if (typeof val === "string" && (tmp = parseInt(val, 10)) && !isNaN(tmp) && tmp > 0) {
305
+ zIndex = tmp;
306
+ }
307
+ }
308
+ if (!zIndex) {
309
+ if (typeof _globalConfig.zIndex === "number" && _globalConfig.zIndex > 0) {
310
+ zIndex = _globalConfig.zIndex;
311
+ } else if (typeof _globalConfig.zIndex === "string" && (tmp = parseInt(_globalConfig.zIndex, 10)) && !isNaN(tmp) && tmp > 0) {
312
+ zIndex = tmp;
313
+ }
314
+ }
315
+ return zIndex || 0;
316
+ };
317
+ var _deprecationWarning = function(deprecatedApiName, debugEnabled) {
318
+ if (deprecatedApiName && debugEnabled !== false && typeof console !== "undefined" && console && (console.warn || console.log)) {
319
+ var deprecationWarning = "`" + deprecatedApiName + "` is deprecated. See docs for more info:\n" + " https://github.com/zeroclipboard/zeroclipboard/blob/master/docs/instructions.md#deprecations";
320
+ if (console.warn) {
321
+ console.warn(deprecationWarning);
322
+ } else {
323
+ console.log(deprecationWarning);
324
+ }
325
+ }
326
+ };
327
+ var _extend = function() {
328
+ var i, len, arg, prop, src, copy, target = arguments[0] || {};
329
+ for (i = 1, len = arguments.length; i < len; i++) {
330
+ if ((arg = arguments[i]) != null) {
331
+ for (prop in arg) {
332
+ if (arg.hasOwnProperty(prop)) {
333
+ src = target[prop];
334
+ copy = arg[prop];
335
+ if (target === copy) {
336
+ continue;
337
+ }
338
+ if (copy !== undefined) {
339
+ target[prop] = copy;
340
+ }
341
+ }
342
+ }
343
+ }
344
+ }
345
+ return target;
346
+ };
347
+ var _extractDomain = function(originOrUrl) {
348
+ if (originOrUrl == null || originOrUrl === "") {
349
+ return null;
350
+ }
351
+ originOrUrl = originOrUrl.replace(/^\s+|\s+$/g, "");
352
+ if (originOrUrl === "") {
353
+ return null;
354
+ }
355
+ var protocolIndex = originOrUrl.indexOf("//");
356
+ originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);
357
+ var pathIndex = originOrUrl.indexOf("/");
358
+ originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);
359
+ if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === ".swf") {
360
+ return null;
361
+ }
362
+ return originOrUrl || null;
363
+ };
364
+ var _determineScriptAccess = function() {
365
+ var _extractAllDomains = function(origins, resultsArray) {
366
+ var i, len, tmp;
367
+ if (origins != null && resultsArray[0] !== "*") {
368
+ if (typeof origins === "string") {
369
+ origins = [ origins ];
370
+ }
371
+ if (typeof origins === "object" && "length" in origins) {
372
+ for (i = 0, len = origins.length; i < len; i++) {
373
+ if (origins.hasOwnProperty(i)) {
374
+ tmp = _extractDomain(origins[i]);
375
+ if (tmp) {
376
+ if (tmp === "*") {
377
+ resultsArray.length = 0;
378
+ resultsArray.push("*");
379
+ break;
380
+ }
381
+ if (_inArray(tmp, resultsArray) === -1) {
382
+ resultsArray.push(tmp);
383
+ }
384
+ }
385
+ }
386
+ }
387
+ }
388
+ }
389
+ };
390
+ var _accessLevelLookup = {
391
+ always: "always",
392
+ samedomain: "sameDomain",
393
+ never: "never"
394
+ };
395
+ return function(currentDomain, configOptions) {
396
+ var asaLower, allowScriptAccess = configOptions.allowScriptAccess;
397
+ if (typeof allowScriptAccess === "string" && (asaLower = allowScriptAccess.toLowerCase()) && /^always|samedomain|never$/.test(asaLower)) {
398
+ return _accessLevelLookup[asaLower];
399
+ }
400
+ var swfDomain = _extractDomain(configOptions.moviePath);
401
+ if (swfDomain === null) {
402
+ swfDomain = currentDomain;
403
+ }
404
+ var trustedDomains = [];
405
+ _extractAllDomains(configOptions.trustedOrigins, trustedDomains);
406
+ _extractAllDomains(configOptions.trustedDomains, trustedDomains);
407
+ var len = trustedDomains.length;
408
+ if (len > 0) {
409
+ if (len === 1 && trustedDomains[0] === "*") {
410
+ return "always";
411
+ }
412
+ if (_inArray(currentDomain, trustedDomains) !== -1) {
413
+ if (len === 1 && currentDomain === swfDomain) {
414
+ return "sameDomain";
415
+ }
416
+ return "always";
417
+ }
418
+ }
419
+ return "never";
420
+ };
421
+ }();
422
+ var _objectKeys = function(obj) {
423
+ if (obj == null) {
424
+ return [];
425
+ }
426
+ if (Object.keys) {
427
+ return Object.keys(obj);
428
+ }
429
+ var keys = [];
430
+ for (var prop in obj) {
431
+ if (obj.hasOwnProperty(prop)) {
432
+ keys.push(prop);
433
+ }
434
+ }
435
+ return keys;
436
+ };
437
+ var _deleteOwnProperties = function(obj) {
438
+ if (obj) {
439
+ for (var prop in obj) {
440
+ if (obj.hasOwnProperty(prop)) {
441
+ delete obj[prop];
442
+ }
443
+ }
444
+ }
445
+ return obj;
446
+ };
447
+ var _detectFlashSupport = function() {
448
+ var hasFlash = false;
449
+ if (typeof flashState.disabled === "boolean") {
450
+ hasFlash = flashState.disabled === false;
451
+ } else {
452
+ if (typeof ActiveXObject === "function") {
453
+ try {
454
+ if (new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) {
455
+ hasFlash = true;
456
+ }
457
+ } catch (error) {}
458
+ }
459
+ if (!hasFlash && navigator.mimeTypes["application/x-shockwave-flash"]) {
460
+ hasFlash = true;
461
+ }
218
462
  }
463
+ return hasFlash;
219
464
  };
465
+ function _parseFlashVersion(flashVersion) {
466
+ return flashVersion.replace(/,/g, ".").replace(/[^0-9\.]/g, "");
467
+ }
468
+ function _isFlashVersionSupported(flashVersion) {
469
+ return parseFloat(_parseFlashVersion(flashVersion)) >= 10;
470
+ }
220
471
  var ZeroClipboard = function(elements, options) {
221
- if (elements) (ZeroClipboard.prototype._singleton || this).glue(elements);
222
- if (ZeroClipboard.prototype._singleton) return ZeroClipboard.prototype._singleton;
223
- ZeroClipboard.prototype._singleton = this;
224
- this.options = {};
225
- for (var kd in _defaults) this.options[kd] = _defaults[kd];
226
- for (var ko in options) this.options[ko] = options[ko];
227
- this.handlers = {};
228
- if (ZeroClipboard.detectFlashSupport()) _bridge();
229
- };
230
- var currentElement, gluedElements = [];
231
- ZeroClipboard.prototype.setCurrent = function(element) {
232
- currentElement = element;
233
- this.reposition();
234
- var titleAttr = element.getAttribute("title");
235
- if (titleAttr) {
236
- this.setTitle(titleAttr);
472
+ if (!(this instanceof ZeroClipboard)) {
473
+ return new ZeroClipboard(elements, options);
474
+ }
475
+ this.id = "" + clientIdCounter++;
476
+ _clientMeta[this.id] = {
477
+ instance: this,
478
+ elements: [],
479
+ handlers: {}
480
+ };
481
+ if (elements) {
482
+ this.clip(elements);
483
+ }
484
+ if (typeof options !== "undefined") {
485
+ _deprecationWarning("new ZeroClipboard(elements, options)", _globalConfig.debug);
486
+ ZeroClipboard.config(options);
487
+ }
488
+ this.options = ZeroClipboard.config();
489
+ if (typeof flashState.disabled !== "boolean") {
490
+ flashState.disabled = !_detectFlashSupport();
491
+ }
492
+ if (flashState.disabled === false && flashState.outdated !== true) {
493
+ if (flashState.bridge === null) {
494
+ flashState.outdated = false;
495
+ flashState.ready = false;
496
+ _bridge();
497
+ }
237
498
  }
238
- var useHandCursor = this.options.forceHandCursor === true || _getStyle(element, "cursor") === "pointer";
239
- _setHandCursor.call(this, useHandCursor);
240
- return this;
241
499
  };
242
500
  ZeroClipboard.prototype.setText = function(newText) {
243
501
  if (newText && newText !== "") {
244
- this.options.text = newText;
245
- if (this.ready()) this.flashBridge.setText(newText);
502
+ _clipData["text/plain"] = newText;
503
+ if (flashState.ready === true && flashState.bridge) {
504
+ flashState.bridge.setText(newText);
505
+ } else {}
246
506
  }
247
507
  return this;
248
508
  };
249
- ZeroClipboard.prototype.setTitle = function(newTitle) {
250
- if (newTitle && newTitle !== "") this.htmlBridge.setAttribute("title", newTitle);
251
- return this;
252
- };
253
509
  ZeroClipboard.prototype.setSize = function(width, height) {
254
- if (this.ready()) this.flashBridge.setSize(width, height);
255
- return this;
256
- };
257
- ZeroClipboard.prototype.setHandCursor = function(enabled) {
258
- enabled = typeof enabled === "boolean" ? enabled : !!enabled;
259
- _setHandCursor.call(this, enabled);
260
- this.options.forceHandCursor = enabled;
510
+ if (flashState.ready === true && flashState.bridge) {
511
+ flashState.bridge.setSize(width, height);
512
+ } else {}
261
513
  return this;
262
514
  };
263
515
  var _setHandCursor = function(enabled) {
264
- if (this.ready()) this.flashBridge.setHandCursor(enabled);
265
- };
266
- ZeroClipboard.version = "1.2.3";
267
- var _defaults = {
268
- moviePath: "ZeroClipboard.swf",
269
- trustedOrigins: null,
270
- text: null,
271
- hoverClass: "zeroclipboard-is-hover",
272
- activeClass: "zeroclipboard-is-active",
273
- allowScriptAccess: "sameDomain",
274
- useNoCache: true,
275
- forceHandCursor: false
276
- };
277
- ZeroClipboard.setDefaults = function(options) {
278
- for (var ko in options) _defaults[ko] = options[ko];
516
+ if (flashState.ready === true && flashState.bridge) {
517
+ flashState.bridge.setHandCursor(enabled);
518
+ } else {}
519
+ };
520
+ ZeroClipboard.prototype.destroy = function() {
521
+ this.unclip();
522
+ this.off();
523
+ delete _clientMeta[this.id];
524
+ };
525
+ var _getAllClients = function() {
526
+ var i, len, client, clients = [], clientIds = _objectKeys(_clientMeta);
527
+ for (i = 0, len = clientIds.length; i < len; i++) {
528
+ client = _clientMeta[clientIds[i]].instance;
529
+ if (client && client instanceof ZeroClipboard) {
530
+ clients.push(client);
531
+ }
532
+ }
533
+ return clients;
534
+ };
535
+ ZeroClipboard.version = "1.3.1";
536
+ var _globalConfig = {
537
+ swfPath: _swfPath,
538
+ trustedDomains: window.location.host ? [ window.location.host ] : [],
539
+ cacheBust: true,
540
+ forceHandCursor: false,
541
+ zIndex: 999999999,
542
+ debug: true,
543
+ title: null,
544
+ autoActivate: true
545
+ };
546
+ ZeroClipboard.config = function(options) {
547
+ if (typeof options === "object" && options !== null) {
548
+ _extend(_globalConfig, options);
549
+ }
550
+ if (typeof options === "string" && options) {
551
+ if (_globalConfig.hasOwnProperty(options)) {
552
+ return _globalConfig[options];
553
+ }
554
+ return;
555
+ }
556
+ var copy = {};
557
+ for (var prop in _globalConfig) {
558
+ if (_globalConfig.hasOwnProperty(prop)) {
559
+ if (typeof _globalConfig[prop] === "object" && _globalConfig[prop] !== null) {
560
+ if ("length" in _globalConfig[prop]) {
561
+ copy[prop] = _globalConfig[prop].slice(0);
562
+ } else {
563
+ copy[prop] = _extend({}, _globalConfig[prop]);
564
+ }
565
+ } else {
566
+ copy[prop] = _globalConfig[prop];
567
+ }
568
+ }
569
+ }
570
+ return copy;
279
571
  };
280
572
  ZeroClipboard.destroy = function() {
281
- ZeroClipboard.prototype._singleton.unglue(gluedElements);
282
- var bridge = ZeroClipboard.prototype._singleton.htmlBridge;
283
- bridge.parentNode.removeChild(bridge);
284
- delete ZeroClipboard.prototype._singleton;
285
- };
286
- ZeroClipboard.detectFlashSupport = function() {
287
- var hasFlash = false;
288
- if (typeof ActiveXObject === "function") {
289
- try {
290
- if (new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) {
291
- hasFlash = true;
573
+ ZeroClipboard.deactivate();
574
+ for (var clientId in _clientMeta) {
575
+ if (_clientMeta.hasOwnProperty(clientId) && _clientMeta[clientId]) {
576
+ var client = _clientMeta[clientId].instance;
577
+ if (client && typeof client.destroy === "function") {
578
+ client.destroy();
292
579
  }
293
- } catch (error) {}
580
+ }
294
581
  }
295
- if (!hasFlash && navigator.mimeTypes["application/x-shockwave-flash"]) {
296
- hasFlash = true;
582
+ var htmlBridge = _getHtmlBridge(flashState.bridge);
583
+ if (htmlBridge && htmlBridge.parentNode) {
584
+ htmlBridge.parentNode.removeChild(htmlBridge);
585
+ flashState.ready = null;
586
+ flashState.bridge = null;
587
+ }
588
+ };
589
+ ZeroClipboard.activate = function(element) {
590
+ if (currentElement) {
591
+ _removeClass(currentElement, _globalConfig.hoverClass);
592
+ _removeClass(currentElement, _globalConfig.activeClass);
593
+ }
594
+ currentElement = element;
595
+ _addClass(element, _globalConfig.hoverClass);
596
+ _reposition();
597
+ var newTitle = _globalConfig.title || element.getAttribute("title");
598
+ if (newTitle) {
599
+ var htmlBridge = _getHtmlBridge(flashState.bridge);
600
+ if (htmlBridge) {
601
+ htmlBridge.setAttribute("title", newTitle);
602
+ }
603
+ }
604
+ var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, "cursor") === "pointer";
605
+ _setHandCursor(useHandCursor);
606
+ };
607
+ ZeroClipboard.deactivate = function() {
608
+ var htmlBridge = _getHtmlBridge(flashState.bridge);
609
+ if (htmlBridge) {
610
+ htmlBridge.style.left = "0px";
611
+ htmlBridge.style.top = "-9999px";
612
+ htmlBridge.removeAttribute("title");
613
+ }
614
+ if (currentElement) {
615
+ _removeClass(currentElement, _globalConfig.hoverClass);
616
+ _removeClass(currentElement, _globalConfig.activeClass);
617
+ currentElement = null;
297
618
  }
298
- return hasFlash;
299
619
  };
300
- var _amdModuleId = null;
301
- var _cjsModuleId = null;
302
620
  var _bridge = function() {
303
621
  var flashBridge, len;
304
- var client = ZeroClipboard.prototype._singleton;
305
622
  var container = document.getElementById("global-zeroclipboard-html-bridge");
306
623
  if (!container) {
307
- var opts = {};
308
- for (var ko in client.options) opts[ko] = client.options[ko];
309
- opts.amdModuleId = _amdModuleId;
310
- opts.cjsModuleId = _cjsModuleId;
624
+ var opts = ZeroClipboard.config();
625
+ opts.jsModuleId = typeof _amdModuleId === "string" && _amdModuleId || typeof _cjsModuleId === "string" && _cjsModuleId || null;
626
+ var allowScriptAccess = _determineScriptAccess(window.location.host, _globalConfig);
311
627
  var flashvars = _vars(opts);
312
- var html = ' <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="global-zeroclipboard-flash-bridge" width="100%" height="100%"> <param name="movie" value="' + client.options.moviePath + _noCache(client.options.moviePath, client.options) + '"/> <param name="allowScriptAccess" value="' + client.options.allowScriptAccess + '"/> <param name="scale" value="exactfit"/> <param name="loop" value="false"/> <param name="menu" value="false"/> <param name="quality" value="best" /> <param name="bgcolor" value="#ffffff"/> <param name="wmode" value="transparent"/> <param name="flashvars" value="' + flashvars + '"/> <embed src="' + client.options.moviePath + _noCache(client.options.moviePath, client.options) + '" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="100%" height="100%" name="global-zeroclipboard-flash-bridge" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="' + flashvars + '" scale="exactfit"> </embed> </object>';
628
+ var swfUrl = _globalConfig.moviePath + _cacheBust(_globalConfig.moviePath, _globalConfig);
629
+ var html = ' <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="global-zeroclipboard-flash-bridge" width="100%" height="100%"> <param name="movie" value="' + swfUrl + '"/> <param name="allowScriptAccess" value="' + allowScriptAccess + '"/> <param name="scale" value="exactfit"/> <param name="loop" value="false"/> <param name="menu" value="false"/> <param name="quality" value="best" /> <param name="bgcolor" value="#ffffff"/> <param name="wmode" value="transparent"/> <param name="flashvars" value="' + flashvars + '"/> <embed src="' + swfUrl + '" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="100%" height="100%" name="global-zeroclipboard-flash-bridge" allowScriptAccess="' + allowScriptAccess + '" allowFullScreen="false" type="application/x-shockwave-flash" wmode="transparent" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="' + flashvars + '" scale="exactfit"> </embed> </object>';
313
630
  container = document.createElement("div");
314
631
  container.id = "global-zeroclipboard-html-bridge";
315
632
  container.setAttribute("class", "global-zeroclipboard-container");
316
- container.setAttribute("data-clipboard-ready", false);
317
633
  container.style.position = "absolute";
318
- container.style.left = "-9999px";
634
+ container.style.left = "0px";
319
635
  container.style.top = "-9999px";
320
636
  container.style.width = "15px";
321
637
  container.style.height = "15px";
322
- container.style.zIndex = "9999";
323
- container.innerHTML = html;
638
+ container.style.zIndex = "" + _getSafeZIndex(_globalConfig.zIndex);
324
639
  document.body.appendChild(container);
640
+ container.innerHTML = html;
325
641
  }
326
- client.htmlBridge = container;
327
642
  flashBridge = document["global-zeroclipboard-flash-bridge"];
328
643
  if (flashBridge && (len = flashBridge.length)) {
329
644
  flashBridge = flashBridge[len - 1];
330
645
  }
331
- client.flashBridge = flashBridge || container.children[0].lastElementChild;
332
- };
333
- ZeroClipboard.prototype.resetBridge = function() {
334
- this.htmlBridge.style.left = "-9999px";
335
- this.htmlBridge.style.top = "-9999px";
336
- this.htmlBridge.removeAttribute("title");
337
- this.htmlBridge.removeAttribute("data-clipboard-text");
338
- _removeClass(currentElement, this.options.activeClass);
339
- currentElement = null;
340
- this.options.text = null;
646
+ flashState.bridge = flashBridge || container.children[0].lastElementChild;
647
+ };
648
+ var _getHtmlBridge = function(flashBridge) {
649
+ var isFlashElement = /^OBJECT|EMBED$/;
650
+ var htmlBridge = flashBridge && flashBridge.parentNode;
651
+ while (htmlBridge && isFlashElement.test(htmlBridge.nodeName) && htmlBridge.parentNode) {
652
+ htmlBridge = htmlBridge.parentNode;
653
+ }
654
+ return htmlBridge || null;
655
+ };
656
+ var _reposition = function() {
657
+ if (currentElement) {
658
+ var pos = _getDOMObjectPosition(currentElement, _globalConfig.zIndex);
659
+ var htmlBridge = _getHtmlBridge(flashState.bridge);
660
+ if (htmlBridge) {
661
+ htmlBridge.style.top = pos.top + "px";
662
+ htmlBridge.style.left = pos.left + "px";
663
+ htmlBridge.style.width = pos.width + "px";
664
+ htmlBridge.style.height = pos.height + "px";
665
+ htmlBridge.style.zIndex = pos.zIndex + 1;
666
+ }
667
+ if (flashState.ready === true && flashState.bridge) {
668
+ flashState.bridge.setSize(pos.width, pos.height);
669
+ }
670
+ }
341
671
  return this;
342
672
  };
343
- ZeroClipboard.prototype.ready = function() {
344
- var ready = this.htmlBridge.getAttribute("data-clipboard-ready");
345
- return ready === "true" || ready === true;
673
+ ZeroClipboard.prototype.on = function(eventName, func) {
674
+ var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;
675
+ if (typeof eventName === "string" && eventName) {
676
+ events = eventName.toLowerCase().split(/\s+/);
677
+ } else if (typeof eventName === "object" && eventName && typeof func === "undefined") {
678
+ for (i in eventName) {
679
+ if (eventName.hasOwnProperty(i) && typeof i === "string" && i && typeof eventName[i] === "function") {
680
+ this.on(i, eventName[i]);
681
+ }
682
+ }
683
+ }
684
+ if (events && events.length) {
685
+ for (i = 0, len = events.length; i < len; i++) {
686
+ eventName = events[i].replace(/^on/, "");
687
+ added[eventName] = true;
688
+ if (!handlers[eventName]) {
689
+ handlers[eventName] = [];
690
+ }
691
+ handlers[eventName].push(func);
692
+ }
693
+ if (added.noflash && flashState.disabled) {
694
+ _receiveEvent.call(this, "noflash", {});
695
+ }
696
+ if (added.wrongflash && flashState.outdated) {
697
+ _receiveEvent.call(this, "wrongflash", {
698
+ flashVersion: flashState.version
699
+ });
700
+ }
701
+ if (added.load && flashState.ready) {
702
+ _receiveEvent.call(this, "load", {
703
+ flashVersion: flashState.version
704
+ });
705
+ }
706
+ }
707
+ return this;
346
708
  };
347
- ZeroClipboard.prototype.reposition = function() {
348
- if (!currentElement) return false;
349
- var pos = _getDOMObjectPosition(currentElement);
350
- this.htmlBridge.style.top = pos.top + "px";
351
- this.htmlBridge.style.left = pos.left + "px";
352
- this.htmlBridge.style.width = pos.width + "px";
353
- this.htmlBridge.style.height = pos.height + "px";
354
- this.htmlBridge.style.zIndex = pos.zIndex + 1;
355
- this.setSize(pos.width, pos.height);
709
+ ZeroClipboard.prototype.off = function(eventName, func) {
710
+ var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;
711
+ if (arguments.length === 0) {
712
+ events = _objectKeys(handlers);
713
+ } else if (typeof eventName === "string" && eventName) {
714
+ events = eventName.split(/\s+/);
715
+ } else if (typeof eventName === "object" && eventName && typeof func === "undefined") {
716
+ for (i in eventName) {
717
+ if (eventName.hasOwnProperty(i) && typeof i === "string" && i && typeof eventName[i] === "function") {
718
+ this.off(i, eventName[i]);
719
+ }
720
+ }
721
+ }
722
+ if (events && events.length) {
723
+ for (i = 0, len = events.length; i < len; i++) {
724
+ eventName = events[i].toLowerCase().replace(/^on/, "");
725
+ perEventHandlers = handlers[eventName];
726
+ if (perEventHandlers && perEventHandlers.length) {
727
+ if (func) {
728
+ foundIndex = _inArray(func, perEventHandlers);
729
+ while (foundIndex !== -1) {
730
+ perEventHandlers.splice(foundIndex, 1);
731
+ foundIndex = _inArray(func, perEventHandlers, foundIndex);
732
+ }
733
+ } else {
734
+ handlers[eventName].length = 0;
735
+ }
736
+ }
737
+ }
738
+ }
356
739
  return this;
357
740
  };
358
- ZeroClipboard.dispatch = function(eventName, args) {
359
- ZeroClipboard.prototype._singleton.receiveEvent(eventName, args);
741
+ ZeroClipboard.prototype.handlers = function(eventName) {
742
+ var prop, copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;
743
+ if (handlers) {
744
+ if (typeof eventName === "string" && eventName) {
745
+ return handlers[eventName] ? handlers[eventName].slice(0) : null;
746
+ }
747
+ copy = {};
748
+ for (prop in handlers) {
749
+ if (handlers.hasOwnProperty(prop) && handlers[prop]) {
750
+ copy[prop] = handlers[prop].slice(0);
751
+ }
752
+ }
753
+ }
754
+ return copy;
755
+ };
756
+ var _dispatchClientCallbacks = function(eventName, context, args, async) {
757
+ var handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[eventName];
758
+ if (handlers && handlers.length) {
759
+ var i, len, func, originalContext = context || this;
760
+ for (i = 0, len = handlers.length; i < len; i++) {
761
+ func = handlers[i];
762
+ context = originalContext;
763
+ if (typeof func === "string" && typeof window[func] === "function") {
764
+ func = window[func];
765
+ }
766
+ if (typeof func === "object" && func && typeof func.handleEvent === "function") {
767
+ context = func;
768
+ func = func.handleEvent;
769
+ }
770
+ if (typeof func === "function") {
771
+ _dispatchCallback(func, context, args, async);
772
+ }
773
+ }
774
+ }
775
+ return this;
360
776
  };
361
- ZeroClipboard.prototype.on = function(eventName, func) {
362
- var events = eventName.toString().split(/\s/g);
363
- for (var i = 0; i < events.length; i++) {
364
- eventName = events[i].toLowerCase().replace(/^on/, "");
365
- if (!this.handlers[eventName]) this.handlers[eventName] = func;
777
+ ZeroClipboard.prototype.clip = function(elements) {
778
+ elements = _prepClip(elements);
779
+ for (var i = 0; i < elements.length; i++) {
780
+ if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {
781
+ if (!elements[i].zcClippingId) {
782
+ elements[i].zcClippingId = "zcClippingId_" + elementIdCounter++;
783
+ _elementMeta[elements[i].zcClippingId] = [ this.id ];
784
+ if (_globalConfig.autoActivate === true) {
785
+ _addEventHandler(elements[i], "mouseover", _elementMouseOver);
786
+ }
787
+ } else if (_inArray(this.id, _elementMeta[elements[i].zcClippingId]) === -1) {
788
+ _elementMeta[elements[i].zcClippingId].push(this.id);
789
+ }
790
+ var clippedElements = _clientMeta[this.id].elements;
791
+ if (_inArray(elements[i], clippedElements) === -1) {
792
+ clippedElements.push(elements[i]);
793
+ }
794
+ }
366
795
  }
367
- if (this.handlers.noflash && !ZeroClipboard.detectFlashSupport()) {
368
- this.receiveEvent("onNoFlash", null);
796
+ return this;
797
+ };
798
+ ZeroClipboard.prototype.unclip = function(elements) {
799
+ var meta = _clientMeta[this.id];
800
+ if (meta) {
801
+ var clippedElements = meta.elements;
802
+ var arrayIndex;
803
+ if (typeof elements === "undefined") {
804
+ elements = clippedElements.slice(0);
805
+ } else {
806
+ elements = _prepClip(elements);
807
+ }
808
+ for (var i = elements.length; i--; ) {
809
+ if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {
810
+ arrayIndex = 0;
811
+ while ((arrayIndex = _inArray(elements[i], clippedElements, arrayIndex)) !== -1) {
812
+ clippedElements.splice(arrayIndex, 1);
813
+ }
814
+ var clientIds = _elementMeta[elements[i].zcClippingId];
815
+ if (clientIds) {
816
+ arrayIndex = 0;
817
+ while ((arrayIndex = _inArray(this.id, clientIds, arrayIndex)) !== -1) {
818
+ clientIds.splice(arrayIndex, 1);
819
+ }
820
+ if (clientIds.length === 0) {
821
+ if (_globalConfig.autoActivate === true) {
822
+ _removeEventHandler(elements[i], "mouseover", _elementMouseOver);
823
+ }
824
+ delete elements[i].zcClippingId;
825
+ }
826
+ }
827
+ }
828
+ }
369
829
  }
370
830
  return this;
371
831
  };
372
- ZeroClipboard.prototype.addEventListener = ZeroClipboard.prototype.on;
373
- ZeroClipboard.prototype.off = function(eventName, func) {
374
- var events = eventName.toString().split(/\s/g);
375
- for (var i = 0; i < events.length; i++) {
376
- eventName = events[i].toLowerCase().replace(/^on/, "");
377
- for (var event in this.handlers) {
378
- if (event === eventName && this.handlers[event] === func) {
379
- delete this.handlers[event];
832
+ ZeroClipboard.prototype.elements = function() {
833
+ var meta = _clientMeta[this.id];
834
+ return meta && meta.elements ? meta.elements.slice(0) : [];
835
+ };
836
+ var _getAllClientsClippedToElement = function(element) {
837
+ var elementMetaId, clientIds, i, len, client, clients = [];
838
+ if (element && element.nodeType === 1 && (elementMetaId = element.zcClippingId) && _elementMeta.hasOwnProperty(elementMetaId)) {
839
+ clientIds = _elementMeta[elementMetaId];
840
+ if (clientIds && clientIds.length) {
841
+ for (i = 0, len = clientIds.length; i < len; i++) {
842
+ client = _clientMeta[clientIds[i]].instance;
843
+ if (client && client instanceof ZeroClipboard) {
844
+ clients.push(client);
845
+ }
380
846
  }
381
847
  }
382
848
  }
849
+ return clients;
850
+ };
851
+ _globalConfig.hoverClass = "zeroclipboard-is-hover";
852
+ _globalConfig.activeClass = "zeroclipboard-is-active";
853
+ _globalConfig.trustedOrigins = null;
854
+ _globalConfig.allowScriptAccess = null;
855
+ _globalConfig.useNoCache = true;
856
+ _globalConfig.moviePath = "ZeroClipboard.swf";
857
+ ZeroClipboard.detectFlashSupport = function() {
858
+ _deprecationWarning("ZeroClipboard.detectFlashSupport", _globalConfig.debug);
859
+ return _detectFlashSupport();
860
+ };
861
+ ZeroClipboard.dispatch = function(eventName, args) {
862
+ if (typeof eventName === "string" && eventName) {
863
+ var cleanEventName = eventName.toLowerCase().replace(/^on/, "");
864
+ if (cleanEventName) {
865
+ var clients = currentElement ? _getAllClientsClippedToElement(currentElement) : _getAllClients();
866
+ for (var i = 0, len = clients.length; i < len; i++) {
867
+ _receiveEvent.call(clients[i], cleanEventName, args);
868
+ }
869
+ }
870
+ }
871
+ };
872
+ ZeroClipboard.prototype.setHandCursor = function(enabled) {
873
+ _deprecationWarning("ZeroClipboard.prototype.setHandCursor", _globalConfig.debug);
874
+ enabled = typeof enabled === "boolean" ? enabled : !!enabled;
875
+ _setHandCursor(enabled);
876
+ _globalConfig.forceHandCursor = enabled;
383
877
  return this;
384
878
  };
385
- ZeroClipboard.prototype.removeEventListener = ZeroClipboard.prototype.off;
879
+ ZeroClipboard.prototype.reposition = function() {
880
+ _deprecationWarning("ZeroClipboard.prototype.reposition", _globalConfig.debug);
881
+ return _reposition();
882
+ };
386
883
  ZeroClipboard.prototype.receiveEvent = function(eventName, args) {
387
- eventName = eventName.toString().toLowerCase().replace(/^on/, "");
884
+ _deprecationWarning("ZeroClipboard.prototype.receiveEvent", _globalConfig.debug);
885
+ if (typeof eventName === "string" && eventName) {
886
+ var cleanEventName = eventName.toLowerCase().replace(/^on/, "");
887
+ if (cleanEventName) {
888
+ _receiveEvent.call(this, cleanEventName, args);
889
+ }
890
+ }
891
+ };
892
+ ZeroClipboard.prototype.setCurrent = function(element) {
893
+ _deprecationWarning("ZeroClipboard.prototype.setCurrent", _globalConfig.debug);
894
+ ZeroClipboard.activate(element);
895
+ return this;
896
+ };
897
+ ZeroClipboard.prototype.resetBridge = function() {
898
+ _deprecationWarning("ZeroClipboard.prototype.resetBridge", _globalConfig.debug);
899
+ ZeroClipboard.deactivate();
900
+ return this;
901
+ };
902
+ ZeroClipboard.prototype.setTitle = function(newTitle) {
903
+ _deprecationWarning("ZeroClipboard.prototype.setTitle", _globalConfig.debug);
904
+ newTitle = newTitle || _globalConfig.title || currentElement && currentElement.getAttribute("title");
905
+ if (newTitle) {
906
+ var htmlBridge = _getHtmlBridge(flashState.bridge);
907
+ if (htmlBridge) {
908
+ htmlBridge.setAttribute("title", newTitle);
909
+ }
910
+ }
911
+ return this;
912
+ };
913
+ ZeroClipboard.setDefaults = function(options) {
914
+ _deprecationWarning("ZeroClipboard.setDefaults", _globalConfig.debug);
915
+ ZeroClipboard.config(options);
916
+ };
917
+ ZeroClipboard.prototype.addEventListener = function(eventName, func) {
918
+ _deprecationWarning("ZeroClipboard.prototype.addEventListener", _globalConfig.debug);
919
+ return this.on(eventName, func);
920
+ };
921
+ ZeroClipboard.prototype.removeEventListener = function(eventName, func) {
922
+ _deprecationWarning("ZeroClipboard.prototype.removeEventListener", _globalConfig.debug);
923
+ return this.off(eventName, func);
924
+ };
925
+ ZeroClipboard.prototype.ready = function() {
926
+ _deprecationWarning("ZeroClipboard.prototype.ready", _globalConfig.debug);
927
+ return flashState.ready === true;
928
+ };
929
+ var _receiveEvent = function(eventName, args) {
930
+ eventName = eventName.toLowerCase().replace(/^on/, "");
931
+ var cleanVersion = args && args.flashVersion && _parseFlashVersion(args.flashVersion) || null;
388
932
  var element = currentElement;
389
933
  var performCallbackAsync = true;
390
934
  switch (eventName) {
391
935
  case "load":
392
- if (args && parseFloat(args.flashVersion.replace(",", ".").replace(/[^0-9\.]/gi, "")) < 10) {
393
- this.receiveEvent("onWrongFlash", {
394
- flashVersion: args.flashVersion
395
- });
396
- return;
936
+ if (cleanVersion) {
937
+ if (!_isFlashVersionSupported(cleanVersion)) {
938
+ _receiveEvent.call(this, "onWrongFlash", {
939
+ flashVersion: cleanVersion
940
+ });
941
+ return;
942
+ }
943
+ flashState.outdated = false;
944
+ flashState.ready = true;
945
+ flashState.version = cleanVersion;
946
+ }
947
+ break;
948
+
949
+ case "wrongflash":
950
+ if (cleanVersion && !_isFlashVersionSupported(cleanVersion)) {
951
+ flashState.outdated = true;
952
+ flashState.ready = false;
953
+ flashState.version = cleanVersion;
397
954
  }
398
- this.htmlBridge.setAttribute("data-clipboard-ready", true);
399
955
  break;
400
956
 
401
957
  case "mouseover":
402
- _addClass(element, this.options.hoverClass);
958
+ _addClass(element, _globalConfig.hoverClass);
403
959
  break;
404
960
 
405
961
  case "mouseout":
406
- _removeClass(element, this.options.hoverClass);
407
- this.resetBridge();
962
+ if (_globalConfig.autoActivate === true) {
963
+ ZeroClipboard.deactivate();
964
+ }
408
965
  break;
409
966
 
410
967
  case "mousedown":
411
- _addClass(element, this.options.activeClass);
968
+ _addClass(element, _globalConfig.activeClass);
412
969
  break;
413
970
 
414
971
  case "mouseup":
415
- _removeClass(element, this.options.activeClass);
972
+ _removeClass(element, _globalConfig.activeClass);
416
973
  break;
417
974
 
418
975
  case "datarequested":
419
976
  var targetId = element.getAttribute("data-clipboard-target"), targetEl = !targetId ? null : document.getElementById(targetId);
420
977
  if (targetEl) {
421
978
  var textContent = targetEl.value || targetEl.textContent || targetEl.innerText;
422
- if (textContent) this.setText(textContent);
979
+ if (textContent) {
980
+ this.setText(textContent);
981
+ }
423
982
  } else {
424
983
  var defaultText = element.getAttribute("data-clipboard-text");
425
- if (defaultText) this.setText(defaultText);
984
+ if (defaultText) {
985
+ this.setText(defaultText);
986
+ }
426
987
  }
427
988
  performCallbackAsync = false;
428
989
  break;
429
990
 
430
991
  case "complete":
431
- this.options.text = null;
992
+ _deleteOwnProperties(_clipData);
432
993
  break;
433
994
  }
434
- if (this.handlers[eventName]) {
435
- var func = this.handlers[eventName];
436
- if (typeof func === "string" && typeof window[func] === "function") {
437
- func = window[func];
438
- }
439
- if (typeof func === "function") {
440
- _dispatchCallback(func, element, this, args, performCallbackAsync);
441
- }
442
- }
443
- };
444
- ZeroClipboard.prototype.glue = function(elements) {
445
- elements = _prepGlue(elements);
446
- for (var i = 0; i < elements.length; i++) {
447
- if (_inArray(elements[i], gluedElements) == -1) {
448
- gluedElements.push(elements[i]);
449
- _addEventHandler(elements[i], "mouseover", _elementMouseOver);
450
- }
451
- }
452
- return this;
453
- };
454
- ZeroClipboard.prototype.unglue = function(elements) {
455
- elements = _prepGlue(elements);
456
- for (var i = 0; i < elements.length; i++) {
457
- _removeEventHandler(elements[i], "mouseover", _elementMouseOver);
458
- var arrayIndex = _inArray(elements[i], gluedElements);
459
- if (arrayIndex != -1) gluedElements.splice(arrayIndex, 1);
460
- }
461
- return this;
995
+ var context = element;
996
+ var eventArgs = [ this, args ];
997
+ return _dispatchClientCallbacks.call(this, eventName, context, eventArgs, performCallbackAsync);
462
998
  };
463
999
  if (typeof define === "function" && define.amd) {
464
1000
  define([ "require", "exports", "module" ], function(require, exports, module) {
@@ -471,4 +1007,4 @@
471
1007
  } else {
472
1008
  window.ZeroClipboard = ZeroClipboard;
473
1009
  }
474
- })();
1010
+ })();
@@ -1,5 +1,5 @@
1
1
  module Zeroclipboard
2
2
  module Rails
3
- VERSION = "0.0.10"
3
+ VERSION = "0.0.11"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zeroclipboard-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henrik Wenz
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-25 00:00:00.000000000 Z
12
+ date: 2014-01-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
@@ -60,7 +60,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
60
  version: '0'
61
61
  requirements: []
62
62
  rubyforge_project:
63
- rubygems_version: 2.0.3
63
+ rubygems_version: 2.0.14
64
64
  signing_key:
65
65
  specification_version: 4
66
66
  summary: Adds the Javascript ZeroClipboard libary to Rails