1
0
mirror of https://github.com/github/choosealicense.com synced 2024-11-06 03:38:49 +01:00
choosealicense.com/assets/js/app.coffee

114 lines
3.2 KiB
CoffeeScript
Raw Normal View History

2014-07-31 18:36:56 +02:00
---
---
2013-07-13 21:18:57 +02:00
class Choosealicense
# Checks if Flash is available in the client.
flashAvailable: ->
if ActiveXObject?
2013-10-30 19:23:28 +01:00
!!(new ActiveXObject("ShockwaveFlash.ShockwaveFlash"))
else
!!navigator.mimeTypes["application/x-shockwave-flash"]
# Selects the content of a given element
selectText: (element) ->
if document.body.createTextRange
2013-11-30 00:08:27 +01:00
range = document.body.createTextRange()
range.moveToElementText(element)
range.select()
else if window.getSelection
selection = window.getSelection()
range = document.createRange()
range.selectNodeContents(element)
2013-11-30 00:08:27 +01:00
selection.removeAllRanges()
selection.addRange(range)
2013-07-13 21:18:57 +02:00
# Qtip position attributes for tooltips
qtip_position:
my: "top center"
at: "bottom center"
# Annotation categories as defined in `_config.yml`
categories:
required: "Required"
permitted: "Permitted"
forbidden: "Forbidden"
# fire on document.ready
constructor: ->
@initTooltips()
@initClipboard()
@initLicenseVariationNav()
2013-07-13 21:18:57 +02:00
# Init tooltip action
initTooltips: ->
# Dynamically add annotations as title attribute to rule list items
2014-07-31 18:36:56 +02:00
for category, rules of window.annotations
2014-09-05 17:26:54 +02:00
for rule in rules
$(".license-rules ul.license-#{category} li.#{rule["tag"]}").attr "title", rule["description"]
2013-07-13 21:18:57 +02:00
# Init tooltips on all rule list items
for category, label of @categories
$(".license-#{category} li").qtip
content:
text: false
title:
text: label
position: @qtip_position
style:
classes: "qtip-shadow qtip-#{category}"
false
# Initializes ZeroClipboard
initZeroClipboard: ->
2013-11-30 00:08:27 +01:00
# Backup the clipboard button's original text.
$(".js-clipboard-button").data "clipboard-prompt", $(".js-clipboard-button").text()
2013-11-30 00:08:27 +01:00
# Hook up copy to clipboard buttons
clip = new ZeroClipboard $(".js-clipboard-button"),
moviePath: "/assets/vendor/zeroclipboard/ZeroClipboard.swf"
2013-11-30 00:08:27 +01:00
clip.on "mouseout", @clipboardMouseout
clip.on "complete", @clipboardComplete
clip
# Initializes an alternative way to copy the license for non-flash compatible
# browsers
initAlternativeClipboard: ->
$(".js-clipboard-button").click (e) =>
target = "#" + $(e.target).data("clipboard-target")
@selectText $(target)[0]
2013-07-13 21:18:57 +02:00
# if Zero Clipboard is present, bind to button and init
initClipboard: ->
if ZeroClipboard? && @flashAvailable()
@initZeroClipboard()
else
@initAlternativeClipboard()
2013-07-13 21:18:57 +02:00
# Callback to restore the clipboard button's original text
clipboardMouseout: (client, args) ->
@textContent = $(this).data("clipboard-prompt")
2013-07-13 21:18:57 +02:00
# Post-copy user feedback callback
clipboardComplete: (client, args) ->
@textContent = "Copied!"
2013-07-13 21:18:57 +02:00
# Initializes pill navigation for license variations
initLicenseVariationNav: ->
$(".js-nav-pills a").click (e) ->
2013-12-10 08:48:49 +01:00
selectedTab = $(this).data("selected-tab")
nav = $(this).closest(".js-nav-pills")
nav.find("li").removeClass("active")
nav.closest(".js-license-variations").siblings(".js-variation-tab").removeClass("active")
2013-12-10 08:48:49 +01:00
$(this).parent("li").addClass("active")
$("." + selectedTab).addClass("active")
e.preventDefault()
2013-07-13 21:18:57 +02:00
$ ->
new Choosealicense()