Show:
                            
                                /**
                                * This module is the conditional loaded `dd` module to support gesture events
                                * in the event that `dd` is loaded onto a device that support touch based events.
                                *
                                * This module is loaded and over rides 2 key methods on `DD.Drag` and `DD.DDM` to
                                * attach the gesture events. Overrides `DD.Drag._prep` and `DD.DDM._setupListeners`
                                * methods as well as set's the property `DD.Drag.START_EVENT` to `gesturemovestart`
                                * to enable gesture movement instead of mouse based movement.
                                * @module dd
                                * @submodule dd-gestures
                                */
                                Y.log('Drag gesture support loaded', 'info', 'drag-gestures');
                            
                                Y.DD.Drag.START_EVENT = 'gesturemovestart';
                            
                                Y.DD.Drag.prototype._prep = function() {
                                    Y.log('Using DD override prep to attach gesture events', 'info', 'drag-gestures');
                                    this._dragThreshMet = false;
                                    var node = this.get('node'), DDM = Y.DD.DDM;
                            
                                    node.addClass(DDM.CSS_PREFIX + '-draggable');
                            
                                    node.on(Y.DD.Drag.START_EVENT, Y.bind(this._handleMouseDownEvent, this), {
                                        minDistance: this.get('clickPixelThresh'),
                                        minTime: this.get('clickTimeThresh')
                                    });
                            
                                    node.on('gesturemoveend', Y.bind(this._handleMouseUp, this), { standAlone: true });
                                    node.on(['dragstart', 'touchmove'], Y.bind(this._fixDragStart, this));
                                };
                            
                                var _unprep = Y.DD.Drag.prototype._unprep;
                            
                                Y.DD.Drag.prototype._unprep = function() {
                                    var node = this.get('node');
                                    _unprep.call(this);
                                    node.detachAll('gesturemoveend');
                                };
                            
                                Y.DD.DDM._setupListeners = function() {
                                    var DDM = Y.DD.DDM;
                            
                                    this._createPG();
                                    this._active = true;
                                    Y.one(Y.config.doc).on('gesturemove', Y.throttle(Y.bind(DDM._move, DDM), DDM.get('throttleTime')), {
                                        standAlone: true
                                    });
                                };