Вход Регистрация
Файл: contao-3.5.8/assets/mootools/datepicker/2.2.0/src/Picker.Attach.js
Строк: 255
<?php
/*
---
name: Picker.Attach
description: Adds attach and detach methods to the Picker, to attach it to element events
authors: Arian Stolwijk
requires: [Picker, Core/Element.Event]
provides: Picker.Attach
...
*/


Picker.Attach = new Class({

    Extends: 
Picker,

    
options: {/*
        onAttached: function(event){},

        toggleElements: null, // deprecated
        toggle: null, // When set it deactivate toggling by clicking on the input */
        
togglesOnlytrue// set to false to always make calendar popup on input element, if true, it depends on the toggles elements set.
        
showOnInitfalse// overrides the Picker option
        
blockKeydowntrue
    
},

    
initialize: function(attachTooptions){
        
this.parent(options);

        
this.attachedEvents = [];
        
this.attachedElements = [];
        
this.toggles = [];
        
this.inputs = [];

        var 
documentEvent = function(event){
            if (
this.attachedElements.contains(event.target)) return;
            
this.close();
        }.
bind(this);
        var 
document this.picker.getDocument().addEvent('click'documentEvent);

        var 
preventPickerClick = function(event){
            
event.stopPropagation();
            return 
false;
        };
        
this.picker.addEvent('click'preventPickerClick);

        
// Support for deprecated toggleElements
        
if (this.options.toggleElementsthis.options.toggle document.getElements(this.options.toggleElements);

        
this.attach(attachTothis.options.toggle);
    },

    
attach: function(attachTotoggle){
        if (
typeOf(attachTo) == 'string'attachTo document.id(attachTo);
        if (
typeOf(toggle) == 'string'toggle document.id(toggle);

        var 
elements = Array.from(attachTo),
            
toggles = Array.from(toggle),
            
allElements = [].append(elements).combine(toggles),
            
self this;

        var 
closeEvent = function(event){
            var 
stopInput self.options.blockKeydown
                    
&& event.type == 'keydown'
                    
&& !(['tab''esc'].contains(event.key)),
                
isCloseKey event.type == 'keydown'
                    
&& (['tab''esc'].contains(event.key)),
                
isA event.target.get('tag') == 'a';

            if (
stopInput || isAevent.preventDefault();
            if (
isCloseKey || isAself.close();
        };

        var 
getOpenEvent = function(element){
            return function(
event){
                var 
tag event.target.get('tag');
                if (
tag == 'input' && event.type == 'click' && !element.match(':focus') || (self.opened && self.input == element)) return;
                if (
tag == 'a'event.stop();
                
self.position(element);
                
self.open();
                
self.fireEvent('attached', [eventelement]);
            };
        };

        var 
getToggleEvent = function(openclose){
            return function(
event){
                if (
self.openedclose(event);
                else 
open(event);
            };
        };

        
allElements.each(function(element){

            
// The events are already attached!
            
if (self.attachedElements.contains(element)) return;

            var 
events = {},
                
tag element.get('tag'),
                
openEvent getOpenEvent(element),
                
// closeEvent does not have a depency on element
                
toggleEvent getToggleEvent(openEventcloseEvent);

            if (
tag == 'input'){
                
// Fix in order to use togglers only
                
if (!self.options.togglesOnly || !toggles.length){
                    
events = {
                        
focusopenEvent,
                        
clickopenEvent,
                        
keydowncloseEvent
                    
};
                }
                
self.inputs.push(element);
            } else {
                if (
toggles.contains(element)){
                    
self.toggles.push(element);
                    
events.click toggleEvent
                
} else {
                    
events.click openEvent;
                }
            }
            
element.addEvents(events);
            
self.attachedElements.push(element);
            
self.attachedEvents.push(events);
        });
        return 
this;
    },

    
detach: function(attachTotoggle){
        if (
typeOf(attachTo) == 'string'attachTo document.id(attachTo);
        if (
typeOf(toggle) == 'string'toggle document.id(toggle);

        var 
elements = Array.from(attachTo),
            
toggles = Array.from(toggle),
            
allElements = [].append(elements).combine(toggles),
            
self this;

        if (!
allElements.lengthallElements self.attachedElements;

        
allElements.each(function(element){
            var 
self.attachedElements.indexOf(element);
            if (
0) return;

            var 
events self.attachedEvents[i];
            
element.removeEvents(events);
            
delete self.attachedEvents[i];
            
delete self.attachedElements[i];

            var 
toggleIndex self.toggles.indexOf(element);
            if (
toggleIndex != -1delete self.toggles[toggleIndex];

            var 
inputIndex self.inputs.indexOf(element);
            if (
toggleIndex != -1delete self.inputs[inputIndex];
        });
        return 
this;
    },

    
destroy: function(){
        
this.detach();
        return 
this.parent();
    }

});
?>
Онлайн: 2
Реклама