Skip to content

Instantly share code, notes, and snippets.

@Gpx
Forked from AkA84/gist:e5bf8c626c7936d08391
Last active August 29, 2015 14:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Gpx/5366a854b20f6ac7a236 to your computer and use it in GitHub Desktop.
Save Gpx/5366a854b20f6ac7a236 to your computer and use it in GitHub Desktop.
###
Simple popup jQuery widget
###
$.fn.popup = do ->
popups = []
# One time binding to document of the handler that listens for clicks
# on [data-popup-trigger] elements and outside popup elements
do ( ->
# Close popups on outside click
$(document).on 'click', (event) ->
popups.forEach ($popup) =>
$popupParent = $popup.parent()
$popup.hide() if $popup.is(':visible') and !$popupParent.is(event.target) and !$popupParent.has(event.target).length
# Open popups on trigger click
$(document).on 'click', '[data-popup-target]', (event) ->
event.preventDefault()
return unless popups.length?
$popupTarget = popups.filter ($popup) =>
$popup.data('popup') is $(this).data('popupTarget')
$popupTarget[0].toggle() if $popupTarget.length?
) unless popups.length
->
this.each ->
$popup = $ this
popups.push $popup
$popup.on 'click', 'a', (event) -> $popup.hide() # Close popups on link click
$('.fbs_popup').eq(0).popup()
$('.fbs_popup').eq(1).popup()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment