~jstys-z/helioviewer.org/client5

« back to all changes in this revision

Viewing changes to lib/shadowbox-2.0/src/adapter/shadowbox-mootools.js

  • Committer: Keith Hughitt
  • Date: 2010-02-17 22:00:59 UTC
  • mfrom: (402.1.68 hv)
  • Revision ID: keith.hughitt@nasa.gov-20100217220059-wmdq7kgokj4seryx
Merged with Keith's branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/**
2
 
 * An adapter for Shadowbox and the MooTools JavaScript framework.
3
 
 *
4
 
 * This file is part of Shadowbox.
5
 
 *
6
 
 * Shadowbox is an online media viewer application that supports all of the
7
 
 * web's most popular media publishing formats. Shadowbox is written entirely
8
 
 * in JavaScript and CSS and is highly customizable. Using Shadowbox, website
9
 
 * authors can showcase a wide assortment of media in all major browsers without
10
 
 * navigating users away from the linking page.
11
 
 *
12
 
 * Shadowbox is released under version 3.0 of the Creative Commons Attribution-
13
 
 * Noncommercial-Share Alike license. This means that it is absolutely free
14
 
 * for personal, noncommercial use provided that you 1) make attribution to the
15
 
 * author and 2) release any derivative work under the same or a similar
16
 
 * license.
17
 
 *
18
 
 * If you wish to use Shadowbox for commercial purposes, licensing information
19
 
 * can be found at http://mjijackson.com/shadowbox/.
20
 
 *
21
 
 * @author      Michael J. I. Jackson <mjijackson@gmail.com>
22
 
 * @copyright   2007-2008 Michael J. I. Jackson
23
 
 * @license     http://creativecommons.org/licenses/by-nc-sa/3.0/
24
 
 * @version     SVN: $Id: shadowbox-mootools.js 110 2008-07-11 04:42:10Z mjijackson $
25
 
 */
26
 
 
27
 
if(typeof MooTools == 'undefined'){
28
 
    // Note: requires MooTools 1.2 Core
29
 
    throw 'Unable to load Shadowbox, MooTools library not found';
30
 
}
31
 
 
32
 
// create the Shadowbox object first
33
 
var Shadowbox = {};
34
 
 
35
 
Shadowbox.lib = function(){
36
 
 
37
 
    var alphaRe = /alpha\([^\)]*\)/gi;
38
 
 
39
 
    /**
40
 
     * Sets the opacity of the given element to the specified level. Necessary
41
 
     * in the MooTools adapter to prevent MooTools from messing with the
42
 
     * element's visibility.
43
 
     *
44
 
     * @param   {HTMLElement}   el          The element
45
 
     * @param   {Number}        opacity     The opacity to use
46
 
     * @return  void
47
 
     * @private
48
 
     * @static
49
 
     */
50
 
    var setOpacity = function(el, opacity){
51
 
        var s = el.style;
52
 
        if(window.ActiveXObject){ // IE
53
 
            s.zoom = 1;
54
 
            s.filter = (s.filter || '').replace(alphaRe, '') +
55
 
                       (opacity == 1 ? '' : ' alpha(opacity=' + opacity * 100 + ')');
56
 
        }else{
57
 
            s.opacity = opacity;
58
 
        }
59
 
    };
60
 
 
61
 
    return {
62
 
 
63
 
        adapter: 'mootools',
64
 
 
65
 
        /**
66
 
         * Gets the value of the style on the given element.
67
 
         *
68
 
         * @param   {HTMLElement}   el      The DOM element
69
 
         * @param   {String}        style   The name of the style (e.g. margin-top)
70
 
         * @return  {mixed}                 The value of the given style
71
 
         * @public
72
 
         * @static
73
 
         */
74
 
        getStyle: function(el, style){
75
 
            return $(el).getStyle(style);
76
 
        },
77
 
 
78
 
        /**
79
 
         * Sets the style on the given element to the given value. May be an
80
 
         * object to specify multiple values.
81
 
         *
82
 
         * @param   {HTMLElement}   el      The DOM element
83
 
         * @param   {String/Object} style   The name of the style to set if a
84
 
         *                                  string, or an object of name =>
85
 
         *                                  value pairs
86
 
         * @param   {String}        value   The value to set the given style to
87
 
         * @return  void
88
 
         * @public
89
 
         * @static
90
 
         */
91
 
        setStyle: function(el, style, value){
92
 
            el = $(el);
93
 
            if(typeof style != 'object'){
94
 
                var o = {};
95
 
                o[style] = value;
96
 
                style = o;
97
 
            }
98
 
            for(var s in style){
99
 
                if(s == 'opacity'){
100
 
                    setOpacity(el, style[s]);
101
 
                }else{
102
 
                    el.setStyle(s, style[s]);
103
 
                }
104
 
            }
105
 
        },
106
 
 
107
 
        /**
108
 
         * Gets a reference to the given element.
109
 
         *
110
 
         * @param   {String/HTMLElement}    el      The element to fetch
111
 
         * @return  {HTMLElement}                   A reference to the element
112
 
         * @public
113
 
         * @static
114
 
         */
115
 
        get: function(el){
116
 
            return $(el);
117
 
        },
118
 
 
119
 
        /**
120
 
         * Removes an element from the DOM.
121
 
         *
122
 
         * @param   {HTMLElement}           el      The element to remove
123
 
         * @return  void
124
 
         * @public
125
 
         * @static
126
 
         */
127
 
        remove: function(el){
128
 
            el.parentNode.removeChild(el);
129
 
        },
130
 
 
131
 
        /**
132
 
         * Gets the target of the given event. The event object passed will be
133
 
         * the same object that is passed to listeners registered with
134
 
         * addEvent().
135
 
         *
136
 
         * @param   {mixed}         e       The event object
137
 
         * @return  {HTMLElement}           The event's target element
138
 
         * @public
139
 
         * @static
140
 
         */
141
 
        getTarget: function(e){
142
 
            return e.target;
143
 
        },
144
 
 
145
 
        /**
146
 
         * Gets the page X/Y coordinates of the mouse event in an [x, y] array.
147
 
         * The page coordinates should be relative to the document, and not the
148
 
         * viewport. The event object provided here will be the same object that
149
 
         * is passed to listeners registered with addEvent().
150
 
         *
151
 
         * @param   {mixed}         e       The event object
152
 
         * @return  {Array}                 The page X/Y coordinates
153
 
         * @public
154
 
         * @static
155
 
         */
156
 
        getPageXY: function(e){
157
 
            return [e.page.x, e.page.y];
158
 
        },
159
 
 
160
 
        /**
161
 
         * Prevents the event's default behavior. The event object passed will
162
 
         * be the same object that is passed to listeners registered with
163
 
         * addEvent().
164
 
         *
165
 
         * @param   {mixed}         e       The event object
166
 
         * @return  void
167
 
         * @public
168
 
         * @static
169
 
         */
170
 
        preventDefault: function(e){
171
 
            e.preventDefault();
172
 
        },
173
 
 
174
 
        /**
175
 
         * Gets the key code of the given event object (keydown). The event
176
 
         * object here will be the same object that is passed to listeners
177
 
         * registered with addEvent().
178
 
         *
179
 
         * @param   {mixed}         e       The event object
180
 
         * @return  {Number}                The key code of the event
181
 
         * @public
182
 
         * @static
183
 
         */
184
 
        keyCode: function(e){
185
 
            return e.code;
186
 
        },
187
 
 
188
 
        /**
189
 
         * Adds an event listener to the given element. It is expected that this
190
 
         * function will be passed the event as its first argument.
191
 
         *
192
 
         * @param   {HTMLElement}   el          The DOM element to listen to
193
 
         * @param   {String}        name        The name of the event to register
194
 
         *                                      (i.e. 'click', 'scroll', etc.)
195
 
         * @param   {Function}      handler     The event handler function
196
 
         * @return  void
197
 
         * @public
198
 
         * @static
199
 
         */
200
 
        addEvent: function(el, name, handler){
201
 
            $(el).addEvent(name, handler);
202
 
        },
203
 
 
204
 
        /**
205
 
         * Removes an event listener from the given element.
206
 
         *
207
 
         * @param   {HTMLElement}   el          The DOM element to stop listening to
208
 
         * @param   {String}        name        The name of the event to stop
209
 
         *                                      listening for (i.e. 'click')
210
 
         * @param   {Function}      handler     The event handler function
211
 
         * @return  void
212
 
         * @public
213
 
         * @static
214
 
         */
215
 
        removeEvent: function(el, name, handler){
216
 
            $(el).removeEvent(name, handler);
217
 
        },
218
 
 
219
 
        /**
220
 
         * Appends an HTML fragment to the given element.
221
 
         *
222
 
         * @param   {HTMLElement}       el      The element to append to
223
 
         * @param   {String}            html    The HTML fragment to use
224
 
         * @return  void
225
 
         * @public
226
 
         * @static
227
 
         */
228
 
        append: function(el, html){
229
 
            if(el.insertAdjacentHTML){
230
 
                el.insertAdjacentHTML('BeforeEnd', html);
231
 
            }else if(el.lastChild){
232
 
                var range = el.ownerDocument.createRange();
233
 
                range.setStartAfter(el.lastChild);
234
 
                var frag = range.createContextualFragment(html);
235
 
                el.appendChild(frag);
236
 
            }else{
237
 
                el.innerHTML = html;
238
 
            }
239
 
        }
240
 
 
241
 
    };
242
 
 
243
 
}();