--- a/web/ldt/ldt_utils/templates/ldt/ldt_utils/embed_popup.html Wed Dec 01 16:56:01 2010 +0100
+++ b/web/ldt/ldt_utils/templates/ldt/ldt_utils/embed_popup.html Mon Dec 27 16:22:07 2010 +0100
@@ -8,6 +8,7 @@
<meta http-equiv="Expires" content="-1" />
<title>Ligne de Temps - IRI</title>
<script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.min.js"></script>
+ <script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.qtip.min.js"></script>
<script type="text/javascript">
var $j = jQuery.noConflict();
</script>
@@ -22,20 +23,47 @@
};
</script>
<script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/embed_popup.js"></script>
+ <script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/ZeroClipboard.js"></script>
<link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/workspace.css" type="text/css"/>
<link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}css/embed_popup.css" type="text/css"/>
+ <script type="text/javascript">
+ $j(document).ready(function(){
+ ZeroClipboard.setMoviePath( '{{WEB_URL}}{{LDT_MEDIA_PREFIX}}/swf/ZeroClipboard10.swf' );
+ clip = new ZeroClipboard.Client();
+ clip.setHandCursor(true);
+ clip.setText('{{ldt_id}}');
+ $j("#clipboard_button").html(clip.getHTML(32,32));
+ $j("#clipboard_button").qtip({
+ style: {
+ 'name': 'dark',
+ 'filter':'alpha(opacity=70)',
+ '-moz-opacity':'0.7',
+ '-khtml-opacity': '0.7',
+ 'opacity': '0.7',
+ 'border': {
+ 'width' : '0',
+ 'color': '#505050'
+ },
+ 'tip': true
+ }
+ });
+ });
+ </script>
+
</head>
<body id="init_embed_popup">
+
+ <div id='ldt_id'>
+ <div id='ldt_id_title'>{% trans 'project id' %}:</div>
+ <div id='ldt_id_row'><div id="clipboard_button" title="{% trans 'copy to clipboard' %}"> </div><div id='ldt_id_id' class="projectscontentstitle">{{ldt_id}}</div></div>
+ </div>
<div class="ldt_player" id="wrapper_{{player_id}}">
{% include "ldt/ldt_utils/partial/embed_player.html" %}
</div>
-
- <div style="height: 100px"> </div>
-
<div id="button_row">
<div id="display_select">
--- a/web/ldt/ldt_utils/views.py Wed Dec 01 16:56:01 2010 +0100
+++ b/web/ldt/ldt_utils/views.py Mon Dec 27 16:22:07 2010 +0100
@@ -79,7 +79,7 @@
for typestr in ('player','seo_body', 'seo_meta', 'links') )
return render_to_response("ldt/ldt_utils/embed_popup.html",
- {'json_url':json_url,'player_id':player_id, 'embed_rendered':embed_rendered, 'annotations':annotations},
+ {'json_url':json_url,'player_id':player_id, 'embed_rendered':embed_rendered, 'annotations':annotations, 'ldt_id' : ldt_id},
context_instance=RequestContext(request))
Binary file web/ldt/locale/en/LC_MESSAGES/django.mo has changed
--- a/web/ldt/locale/en/LC_MESSAGES/django.po Wed Dec 01 16:56:01 2010 +0100
+++ b/web/ldt/locale/en/LC_MESSAGES/django.po Mon Dec 27 16:22:07 2010 +0100
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-19 19:43+0200\n"
+"POT-Creation-Date: 2010-12-27 15:49+0100\n"
"PO-Revision-Date: 2010-02-17 03:53+0100\n"
"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -137,11 +137,11 @@
msgid "content.duration"
msgstr "duration (ms)"
-#: ldt_utils/models.py:256
+#: ldt_utils/models.py:260
msgid "created by"
msgstr "created by"
-#: ldt_utils/models.py:257
+#: ldt_utils/models.py:261
msgid "changed by"
msgstr "changed by"
@@ -171,35 +171,35 @@
msgid "confirm deletion"
msgstr "Confirm deletion"
-#: ldt_utils/views.py:683
+#: ldt_utils/views.py:695
msgid "Problem when downloading file from url : "
msgstr "Problem when downloading file from url: "
-#: ldt_utils/views.py:686
+#: ldt_utils/views.py:698
msgid "Problem when uploading file : "
msgstr "Problem when uploading file: "
-#: ldt_utils/views.py:756
+#: ldt_utils/views.py:768
#, python-format
msgid "There is %(count)d error when deleting content"
msgid_plural "There are %(count)d errors when deleting content"
msgstr[0] "There is %(count)d error when deleting content"
msgstr[1] "There are %(count)d errors when deleting content"
-#: ldt_utils/views.py:757
+#: ldt_utils/views.py:769
msgid "title error deleting content"
msgstr "Error when deleting content"
-#: ldt_utils/views.py:759
+#: ldt_utils/views.py:771
#, python-format
msgid "Confirm delete content %(titles)s"
msgstr "Confirm delete content %(titles)s"
-#: ldt_utils/views.py:760
+#: ldt_utils/views.py:772
msgid "confirm delete content"
msgstr "Confirm delete content"
-#: ldt_utils/views.py:791
+#: ldt_utils/views.py:803
#, python-format
msgid ""
"Content '%(title)s' is referenced by this project : %(project_titles)s. "
@@ -334,23 +334,31 @@
msgid "create_project"
msgstr "Create new project"
-#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:42
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:60
+msgid "project id"
+msgstr "project id"
+
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:61
+msgid "copy to clipboard"
+msgstr "copy to clipboard"
+
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:70
msgid "popup_player"
msgstr "player"
-#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:42
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:70
msgid "popup_seo_body"
msgstr "seo"
-#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:42
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:70
msgid "popup_seo_meta"
msgstr "meta"
-#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:42
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:70
msgid "popup_links"
msgstr "links"
-#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:56
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:84
msgid "clik here to see the project content"
msgstr "clik here to see the project content"
@@ -594,19 +602,19 @@
msgstr "Password:"
#: templates/admin/page_login.html:29
-#: user/templates/registration/login.html:29
+#: user/templates/registration/login.html:39
msgid "Create an account"
msgstr "Create an account"
#: templates/admin/page_login.html:30
-#: user/templates/registration/login.html:30
+#: user/templates/registration/login.html:40
msgid "Forget password?"
msgstr "Forget password?"
#: templates/admin/page_login.html:32
#: user/templates/ldt/user/login_form.html:37
#: user/templates/ldt/user/login_form.html:45
-#: user/templates/registration/login.html:14
+#: user/templates/registration/login.html:21
#: user/templates/registration/password_reset_complete.html:14
msgid "Log in"
msgstr "Log in"
@@ -700,7 +708,7 @@
msgid "The two emails didn't match."
msgstr "The two emails didn't match."
-#: user/views.py:45 user/templates/registration/login.html:17
+#: user/views.py:45 user/templates/registration/login.html:24
msgid "Sorry, that's not a valid username or password."
msgstr "Sorry, that's not a valid username or password."
@@ -823,7 +831,7 @@
msgid "Log in again"
msgstr "Log in again"
-#: user/templates/registration/login.html:25
+#: user/templates/registration/login.html:46
msgid "login"
msgstr "login"
Binary file web/ldt/locale/fr/LC_MESSAGES/django.mo has changed
--- a/web/ldt/locale/fr/LC_MESSAGES/django.po Wed Dec 01 16:56:01 2010 +0100
+++ b/web/ldt/locale/fr/LC_MESSAGES/django.po Mon Dec 27 16:22:07 2010 +0100
@@ -7,7 +7,7 @@
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-19 19:43+0200\n"
+"POT-Creation-Date: 2010-12-27 15:49+0100\n"
"PO-Revision-Date: 2010-03-09 15:52+0100\n"
"Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -137,11 +137,11 @@
msgid "content.duration"
msgstr "Durée (ms)"
-#: ldt_utils/models.py:256
+#: ldt_utils/models.py:260
msgid "created by"
msgstr "créé par"
-#: ldt_utils/models.py:257
+#: ldt_utils/models.py:261
msgid "changed by"
msgstr "modifié par"
@@ -172,35 +172,35 @@
msgid "confirm deletion"
msgstr "Confirmation d'effacement"
-#: ldt_utils/views.py:683
+#: ldt_utils/views.py:695
msgid "Problem when downloading file from url : "
msgstr "Problème lors du téléchargement du fichier : "
-#: ldt_utils/views.py:686
+#: ldt_utils/views.py:698
msgid "Problem when uploading file : "
msgstr "Problème lors de l'upload du fichier : "
-#: ldt_utils/views.py:756
+#: ldt_utils/views.py:768
#, python-format
msgid "There is %(count)d error when deleting content"
msgid_plural "There are %(count)d errors when deleting content"
msgstr[0] "Il y a %(count)d erreur lors de l'effacement du contenu"
msgstr[1] "Il y a %(count)d erreurs lors de l'effacement du contenu"
-#: ldt_utils/views.py:757
+#: ldt_utils/views.py:769
msgid "title error deleting content"
msgstr "Erreur lors de l'effacement du contenu"
-#: ldt_utils/views.py:759
+#: ldt_utils/views.py:771
#, python-format
msgid "Confirm delete content %(titles)s"
msgstr "Veuillez confirmer l'effacement du contenu %(titles)s"
-#: ldt_utils/views.py:760
+#: ldt_utils/views.py:772
msgid "confirm delete content"
msgstr "Confirmation effacement contenu"
-#: ldt_utils/views.py:791
+#: ldt_utils/views.py:803
#, python-format
msgid ""
"Content '%(title)s' is referenced by this project : %(project_titles)s. "
@@ -335,23 +335,31 @@
msgid "create_project"
msgstr "Créer un nouveau projet Ligne de Temps"
-#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:42
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:60
+msgid "project id"
+msgstr "Identifiant du projet "
+
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:61
+msgid "copy to clipboard"
+msgstr "Copier l'id dans le presse-papiers"
+
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:70
msgid "popup_player"
msgstr "Code Lecteur métadata"
-#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:42
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:70
msgid "popup_seo_body"
msgstr "Code SEO"
-#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:42
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:70
msgid "popup_seo_meta"
msgstr "Code balise meta en-tête"
-#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:42
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:70
msgid "popup_links"
msgstr "Liste de liens"
-#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:56
+#: ldt_utils/templates/ldt/ldt_utils/embed_popup.html:84
msgid "clik here to see the project content"
msgstr "cliquer ici pour voir le contenu du projet"
@@ -595,19 +603,19 @@
msgstr "Mot de passe :"
#: templates/admin/page_login.html:29
-#: user/templates/registration/login.html:29
+#: user/templates/registration/login.html:39
msgid "Create an account"
msgstr "Créer un compte"
#: templates/admin/page_login.html:30
-#: user/templates/registration/login.html:30
+#: user/templates/registration/login.html:40
msgid "Forget password?"
msgstr "Oubliez le mot de passe?"
#: templates/admin/page_login.html:32
#: user/templates/ldt/user/login_form.html:37
#: user/templates/ldt/user/login_form.html:45
-#: user/templates/registration/login.html:14
+#: user/templates/registration/login.html:21
#: user/templates/registration/password_reset_complete.html:14
msgid "Log in"
msgstr "Connexion"
@@ -701,7 +709,7 @@
msgid "The two emails didn't match."
msgstr "les deux emails ne correspondent pas"
-#: user/views.py:45 user/templates/registration/login.html:17
+#: user/views.py:45 user/templates/registration/login.html:24
msgid "Sorry, that's not a valid username or password."
msgstr "Saisissez un nom d'utilisateur et un mot de passe valide."
@@ -824,7 +832,7 @@
msgid "Log in again"
msgstr "Se reconnecter"
-#: user/templates/registration/login.html:25
+#: user/templates/registration/login.html:46
msgid "login"
msgstr "Connexion"
--- a/web/static/ldt/css/embed_popup.css Wed Dec 01 16:56:01 2010 +0100
+++ b/web/static/ldt/css/embed_popup.css Mon Dec 27 16:22:07 2010 +0100
@@ -31,3 +31,36 @@
float: right;
}
+#ldt_id {
+ color: #949494;
+ font-family: Verdana;
+ font-weight: lighter;
+ font-style: normal;
+ text-align: left;
+
+}
+
+#ldt_id_row {
+ height: 20px;
+ vertical-align: middle;
+ font-size: 1.5em;
+ font-style: normal;
+ text-align: left;
+
+}
+
+#ldt_id_id {
+ float: left;
+}
+
+#clipboard_button {
+ height: 20px;
+ width: 20px;
+ float: left;
+ background-image:url('../img/clipboard.png');
+ background-repeat:no-repeat;
+ background-position:center;
+ cursor: pointer;
+ margin-right: 10px;
+ padding: 2px;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/ldt/js/ZeroClipboard.js Mon Dec 27 16:22:07 2010 +0100
@@ -0,0 +1,311 @@
+// Simple Set Clipboard System
+// Author: Joseph Huckaby
+
+var ZeroClipboard = {
+
+ version: "1.0.7",
+ clients: {}, // registered upload clients on page, indexed by id
+ moviePath: 'ZeroClipboard.swf', // URL to movie
+ nextId: 1, // ID of next movie
+
+ $: function(thingy) {
+ // simple DOM lookup utility function
+ if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
+ if (!thingy.addClass) {
+ // extend element with a few useful methods
+ thingy.hide = function() { this.style.display = 'none'; };
+ thingy.show = function() { this.style.display = ''; };
+ thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
+ thingy.removeClass = function(name) {
+ var classes = this.className.split(/\s+/);
+ var idx = -1;
+ for (var k = 0; k < classes.length; k++) {
+ if (classes[k] == name) { idx = k; k = classes.length; }
+ }
+ if (idx > -1) {
+ classes.splice( idx, 1 );
+ this.className = classes.join(' ');
+ }
+ return this;
+ };
+ thingy.hasClass = function(name) {
+ return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
+ };
+ }
+ return thingy;
+ },
+
+ setMoviePath: function(path) {
+ // set path to ZeroClipboard.swf
+ this.moviePath = path;
+ },
+
+ dispatch: function(id, eventName, args) {
+ // receive event from flash movie, send to client
+ var client = this.clients[id];
+ if (client) {
+ client.receiveEvent(eventName, args);
+ }
+ },
+
+ register: function(id, client) {
+ // register new client to receive events
+ this.clients[id] = client;
+ },
+
+ getDOMObjectPosition: function(obj, stopObj) {
+ // get absolute coordinates for dom element
+ var info = {
+ left: 0,
+ top: 0,
+ width: obj.width ? obj.width : obj.offsetWidth,
+ height: obj.height ? obj.height : obj.offsetHeight
+ };
+
+ while (obj && (obj != stopObj)) {
+ info.left += obj.offsetLeft;
+ info.top += obj.offsetTop;
+ obj = obj.offsetParent;
+ }
+
+ return info;
+ },
+
+ Client: function(elem) {
+ // constructor for new simple upload client
+ this.handlers = {};
+
+ // unique ID
+ this.id = ZeroClipboard.nextId++;
+ this.movieId = 'ZeroClipboardMovie_' + this.id;
+
+ // register client with singleton to receive flash events
+ ZeroClipboard.register(this.id, this);
+
+ // create movie
+ if (elem) this.glue(elem);
+ }
+};
+
+ZeroClipboard.Client.prototype = {
+
+ id: 0, // unique ID for us
+ ready: false, // whether movie is ready to receive events or not
+ movie: null, // reference to movie object
+ clipText: '', // text to copy to clipboard
+ handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
+ cssEffects: true, // enable CSS mouse effects on dom container
+ handlers: null, // user event handlers
+
+ glue: function(elem, appendElem, stylesToAdd) {
+ // glue to DOM element
+ // elem can be ID or actual DOM element object
+ this.domElement = ZeroClipboard.$(elem);
+
+ // float just above object, or zIndex 99 if dom element isn't set
+ var zIndex = 99;
+ if (this.domElement.style.zIndex) {
+ zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
+ }
+
+ if (typeof(appendElem) == 'string') {
+ appendElem = ZeroClipboard.$(appendElem);
+ }
+ else if (typeof(appendElem) == 'undefined') {
+ appendElem = document.getElementsByTagName('body')[0];
+ }
+
+ // find X/Y position of domElement
+ var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
+
+ // create floating DIV above element
+ this.div = document.createElement('div');
+ var style = this.div.style;
+ style.position = 'absolute';
+ style.left = '' + box.left + 'px';
+ style.top = '' + box.top + 'px';
+ style.width = '' + box.width + 'px';
+ style.height = '' + box.height + 'px';
+ style.zIndex = zIndex;
+
+ if (typeof(stylesToAdd) == 'object') {
+ for (addedStyle in stylesToAdd) {
+ style[addedStyle] = stylesToAdd[addedStyle];
+ }
+ }
+
+ // style.backgroundColor = '#f00'; // debug
+
+ appendElem.appendChild(this.div);
+
+ this.div.innerHTML = this.getHTML( box.width, box.height );
+ },
+
+ getHTML: function(width, height) {
+ // return HTML for movie
+ var html = '';
+ var flashvars = 'id=' + this.id +
+ '&width=' + width +
+ '&height=' + height;
+
+ if (navigator.userAgent.match(/MSIE/)) {
+ // IE gets an OBJECT tag
+ var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
+ 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>';
+ }
+ else {
+ // all other browsers get an EMBED tag
+ 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" />';
+ }
+ return html;
+ },
+
+ hide: function() {
+ // temporarily hide floater offscreen
+ if (this.div) {
+ this.div.style.left = '-2000px';
+ }
+ },
+
+ show: function() {
+ // show ourselves after a call to hide()
+ this.reposition();
+ },
+
+ destroy: function() {
+ // destroy control and floater
+ if (this.domElement && this.div) {
+ this.hide();
+ this.div.innerHTML = '';
+
+ var body = document.getElementsByTagName('body')[0];
+ try { body.removeChild( this.div ); } catch(e) {;}
+
+ this.domElement = null;
+ this.div = null;
+ }
+ },
+
+ reposition: function(elem) {
+ // reposition our floating div, optionally to new container
+ // warning: container CANNOT change size, only position
+ if (elem) {
+ this.domElement = ZeroClipboard.$(elem);
+ if (!this.domElement) this.hide();
+ }
+
+ if (this.domElement && this.div) {
+ var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
+ var style = this.div.style;
+ style.left = '' + box.left + 'px';
+ style.top = '' + box.top + 'px';
+ }
+ },
+
+ setText: function(newText) {
+ // set text to be copied to clipboard
+ this.clipText = newText;
+ if (this.ready) this.movie.setText(newText);
+ },
+
+ addEventListener: function(eventName, func) {
+ // add user event listener for event
+ // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
+ eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+ if (!this.handlers[eventName]) this.handlers[eventName] = [];
+ this.handlers[eventName].push(func);
+ },
+
+ setHandCursor: function(enabled) {
+ // enable hand cursor (true), or default arrow cursor (false)
+ this.handCursorEnabled = enabled;
+ if (this.ready) this.movie.setHandCursor(enabled);
+ },
+
+ setCSSEffects: function(enabled) {
+ // enable or disable CSS effects on DOM container
+ this.cssEffects = !!enabled;
+ },
+
+ receiveEvent: function(eventName, args) {
+ // receive event from flash
+ eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+
+ // special behavior for certain events
+ switch (eventName) {
+ case 'load':
+ // movie claims it is ready, but in IE this isn't always the case...
+ // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
+ this.movie = document.getElementById(this.movieId);
+ if (!this.movie) {
+ var self = this;
+ setTimeout( function() { self.receiveEvent('load', null); }, 1 );
+ return;
+ }
+
+ // firefox on pc needs a "kick" in order to set these in certain cases
+ if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
+ var self = this;
+ setTimeout( function() { self.receiveEvent('load', null); }, 100 );
+ this.ready = true;
+ return;
+ }
+
+ this.ready = true;
+ this.movie.setText( this.clipText );
+ this.movie.setHandCursor( this.handCursorEnabled );
+ break;
+
+ case 'mouseover':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.addClass('hover');
+ if (this.recoverActive) this.domElement.addClass('active');
+ }
+ break;
+
+ case 'mouseout':
+ if (this.domElement && this.cssEffects) {
+ this.recoverActive = false;
+ if (this.domElement.hasClass('active')) {
+ this.domElement.removeClass('active');
+ this.recoverActive = true;
+ }
+ this.domElement.removeClass('hover');
+ }
+ break;
+
+ case 'mousedown':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.addClass('active');
+ }
+ break;
+
+ case 'mouseup':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.removeClass('active');
+ this.recoverActive = false;
+ }
+ break;
+ } // switch eventName
+
+ if (this.handlers[eventName]) {
+ for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
+ var func = this.handlers[eventName][idx];
+
+ if (typeof(func) == 'function') {
+ // actual function reference
+ func(this, args);
+ }
+ else if ((typeof(func) == 'object') && (func.length == 2)) {
+ // PHP style object + method, i.e. [myObject, 'myMethod']
+ func[0][ func[1] ](this, args);
+ }
+ else if (typeof(func) == 'string') {
+ // name of function
+ window[func](this, args);
+ }
+ } // foreach event handler defined
+ } // user defined handler for event
+ }
+
+};
Binary file web/static/ldt/swf/ZeroClipboard10.swf has changed