You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

200 lines
4.6 KiB
CoffeeScript

$ = require "jquery"
require "Base64"
$ ->
selectedMethod = undefined
selectedAmount = undefined
selectedHasPrice = undefined
pulsateRemove = undefined
paypalHandler = (block) ->
block.find "input.amount"
.val (Math.round(selectedAmount * 100) / 100)
paymentMethodHandlers =
paypal: paypalHandler
"paypal-weekly": paypalHandler
"paypal-monthly": paypalHandler
bitcoin: (block) ->
block.find(".loading-message").show()
block.find(".loaded-content").hide()
$.get "/donate/convert/btc?amount=#{selectedAmount}", (btcAmount) ->
$.get "/donate/bip21?amount=#{btcAmount}", (uri) ->
$(".bip21").attr("href", uri)
block.find(".loading-message").hide()
block.find(".loaded-content").show()
$(".bip21-qr").attr("src", "/donate/bip21/qr?amount=#{btcAmount}")
$(".btc-amount").text(Math.round(btcAmount * 100000000) / 100000000)
setCustomValue = (value) ->
value = parseFloat(value)
if isNaN value
# TODO: Validation error!
value = 0
selectedAmount = value
$ "#custom_amount_input"
.on "keyup", (event) ->
setCustomValue $(this).val()
showInstructions()
.on "change", (event) ->
setCustomValue $(this).val()
showInstructions()
.on "click", (event) ->
#$ this
# .closest ".option"
# .find "input[type='radio']"
# .click()
#event.stopPropagation()
$ "#amount_custom"
.on "click", (event) ->
setCustomValue $("#custom_amount_input").val()
$ ".donation-page section.types .option input[type='radio']"
.on "click", (event) ->
# Hide any instructions that were already visible.
# TODO: Automatically show instructions again when switching back...?
$ ".donation-page section.instructions div"
.hide()
$ ".donation-page section.instructions .placeholder"
.show()
type = $ this
.closest ".option"
.data "type"
$ ".donation-page section.methods .option"
.hide()
$ ".donation-page section.methods .option[data-type='#{type}']"
.show()
$ ".donation-page section.methods .option input[type='radio']"
.on "click", (event) ->
optionElement = $ this
.closest ".option"
selectedMethod = method = optionElement.data "name"
selectedHasPrice = setPrice = !!(optionElement.data "set-price")
if setPrice
$ ".donation-page section.amount"
.slideDown(400)
instructionSection = $ ".donation-page section.instructions"
instructionSection
.children "h3.set-amount"
.show()
instructionSection
.children "h3.no-set-amount"
.hide()
else
$ ".donation-page section.amount"
.slideUp(400)
instructionSection = $ ".donation-page section.instructions"
instructionSection
.children "h3.set-amount"
.hide()
instructionSection
.children "h3.no-set-amount"
.show()
showInstructions()
$ ".donation-page section.amount .option input[type='radio']"
.on "click", (event) ->
if not ($(this).attr("id") == "amount_custom")
selectedAmount = $(this).val()
showInstructions()
showInstructions = ->
$ ".donation-page section.instructions .method"
.hide()
if selectedMethod? and (selectedAmount? or !selectedHasPrice)
$ ".donation-page section.instructions .placeholder"
.hide()
$ ".donation-page section.instructions .method-#{selectedMethod}"
.show()
#$ "html, body"
# .animate scrollTop: "#{$('.donation-page section.instructions').offset().top}px", 500
$ ".donation-page section.instructions"
.addClass "pulsate"
if pulsateRemove?
clearTimeout pulsateRemove
pulsateRemove = setTimeout (->
$ ".donation-page section.instructions"
.removeClass "pulsate"
), 3000
if selectedMethod of paymentMethodHandlers
paymentMethodHandlers[selectedMethod]($(".donation-page section.instructions .method-#{selectedMethod}"))
else
$ ".donation-page section.instructions .placeholder"
.show()
$ ".donation-page .option input[type='radio']"
.on "click", (event) ->
$ this
.closest "section"
.find ".option"
.removeClass "selected"
$ this
.closest ".option"
.addClass "selected"
$ this
.closest ".option"
.find "input[type='number']"
.focus()
event.stopPropagation()
$ ".donation-page .option"
.on "click", (event) ->
$ this
.find "input[type='radio']"
.click()
$ ".donation-page section.types .option[data-type='once']"
.click()
$ ".donation-page #amount_10"
.click()
$ ".donation-page section.instructions .method, .donation-page section.instructions h3.no-set-amount"
.hide()
$ ".js-unavailable"
.hide()
$ ".js-available"
.show()
$ ".decodable"
.each ->
$(this).html atob($(this).html())