zeroclipboard-rails 0.0.10 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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