root / snf-cyclades-app / synnefo / ui / static / snf / js / lib / jquery.zclip.js @ 3b463c5a
History | View | Annotate | Download (16.3 kB)
1 | 35584d80 | Kostas Papadimitriou | /*
|
---|---|---|---|
2 | 35584d80 | Kostas Papadimitriou | * zClip :: jQuery ZeroClipboard v1.1.1
|
3 | 35584d80 | Kostas Papadimitriou | * http://steamdev.com/zclip
|
4 | 35584d80 | Kostas Papadimitriou | *
|
5 | 35584d80 | Kostas Papadimitriou | * Copyright 2011, SteamDev
|
6 | 35584d80 | Kostas Papadimitriou | * Released under the MIT license.
|
7 | 35584d80 | Kostas Papadimitriou | * http://www.opensource.org/licenses/mit-license.php
|
8 | 35584d80 | Kostas Papadimitriou | *
|
9 | 35584d80 | Kostas Papadimitriou | * Date: Wed Jun 01, 2011
|
10 | 35584d80 | Kostas Papadimitriou | */
|
11 | 35584d80 | Kostas Papadimitriou | |
12 | 35584d80 | Kostas Papadimitriou | |
13 | 35584d80 | Kostas Papadimitriou | (function ($) { |
14 | 35584d80 | Kostas Papadimitriou | |
15 | 35584d80 | Kostas Papadimitriou | $.fn.zclip = function (params) { |
16 | 35584d80 | Kostas Papadimitriou | |
17 | 35584d80 | Kostas Papadimitriou | if (typeof params == "object" && !params.length) { |
18 | 35584d80 | Kostas Papadimitriou | |
19 | 35584d80 | Kostas Papadimitriou | var settings = $.extend({ |
20 | 35584d80 | Kostas Papadimitriou | |
21 | 35584d80 | Kostas Papadimitriou | path: 'ZeroClipboard.swf', |
22 | 35584d80 | Kostas Papadimitriou | copy: null, |
23 | 35584d80 | Kostas Papadimitriou | beforeCopy: null, |
24 | 35584d80 | Kostas Papadimitriou | afterCopy: null, |
25 | 35584d80 | Kostas Papadimitriou | clickAfter: true, |
26 | 35584d80 | Kostas Papadimitriou | setHandCursor: true, |
27 | 35584d80 | Kostas Papadimitriou | setCSSEffects: true |
28 | 35584d80 | Kostas Papadimitriou | |
29 | 35584d80 | Kostas Papadimitriou | }, params); |
30 | 35584d80 | Kostas Papadimitriou | |
31 | 35584d80 | Kostas Papadimitriou | |
32 | 35584d80 | Kostas Papadimitriou | return this.each(function () { |
33 | 35584d80 | Kostas Papadimitriou | |
34 | 35584d80 | Kostas Papadimitriou | var o = $(this); |
35 | 35584d80 | Kostas Papadimitriou | |
36 | 35584d80 | Kostas Papadimitriou | if (o.is(':visible') && (typeof settings.copy == 'string' || $.isFunction(settings.copy))) { |
37 | 35584d80 | Kostas Papadimitriou | ZeroClipboard.setMoviePath(settings.path); |
38 | 35584d80 | Kostas Papadimitriou | var clip = new ZeroClipboard.Client(); |
39 | 35584d80 | Kostas Papadimitriou | |
40 | 35584d80 | Kostas Papadimitriou | if($.isFunction(settings.copy)){ |
41 | 35584d80 | Kostas Papadimitriou | o.bind('zClip_copy',settings.copy);
|
42 | 35584d80 | Kostas Papadimitriou | } |
43 | 35584d80 | Kostas Papadimitriou | if($.isFunction(settings.beforeCopy)){ |
44 | 35584d80 | Kostas Papadimitriou | o.bind('zClip_beforeCopy',settings.beforeCopy);
|
45 | 35584d80 | Kostas Papadimitriou | } |
46 | 35584d80 | Kostas Papadimitriou | if($.isFunction(settings.afterCopy)){ |
47 | 35584d80 | Kostas Papadimitriou | o.bind('zClip_afterCopy',settings.afterCopy);
|
48 | 35584d80 | Kostas Papadimitriou | } |
49 | 35584d80 | Kostas Papadimitriou | |
50 | 35584d80 | Kostas Papadimitriou | clip.setHandCursor(settings.setHandCursor); |
51 | 35584d80 | Kostas Papadimitriou | clip.setCSSEffects(settings.setCSSEffects); |
52 | 35584d80 | Kostas Papadimitriou | clip.addEventListener('mouseOver', function (client) { |
53 | 35584d80 | Kostas Papadimitriou | o.trigger('mouseenter');
|
54 | 35584d80 | Kostas Papadimitriou | }); |
55 | 35584d80 | Kostas Papadimitriou | clip.addEventListener('mouseOut', function (client) { |
56 | 35584d80 | Kostas Papadimitriou | o.trigger('mouseleave');
|
57 | 35584d80 | Kostas Papadimitriou | }); |
58 | 35584d80 | Kostas Papadimitriou | clip.addEventListener('mouseDown', function (client) { |
59 | 35584d80 | Kostas Papadimitriou | |
60 | 35584d80 | Kostas Papadimitriou | o.trigger('mousedown');
|
61 | 35584d80 | Kostas Papadimitriou | |
62 | 35584d80 | Kostas Papadimitriou | if(!$.isFunction(settings.copy)){ |
63 | 35584d80 | Kostas Papadimitriou | clip.setText(settings.copy); |
64 | 35584d80 | Kostas Papadimitriou | } else {
|
65 | 35584d80 | Kostas Papadimitriou | clip.setText(o.triggerHandler('zClip_copy'));
|
66 | 35584d80 | Kostas Papadimitriou | } |
67 | 35584d80 | Kostas Papadimitriou | |
68 | 35584d80 | Kostas Papadimitriou | if ($.isFunction(settings.beforeCopy)) { |
69 | 35584d80 | Kostas Papadimitriou | o.trigger('zClip_beforeCopy');
|
70 | 35584d80 | Kostas Papadimitriou | } |
71 | 35584d80 | Kostas Papadimitriou | |
72 | 35584d80 | Kostas Papadimitriou | }); |
73 | 35584d80 | Kostas Papadimitriou | |
74 | 35584d80 | Kostas Papadimitriou | clip.addEventListener('complete', function (client, text) { |
75 | 35584d80 | Kostas Papadimitriou | |
76 | 35584d80 | Kostas Papadimitriou | if ($.isFunction(settings.afterCopy)) { |
77 | 35584d80 | Kostas Papadimitriou | |
78 | 35584d80 | Kostas Papadimitriou | o.trigger('zClip_afterCopy');
|
79 | 35584d80 | Kostas Papadimitriou | |
80 | 35584d80 | Kostas Papadimitriou | } else {
|
81 | 35584d80 | Kostas Papadimitriou | if (text.length > 500) { |
82 | 35584d80 | Kostas Papadimitriou | text = text.substr(0, 500) + "...\n\n(" + (text.length - 500) + " characters not shown)"; |
83 | 35584d80 | Kostas Papadimitriou | } |
84 | 35584d80 | Kostas Papadimitriou | |
85 | 35584d80 | Kostas Papadimitriou | o.removeClass('hover');
|
86 | 35584d80 | Kostas Papadimitriou | } |
87 | 35584d80 | Kostas Papadimitriou | |
88 | 35584d80 | Kostas Papadimitriou | if (settings.clickAfter) {
|
89 | 35584d80 | Kostas Papadimitriou | o.trigger('click');
|
90 | 35584d80 | Kostas Papadimitriou | } |
91 | 35584d80 | Kostas Papadimitriou | |
92 | 35584d80 | Kostas Papadimitriou | }); |
93 | 35584d80 | Kostas Papadimitriou | |
94 | 35584d80 | Kostas Papadimitriou | |
95 | 35584d80 | Kostas Papadimitriou | clip.glue(o[0], o.parent()[0]); |
96 | 35584d80 | Kostas Papadimitriou | |
97 | 35584d80 | Kostas Papadimitriou | $(window).bind('load resize',function(){clip.reposition();}); |
98 | 35584d80 | Kostas Papadimitriou | |
99 | 35584d80 | Kostas Papadimitriou | |
100 | 35584d80 | Kostas Papadimitriou | } |
101 | 35584d80 | Kostas Papadimitriou | |
102 | 35584d80 | Kostas Papadimitriou | }); |
103 | 35584d80 | Kostas Papadimitriou | |
104 | 35584d80 | Kostas Papadimitriou | } else if (typeof params == "string") { |
105 | 35584d80 | Kostas Papadimitriou | |
106 | 35584d80 | Kostas Papadimitriou | return this.each(function () { |
107 | 35584d80 | Kostas Papadimitriou | |
108 | 35584d80 | Kostas Papadimitriou | var o = $(this); |
109 | 35584d80 | Kostas Papadimitriou | |
110 | 35584d80 | Kostas Papadimitriou | params = params.toLowerCase(); |
111 | 35584d80 | Kostas Papadimitriou | var zclipId = o.data('zclipId'); |
112 | 35584d80 | Kostas Papadimitriou | var clipElm = $('#' + zclipId + '.zclip'); |
113 | 35584d80 | Kostas Papadimitriou | |
114 | 35584d80 | Kostas Papadimitriou | if (params == "remove") { |
115 | 35584d80 | Kostas Papadimitriou | |
116 | 35584d80 | Kostas Papadimitriou | clipElm.remove(); |
117 | 35584d80 | Kostas Papadimitriou | o.removeClass('active hover');
|
118 | 35584d80 | Kostas Papadimitriou | |
119 | 35584d80 | Kostas Papadimitriou | } else if (params == "hide") { |
120 | 35584d80 | Kostas Papadimitriou | |
121 | 35584d80 | Kostas Papadimitriou | clipElm.hide(); |
122 | 35584d80 | Kostas Papadimitriou | o.removeClass('active hover');
|
123 | 35584d80 | Kostas Papadimitriou | |
124 | 35584d80 | Kostas Papadimitriou | } else if (params == "show") { |
125 | 35584d80 | Kostas Papadimitriou | |
126 | 35584d80 | Kostas Papadimitriou | clipElm.show(); |
127 | 35584d80 | Kostas Papadimitriou | |
128 | 35584d80 | Kostas Papadimitriou | } |
129 | 35584d80 | Kostas Papadimitriou | |
130 | 35584d80 | Kostas Papadimitriou | }); |
131 | 35584d80 | Kostas Papadimitriou | |
132 | 35584d80 | Kostas Papadimitriou | } |
133 | 35584d80 | Kostas Papadimitriou | |
134 | 35584d80 | Kostas Papadimitriou | } |
135 | 35584d80 | Kostas Papadimitriou | |
136 | 35584d80 | Kostas Papadimitriou | |
137 | 35584d80 | Kostas Papadimitriou | |
138 | 35584d80 | Kostas Papadimitriou | })(jQuery); |
139 | 35584d80 | Kostas Papadimitriou | |
140 | 35584d80 | Kostas Papadimitriou | |
141 | 35584d80 | Kostas Papadimitriou | |
142 | 35584d80 | Kostas Papadimitriou | |
143 | 35584d80 | Kostas Papadimitriou | |
144 | 35584d80 | Kostas Papadimitriou | |
145 | 35584d80 | Kostas Papadimitriou | |
146 | 35584d80 | Kostas Papadimitriou | // ZeroClipboard
|
147 | 35584d80 | Kostas Papadimitriou | // Simple Set Clipboard System
|
148 | 35584d80 | Kostas Papadimitriou | // Author: Joseph Huckaby
|
149 | 35584d80 | Kostas Papadimitriou | var ZeroClipboard = {
|
150 | 35584d80 | Kostas Papadimitriou | |
151 | 35584d80 | Kostas Papadimitriou | version: "1.0.7", |
152 | 35584d80 | Kostas Papadimitriou | clients: {},
|
153 | 35584d80 | Kostas Papadimitriou | // registered upload clients on page, indexed by id
|
154 | 35584d80 | Kostas Papadimitriou | moviePath: 'ZeroClipboard.swf', |
155 | 35584d80 | Kostas Papadimitriou | // URL to movie
|
156 | 35584d80 | Kostas Papadimitriou | nextId: 1, |
157 | 35584d80 | Kostas Papadimitriou | // ID of next movie
|
158 | 35584d80 | Kostas Papadimitriou | $: function (thingy) { |
159 | 35584d80 | Kostas Papadimitriou | // simple DOM lookup utility function
|
160 | 35584d80 | Kostas Papadimitriou | if (typeof(thingy) == 'string') thingy = document.getElementById(thingy); |
161 | 35584d80 | Kostas Papadimitriou | if (!thingy.addClass) {
|
162 | 35584d80 | Kostas Papadimitriou | // extend element with a few useful methods
|
163 | 35584d80 | Kostas Papadimitriou | thingy.hide = function () { |
164 | 35584d80 | Kostas Papadimitriou | this.style.display = 'none'; |
165 | 35584d80 | Kostas Papadimitriou | }; |
166 | 35584d80 | Kostas Papadimitriou | thingy.show = function () { |
167 | 35584d80 | Kostas Papadimitriou | this.style.display = ''; |
168 | 35584d80 | Kostas Papadimitriou | }; |
169 | 35584d80 | Kostas Papadimitriou | thingy.addClass = function (name) { |
170 | 35584d80 | Kostas Papadimitriou | this.removeClass(name);
|
171 | 35584d80 | Kostas Papadimitriou | this.className += ' ' + name; |
172 | 35584d80 | Kostas Papadimitriou | }; |
173 | 35584d80 | Kostas Papadimitriou | thingy.removeClass = function (name) { |
174 | 35584d80 | Kostas Papadimitriou | var classes = this.className.split(/\s+/); |
175 | 35584d80 | Kostas Papadimitriou | var idx = -1; |
176 | 35584d80 | Kostas Papadimitriou | for (var k = 0; k < classes.length; k++) { |
177 | 35584d80 | Kostas Papadimitriou | if (classes[k] == name) {
|
178 | 35584d80 | Kostas Papadimitriou | idx = k; |
179 | 35584d80 | Kostas Papadimitriou | k = classes.length; |
180 | 35584d80 | Kostas Papadimitriou | } |
181 | 35584d80 | Kostas Papadimitriou | } |
182 | 35584d80 | Kostas Papadimitriou | if (idx > -1) { |
183 | 35584d80 | Kostas Papadimitriou | classes.splice(idx, 1);
|
184 | 35584d80 | Kostas Papadimitriou | this.className = classes.join(' '); |
185 | 35584d80 | Kostas Papadimitriou | } |
186 | 35584d80 | Kostas Papadimitriou | return this; |
187 | 35584d80 | Kostas Papadimitriou | }; |
188 | 35584d80 | Kostas Papadimitriou | thingy.hasClass = function (name) { |
189 | 35584d80 | Kostas Papadimitriou | return !!this.className.match(new RegExp("\\s*" + name + "\\s*")); |
190 | 35584d80 | Kostas Papadimitriou | }; |
191 | 35584d80 | Kostas Papadimitriou | } |
192 | 35584d80 | Kostas Papadimitriou | return thingy;
|
193 | 35584d80 | Kostas Papadimitriou | }, |
194 | 35584d80 | Kostas Papadimitriou | |
195 | 35584d80 | Kostas Papadimitriou | setMoviePath: function (path) { |
196 | 35584d80 | Kostas Papadimitriou | // set path to ZeroClipboard.swf
|
197 | 35584d80 | Kostas Papadimitriou | this.moviePath = path;
|
198 | 35584d80 | Kostas Papadimitriou | }, |
199 | 35584d80 | Kostas Papadimitriou | |
200 | 35584d80 | Kostas Papadimitriou | dispatch: function (id, eventName, args) { |
201 | 35584d80 | Kostas Papadimitriou | // receive event from flash movie, send to client
|
202 | 35584d80 | Kostas Papadimitriou | var client = this.clients[id]; |
203 | 35584d80 | Kostas Papadimitriou | if (client) {
|
204 | 35584d80 | Kostas Papadimitriou | client.receiveEvent(eventName, args); |
205 | 35584d80 | Kostas Papadimitriou | } |
206 | 35584d80 | Kostas Papadimitriou | }, |
207 | 35584d80 | Kostas Papadimitriou | |
208 | 35584d80 | Kostas Papadimitriou | register: function (id, client) { |
209 | 35584d80 | Kostas Papadimitriou | // register new client to receive events
|
210 | 35584d80 | Kostas Papadimitriou | this.clients[id] = client;
|
211 | 35584d80 | Kostas Papadimitriou | }, |
212 | 35584d80 | Kostas Papadimitriou | |
213 | 35584d80 | Kostas Papadimitriou | getDOMObjectPosition: function (obj, stopObj) { |
214 | 35584d80 | Kostas Papadimitriou | // get absolute coordinates for dom element
|
215 | 35584d80 | Kostas Papadimitriou | var info = {
|
216 | 35584d80 | Kostas Papadimitriou | left: 0, |
217 | 35584d80 | Kostas Papadimitriou | top: 0, |
218 | 35584d80 | Kostas Papadimitriou | width: obj.width ? obj.width : obj.offsetWidth,
|
219 | 35584d80 | Kostas Papadimitriou | height: obj.height ? obj.height : obj.offsetHeight
|
220 | 35584d80 | Kostas Papadimitriou | }; |
221 | 35584d80 | Kostas Papadimitriou | |
222 | 35584d80 | Kostas Papadimitriou | if (obj && (obj != stopObj)) {
|
223 | 35584d80 | Kostas Papadimitriou | info.left += obj.offsetLeft; |
224 | 35584d80 | Kostas Papadimitriou | info.top += obj.offsetTop; |
225 | 35584d80 | Kostas Papadimitriou | } |
226 | 35584d80 | Kostas Papadimitriou | |
227 | 35584d80 | Kostas Papadimitriou | return info;
|
228 | 35584d80 | Kostas Papadimitriou | }, |
229 | 35584d80 | Kostas Papadimitriou | |
230 | 35584d80 | Kostas Papadimitriou | Client: function (elem) { |
231 | 35584d80 | Kostas Papadimitriou | // constructor for new simple upload client
|
232 | 35584d80 | Kostas Papadimitriou | this.handlers = {};
|
233 | 35584d80 | Kostas Papadimitriou | |
234 | 35584d80 | Kostas Papadimitriou | // unique ID
|
235 | 35584d80 | Kostas Papadimitriou | this.id = ZeroClipboard.nextId++;
|
236 | 35584d80 | Kostas Papadimitriou | this.movieId = 'ZeroClipboardMovie_' + this.id; |
237 | 35584d80 | Kostas Papadimitriou | |
238 | 35584d80 | Kostas Papadimitriou | // register client with singleton to receive flash events
|
239 | 35584d80 | Kostas Papadimitriou | ZeroClipboard.register(this.id, this); |
240 | 35584d80 | Kostas Papadimitriou | |
241 | 35584d80 | Kostas Papadimitriou | // create movie
|
242 | 35584d80 | Kostas Papadimitriou | if (elem) this.glue(elem); |
243 | 35584d80 | Kostas Papadimitriou | } |
244 | 35584d80 | Kostas Papadimitriou | }; |
245 | 35584d80 | Kostas Papadimitriou | |
246 | 35584d80 | Kostas Papadimitriou | ZeroClipboard.Client.prototype = { |
247 | 35584d80 | Kostas Papadimitriou | |
248 | 35584d80 | Kostas Papadimitriou | id: 0, |
249 | 35584d80 | Kostas Papadimitriou | // unique ID for us
|
250 | 35584d80 | Kostas Papadimitriou | ready: false, |
251 | 35584d80 | Kostas Papadimitriou | // whether movie is ready to receive events or not
|
252 | 35584d80 | Kostas Papadimitriou | movie: null, |
253 | 35584d80 | Kostas Papadimitriou | // reference to movie object
|
254 | 35584d80 | Kostas Papadimitriou | clipText: '', |
255 | 35584d80 | Kostas Papadimitriou | // text to copy to clipboard
|
256 | 35584d80 | Kostas Papadimitriou | handCursorEnabled: true, |
257 | 35584d80 | Kostas Papadimitriou | // whether to show hand cursor, or default pointer cursor
|
258 | 35584d80 | Kostas Papadimitriou | cssEffects: true, |
259 | 35584d80 | Kostas Papadimitriou | // enable CSS mouse effects on dom container
|
260 | 35584d80 | Kostas Papadimitriou | handlers: null, |
261 | 35584d80 | Kostas Papadimitriou | // user event handlers
|
262 | 35584d80 | Kostas Papadimitriou | glue: function (elem, appendElem, stylesToAdd) { |
263 | 35584d80 | Kostas Papadimitriou | // glue to DOM element
|
264 | 35584d80 | Kostas Papadimitriou | // elem can be ID or actual DOM element object
|
265 | 35584d80 | Kostas Papadimitriou | this.domElement = ZeroClipboard.$(elem); |
266 | 35584d80 | Kostas Papadimitriou | |
267 | 35584d80 | Kostas Papadimitriou | // float just above object, or zIndex 99 if dom element isn't set
|
268 | 35584d80 | Kostas Papadimitriou | var zIndex = 99; |
269 | 35584d80 | Kostas Papadimitriou | if (this.domElement.style.zIndex) { |
270 | 35584d80 | Kostas Papadimitriou | zIndex = parseInt(this.domElement.style.zIndex, 10) + 1; |
271 | 35584d80 | Kostas Papadimitriou | } |
272 | 35584d80 | Kostas Papadimitriou | |
273 | 35584d80 | Kostas Papadimitriou | if (typeof(appendElem) == 'string') { |
274 | 35584d80 | Kostas Papadimitriou | appendElem = ZeroClipboard.$(appendElem);
|
275 | 35584d80 | Kostas Papadimitriou | } else if (typeof(appendElem) == 'undefined') { |
276 | 35584d80 | Kostas Papadimitriou | appendElem = document.getElementsByTagName('body')[0]; |
277 | 35584d80 | Kostas Papadimitriou | } |
278 | 35584d80 | Kostas Papadimitriou | |
279 | 35584d80 | Kostas Papadimitriou | // find X/Y position of domElement
|
280 | 35584d80 | Kostas Papadimitriou | var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem); |
281 | 35584d80 | Kostas Papadimitriou | |
282 | 35584d80 | Kostas Papadimitriou | // create floating DIV above element
|
283 | 35584d80 | Kostas Papadimitriou | this.div = document.createElement('div'); |
284 | 35584d80 | Kostas Papadimitriou | this.div.className = "zclip"; |
285 | 35584d80 | Kostas Papadimitriou | this.div.id = "zclip-" + this.movieId; |
286 | 35584d80 | Kostas Papadimitriou | $(this.domElement).data('zclipId', 'zclip-' + this.movieId); |
287 | 35584d80 | Kostas Papadimitriou | var style = this.div.style; |
288 | 35584d80 | Kostas Papadimitriou | style.position = 'absolute';
|
289 | 35584d80 | Kostas Papadimitriou | style.left = '' + box.left + 'px'; |
290 | 35584d80 | Kostas Papadimitriou | style.top = '' + box.top + 'px'; |
291 | 35584d80 | Kostas Papadimitriou | style.width = '' + box.width + 'px'; |
292 | 35584d80 | Kostas Papadimitriou | style.height = '' + box.height + 'px'; |
293 | 35584d80 | Kostas Papadimitriou | style.zIndex = zIndex; |
294 | 35584d80 | Kostas Papadimitriou | |
295 | 35584d80 | Kostas Papadimitriou | if (typeof(stylesToAdd) == 'object') { |
296 | 35584d80 | Kostas Papadimitriou | for (addedStyle in stylesToAdd) { |
297 | 35584d80 | Kostas Papadimitriou | style[addedStyle] = stylesToAdd[addedStyle]; |
298 | 35584d80 | Kostas Papadimitriou | } |
299 | 35584d80 | Kostas Papadimitriou | } |
300 | 35584d80 | Kostas Papadimitriou | |
301 | 35584d80 | Kostas Papadimitriou | // style.backgroundColor = '#f00'; // debug
|
302 | 35584d80 | Kostas Papadimitriou | appendElem.appendChild(this.div);
|
303 | 35584d80 | Kostas Papadimitriou | |
304 | 35584d80 | Kostas Papadimitriou | this.div.innerHTML = this.getHTML(box.width, box.height); |
305 | 35584d80 | Kostas Papadimitriou | }, |
306 | 35584d80 | Kostas Papadimitriou | |
307 | 35584d80 | Kostas Papadimitriou | getHTML: function (width, height) { |
308 | 35584d80 | Kostas Papadimitriou | // return HTML for movie
|
309 | 35584d80 | Kostas Papadimitriou | var html = ''; |
310 | 35584d80 | Kostas Papadimitriou | var flashvars = 'id=' + this.id + '&width=' + width + '&height=' + height; |
311 | 35584d80 | Kostas Papadimitriou | |
312 | 35584d80 | Kostas Papadimitriou | if (navigator.userAgent.match(/MSIE/)) { |
313 | 35584d80 | Kostas Papadimitriou | // IE gets an OBJECT tag
|
314 | 35584d80 | Kostas Papadimitriou | var protocol = location.href.match(/^https/i) ? 'https://' : 'http://'; |
315 | 35584d80 | Kostas Papadimitriou | html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="' + protocol + 'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="' + width + '" height="' + height + '" id="' + this.movieId + '" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="' + ZeroClipboard.moviePath + '" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="' + flashvars + '"/><param name="wmode" value="transparent"/></object>'; |
316 | 35584d80 | Kostas Papadimitriou | } else {
|
317 | 35584d80 | Kostas Papadimitriou | // all other browsers get an EMBED tag
|
318 | 35584d80 | Kostas Papadimitriou | html += '<embed id="' + this.movieId + '" src="' + ZeroClipboard.moviePath + '" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="' + width + '" height="' + height + '" name="' + this.movieId + '" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="' + flashvars + '" wmode="transparent" />'; |
319 | 35584d80 | Kostas Papadimitriou | } |
320 | 35584d80 | Kostas Papadimitriou | return html;
|
321 | 35584d80 | Kostas Papadimitriou | }, |
322 | 35584d80 | Kostas Papadimitriou | |
323 | 35584d80 | Kostas Papadimitriou | hide: function () { |
324 | 35584d80 | Kostas Papadimitriou | // temporarily hide floater offscreen
|
325 | 35584d80 | Kostas Papadimitriou | if (this.div) { |
326 | 35584d80 | Kostas Papadimitriou | this.div.style.left = '-2000px'; |
327 | 35584d80 | Kostas Papadimitriou | } |
328 | 35584d80 | Kostas Papadimitriou | }, |
329 | 35584d80 | Kostas Papadimitriou | |
330 | 35584d80 | Kostas Papadimitriou | show: function () { |
331 | 35584d80 | Kostas Papadimitriou | // show ourselves after a call to hide()
|
332 | 35584d80 | Kostas Papadimitriou | this.reposition();
|
333 | 35584d80 | Kostas Papadimitriou | }, |
334 | 35584d80 | Kostas Papadimitriou | |
335 | 35584d80 | Kostas Papadimitriou | destroy: function () { |
336 | 35584d80 | Kostas Papadimitriou | // destroy control and floater
|
337 | 35584d80 | Kostas Papadimitriou | if (this.domElement && this.div) { |
338 | 35584d80 | Kostas Papadimitriou | this.hide();
|
339 | 35584d80 | Kostas Papadimitriou | this.div.innerHTML = ''; |
340 | 35584d80 | Kostas Papadimitriou | |
341 | 35584d80 | Kostas Papadimitriou | var body = document.getElementsByTagName('body')[0]; |
342 | 35584d80 | Kostas Papadimitriou | try {
|
343 | 35584d80 | Kostas Papadimitriou | body.removeChild(this.div);
|
344 | 35584d80 | Kostas Papadimitriou | } catch (e) {;
|
345 | 35584d80 | Kostas Papadimitriou | } |
346 | 35584d80 | Kostas Papadimitriou | |
347 | 35584d80 | Kostas Papadimitriou | this.domElement = null; |
348 | 35584d80 | Kostas Papadimitriou | this.div = null; |
349 | 35584d80 | Kostas Papadimitriou | } |
350 | 35584d80 | Kostas Papadimitriou | }, |
351 | 35584d80 | Kostas Papadimitriou | |
352 | 35584d80 | Kostas Papadimitriou | reposition: function (elem) { |
353 | 35584d80 | Kostas Papadimitriou | // reposition our floating div, optionally to new container
|
354 | 35584d80 | Kostas Papadimitriou | // warning: container CANNOT change size, only position
|
355 | 35584d80 | Kostas Papadimitriou | if (elem) {
|
356 | 35584d80 | Kostas Papadimitriou | this.domElement = ZeroClipboard.$(elem); |
357 | 35584d80 | Kostas Papadimitriou | if (!this.domElement) this.hide(); |
358 | 35584d80 | Kostas Papadimitriou | } |
359 | 35584d80 | Kostas Papadimitriou | |
360 | 35584d80 | Kostas Papadimitriou | if (this.domElement && this.div) { |
361 | 35584d80 | Kostas Papadimitriou | var box = ZeroClipboard.getDOMObjectPosition(this.domElement); |
362 | 35584d80 | Kostas Papadimitriou | var style = this.div.style; |
363 | 35584d80 | Kostas Papadimitriou | style.left = '' + box.left + 'px'; |
364 | 35584d80 | Kostas Papadimitriou | style.top = '' + box.top + 'px'; |
365 | 35584d80 | Kostas Papadimitriou | } |
366 | 35584d80 | Kostas Papadimitriou | }, |
367 | 35584d80 | Kostas Papadimitriou | |
368 | 35584d80 | Kostas Papadimitriou | setText: function (newText) { |
369 | 35584d80 | Kostas Papadimitriou | // set text to be copied to clipboard
|
370 | 35584d80 | Kostas Papadimitriou | this.clipText = newText;
|
371 | 35584d80 | Kostas Papadimitriou | if (this.ready) { |
372 | 35584d80 | Kostas Papadimitriou | this.movie.setText(newText);
|
373 | 35584d80 | Kostas Papadimitriou | } |
374 | 35584d80 | Kostas Papadimitriou | }, |
375 | 35584d80 | Kostas Papadimitriou | |
376 | 35584d80 | Kostas Papadimitriou | addEventListener: function (eventName, func) { |
377 | 35584d80 | Kostas Papadimitriou | // add user event listener for event
|
378 | 35584d80 | Kostas Papadimitriou | // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
|
379 | 35584d80 | Kostas Papadimitriou | eventName = eventName.toString().toLowerCase().replace(/^on/, ''); |
380 | 35584d80 | Kostas Papadimitriou | if (!this.handlers[eventName]) { |
381 | 35584d80 | Kostas Papadimitriou | this.handlers[eventName] = [];
|
382 | 35584d80 | Kostas Papadimitriou | } |
383 | 35584d80 | Kostas Papadimitriou | this.handlers[eventName].push(func);
|
384 | 35584d80 | Kostas Papadimitriou | }, |
385 | 35584d80 | Kostas Papadimitriou | |
386 | 35584d80 | Kostas Papadimitriou | setHandCursor: function (enabled) { |
387 | 35584d80 | Kostas Papadimitriou | // enable hand cursor (true), or default arrow cursor (false)
|
388 | 35584d80 | Kostas Papadimitriou | this.handCursorEnabled = enabled;
|
389 | 35584d80 | Kostas Papadimitriou | if (this.ready) { |
390 | 35584d80 | Kostas Papadimitriou | this.movie.setHandCursor(enabled);
|
391 | 35584d80 | Kostas Papadimitriou | } |
392 | 35584d80 | Kostas Papadimitriou | }, |
393 | 35584d80 | Kostas Papadimitriou | |
394 | 35584d80 | Kostas Papadimitriou | setCSSEffects: function (enabled) { |
395 | 35584d80 | Kostas Papadimitriou | // enable or disable CSS effects on DOM container
|
396 | 35584d80 | Kostas Papadimitriou | this.cssEffects = !! enabled;
|
397 | 35584d80 | Kostas Papadimitriou | }, |
398 | 35584d80 | Kostas Papadimitriou | |
399 | 35584d80 | Kostas Papadimitriou | receiveEvent: function (eventName, args) { |
400 | 35584d80 | Kostas Papadimitriou | // receive event from flash
|
401 | 35584d80 | Kostas Papadimitriou | eventName = eventName.toString().toLowerCase().replace(/^on/, ''); |
402 | 35584d80 | Kostas Papadimitriou | |
403 | 35584d80 | Kostas Papadimitriou | // special behavior for certain events
|
404 | 35584d80 | Kostas Papadimitriou | switch (eventName) {
|
405 | 35584d80 | Kostas Papadimitriou | case 'load': |
406 | 35584d80 | Kostas Papadimitriou | // movie claims it is ready, but in IE this isn't always the case...
|
407 | 35584d80 | Kostas Papadimitriou | // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
|
408 | 35584d80 | Kostas Papadimitriou | this.movie = document.getElementById(this.movieId); |
409 | 35584d80 | Kostas Papadimitriou | if (!this.movie) { |
410 | 35584d80 | Kostas Papadimitriou | var self = this; |
411 | 35584d80 | Kostas Papadimitriou | setTimeout(function () {
|
412 | 35584d80 | Kostas Papadimitriou | self.receiveEvent('load', null); |
413 | 35584d80 | Kostas Papadimitriou | }, 1);
|
414 | 35584d80 | Kostas Papadimitriou | return;
|
415 | 35584d80 | Kostas Papadimitriou | } |
416 | 35584d80 | Kostas Papadimitriou | |
417 | 35584d80 | Kostas Papadimitriou | // firefox on pc needs a "kick" in order to set these in certain cases
|
418 | 35584d80 | Kostas Papadimitriou | if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) { |
419 | 35584d80 | Kostas Papadimitriou | var self = this; |
420 | 35584d80 | Kostas Papadimitriou | setTimeout(function () {
|
421 | 35584d80 | Kostas Papadimitriou | self.receiveEvent('load', null); |
422 | 35584d80 | Kostas Papadimitriou | }, 100);
|
423 | 35584d80 | Kostas Papadimitriou | this.ready = true; |
424 | 35584d80 | Kostas Papadimitriou | return;
|
425 | 35584d80 | Kostas Papadimitriou | } |
426 | 35584d80 | Kostas Papadimitriou | |
427 | 35584d80 | Kostas Papadimitriou | this.ready = true; |
428 | 35584d80 | Kostas Papadimitriou | try {
|
429 | 35584d80 | Kostas Papadimitriou | this.movie.setText(this.clipText); |
430 | 35584d80 | Kostas Papadimitriou | } catch (e) {}
|
431 | 35584d80 | Kostas Papadimitriou | try {
|
432 | 35584d80 | Kostas Papadimitriou | this.movie.setHandCursor(this.handCursorEnabled); |
433 | 35584d80 | Kostas Papadimitriou | } catch (e) {}
|
434 | 35584d80 | Kostas Papadimitriou | break;
|
435 | 35584d80 | Kostas Papadimitriou | |
436 | 35584d80 | Kostas Papadimitriou | case 'mouseover': |
437 | 35584d80 | Kostas Papadimitriou | if (this.domElement && this.cssEffects) { |
438 | 35584d80 | Kostas Papadimitriou | this.domElement.addClass('hover'); |
439 | 35584d80 | Kostas Papadimitriou | if (this.recoverActive) { |
440 | 35584d80 | Kostas Papadimitriou | this.domElement.addClass('active'); |
441 | 35584d80 | Kostas Papadimitriou | } |
442 | 35584d80 | Kostas Papadimitriou | |
443 | 35584d80 | Kostas Papadimitriou | |
444 | 35584d80 | Kostas Papadimitriou | } |
445 | 35584d80 | Kostas Papadimitriou | |
446 | 35584d80 | Kostas Papadimitriou | |
447 | 35584d80 | Kostas Papadimitriou | break;
|
448 | 35584d80 | Kostas Papadimitriou | |
449 | 35584d80 | Kostas Papadimitriou | case 'mouseout': |
450 | 35584d80 | Kostas Papadimitriou | if (this.domElement && this.cssEffects) { |
451 | 35584d80 | Kostas Papadimitriou | this.recoverActive = false; |
452 | 35584d80 | Kostas Papadimitriou | if (this.domElement.hasClass('active')) { |
453 | 35584d80 | Kostas Papadimitriou | this.domElement.removeClass('active'); |
454 | 35584d80 | Kostas Papadimitriou | this.recoverActive = true; |
455 | 35584d80 | Kostas Papadimitriou | } |
456 | 35584d80 | Kostas Papadimitriou | this.domElement.removeClass('hover'); |
457 | 35584d80 | Kostas Papadimitriou | |
458 | 35584d80 | Kostas Papadimitriou | } |
459 | 35584d80 | Kostas Papadimitriou | break;
|
460 | 35584d80 | Kostas Papadimitriou | |
461 | 35584d80 | Kostas Papadimitriou | case 'mousedown': |
462 | 35584d80 | Kostas Papadimitriou | if (this.domElement && this.cssEffects) { |
463 | 35584d80 | Kostas Papadimitriou | this.domElement.addClass('active'); |
464 | 35584d80 | Kostas Papadimitriou | } |
465 | 35584d80 | Kostas Papadimitriou | break;
|
466 | 35584d80 | Kostas Papadimitriou | |
467 | 35584d80 | Kostas Papadimitriou | case 'mouseup': |
468 | 35584d80 | Kostas Papadimitriou | if (this.domElement && this.cssEffects) { |
469 | 35584d80 | Kostas Papadimitriou | this.domElement.removeClass('active'); |
470 | 35584d80 | Kostas Papadimitriou | this.recoverActive = false; |
471 | 35584d80 | Kostas Papadimitriou | } |
472 | 35584d80 | Kostas Papadimitriou | break;
|
473 | 35584d80 | Kostas Papadimitriou | } // switch eventName
|
474 | 35584d80 | Kostas Papadimitriou | if (this.handlers[eventName]) { |
475 | 35584d80 | Kostas Papadimitriou | for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) { |
476 | 35584d80 | Kostas Papadimitriou | var func = this.handlers[eventName][idx]; |
477 | 35584d80 | Kostas Papadimitriou | |
478 | 35584d80 | Kostas Papadimitriou | if (typeof(func) == 'function') { |
479 | 35584d80 | Kostas Papadimitriou | // actual function reference
|
480 | 35584d80 | Kostas Papadimitriou | func(this, args);
|
481 | 35584d80 | Kostas Papadimitriou | } else if ((typeof(func) == 'object') && (func.length == 2)) { |
482 | 35584d80 | Kostas Papadimitriou | // PHP style object + method, i.e. [myObject, 'myMethod']
|
483 | 35584d80 | Kostas Papadimitriou | func[0][func[1]](this, args); |
484 | 35584d80 | Kostas Papadimitriou | } else if (typeof(func) == 'string') { |
485 | 35584d80 | Kostas Papadimitriou | // name of function
|
486 | 35584d80 | Kostas Papadimitriou | window[func](this, args);
|
487 | 35584d80 | Kostas Papadimitriou | } |
488 | 35584d80 | Kostas Papadimitriou | } // foreach event handler defined
|
489 | 35584d80 | Kostas Papadimitriou | } // user defined handler for event
|
490 | 35584d80 | Kostas Papadimitriou | } |
491 | 35584d80 | Kostas Papadimitriou | |
492 | 35584d80 | Kostas Papadimitriou | }; |
493 | 35584d80 | Kostas Papadimitriou |