Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. _popups = (app, module) ->
  2.    
  3.     # Open caret (opens popups via CSS)
  4.     openCaret = (caretElement) ->
  5.         caretElement.closest('.js-popup').addClass('js-opened')
  6.         caretElement.closest('.js-popup').addClass('-opened')
  7.         caretElement.addClass('js-opened')
  8.         caretElement.addClass('-opened')
  9.        
  10.     # Close caret (closes popups via CSS)
  11.     closeCaret = (caretElement) ->
  12.         caretElement.closest('.js-popup').removeClass('js-opened')
  13.         caretElement.closest('.js-popup').removeClass('-opened')
  14.         caretElement.removeClass('js-opened')
  15.         caretElement.removeClass('-opened')
  16.  
  17.     ###
  18.         @ comamnd = close, open
  19.         @ caretElement = jQuery element selector of the caret
  20.     ###
  21.     itterateCarets = (command, caretElement) ->
  22.  
  23.         if not caretElement?
  24.             caretElement = ''
  25.                    
  26.         # Close all unnecesary carets
  27.         caretElementsArray = $(document).find('.js-popupTrigger.js-opened')
  28.  
  29.         for caretItteration in caretElementsArray
  30.  
  31.             # Wrap it in jQ object, so we can compare properly
  32.             caretItteration = $(caretItteration)
  33.  
  34.             # Check if the loop item is NOT the same as the input element and close it
  35.             if !caretItteration.is(caretElement)
  36.  
  37.                 closeCaret(caretItteration)
  38.  
  39.         # Open caret
  40.         if command is 'open'
  41.             openCaret(caretElement)
  42.  
  43.     # Add popup listeners for closing or clicking outside
  44.     addPopupClickListener = () ->
  45.        
  46.         $(document)
  47.             .on 'click', (e) ->
  48.                 clickTarget = $(e.target)
  49.                
  50.                 caretElement = clickTarget.closest('.js-popupTrigger')
  51.  
  52.                 # Check if we clicked inside the trigger
  53.                 if caretElement.length isnt 0
  54.  
  55.                     # Check if the triger is already opened, if it is, close the carets
  56.                     if caretElement.hasClass('js-opened')
  57.                         itterateCarets('close')
  58.                         return
  59.  
  60.                     itterateCarets('open', caretElement)
  61.                     return
  62.  
  63.                 # Check if we click somewhere inside the dropdown, if we are, kill the script
  64.                 caretElement = clickTarget.closest('.js-popup').find('.js-popupTrigger')
  65.                 if caretElement.length isnt 0
  66.                     return
  67.  
  68.                 # If user clicked elsewhere, close everything
  69.                 itterateCarets('close')
  70.  
  71.  
  72.                
  73.     # React to clicks
  74.     addPopupClickListener()
  75.  
  76.     return
  77.    
  78. export default _popups
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement