~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/static/javascript/yui/build/dd/dd-proxy.js

  • Committer: Paul Hummer
  • Date: 2008-10-20 07:34:21 UTC
  • mto: This revision was merged to the branch mainline in revision 230.
  • Revision ID: paul@ubuntu.com-20081020073421-23tcue15338zryqq
Added forgotten library

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
Copyright (c) 2008, Yahoo! Inc. All rights reserved.
 
3
Code licensed under the BSD License:
 
4
http://developer.yahoo.net/yui/license.txt
 
5
version: 3.0.0pr1
 
6
*/
 
7
YUI.add('dd-proxy', function(Y) {
 
8
 
 
9
    /**
 
10
     * The Drag & Drop Utility allows you to create a draggable interface efficiently, buffering you from browser-level abnormalities and enabling you to focus on the interesting logic surrounding your particular implementation. This component enables you to create a variety of standard draggable objects with just a few lines of code and then, using its extensive API, add your own specific implementation logic.
 
11
     * @module dd
 
12
     * @submodule dd-proxy
 
13
     */
 
14
    /**
 
15
     * This class extends dd-drag to allow for creating a proxy drag node, instead of dragging the original node.
 
16
     * @class Proxy
 
17
     * @extends Drag
 
18
     * @constructor
 
19
     */
 
20
    var DDM = Y.DD.DDM,
 
21
        NODE = 'node',
 
22
        DRAG_NODE = 'dragNode',
 
23
        PROXY = 'proxy';
 
24
     
 
25
 
 
26
    var Proxy = function() {
 
27
        Proxy.superclass.constructor.apply(this, arguments);
 
28
 
 
29
    };
 
30
 
 
31
    Proxy.NAME = 'dragProxy';
 
32
 
 
33
    Proxy.ATTRS = {
 
34
        /**
 
35
        * @attribute moveOnEnd
 
36
        * @description Move the original node at the end of the drag. Default: true
 
37
        * @type Boolean
 
38
        */
 
39
        moveOnEnd: {
 
40
            value: true
 
41
        },
 
42
        /**
 
43
        * @attribute resizeFrame
 
44
        * @description Make the Proxy node assume the size of the original node. Default: true
 
45
        * @type Boolean
 
46
        */
 
47
        resizeFrame: {
 
48
            value: true
 
49
        },
 
50
        /**
 
51
        * @attribute proxy
 
52
        * @description Make this Draggable instance a Proxy instance. Default: false
 
53
        * @type Boolean
 
54
        */
 
55
        proxy: {
 
56
            writeOnce: true,
 
57
            value: false
 
58
        },        
 
59
        /**
 
60
        * @attribute positionProxy
 
61
        * @description Make the Proxy node appear in the same place as the original node. Default: true
 
62
        * @type Boolean
 
63
        */
 
64
        positionProxy: {
 
65
            value: true
 
66
        },
 
67
        /**
 
68
        * @attribute borderStyle
 
69
        * @description The default border style for the border of the proxy. Default: 1px solid #808080
 
70
        * @type Boolean
 
71
        */
 
72
        borderStyle: {
 
73
            value: '1px solid #808080'
 
74
        }
 
75
    };
 
76
 
 
77
    var proto = {
 
78
        /**
 
79
        * @private
 
80
        * @method _createFrame
 
81
        * @description Create the proxy element if it doesn't already exist and set the DD.DDM._proxy value
 
82
        */
 
83
        _createFrame: function() {
 
84
            if (!DDM._proxy) {
 
85
                DDM._proxy = true;
 
86
                var p = Y.Node.create('<div></div>');
 
87
 
 
88
                p.setStyles({
 
89
                    position: 'absolute',
 
90
                    display: 'none',
 
91
                    zIndex: '999',
 
92
                    top: '-999px',
 
93
                    left: '-999px',
 
94
                    border: this.get('borderStyle')
 
95
                });
 
96
 
 
97
                var b = Y.Node.get('body');
 
98
                b.insertBefore(p, b.get('firstChild'));
 
99
                p.set('id', Y.stamp(p));
 
100
                p.addClass(DDM.CSS_PREFIX + '-proxy');
 
101
                DDM._proxy = p;
 
102
            }
 
103
        },
 
104
        /**
 
105
        * @private
 
106
        * @method _setFrame
 
107
        * @description If resizeProxy is set to true (default) it will resize the proxy element to match the size of the Drag Element.
 
108
        * If positionProxy is set to true (default) it will position the proxy element in the same location as the Drag Element.
 
109
        */
 
110
        _setFrame: function() {
 
111
            var n = this.get(NODE);
 
112
            if (this.get('resizeFrame')) {
 
113
                DDM._proxy.setStyles({
 
114
                    height: n.get('offsetHeight') + 'px',
 
115
                    width: n.get('offsetWidth') + 'px'
 
116
                });
 
117
            }
 
118
            this.get(DRAG_NODE).setStyles({
 
119
                visibility: 'hidden',
 
120
                display: 'block',
 
121
                border: this.get('borderStyle')
 
122
            });
 
123
 
 
124
            if (this.get('positionProxy')) {
 
125
                this.get(DRAG_NODE).setXY(this.nodeXY);
 
126
            }
 
127
            this.get(DRAG_NODE).setStyle('visibility', 'visible');
 
128
        },
 
129
        /**
 
130
        * @private
 
131
        * @method initializer
 
132
        * @description Lifecycle method
 
133
        */
 
134
        initializer: function() {
 
135
            if (this.get(PROXY)) {
 
136
                this._createFrame();
 
137
            }
 
138
        },
 
139
        /**
 
140
        * @method start
 
141
        * @description Starts the drag operation and sets the dragNode config option.
 
142
        */       
 
143
        start: function() {
 
144
            if (!this.get('lock')) {
 
145
                if (this.get(PROXY)) {
 
146
                    if (this.get(DRAG_NODE).compareTo(this.get(NODE))) {
 
147
                        this.set(DRAG_NODE, DDM._proxy);
 
148
                    }
 
149
                }
 
150
            }
 
151
            Proxy.superclass.start.apply(this);
 
152
            if (this.get(PROXY)) {
 
153
                this._setFrame();
 
154
            }
 
155
        },
 
156
        /**
 
157
        * @method end
 
158
        * @description Ends the drag operation, if moveOnEnd is set it will position the Drag Element to the new location of the proxy.
 
159
        */        
 
160
        end: function() {
 
161
            if (this.get(PROXY) && this.get('dragging')) {
 
162
                if (this.get('moveOnEnd')) {
 
163
                    this.get(NODE).setXY(this.lastXY);
 
164
                }
 
165
                this.get(DRAG_NODE).setStyle('display', 'none');
 
166
            }
 
167
            Proxy.superclass.end.apply(this);
 
168
        }
 
169
    };
 
170
    //Extend DD.Drag
 
171
    Y.extend(Proxy, Y.DD.Drag, proto);
 
172
    //Set this new class as DD.Drag for other extensions
 
173
    Y.DD.Drag = Proxy;    
 
174
 
 
175
 
 
176
 
 
177
}, '3.0.0pr1' ,{requires:['dd-ddm', 'dd-drag'], skinnable:false});