Diffstat (limited to 'frontend/gamma/js/Bookmarklet.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/js/Bookmarklet.js | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/frontend/gamma/js/Bookmarklet.js b/frontend/gamma/js/Bookmarklet.js index a8e3e69..bcdcc46 100644 --- a/frontend/gamma/js/Bookmarklet.js +++ b/frontend/gamma/js/Bookmarklet.js | |||
@@ -1,152 +1,149 @@ | |||
1 | /* | 1 | /* |
2 | 2 | ||
3 | Copyright 2008-2011 Clipperz Srl | 3 | Copyright 2008-2011 Clipperz Srl |
4 | 4 | ||
5 | This file is part of Clipperz's Javascript Crypto Library. | 5 | This file is part of Clipperz Community Edition. |
6 | Javascript Crypto Library provides web developers with an extensive | 6 | Clipperz Community Edition is an online password manager. |
7 | and efficient set of cryptographic functions. The library aims to | ||
8 | obtain maximum execution speed while preserving modularity and | ||
9 | reusability. | ||
10 | For further information about its features and functionalities please | 7 | For further information about its features and functionalities please |
11 | refer to http://www.clipperz.com | 8 | refer to http://www.clipperz.com. |
12 | 9 | ||
13 | * Javascript Crypto Library is free software: you can redistribute | 10 | * Clipperz Community Edition is free software: you can redistribute |
14 | it and/or modify it under the terms of the GNU Affero General Public | 11 | it and/or modify it under the terms of the GNU Affero General Public |
15 | License as published by the Free Software Foundation, either version | 12 | License as published by the Free Software Foundation, either version |
16 | 3 of the License, or (at your option) any later version. | 13 | 3 of the License, or (at your option) any later version. |
17 | 14 | ||
18 | * Javascript Crypto Library is distributed in the hope that it will | 15 | * Clipperz Community Edition is distributed in the hope that it will |
19 | be useful, but WITHOUT ANY WARRANTY; without even the implied | 16 | be useful, but WITHOUT ANY WARRANTY; without even the implied |
20 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 17 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
21 | See the GNU Affero General Public License for more details. | 18 | See the GNU Affero General Public License for more details. |
22 | 19 | ||
23 | * You should have received a copy of the GNU Affero General Public | 20 | * You should have received a copy of the GNU Affero General Public |
24 | License along with Javascript Crypto Library. If not, see | 21 | License along with Clipperz Community Edition. If not, see |
25 | <http://www.gnu.org/licenses/>. | 22 | <http://www.gnu.org/licenses/>. |
26 | 23 | ||
27 | */ | 24 | */ |
28 | 25 | ||
29 | clipperz_copiedContentToClipboard = false; | 26 | clipperz_copiedContentToClipboard = false; |
30 | 27 | ||
31 | //############################################################################# | 28 | //############################################################################# |
32 | 29 | ||
33 | // Simple Set Clipboard System | 30 | // Simple Set Clipboard System |
34 | // Author: Joseph Huckaby | 31 | // Author: Joseph Huckaby |
35 | 32 | ||
36 | var ZeroClipboard = { | 33 | var ZeroClipboard = { |
37 | 34 | ||
38 | version: "1.0.4", | 35 | version: "1.0.4", |
39 | clients: {}, // registered upload clients on page, indexed by id | 36 | clients: {}, // registered upload clients on page, indexed by id |
40 | //moviePath: 'ZeroClipboard.swf', // URL to movie | 37 | //moviePath: 'ZeroClipboard.swf', // URL to movie |
41 | //moviePath: 'data:application/octet-stream;charset=utf-8;base64,Q1dTCYgGAAB4nH1V61LbRhTeXV2OJNsYczFgIEC4JCGABSRpSy+B2JDQQtWJocl0BqK1tUZqhOSRZAj/8ih9hz5AXsGZTl+ndHUhxU2nO56z3/l05uye7+wc6xr6DeUxqpcUhFCNXF9ffxjNcYhRo8U8NruO0IeRLTkm+BpEa4i8/+t3GRGUrRf5tktDe41dMC8Kpd14Q/DM911GPfHCd6zCLyzwa67Tafo0sAppuOWEHZdeyY1O4ERMbnajyPcKIYteUM+qdYPQD/It12m9jX2XBcSx5EYUON6ZwunOEXsXAY+O94HsAu8iFnjULe1mYN/je5u2WLnvAsnRNGrZ6rnfDZlxwQKxRV1XSd1ulPJ1/9KDBB13pDCiZ2ygEdsGj2WHvsXU3dc7taM3e/tHanjDZVqEV2HEzpUGa3V5dVd4Ocfz+5d1/5w6nnbgU4sF+17bFwPfjzT3k691aEDPGb92KBvNX1krmrOjqLNVrVLLb7K1ln9e3WlsVjd0/Um12XXcyPFy6ZHdyHHDkT5tt1JtF/rJerqn6Wu+F/ErsWCmPyiRjrYi54KlgZP/k2Tq9gPYSh5APZOYBVra2VicAtfyn+4qZwHt2E4rVJvszPH2HNcVD2lkS5eOxW3b9f1AtplzZkeKFdDLl/wkibodmyrUsmq241raYdye5ECpdrBf+2GQf0ncA4c3gJelHRrHjd03xs+7L9UMHh9lZN149aOSwuOfcnFO3qQmbb0V44aoSVEXlHeikXQzz1/bpzek8E50XN6o4r/KLfQpU/pMx/J/yz9cxmWhDOOyhMqD5SkJjQnKYnmpIlfuVe5XHlSWKw8rC6QoEayoWk7MFwaKg6Whx4AJEBGIBEQGQQFJBaKBlAMpD6QA0gCQIsglICNAxkGYAFIBMgkwDWQGhFkgc0DuApkHsqDmMZAVIKtA1oBUgejqOmc21E1uHwF5DOQJ4C+AfAnkKyBbQL4G8g2Qb4F8B+o2wA6QZ4DrIOyCsAfCcw0lUwR/ZvgiOP3IhwgWcDZIsCipIpJkPmskBBiBgpGiIqQJOJdYPqbiOaRiUcRIQ5hrIfT055ySiKYVzMLKkKmuDM8aAyInyW1yNCOF22Q5I8Xb5FhGSjLR8n/gnv5q+U+9t4/MojnYLtEhc3jljjGCGT4Z7bXL7bG9Udwefz9xjk9Vhl3crtjqqXwifS8hWzblJToZmylTbk+vYuMOjsECWjZnkuDZvTmcwbscGvOiKVcxXThZNGVjkQebS+17pmLcJwl8sI1v4PI2uYEPt4UbuLItxrCwoplgrMagaOZTENf2NK0NryE8gWRCVE3p6ae5j3aOFwyZb8of6RT3FYn7Y9yvmjlDx1mKGncSfVTC9Z/v6QyZE7q5rpsburmpm490U+K/12g6WXYc+nR4CKX/H31zGG1z5m9Pt5okCg==', | 38 | //moviePath: 'data:application/octet-stream;charset=utf-8;base64,Q1dTCYgGAAB4nH1V61LbRhTeXV2OJNsYczFgIEC4JCGABSRpSy+B2JDQQtWJocl0BqK1tUZqhOSRZAj/8ih9hz5AXsGZTl+ndHUhxU2nO56z3/l05uye7+wc6xr6DeUxqpcUhFCNXF9ffxjNcYhRo8U8NruO0IeRLTkm+BpEa4i8/+t3GRGUrRf5tktDe41dMC8Kpd14Q/DM911GPfHCd6zCLyzwa67Tafo0sAppuOWEHZdeyY1O4ERMbnajyPcKIYteUM+qdYPQD/It12m9jX2XBcSx5EYUON6ZwunOEXsXAY+O94HsAu8iFnjULe1mYN/je5u2WLnvAsnRNGrZ6rnfDZlxwQKxRV1XSd1ulPJ1/9KDBB13pDCiZ2ygEdsGj2WHvsXU3dc7taM3e/tHanjDZVqEV2HEzpUGa3V5dVd4Ocfz+5d1/5w6nnbgU4sF+17bFwPfjzT3k691aEDPGb92KBvNX1krmrOjqLNVrVLLb7K1ln9e3WlsVjd0/Um12XXcyPFy6ZHdyHHDkT5tt1JtF/rJerqn6Wu+F/ErsWCmPyiRjrYi54KlgZP/k2Tq9gPYSh5APZOYBVra2VicAtfyn+4qZwHt2E4rVJvszPH2HNcVD2lkS5eOxW3b9f1AtplzZkeKFdDLl/wkibodmyrUsmq241raYdye5ECpdrBf+2GQf0ncA4c3gJelHRrHjd03xs+7L9UMHh9lZN149aOSwuOfcnFO3qQmbb0V44aoSVEXlHeikXQzz1/bpzek8E50XN6o4r/KLfQpU/pMx/J/yz9cxmWhDOOyhMqD5SkJjQnKYnmpIlfuVe5XHlSWKw8rC6QoEayoWk7MFwaKg6Whx4AJEBGIBEQGQQFJBaKBlAMpD6QA0gCQIsglICNAxkGYAFIBMgkwDWQGhFkgc0DuApkHsqDmMZAVIKtA1oBUgejqOmc21E1uHwF5DOQJ4C+AfAnkKyBbQL4G8g2Qb4F8B+o2wA6QZ4DrIOyCsAfCcw0lUwR/ZvgiOP3IhwgWcDZIsCipIpJkPmskBBiBgpGiIqQJOJdYPqbiOaRiUcRIQ5hrIfT055ySiKYVzMLKkKmuDM8aAyInyW1yNCOF22Q5I8Xb5FhGSjLR8n/gnv5q+U+9t4/MojnYLtEhc3jljjGCGT4Z7bXL7bG9Udwefz9xjk9Vhl3crtjqqXwifS8hWzblJToZmylTbk+vYuMOjsECWjZnkuDZvTmcwbscGvOiKVcxXThZNGVjkQebS+17pmLcJwl8sI1v4PI2uYEPt4UbuLItxrCwoplgrMagaOZTENf2NK0NryE8gWRCVE3p6ae5j3aOFwyZb8of6RT3FYn7Y9yvmjlDx1mKGncSfVTC9Z/v6QyZE7q5rpsburmpm490U+K/12g6WXYc+nR4CKX/H31zGG1z5m9Pt5okCg==', |
42 | //moviePath: 'http://localhost:8000/tests/js/tests/Bookmarklet/ZeroClipboard.swf', | 39 | //moviePath: 'http://localhost:8000/tests/js/tests/Bookmarklet/ZeroClipboard.swf', |
43 | moviePath: 'http://www.clipperz.com/files/clipperz.com/bookmarklet/0.3.0/ZeroClipboard_1.0.4.swf', | 40 | moviePath: 'http://www.clipperz.com/files/clipperz.com/bookmarklet/0.3.0/ZeroClipboard_1.0.4.swf', |
44 | //moviePath: './ZeroClipboard.swf', | 41 | //moviePath: './ZeroClipboard.swf', |
45 | nextId: 1, // ID of next movie | 42 | nextId: 1, // ID of next movie |
46 | 43 | ||
47 | $: function(thingy) { | 44 | $: function(thingy) { |
48 | // simple DOM lookup utility function | 45 | // simple DOM lookup utility function |
49 | if (typeof(thingy) == 'string') thingy = document.getElementById(thingy); | 46 | if (typeof(thingy) == 'string') thingy = document.getElementById(thingy); |
50 | if (!thingy.addClass) { | 47 | if (!thingy.addClass) { |
51 | // extend element with a few useful methods | 48 | // extend element with a few useful methods |
52 | thingy.hide = function() { this.style.display = 'none'; }; | 49 | thingy.hide = function() { this.style.display = 'none'; }; |
53 | thingy.show = function() { this.style.display = ''; }; | 50 | thingy.show = function() { this.style.display = ''; }; |
54 | thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; }; | 51 | thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; }; |
55 | thingy.removeClass = function(name) { | 52 | thingy.removeClass = function(name) { |
56 | this.className = this.className.replace( new RegExp("\\s*" + name + "\\s*"), " ").replace(/^\s+/, '').replace(/\s+$/, ''); | 53 | this.className = this.className.replace( new RegExp("\\s*" + name + "\\s*"), " ").replace(/^\s+/, '').replace(/\s+$/, ''); |
57 | }; | 54 | }; |
58 | thingy.hasClass = function(name) { | 55 | thingy.hasClass = function(name) { |
59 | return !!this.className.match( new RegExp("\\s*" + name + "\\s*") ); | 56 | return !!this.className.match( new RegExp("\\s*" + name + "\\s*") ); |
60 | } | 57 | } |
61 | } | 58 | } |
62 | return thingy; | 59 | return thingy; |
63 | }, | 60 | }, |
64 | 61 | ||
65 | setMoviePath: function(path) { | 62 | setMoviePath: function(path) { |
66 | // set path to ZeroClipboard.swf | 63 | // set path to ZeroClipboard.swf |
67 | this.moviePath = path; | 64 | this.moviePath = path; |
68 | }, | 65 | }, |
69 | 66 | ||
70 | dispatch: function(id, eventName, args) { | 67 | dispatch: function(id, eventName, args) { |
71 | // receive event from flash movie, send to client | 68 | // receive event from flash movie, send to client |
72 | var client = this.clients[id]; | 69 | var client = this.clients[id]; |
73 | if (client) { | 70 | if (client) { |
74 | client.receiveEvent(eventName, args); | 71 | client.receiveEvent(eventName, args); |
75 | } | 72 | } |
76 | }, | 73 | }, |
77 | 74 | ||
78 | register: function(id, client) { | 75 | register: function(id, client) { |
79 | // register new client to receive events | 76 | // register new client to receive events |
80 | this.clients[id] = client; | 77 | this.clients[id] = client; |
81 | }, | 78 | }, |
82 | 79 | ||
83 | getDOMObjectPosition: function(obj) { | 80 | getDOMObjectPosition: function(obj) { |
84 | // get absolute coordinates for dom element | 81 | // get absolute coordinates for dom element |
85 | var info = { | 82 | var info = { |
86 | left: 0, | 83 | left: 0, |
87 | top: 0, | 84 | top: 0, |
88 | width: obj.width ? obj.width : obj.offsetWidth, | 85 | width: obj.width ? obj.width : obj.offsetWidth, |
89 | height: obj.height ? obj.height : obj.offsetHeight | 86 | height: obj.height ? obj.height : obj.offsetHeight |
90 | }; | 87 | }; |
91 | 88 | ||
92 | while (obj) { | 89 | while (obj) { |
93 | info.left += obj.offsetLeft; | 90 | info.left += obj.offsetLeft; |
94 | info.top += obj.offsetTop; | 91 | info.top += obj.offsetTop; |
95 | obj = obj.offsetParent; | 92 | obj = obj.offsetParent; |
96 | } | 93 | } |
97 | 94 | ||
98 | return info; | 95 | return info; |
99 | }, | 96 | }, |
100 | 97 | ||
101 | Client: function(elem) { | 98 | Client: function(elem) { |
102 | // constructor for new simple upload client | 99 | // constructor for new simple upload client |
103 | this.handlers = {}; | 100 | this.handlers = {}; |
104 | 101 | ||
105 | // unique ID | 102 | // unique ID |
106 | this.id = ZeroClipboard.nextId++; | 103 | this.id = ZeroClipboard.nextId++; |
107 | this.movieId = 'ZeroClipboardMovie_' + this.id; | 104 | this.movieId = 'ZeroClipboardMovie_' + this.id; |
108 | 105 | ||
109 | // register client with singleton to receive flash events | 106 | // register client with singleton to receive flash events |
110 | ZeroClipboard.register(this.id, this); | 107 | ZeroClipboard.register(this.id, this); |
111 | 108 | ||
112 | // create movie | 109 | // create movie |
113 | if (elem) this.glue(elem); | 110 | if (elem) this.glue(elem); |
114 | } | 111 | } |
115 | }; | 112 | }; |
116 | 113 | ||
117 | ZeroClipboard.Client.prototype = { | 114 | ZeroClipboard.Client.prototype = { |
118 | 115 | ||
119 | id: 0, // unique ID for us | 116 | id: 0, // unique ID for us |
120 | ready: false, // whether movie is ready to receive events or not | 117 | ready: false, // whether movie is ready to receive events or not |
121 | movie: null, // reference to movie object | 118 | movie: null, // reference to movie object |
122 | clipText: '', // text to copy to clipboard | 119 | clipText: '', // text to copy to clipboard |
123 | handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor | 120 | handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor |
124 | cssEffects: true, // enable CSS mouse effects on dom container | 121 | cssEffects: true, // enable CSS mouse effects on dom container |
125 | handlers: null, // user event handlers | 122 | handlers: null, // user event handlers |
126 | 123 | ||
127 | glue: function(elem) { | 124 | glue: function(elem) { |
128 | // glue to DOM element | 125 | // glue to DOM element |
129 | // elem can be ID or actual DOM element object | 126 | // elem can be ID or actual DOM element object |
130 | //console.log(">>> glue"); | 127 | //console.log(">>> glue"); |
131 | this.domElement = ZeroClipboard.$(elem); | 128 | this.domElement = ZeroClipboard.$(elem); |
132 | 129 | ||
133 | // float just above object, or zIndex 99 if dom element isn't set | 130 | // float just above object, or zIndex 99 if dom element isn't set |
134 | var zIndex = 99; | 131 | var zIndex = 99; |
135 | if (this.domElement.style.zIndex) { | 132 | if (this.domElement.style.zIndex) { |
136 | zIndex = parseInt(this.domElement.style.zIndex) + 1; | 133 | zIndex = parseInt(this.domElement.style.zIndex) + 1; |
137 | } | 134 | } |
138 | 135 | ||
139 | // find X/Y position of domElement | 136 | // find X/Y position of domElement |
140 | var box = ZeroClipboard.getDOMObjectPosition(this.domElement); | 137 | var box = ZeroClipboard.getDOMObjectPosition(this.domElement); |
141 | 138 | ||
142 | // create floating DIV above element | 139 | // create floating DIV above element |
143 | this.div = document.createElement('div'); | 140 | this.div = document.createElement('div'); |
144 | var style = this.div.style; | 141 | var style = this.div.style; |
145 | style.position = 'absolute'; | 142 | style.position = 'absolute'; |
146 | style.left = '' + box.left + 'px'; | 143 | style.left = '' + box.left + 'px'; |
147 | style.top = '' + box.top + 'px'; | 144 | style.top = '' + box.top + 'px'; |
148 | style.width = '' + box.width + 'px'; | 145 | style.width = '' + box.width + 'px'; |
149 | style.height = '' + box.height + 'px'; | 146 | style.height = '' + box.height + 'px'; |
150 | style.zIndex = zIndex; | 147 | style.zIndex = zIndex; |
151 | 148 | ||
152 | // style.backgroundColor = '#f00'; // debug | 149 | // style.backgroundColor = '#f00'; // debug |