diff --git a/.eslintrc.js b/.eslintrc.js
index 7ab419b3..65c38c80 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,3 +1,4 @@
+// License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
module.exports = {
"env": {
"browser": true,
diff --git a/client/js/bank_accounts/confirm/page.js b/client/js/bank_accounts/confirm/page.js
index 15d4e2c3..a3d1fc6e 100644
--- a/client/js/bank_accounts/confirm/page.js
+++ b/client/js/bank_accounts/confirm/page.js
@@ -1 +1,2 @@
+// License: LGPL-3.0-or-later
require('./index.es6')
diff --git a/client/js/bank_accounts/resend_confirmation_email.js b/client/js/bank_accounts/resend_confirmation_email.js
index 54207040..5eb6843a 100644
--- a/client/js/bank_accounts/resend_confirmation_email.js
+++ b/client/js/bank_accounts/resend_confirmation_email.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../common/super-agent-frp')
var a = document.querySelector(".js-event-resendBankConfirmEmail")
diff --git a/client/js/campaigns/index/page.js b/client/js/campaigns/index/page.js
index dca4a762..2d0166dd 100644
--- a/client/js/campaigns/index/page.js
+++ b/client/js/campaigns/index/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
if(app.user)
require('../new/wizard')
diff --git a/client/js/campaigns/new/wizard.js b/client/js/campaigns/new/wizard.js
index 3c130b7b..2c73149b 100644
--- a/client/js/campaigns/new/wizard.js
+++ b/client/js/campaigns/new/wizard.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../common/pikaday-timepicker')
require('../../components/wizard')
require('../../common/image_uploader')
diff --git a/client/js/campaigns/peer_to_peer/page.js b/client/js/campaigns/peer_to_peer/page.js
index d67d61a6..a51ea457 100644
--- a/client/js/campaigns/peer_to_peer/page.js
+++ b/client/js/campaigns/peer_to_peer/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../new/wizard')
var request = require("../../common/client")
diff --git a/client/js/campaigns/show/admin.js b/client/js/campaigns/show/admin.js
index 955f2491..818a2216 100644
--- a/client/js/campaigns/show/admin.js
+++ b/client/js/campaigns/show/admin.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../common/pikaday-timepicker')
require('../../common/restful_resource')
const request = require('../../common/client')
diff --git a/client/js/campaigns/show/choose-gift-options-modal.js b/client/js/campaigns/show/choose-gift-options-modal.js
index 3ade56b8..2b42675a 100644
--- a/client/js/campaigns/show/choose-gift-options-modal.js
+++ b/client/js/campaigns/show/choose-gift-options-modal.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const flyd = require('flyd')
const R = require('ramda')
diff --git a/client/js/campaigns/show/gift-option-button.js b/client/js/campaigns/show/gift-option-button.js
index 6661ec40..8fe78384 100644
--- a/client/js/campaigns/show/gift-option-button.js
+++ b/client/js/campaigns/show/gift-option-button.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const branding = require('../../components/nonprofit-branding')
const format = require('../../common/format')
diff --git a/client/js/campaigns/show/gift-option-list.js b/client/js/campaigns/show/gift-option-list.js
index 6c1dcdb5..8b49069d 100644
--- a/client/js/campaigns/show/gift-option-list.js
+++ b/client/js/campaigns/show/gift-option-list.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const flyd = require('flyd')
const R = require('ramda')
diff --git a/client/js/campaigns/show/gift-option-quantity-left.js b/client/js/campaigns/show/gift-option-quantity-left.js
index 8a61095e..e109f3ae 100644
--- a/client/js/campaigns/show/gift-option-quantity-left.js
+++ b/client/js/campaigns/show/gift-option-quantity-left.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const soldOut = require('./is-sold-out')
diff --git a/client/js/campaigns/show/is-sold-out.js b/client/js/campaigns/show/is-sold-out.js
index f45a17d8..e013f44b 100644
--- a/client/js/campaigns/show/is-sold-out.js
+++ b/client/js/campaigns/show/is-sold-out.js
@@ -1,2 +1,3 @@
+// License: LGPL-3.0-or-later
module.exports = g => g.quantity && (g.quantity - g.total_gifts <= 0)
diff --git a/client/js/campaigns/show/metrics-and-contribute-box.js b/client/js/campaigns/show/metrics-and-contribute-box.js
index ea1847de..ac031fef 100644
--- a/client/js/campaigns/show/metrics-and-contribute-box.js
+++ b/client/js/campaigns/show/metrics-and-contribute-box.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const flyd = require('flyd')
const h = require('snabbdom/h')
diff --git a/client/js/campaigns/show/page.js b/client/js/campaigns/show/page.js
index 71d6cb5f..0a19889c 100755
--- a/client/js/campaigns/show/page.js
+++ b/client/js/campaigns/show/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flyd')
const h = require('snabbdom/h')
const R = require('ramda')
diff --git a/client/js/campaigns/show/tour.js b/client/js/campaigns/show/tour.js
index 392ca1ed..161a3174 100644
--- a/client/js/campaigns/show/tour.js
+++ b/client/js/campaigns/show/tour.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../common/vendor/bootstrap-tour-standalone')
var tour_campaign = new Tour({
diff --git a/client/js/campaigns/supporters/index/page.js b/client/js/campaigns/supporters/index/page.js
index aafcc36e..c1d016b8 100644
--- a/client/js/campaigns/supporters/index/page.js
+++ b/client/js/campaigns/supporters/index/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../timeline')
require('../../totals')
require('./index.es6')
diff --git a/client/js/campaigns/timeline.js b/client/js/campaigns/timeline.js
index cb09ffdf..5ff8c455 100644
--- a/client/js/campaigns/timeline.js
+++ b/client/js/campaigns/timeline.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const request = require('../common/client')
const R = require('ramda')
const Chart = require('chart.js')
diff --git a/client/js/campaigns/totals.js b/client/js/campaigns/totals.js
index 63273f2a..0bcb1e02 100644
--- a/client/js/campaigns/totals.js
+++ b/client/js/campaigns/totals.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const request = require('../common/request')
const flyd = require('flyd')
const R = require('ramda')
diff --git a/client/js/cards/create.js b/client/js/cards/create.js
index 218fe861..8d9271a2 100644
--- a/client/js/cards/create.js
+++ b/client/js/cards/create.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// Include the cards/fields partial to use with this.
// Call appl.card_form.create(card_obj) to start the card creation process.
// Use the appl.card_form.on_fail callback to handle failures.
diff --git a/client/js/common/ajax/check_campaign_or_event_name.js b/client/js/common/ajax/check_campaign_or_event_name.js
index 71d368fb..517e9ee7 100644
--- a/client/js/common/ajax/check_campaign_or_event_name.js
+++ b/client/js/common/ajax/check_campaign_or_event_name.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var R = require('ramda')
var request = require('../client')
diff --git a/client/js/common/ajax/get_campaign_and_event_names_and_ids.js b/client/js/common/ajax/get_campaign_and_event_names_and_ids.js
index 3334e6a8..9ab7cbc4 100644
--- a/client/js/common/ajax/get_campaign_and_event_names_and_ids.js
+++ b/client/js/common/ajax/get_campaign_and_event_names_and_ids.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../client')
module.exports = function(npo_id) {
diff --git a/client/js/common/application_view.js b/client/js/common/application_view.js
index fe54a0f9..3023f6e9 100644
--- a/client/js/common/application_view.js
+++ b/client/js/common/application_view.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var confirmation = require('./confirmation')
var notification = require('./notification')
var request = require("superagent")
diff --git a/client/js/common/apply-pikaday.js b/client/js/common/apply-pikaday.js
index 6da08624..c16cc20e 100644
--- a/client/js/common/apply-pikaday.js
+++ b/client/js/common/apply-pikaday.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const bind = require('attr-binder')
const Pikaday = require('pikaday')
const moment = require('moment')
diff --git a/client/js/common/autosubmit.js b/client/js/common/autosubmit.js
index d8d650a3..31ca1514 100644
--- a/client/js/common/autosubmit.js
+++ b/client/js/common/autosubmit.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var confirmation = require('./confirmation')
var notification = require('./notification')
diff --git a/client/js/common/brand-fonts.js b/client/js/common/brand-fonts.js
index e4263e5d..47c8fd93 100644
--- a/client/js/common/brand-fonts.js
+++ b/client/js/common/brand-fonts.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = {
helvetica: {family: "'Helvetica Neue', Helvetica, Arial, sans-serif", name: 'Helvetica'},
futura: {family: "'Futura', Arial, sans-serif", name: 'Futura'},
diff --git a/client/js/common/class-object.js b/client/js/common/class-object.js
index d6ea8456..7bdd32cd 100644
--- a/client/js/common/class-object.js
+++ b/client/js/common/class-object.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
module.exports = (classes='') => R.reduce(
diff --git a/client/js/common/client.js b/client/js/common/client.js
index 6bdfad00..e824e804 100644
--- a/client/js/common/client.js
+++ b/client/js/common/client.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// superapi wrapper with our api defaults
var request = require('superagent')
diff --git a/client/js/common/colors.js b/client/js/common/colors.js
index 36de0b7a..d646e6c1 100644
--- a/client/js/common/colors.js
+++ b/client/js/common/colors.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = {
// BLUES
'$dark-turquoise': "#306563"
diff --git a/client/js/common/confirmation.js b/client/js/common/confirmation.js
index f04f5190..73a218bd 100644
--- a/client/js/common/confirmation.js
+++ b/client/js/common/confirmation.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var confirmation = function(msg, success_cb) {
var $confirm_modal = $('#confirmation-modal')
var $msg = $confirm_modal.find('.msg')
diff --git a/client/js/common/credit-card-validator.js b/client/js/common/credit-card-validator.js
index 480873cb..832e6864 100644
--- a/client/js/common/credit-card-validator.js
+++ b/client/js/common/credit-card-validator.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
// Reference: https://en.wikipedia.org/wiki/Luhn_algorithm
diff --git a/client/js/common/css-gradient.js b/client/js/common/css-gradient.js
index b5b3dcdd..29ffcee8 100644
--- a/client/js/common/css-gradient.js
+++ b/client/js/common/css-gradient.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = (dir, to, from) =>
` background-image: -webkit-linear-gradient(${dir}, ${to}, ${from});
background-image: -moz-linear-gradient(${dir}, ${to}, ${from});
diff --git a/client/js/common/dynamic_form.js b/client/js/common/dynamic_form.js
index 1410285a..ffe66c8e 100644
--- a/client/js/common/dynamic_form.js
+++ b/client/js/common/dynamic_form.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var notification = require('./notification')
$('form.dynamic').submit(function(e) {
diff --git a/client/js/common/editable.js b/client/js/common/editable.js
index 75f5bfd4..2a0fb863 100644
--- a/client/js/common/editable.js
+++ b/client/js/common/editable.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// if you are instantiating more than one WYSIWYG on a page,
// be sure to give them id's to differentiate them
// to avoid unwanted display side effects
diff --git a/client/js/common/el_swapo.js b/client/js/common/el_swapo.js
index fc711f68..9047af10 100644
--- a/client/js/common/el_swapo.js
+++ b/client/js/common/el_swapo.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var el_swapo = {}
$('*[swap-in]').each(function(i) {
diff --git a/client/js/common/event.js b/client/js/common/event.js
index 8645a322..934f1c87 100644
--- a/client/js/common/event.js
+++ b/client/js/common/event.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var actions = [ 'change', 'click', 'dblclick', 'mousedown', 'mouseup', 'mouseenter', 'mouseleave', 'scroll', 'blur', 'focus', 'input', 'submit', 'keydown', 'keypress', 'keyup' ]
function event(id, fn) {
diff --git a/client/js/common/file-input-stream.js b/client/js/common/file-input-stream.js
index b9060aef..4f506b04 100644
--- a/client/js/common/file-input-stream.js
+++ b/client/js/common/file-input-stream.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flyd')
const R = require('ramda')
diff --git a/client/js/common/form-to-object.js b/client/js/common/form-to-object.js
index ada23d71..8321ff9f 100644
--- a/client/js/common/form-to-object.js
+++ b/client/js/common/form-to-object.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// Convert a form to an object literal
module.exports = function(form) {
if(form === undefined) throw new Error("form is undefined")
diff --git a/client/js/common/form.js b/client/js/common/form.js
index 6ccb309d..ace9efcc 100644
--- a/client/js/common/form.js
+++ b/client/js/common/form.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var form = module.exports = {
loading: loading,
showErr: showErr,
diff --git a/client/js/common/format.js b/client/js/common/format.js
index 22a66559..80544e2c 100644
--- a/client/js/common/format.js
+++ b/client/js/common/format.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var moment = require('moment')
var format = {}
diff --git a/client/js/common/format_response_error.js b/client/js/common/format_response_error.js
index c6fddab1..b9a9e94b 100644
--- a/client/js/common/format_response_error.js
+++ b/client/js/common/format_response_error.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// This is a little utility to convert a superagent response that has an error
// into a readable single string message
//
diff --git a/client/js/common/fundraiser_metrics.js b/client/js/common/fundraiser_metrics.js
index e43212c8..b5e3a946 100644
--- a/client/js/common/fundraiser_metrics.js
+++ b/client/js/common/fundraiser_metrics.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const format = require('../common/format')
require('../common/restful_resource')
diff --git a/client/js/common/geography.js b/client/js/common/geography.js
index 9f3e16e6..a31850cc 100644
--- a/client/js/common/geography.js
+++ b/client/js/common/geography.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var geo = {}
diff --git a/client/js/common/get-valid-data.js b/client/js/common/get-valid-data.js
index 4ec8560d..c7ffd9b5 100644
--- a/client/js/common/get-valid-data.js
+++ b/client/js/common/get-valid-data.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flimflam/flyd')
const request = require("../common/request")
diff --git a/client/js/common/google-api.js b/client/js/common/google-api.js
index 19cf78b1..077116e7 100644
--- a/client/js/common/google-api.js
+++ b/client/js/common/google-api.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flyd')
const filter = require('flyd/module/filter')
const R = require('ramda')
diff --git a/client/js/common/image_uploader.js b/client/js/common/image_uploader.js
index fa626949..089df177 100644
--- a/client/js/common/image_uploader.js
+++ b/client/js/common/image_uploader.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
$('.image-upload input').change(function(e) {
var self = this
appl.def('image_upload.is_selecting', true)
diff --git a/client/js/common/jquery_additions.js b/client/js/common/jquery_additions.js
index 8c6f69e1..640f137a 100644
--- a/client/js/common/jquery_additions.js
+++ b/client/js/common/jquery_additions.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
$.fn.serializeObject = function() {
return this.serializeArray().reduce(function(obj, field) {
if(field.value)
diff --git a/client/js/common/notification.js b/client/js/common/notification.js
index aac9f71c..4ca5c0b5 100644
--- a/client/js/common/notification.js
+++ b/client/js/common/notification.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var notification = function(msg, err) {
var el = document.getElementById('js-notification')
if(err) {el.className = 'show error'}
diff --git a/client/js/common/on-change-sanitize-slug.js b/client/js/common/on-change-sanitize-slug.js
index d8c5aba0..126dde2a 100644
--- a/client/js/common/on-change-sanitize-slug.js
+++ b/client/js/common/on-change-sanitize-slug.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const sanitize = require('./sanitize-slug')
diff --git a/client/js/common/on-ios11.js b/client/js/common/on-ios11.js
index 99ed4a35..99728c18 100644
--- a/client/js/common/on-ios11.js
+++ b/client/js/common/on-ios11.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
function calculateIOS()
{
var userAgent = window.navigator.userAgent;
diff --git a/client/js/common/onboard.js b/client/js/common/onboard.js
index 0284beb4..bdcfbbc9 100644
--- a/client/js/common/onboard.js
+++ b/client/js/common/onboard.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flimflam/flyd')
const h = require('flimflam/h')
const R = require('ramda')
diff --git a/client/js/common/panels_layout.js b/client/js/common/panels_layout.js
index 43da4162..6da6a7e5 100644
--- a/client/js/common/panels_layout.js
+++ b/client/js/common/panels_layout.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var $panelsLayout = $('.panelsLayout'),
$panelsLayoutBody = $panelsLayout.find('.panelsLayout-body'),
$sidePanel = $panelsLayoutBody.find('.sidePanel'),
diff --git a/client/js/common/pikaday-timepicker.js b/client/js/common/pikaday-timepicker.js
index 4d8c168a..0e2cc62e 100644
--- a/client/js/common/pikaday-timepicker.js
+++ b/client/js/common/pikaday-timepicker.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const bind = require('attr-binder')
const Pikaday = require('pikaday-time')
const moment = require('moment')
diff --git a/client/js/common/polyfills.js b/client/js/common/polyfills.js
index bc3cd72a..9504f84e 100644
--- a/client/js/common/polyfills.js
+++ b/client/js/common/polyfills.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// Console fallback
if (!window.console) {
window.console = new function() {
diff --git a/client/js/common/post-form-data.js b/client/js/common/post-form-data.js
index a28fd5d0..3a95ce4c 100644
--- a/client/js/common/post-form-data.js
+++ b/client/js/common/post-form-data.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flyd')
const R = require('ramda')
diff --git a/client/js/common/request.js b/client/js/common/request.js
index 93fff1ef..ebd508ca 100644
--- a/client/js/common/request.js
+++ b/client/js/common/request.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const request = require('flyd-ajax')
diff --git a/client/js/common/restful_resource.js b/client/js/common/restful_resource.js
index b17a77ae..89029c3a 100644
--- a/client/js/common/restful_resource.js
+++ b/client/js/common/restful_resource.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
/* A simple module for dealing with ajax-based resources in viewscript
*
*
diff --git a/client/js/common/sanitize-slug.js b/client/js/common/sanitize-slug.js
index fc215759..e2cfcf4c 100644
--- a/client/js/common/sanitize-slug.js
+++ b/client/js/common/sanitize-slug.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = str =>
str.trim().toLowerCase()
.replace(/\s*[^A-Za-z0-9\-]\s*/g, '-') // Replace any oddballs with a hyphen
diff --git a/client/js/common/scroll_toggle_class.js b/client/js/common/scroll_toggle_class.js
index 50e3e3e0..7ed8a119 100644
--- a/client/js/common/scroll_toggle_class.js
+++ b/client/js/common/scroll_toggle_class.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = function(el, className, parentClass) {
var $el = $(el)
var elPxFromTop = $el.offset().top
diff --git a/client/js/common/search-data.js b/client/js/common/search-data.js
index f143cdd3..1dcb383e 100644
--- a/client/js/common/search-data.js
+++ b/client/js/common/search-data.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('flimflam/h')
const flyd = require('flimflam/flyd')
diff --git a/client/js/common/super-agent-frp.js b/client/js/common/super-agent-frp.js
index 9c0c887a..82968f83 100644
--- a/client/js/common/super-agent-frp.js
+++ b/client/js/common/super-agent-frp.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// super-agent with default json and csrf wrappers
// Also has a FRP api (using flyd) rather than the default '.end'
// Every call to .perform() returns a flyd stream
diff --git a/client/js/common/super-agent-promise.js b/client/js/common/super-agent-promise.js
index 020af118..12905091 100644
--- a/client/js/common/super-agent-promise.js
+++ b/client/js/common/super-agent-promise.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// super-agent with default json and csrf wrappers
// Also has a Promise api ('.then' and '.catch') rather than the default '.end'
diff --git a/client/js/common/time-remaining.js b/client/js/common/time-remaining.js
index 83452ef3..8a435720 100644
--- a/client/js/common/time-remaining.js
+++ b/client/js/common/time-remaining.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flyd')
const flyd_every = require('flyd/module/every')
const moment = require('moment-timezone')
diff --git a/client/js/common/utilities.js b/client/js/common/utilities.js
index f48a0ecc..07fd38a9 100755
--- a/client/js/common/utilities.js
+++ b/client/js/common/utilities.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// Utilities!
// XXX remove this whole file and split into modules with specific concerns
const phoneFormatter = require('phone-formatter');
diff --git a/client/js/common/vendor/Chart.min.js b/client/js/common/vendor/Chart.min.js
index 1fe65428..27b08032 100755
--- a/client/js/common/vendor/Chart.min.js
+++ b/client/js/common/vendor/Chart.min.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
/*!
* Chart.js
* http://chartjs.org/
diff --git a/client/js/common/vendor/bootstrap-tour-standalone.js b/client/js/common/vendor/bootstrap-tour-standalone.js
index d352cdc9..9155204b 100644
--- a/client/js/common/vendor/bootstrap-tour-standalone.js
+++ b/client/js/common/vendor/bootstrap-tour-standalone.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
/* ===========================================================
# bootstrap-tour - v0.9.3
# http://bootstraptour.com
diff --git a/client/js/common/vendor/bootstrap.js b/client/js/common/vendor/bootstrap.js
index d4aa0961..8779549c 100644
--- a/client/js/common/vendor/bootstrap.js
+++ b/client/js/common/vendor/bootstrap.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
/*!
* Bootstrap v3.3.2 (http://getbootstrap.com)
* Copyright 2011-2015 Twitter, Inc.
diff --git a/client/js/common/vendor/colpick.js b/client/js/common/vendor/colpick.js
index 05437acf..da3ed7c5 100644
--- a/client/js/common/vendor/colpick.js
+++ b/client/js/common/vendor/colpick.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
/*
colpick Color Picker
Copyright 2013 Jose Vargas. Licensed under GPL license. Based on Stefan Petre's Color Picker www.eyecon.ro, dual licensed under the MIT and GPL licenses
diff --git a/client/js/common/vendor/jquery.cookie.js b/client/js/common/vendor/jquery.cookie.js
index 3cab0d34..f20f9e38 100755
--- a/client/js/common/vendor/jquery.cookie.js
+++ b/client/js/common/vendor/jquery.cookie.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
/*!
* jQuery Cookie Plugin v1.4.1
* https://github.com/carhartl/jquery-cookie
diff --git a/client/js/common/vendor/masonry.js b/client/js/common/vendor/masonry.js
index e3fd426f..1d312791 100644
--- a/client/js/common/vendor/masonry.js
+++ b/client/js/common/vendor/masonry.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
/*!
* Salvattore 1.0.8 by @rnmp and @ppold
* https://github.com/rnmp/salvattore
diff --git a/client/js/components/activity_feed.js b/client/js/components/activity_feed.js
index 139597f9..10733a7e 100644
--- a/client/js/components/activity_feed.js
+++ b/client/js/components/activity_feed.js
@@ -1,2 +1,3 @@
+// License: LGPL-3.0-or-later
diff --git a/client/js/components/address-autocomplete-fields.js b/client/js/components/address-autocomplete-fields.js
index edb36a7c..596783fd 100644
--- a/client/js/components/address-autocomplete-fields.js
+++ b/client/js/components/address-autocomplete-fields.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flyd')
const h = require('snabbdom/h')
const R = require('ramda')
diff --git a/client/js/components/address-autocomplete.js b/client/js/components/address-autocomplete.js
index 4cba0e2d..dd756057 100644
--- a/client/js/components/address-autocomplete.js
+++ b/client/js/components/address-autocomplete.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const flyd = require('flyd')
diff --git a/client/js/components/ajax/toggle_soft_delete.js b/client/js/components/ajax/toggle_soft_delete.js
index 539ebeb4..ab644013 100644
--- a/client/js/components/ajax/toggle_soft_delete.js
+++ b/client/js/components/ajax/toggle_soft_delete.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../common/client')
module.exports = function(url, type) {
diff --git a/client/js/components/animated-wizard.js b/client/js/components/animated-wizard.js
index 0cba9a52..68a54eeb 100644
--- a/client/js/components/animated-wizard.js
+++ b/client/js/components/animated-wizard.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('flimflam/h')
const flyd = require('flimflam/flyd')
diff --git a/client/js/components/b64.js b/client/js/components/b64.js
index 7e218bca..d7ec4219 100644
--- a/client/js/components/b64.js
+++ b/client/js/components/b64.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// see https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding
// used for encoded and decoding data for email text
diff --git a/client/js/components/branded_fundraising.js b/client/js/components/branded_fundraising.js
index efa070bb..efe857c8 100644
--- a/client/js/components/branded_fundraising.js
+++ b/client/js/components/branded_fundraising.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const brandColors = require('../components/nonprofit-branding')
$('[if-branded]').each(function() {
diff --git a/client/js/components/carousel.js b/client/js/components/carousel.js
index b962f90a..7127f0b4 100644
--- a/client/js/components/carousel.js
+++ b/client/js/components/carousel.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('flimflam/h')
diff --git a/client/js/components/chart-options.js b/client/js/components/chart-options.js
index 1c4cd914..77c0b1c3 100644
--- a/client/js/components/chart-options.js
+++ b/client/js/components/chart-options.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var chartOptions = {}
chartOptions.default = {
diff --git a/client/js/components/checkbox.js b/client/js/components/checkbox.js
index 4c783e08..42ff14b4 100644
--- a/client/js/components/checkbox.js
+++ b/client/js/components/checkbox.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('flimflam/h')
const uuid = require('uuid')
diff --git a/client/js/components/confirmation-modal.js b/client/js/components/confirmation-modal.js
index ce915734..cd867a2c 100644
--- a/client/js/components/confirmation-modal.js
+++ b/client/js/components/confirmation-modal.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('snabbdom/h')
const uuid = require('uuid')
diff --git a/client/js/components/date-range.js b/client/js/components/date-range.js
index eaa7b508..f7873a9d 100644
--- a/client/js/components/date-range.js
+++ b/client/js/components/date-range.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const moment = require('moment')
require('moment-range')
diff --git a/client/js/components/date_range_picker.js b/client/js/components/date_range_picker.js
index 6cfcd277..e0752fe4 100644
--- a/client/js/components/date_range_picker.js
+++ b/client/js/components/date_range_picker.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var Pikaday = require('pikaday')
var moment = require('moment')
diff --git a/client/js/components/dollar-input.js b/client/js/components/dollar-input.js
index 6e263ea7..86fde2a9 100644
--- a/client/js/components/dollar-input.js
+++ b/client/js/components/dollar-input.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('flimflam/h')
module.exports = (name, placeholder, value) => {
diff --git a/client/js/components/drag-to-reorder.js b/client/js/components/drag-to-reorder.js
index f0b55227..04348eb6 100644
--- a/client/js/components/drag-to-reorder.js
+++ b/client/js/components/drag-to-reorder.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const dragula = require('dragula')
const serialize = require('form-serialize')
const R = require('ramda')
diff --git a/client/js/components/duplicate_fundraiser.js b/client/js/components/duplicate_fundraiser.js
index 6e61c82d..5a847d23 100644
--- a/client/js/components/duplicate_fundraiser.js
+++ b/client/js/components/duplicate_fundraiser.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flyd')
const request = require('../common/request')
const flatMap = require('flyd/module/flatmap')
diff --git a/client/js/components/encode-plain-email.js b/client/js/components/encode-plain-email.js
index 90377033..9a6a782e 100644
--- a/client/js/components/encode-plain-email.js
+++ b/client/js/components/encode-plain-email.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const b64 = require('./b64')
module.exports = o => {
diff --git a/client/js/components/field-with-error.js b/client/js/components/field-with-error.js
index 3e9b0536..d730bd10 100644
--- a/client/js/components/field-with-error.js
+++ b/client/js/components/field-with-error.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('flimflam/h')
const R = require('ramda')
const validatedForm = require('flimflam/ui/validated-form')
diff --git a/client/js/components/fundraising/add_header_image.js b/client/js/components/fundraising/add_header_image.js
index a80ed371..68db23e7 100644
--- a/client/js/components/fundraising/add_header_image.js
+++ b/client/js/components/fundraising/add_header_image.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
if(app.header_image_url) {
var cssString = "display: block; background-image: url(" + app.header_image_url + ")"
document.getElementById('js-fundraisingHeader').className ='fundraisingHeader--image container'
diff --git a/client/js/components/maps/cc_map.js b/client/js/components/maps/cc_map.js
index 7d660cfb..86f5b9bd 100644
--- a/client/js/components/maps/cc_map.js
+++ b/client/js/components/maps/cc_map.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../common/client')
var map_options = require('./default_options')
var cc_map = {}
diff --git a/client/js/components/maps/default_options.js b/client/js/components/maps/default_options.js
index 13420736..88c7a992 100644
--- a/client/js/components/maps/default_options.js
+++ b/client/js/components/maps/default_options.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var styles = require('./styles');
module.exports = {
diff --git a/client/js/components/maps/npo_coordinates.js b/client/js/components/maps/npo_coordinates.js
index 01bba74d..f5ffe605 100644
--- a/client/js/components/maps/npo_coordinates.js
+++ b/client/js/components/maps/npo_coordinates.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = function(){
if(app.nonprofit.latitude) {
return {
diff --git a/client/js/components/maps/styles.js b/client/js/components/maps/styles.js
index 73ee0826..8fa18881 100644
--- a/client/js/components/maps/styles.js
+++ b/client/js/components/maps/styles.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var Styles = {}
// style credit: https://snazzymaps.com/style/1735/discreet
diff --git a/client/js/components/modal.js b/client/js/components/modal.js
index cecd9635..a24d9c33 100644
--- a/client/js/components/modal.js
+++ b/client/js/components/modal.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('flimflam/h')
const modal = require('flimflam/ui/modal')
diff --git a/client/js/components/nonprofit-branding.js b/client/js/components/nonprofit-branding.js
index 46d23fa7..c7f2c639 100644
--- a/client/js/components/nonprofit-branding.js
+++ b/client/js/components/nonprofit-branding.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const color = require('color')
var brandColor = app.nonprofit.brand_color || '#5FB88D'
diff --git a/client/js/components/number-input.js b/client/js/components/number-input.js
index 6f6f9272..da5ff94c 100644
--- a/client/js/components/number-input.js
+++ b/client/js/components/number-input.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('flimflam/h')
const classObject = require('../common/class-object')
diff --git a/client/js/components/progress-bar.js b/client/js/components/progress-bar.js
index 56ca5b9f..952065b3 100644
--- a/client/js/components/progress-bar.js
+++ b/client/js/components/progress-bar.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const R = require('ramda')
const flyd = require('flyd')
diff --git a/client/js/components/public-activities.js b/client/js/components/public-activities.js
index 08d9156a..46a2ce39 100644
--- a/client/js/components/public-activities.js
+++ b/client/js/components/public-activities.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flyd')
const h = require('snabbdom/h')
const R = require('ramda')
diff --git a/client/js/components/radio-and-label-wrapper.js b/client/js/components/radio-and-label-wrapper.js
index 284be496..1bcbb45f 100644
--- a/client/js/components/radio-and-label-wrapper.js
+++ b/client/js/components/radio-and-label-wrapper.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var h = require("virtual-dom/h")
// a constructor function for creating radio-label pairs
diff --git a/client/js/components/radios.js b/client/js/components/radios.js
index 34992399..7d53c9d9 100644
--- a/client/js/components/radios.js
+++ b/client/js/components/radios.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('flimflam/h')
const uuid = require('uuid')
diff --git a/client/js/components/render-activities.js b/client/js/components/render-activities.js
index 92fd28e5..ecb265a6 100644
--- a/client/js/components/render-activities.js
+++ b/client/js/components/render-activities.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const snabbdom = require('snabbdom')
const render = require('ff-core/render')
const activities = require('./public-activities')
diff --git a/client/js/components/saving_indicator.js b/client/js/components/saving_indicator.js
index f9798cf2..8df1f142 100644
--- a/client/js/components/saving_indicator.js
+++ b/client/js/components/saving_indicator.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var h = require("virtual-dom/h")
module.exports = function(savingState) {
diff --git a/client/js/components/search-table.js b/client/js/components/search-table.js
index 07980619..28c318fd 100644
--- a/client/js/components/search-table.js
+++ b/client/js/components/search-table.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('flimflam/h')
const search = require('./search')
diff --git a/client/js/components/search.js b/client/js/components/search.js
index 51212d27..cbdb33ef 100644
--- a/client/js/components/search.js
+++ b/client/js/components/search.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('flimflam/h')
const input = require('./text-input')
diff --git a/client/js/components/select.js b/client/js/components/select.js
index 0835037e..a1b49a78 100644
--- a/client/js/components/select.js
+++ b/client/js/components/select.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('flimflam/h')
diff --git a/client/js/components/set-state-from-value.js b/client/js/components/set-state-from-value.js
index 842743a0..6f3ed0ad 100644
--- a/client/js/components/set-state-from-value.js
+++ b/client/js/components/set-state-from-value.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = function (state, ev){
var target = ev.target
var names = target.name.split('.')
diff --git a/client/js/components/state-selector.js b/client/js/components/state-selector.js
index 1404390a..eecc4775 100644
--- a/client/js/components/state-selector.js
+++ b/client/js/components/state-selector.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const R = require('ramda')
diff --git a/client/js/components/styles/branded-wizard.js b/client/js/components/styles/branded-wizard.js
index d1fee017..c22312f2 100644
--- a/client/js/components/styles/branded-wizard.js
+++ b/client/js/components/styles/branded-wizard.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const colors = require('../nonprofit-branding')
const gradient = require('../../common/css-gradient')
diff --git a/client/js/components/styles/render-styles.js b/client/js/components/styles/render-styles.js
index ed099774..393cb43f 100644
--- a/client/js/components/styles/render-styles.js
+++ b/client/js/components/styles/render-styles.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = _ => {
var styleTag = document.createElement('style')
return styles => {
diff --git a/client/js/components/supporter-fields.js b/client/js/components/supporter-fields.js
index 079ce394..39c1d4c4 100644
--- a/client/js/components/supporter-fields.js
+++ b/client/js/components/supporter-fields.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const R = require('ramda')
const flyd = require('flyd')
diff --git a/client/js/components/tables/filtering/apply_filter.js b/client/js/components/tables/filtering/apply_filter.js
index e2b33c81..90b523aa 100644
--- a/client/js/components/tables/filtering/apply_filter.js
+++ b/client/js/components/tables/filtering/apply_filter.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var format = require('../../../common/format')
module.exports = function(scope) {
diff --git a/client/js/components/text-input.js b/client/js/components/text-input.js
index 86858fd1..75cf386d 100644
--- a/client/js/components/text-input.js
+++ b/client/js/components/text-input.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('flimflam/h')
const classObject = require('../common/class-object')
diff --git a/client/js/components/textarea.js b/client/js/components/textarea.js
index f1540e1c..cd00057c 100644
--- a/client/js/components/textarea.js
+++ b/client/js/components/textarea.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('flimflam/h')
const classObject = require('../common/class-object')
diff --git a/client/js/components/todos.js b/client/js/components/todos.js
index e80a8396..57637d41 100644
--- a/client/js/components/todos.js
+++ b/client/js/components/todos.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = function(cb){
var request = require('../common/client')
var url = '/nonprofits/' + app.nonprofit_id
diff --git a/client/js/components/top-nav.js b/client/js/components/top-nav.js
index 0331ac0f..2e958b2f 100644
--- a/client/js/components/top-nav.js
+++ b/client/js/components/top-nav.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('flimflam/h')
module.exports = title =>
diff --git a/client/js/components/typewriter.js b/client/js/components/typewriter.js
index f9982f1d..7b384c0f 100644
--- a/client/js/components/typewriter.js
+++ b/client/js/components/typewriter.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = function (arr, id, ms) {
var j = 0
var linesLength = arr.length
diff --git a/client/js/components/wizard.js b/client/js/components/wizard.js
index 30650281..e87f1c67 100644
--- a/client/js/components/wizard.js
+++ b/client/js/components/wizard.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// Functionality for a wizard UI (eg. our donate button)
appl.def('wizard', {
diff --git a/client/js/donations/create.js b/client/js/donations/create.js
index 4a996494..5a6d8dba 100644
--- a/client/js/donations/create.js
+++ b/client/js/donations/create.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// This defines a create_donation function that will create a Donation and
// Charge in our database and on Stripe given a Supporter that has a valid Card
//
diff --git a/client/js/donations/create_offline.js b/client/js/donations/create_offline.js
index 2671ff0f..292357c9 100644
--- a/client/js/donations/create_offline.js
+++ b/client/js/donations/create_offline.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../common/super-agent-promise')
var format = require('../common/format')
diff --git a/client/js/events/discounts/index.js b/client/js/events/discounts/index.js
index 8ee8b8d0..267931b5 100644
--- a/client/js/events/discounts/index.js
+++ b/client/js/events/discounts/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../common/client')
var R = require('ramda')
diff --git a/client/js/events/discounts/manage.js b/client/js/events/discounts/manage.js
index 022b5bbb..96ab988d 100644
--- a/client/js/events/discounts/manage.js
+++ b/client/js/events/discounts/manage.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var R = require('ramda')
var request = require('../../common/client')
var format = require('../../common/format')
diff --git a/client/js/events/index/page.js b/client/js/events/index/page.js
index a16d17c4..459d6b1f 100644
--- a/client/js/events/index/page.js
+++ b/client/js/events/index/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const renderListings = require('../listings')
renderListings(`/nonprofits/${app.nonprofit_id}/events/listings`)
diff --git a/client/js/events/listing-item/index.js b/client/js/events/listing-item/index.js
index 6e18fa57..c9832b22 100644
--- a/client/js/events/listing-item/index.js
+++ b/client/js/events/listing-item/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const format = require('../../common/format')
const h = require('snabbdom/h')
const moment = require('moment-timezone')
diff --git a/client/js/events/listings/index.js b/client/js/events/listings/index.js
index 50af2858..eb942a36 100644
--- a/client/js/events/listings/index.js
+++ b/client/js/events/listings/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('snabbdom/h')
const flyd = require('flyd')
diff --git a/client/js/events/new/wizard.js b/client/js/events/new/wizard.js
index 01f4b4f4..d63fdedc 100644
--- a/client/js/events/new/wizard.js
+++ b/client/js/events/new/wizard.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../common/pikaday-timepicker')
require('../../components/wizard')
require('../../common/image_uploader')
diff --git a/client/js/events/show/editor.js b/client/js/events/show/editor.js
index ba560e7a..0952b4fc 100644
--- a/client/js/events/show/editor.js
+++ b/client/js/events/show/editor.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// Functionality for Event Editors (a nonprofit admin, the event creator, or a super admin)
require('../../common/image_uploader')
diff --git a/client/js/events/show/event_donation.js b/client/js/events/show/event_donation.js
index f52257b1..12cc64a5 100644
--- a/client/js/events/show/event_donation.js
+++ b/client/js/events/show/event_donation.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
$('.ticket-level').click(function(e) {
wiz.model.set('single_amount', $(this).data('dollars'))
wiz.model.set('designation', $(this).data('name'))
diff --git a/client/js/events/show/page.js b/client/js/events/show/page.js
index d5d5323b..d75847af 100644
--- a/client/js/events/show/page.js
+++ b/client/js/events/show/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../common/pikaday-timepicker')
require('../../common/fundraiser_metrics')
require('../../components/fundraising/add_header_image')
diff --git a/client/js/events/show/tour.js b/client/js/events/show/tour.js
index 8fc21b6d..e510e598 100644
--- a/client/js/events/show/tour.js
+++ b/client/js/events/show/tour.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../common/vendor/bootstrap-tour-standalone')
var tour_event = new Tour({
diff --git a/client/js/events/stats/page.js b/client/js/events/stats/page.js
index f5138bee..f9ca66d6 100644
--- a/client/js/events/stats/page.js
+++ b/client/js/events/stats/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// npm
const R = require('ramda')
const flyd = require('flyd')
diff --git a/client/js/explore/index/page.js b/client/js/explore/index/page.js
index 306a304a..a937b58a 100644
--- a/client/js/explore/index/page.js
+++ b/client/js/explore/index/page.js
@@ -1,2 +1,3 @@
+// License: LGPL-3.0-or-later
require('../../common/vendor/masonry')
require('../../common/onboard')
diff --git a/client/js/front/page.js b/client/js/front/page.js
index 1aec6db2..505c51bf 100644
--- a/client/js/front/page.js
+++ b/client/js/front/page.js
@@ -1 +1,2 @@
+// License: LGPL-3.0-or-later
require('../common/onboard')
\ No newline at end of file
diff --git a/client/js/gift_options/admin.js b/client/js/gift_options/admin.js
index cad7f719..30ea8c4a 100644
--- a/client/js/gift_options/admin.js
+++ b/client/js/gift_options/admin.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../common/restful_resource')
const reorder = require('../components/drag-to-reorder')
const format = require('../common/format')
diff --git a/client/js/gift_options/index.js b/client/js/gift_options/index.js
index d76320aa..3d45bfe0 100644
--- a/client/js/gift_options/index.js
+++ b/client/js/gift_options/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../common/restful_resource')
appl.def('gift_options', {
diff --git a/client/js/nonprofits/btn/page.js b/client/js/nonprofits/btn/page.js
index e31cf2c5..9a3505ac 100644
--- a/client/js/nonprofits/btn/page.js
+++ b/client/js/nonprofits/btn/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var Font = require('../../common/brand-fonts'),
utils = require('../../common/utilities'),
$brandedButton = $('.branded-donate-button')
diff --git a/client/js/nonprofits/button/amounts.js b/client/js/nonprofits/button/amounts.js
index 523b248b..58bc2c0d 100644
--- a/client/js/nonprofits/button/amounts.js
+++ b/client/js/nonprofits/button/amounts.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")
diff --git a/client/js/nonprofits/button/appearance.js b/client/js/nonprofits/button/appearance.js
index ad8af339..6a8742b5 100644
--- a/client/js/nonprofits/button/appearance.js
+++ b/client/js/nonprofits/button/appearance.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")
diff --git a/client/js/nonprofits/button/designations.js b/client/js/nonprofits/button/designations.js
index 912ad1d2..cc569d63 100644
--- a/client/js/nonprofits/button/designations.js
+++ b/client/js/nonprofits/button/designations.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")
diff --git a/client/js/nonprofits/button/footer.js b/client/js/nonprofits/button/footer.js
index 58ea21ef..0bb10d76 100644
--- a/client/js/nonprofits/button/footer.js
+++ b/client/js/nonprofits/button/footer.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")
diff --git a/client/js/nonprofits/button/hide-dedication.js b/client/js/nonprofits/button/hide-dedication.js
index b39019b5..9541618c 100644
--- a/client/js/nonprofits/button/hide-dedication.js
+++ b/client/js/nonprofits/button/hide-dedication.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")
diff --git a/client/js/nonprofits/button/page.js b/client/js/nonprofits/button/page.js
index 6f133329..4839cb41 100644
--- a/client/js/nonprofits/button/page.js
+++ b/client/js/nonprofits/button/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var view = require("vvvview")
var flyd = require("flyd")
flyd.scanmerge = require("flyd/module/scanmerge")
diff --git a/client/js/nonprofits/button/preview.js b/client/js/nonprofits/button/preview.js
index bfc7902b..620c611d 100644
--- a/client/js/nonprofits/button/preview.js
+++ b/client/js/nonprofits/button/preview.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")
diff --git a/client/js/nonprofits/button/thank-you.js b/client/js/nonprofits/button/thank-you.js
index e9e39398..59d6c3b5 100644
--- a/client/js/nonprofits/button/thank-you.js
+++ b/client/js/nonprofits/button/thank-you.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")
diff --git a/client/js/nonprofits/button/type.js b/client/js/nonprofits/button/type.js
index e5572f74..fe734e3c 100644
--- a/client/js/nonprofits/button/type.js
+++ b/client/js/nonprofits/button/type.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")
var footer = require('./footer')
diff --git a/client/js/nonprofits/cards/edit/page.js b/client/js/nonprofits/cards/edit/page.js
index 3c20f69e..f9b577f7 100644
--- a/client/js/nonprofits/cards/edit/page.js
+++ b/client/js/nonprofits/cards/edit/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('./index.es6')
diff --git a/client/js/nonprofits/dashboard/page.js b/client/js/nonprofits/dashboard/page.js
index c34aa8ba..3a7d388d 100644
--- a/client/js/nonprofits/dashboard/page.js
+++ b/client/js/nonprofits/dashboard/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../campaigns/new/wizard')
require('../../events/new/wizard')
require('./tour')
diff --git a/client/js/nonprofits/dashboard/tour.js b/client/js/nonprofits/dashboard/tour.js
index f731bae6..65e2f5b2 100644
--- a/client/js/nonprofits/dashboard/tour.js
+++ b/client/js/nonprofits/dashboard/tour.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../common/vendor/bootstrap-tour-standalone')
var $nav = $('.sideNav')
diff --git a/client/js/nonprofits/donate/amount-step.js b/client/js/nonprofits/donate/amount-step.js
index b6b3b706..a5f42a45 100644
--- a/client/js/nonprofits/donate/amount-step.js
+++ b/client/js/nonprofits/donate/amount-step.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const R = require('ramda')
const flyd = require('flyd')
diff --git a/client/js/nonprofits/donate/dedication-form.js b/client/js/nonprofits/donate/dedication-form.js
index d65c6e8c..e6ac6a3a 100644
--- a/client/js/nonprofits/donate/dedication-form.js
+++ b/client/js/nonprofits/donate/dedication-form.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const R = require('ramda')
const flyd = require('flyd')
diff --git a/client/js/nonprofits/donate/followup-step.js b/client/js/nonprofits/donate/followup-step.js
index 9cc09526..77c0b650 100644
--- a/client/js/nonprofits/donate/followup-step.js
+++ b/client/js/nonprofits/donate/followup-step.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
function view(state) {
diff --git a/client/js/nonprofits/donate/get-params.js b/client/js/nonprofits/donate/get-params.js
index 3c1dd600..f5920195 100644
--- a/client/js/nonprofits/donate/get-params.js
+++ b/client/js/nonprofits/donate/get-params.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const splitParam = str =>
diff --git a/client/js/nonprofits/donate/i18n.js b/client/js/nonprofits/donate/i18n.js
index 81291211..9935374d 100644
--- a/client/js/nonprofits/donate/i18n.js
+++ b/client/js/nonprofits/donate/i18n.js
@@ -1 +1,2 @@
+// License: LGPL-3.0-or-later
!function(e,n){"function"==typeof define&&define.amd?define("i18n",function(){return n(e)}):"object"==typeof module&&module.exports?module.exports=n(e):e.I18n=n(e)}(this,function(e){"use strict";var n=e&&e.I18n||{},o=Array.prototype.slice,t=function(e){return("0"+e.toString()).substr(-2)},a=function(e){var n=typeof e;return"function"===n||"object"===n},r=function(e){return"function"===typeof e},i=function(e){return void 0!==e&&null!==e},s=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===Object.prototype.toString.call(e)},u=function(e){return"string"==typeof value||"[object String]"===Object.prototype.toString.call(e)},l=function(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)},c=function(e){return!0===e||!1===e},d=function(e,n,o){return void 0===o||0==+o?Math[e](n):(n=+n,o=+o,isNaN(n)||"number"!=typeof o||o%1!=0?NaN:(n=n.toString().split("e"),n=Math[e](+(n[0]+"e"+(n[1]?+n[1]-o:-o))),+((n=n.toString().split("e"))[0]+"e"+(n[1]?+n[1]+o:o))))},m=function(e,n){return r(e)?e(n):e},p=function(e,n){var o,t;for(o in n)n.hasOwnProperty(o)&&(t=n[o],u(t)||l(t)||c(t)?e[o]=t:(null==e[o]&&(e[o]={}),p(e[o],t)));return e},_={day_names:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],abbr_day_names:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],month_names:[null,"January","February","March","April","May","June","July","August","September","October","November","December"],abbr_month_names:[null,"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],meridian:["AM","PM"]},h={precision:3,separator:".",delimiter:",",strip_insignificant_zeros:!1},g={unit:"$",precision:2,format:"%u%n",sign_first:!0,delimiter:",",separator:"."},b={unit:"%",precision:3,format:"%n%u",separator:".",delimiter:""},f=[null,"kb","mb","gb","tb"],y={defaultLocale:"en",locale:"en",defaultSeparator:".",placeholder:/(?:\{\{|%\{)(.*?)(?:\}\}?)/gm,fallbacks:!1,translations:{},missingBehaviour:"message",missingTranslationPrefix:""};return n.reset=function(){var e;for(e in y)this[e]=y[e]},n.initializeOptions=function(){var e;for(e in y)i(this[e])||(this[e]=y[e])},n.initializeOptions(),n.locales={},n.locales.get=function(e){var o=this[e]||this[n.locale]||this.default;return r(o)&&(o=o(e)),!1===s(o)&&(o=[o]),o},n.locales.default=function(e){var o=[],t=[];return e&&o.push(e),!e&&n.locale&&o.push(n.locale),n.fallbacks&&n.defaultLocale&&o.push(n.defaultLocale),o.forEach(function(e){var o=e.split("-"),a=null,r=null;3===o.length?(a=[o[0],o[1]].join("-"),r=o[0]):2===o.length&&(a=o[0]),-1===t.indexOf(e)&&t.push(e),n.fallbacks&&[a,r].forEach(function(n){void 0!==n&&null!==n&&n!==e&&-1===t.indexOf(n)&&t.push(n)})}),o.length||o.push("en"),t},n.pluralization={},n.pluralization.get=function(e){return this[e]||this[n.locale]||this.default},n.pluralization.default=function(e){switch(e){case 0:return["zero","other"];case 1:return["one"];default:return["other"]}},n.currentLocale=function(){return this.locale||this.defaultLocale},n.isSet=i,n.lookup=function(e,n){n=n||{};var o,t,a,r,s=this.locales.get(n.locale).slice();s[0];for(a=this.getFullScope(e,n);s.length;)if(o=s.shift(),t=a.split(this.defaultSeparator),r=this.translations[o]){for(;t.length&&void 0!==(r=r[t.shift()])&&null!==r;);if(void 0!==r&&null!==r)return r}if(i(n.defaultValue))return m(n.defaultValue,e)},n.pluralizationLookupWithoutFallback=function(e,n,o){var t,r,s=this.pluralization.get(n)(e);if(a(o))for(;s.length;)if(t=s.shift(),i(o[t])){r=o[t];break}return r},n.pluralizationLookup=function(e,n,o){o=o||{};var t,r,s,u,l=this.locales.get(o.locale).slice();l[0];for(n=this.getFullScope(n,o);l.length;)if(t=l.shift(),r=n.split(this.defaultSeparator),s=this.translations[t]){for(;r.length&&(s=s[r.shift()],a(s));)0==r.length&&(u=this.pluralizationLookupWithoutFallback(e,t,s));if(null!=u&&void 0!=u)break}return null!=u&&void 0!=u||i(o.defaultValue)&&(u=a(o.defaultValue)?this.pluralizationLookupWithoutFallback(e,o.locale,o.defaultValue):o.defaultValue,s=o.defaultValue),{message:u,translations:s}},n.meridian=function(){var e=this.lookup("time"),n=this.lookup("date");return e&&e.am&&e.pm?[e.am,e.pm]:n&&n.meridian?n.meridian:_.meridian},n.prepareOptions=function(){for(var e,n=o.call(arguments),t={};n.length;)if("object"==typeof(e=n.shift()))for(var a in e)e.hasOwnProperty(a)&&(i(t[a])||(t[a]=e[a]));return t},n.createTranslationOptions=function(e,n){var o=[{scope:e}];return i(n.defaults)&&(o=o.concat(n.defaults)),i(n.defaultValue)&&o.push({message:n.defaultValue}),o},n.translate=function(e,n){n=n||{};var o,t=this.createTranslationOptions(e,n),r=this.prepareOptions(n);delete r.defaultValue;return t.some(function(n){if(i(n.scope)?o=this.lookup(n.scope,r):i(n.message)&&(o=m(n.message,e)),void 0!==o&&null!==o)return!0},this)?("string"==typeof o?o=this.interpolate(o,n):a(o)&&i(n.count)&&(o=this.pluralize(n.count,e,n)),o):this.missingTranslation(e,n)},n.interpolate=function(e,n){n=n||{};var o,t,a,r=e.match(this.placeholder);if(!r)return e;for(var s;r.length;)t=(o=r.shift()).replace(this.placeholder,"$1"),s=i(n[t])?n[t].toString().replace(/\$/gm,"_#$#_"):t in n?this.nullPlaceholder(o,e,n):this.missingPlaceholder(o,e,n),a=new RegExp(o.replace(/\{/gm,"\\{").replace(/\}/gm,"\\}")),e=e.replace(a,s);return e.replace(/_#\$#_/g,"$")},n.pluralize=function(e,n,o){o=this.prepareOptions({count:String(e)},o);var t,a;return void 0==(a=this.pluralizationLookup(e,n,o)).translations||null==a.translations?this.missingTranslation(n,o):void 0!=a.message&&null!=a.message?this.interpolate(a.message,o):(t=this.pluralization.get(o.locale),this.missingTranslation(n+"."+t(e)[0],o))},n.missingTranslation=function(e,n){if("guess"==this.missingBehaviour){var o=e.split(".").slice(-1)[0];return(this.missingTranslationPrefix.length>0?this.missingTranslationPrefix:"")+o.replace("_"," ").replace(/([a-z])([A-Z])/g,function(e,n,o){return n+" "+o.toLowerCase()})}return'[missing "'+[null!=n&&null!=n.locale?n.locale:this.currentLocale(),this.getFullScope(e,n)].join(this.defaultSeparator)+'" translation]'},n.missingPlaceholder=function(e,n,o){return"[missing "+e+" value]"},n.nullPlaceholder=function(){return n.missingPlaceholder.apply(n,arguments)},n.toNumber=function(e,n){n=this.prepareOptions(n,this.lookup("number.format"),h);var o,t,a=e<0,r=function(e,n){return d("round",e,-n).toFixed(n)}(Math.abs(e),n.precision).toString().split("."),i=[],s=n.format||"%n",u=a?"-":"";for(e=r[0],o=r[1];e.length>0;)i.unshift(e.substr(Math.max(0,e.length-3),3)),e=e.substr(0,e.length-3);return t=i.join(n.delimiter),n.strip_insignificant_zeros&&o&&(o=o.replace(/0+$/,"")),n.precision>0&&o&&(t+=n.separator+o),s=n.sign_first?"%s"+s:s.replace("%n","%s%n"),t=s.replace("%u",n.unit).replace("%n",t).replace("%s",u)},n.toCurrency=function(e,n){return n=this.prepareOptions(n,this.lookup("number.currency.format"),this.lookup("number.format"),g),this.toNumber(e,n)},n.localize=function(e,n,o){switch(o||(o={}),e){case"currency":return this.toCurrency(n);case"number":return e=this.lookup("number.format"),this.toNumber(n,e);case"percentage":return this.toPercentage(n);default:var t;return t=e.match(/^(date|time)/)?this.toTime(e,n):n.toString(),this.interpolate(t,o)}},n.parseDate=function(e){var n,o,t;if("object"==typeof e)return e;if(n=e.toString().match(/(\d{4})-(\d{2})-(\d{2})(?:[ T](\d{2}):(\d{2}):(\d{2})([\.,]\d{1,3})?)?(Z|\+00:?00)?/)){for(var a=1;a<=6;a++)n[a]=parseInt(n[a],10)||0;n[2]-=1,t=n[7]?1e3*("0"+n[7]):null,o=n[8]?new Date(Date.UTC(n[1],n[2],n[3],n[4],n[5],n[6],t)):new Date(n[1],n[2],n[3],n[4],n[5],n[6],t)}else"number"==typeof e?(o=new Date).setTime(e):e.match(/([A-Z][a-z]{2}) ([A-Z][a-z]{2}) (\d+) (\d+:\d+:\d+) ([+-]\d+) (\d+)/)?(o=new Date).setTime(Date.parse([RegExp.$1,RegExp.$2,RegExp.$3,RegExp.$6,RegExp.$4,RegExp.$5].join(" "))):(e.match(/\d+ \d+:\d+:\d+ [+-]\d+ \d+/),(o=new Date).setTime(Date.parse(e)));return o},n.strftime=function(e,o){var a=this.lookup("date"),r=n.meridian();if(a||(a={}),a=this.prepareOptions(a,_),isNaN(e.getTime()))throw new Error("I18n.strftime() requires a valid date object, but received an invalid date.");var i=e.getDay(),s=e.getDate(),u=e.getFullYear(),l=e.getMonth()+1,c=e.getHours(),d=c,m=c>11?1:0,p=e.getSeconds(),h=e.getMinutes(),g=e.getTimezoneOffset(),b=Math.floor(Math.abs(g/60)),f=Math.abs(g)-60*b,y=(g>0?"-":"+")+(b.toString().length<2?"0"+b:b)+(f.toString().length<2?"0"+f:f);return d>12?d-=12:0===d&&(d=12),o=o.replace("%a",a.abbr_day_names[i]),o=o.replace("%A",a.day_names[i]),o=o.replace("%b",a.abbr_month_names[l]),o=o.replace("%B",a.month_names[l]),o=o.replace("%d",t(s)),o=o.replace("%e",s),o=o.replace("%-d",s),o=o.replace("%H",t(c)),o=o.replace("%-H",c),o=o.replace("%I",t(d)),o=o.replace("%-I",d),o=o.replace("%m",t(l)),o=o.replace("%-m",l),o=o.replace("%M",t(h)),o=o.replace("%-M",h),o=o.replace("%p",r[m]),o=o.replace("%S",t(p)),o=o.replace("%-S",p),o=o.replace("%w",i),o=o.replace("%y",t(u)),o=o.replace("%-y",t(u).replace(/^0+/,"")),o=o.replace("%Y",u),o=o.replace("%z",y)},n.toTime=function(e,n){var o=this.parseDate(n),t=this.lookup(e);return o.toString().match(/invalid/i)?o.toString():t?this.strftime(o,t):o.toString()},n.toPercentage=function(e,n){return n=this.prepareOptions(n,this.lookup("number.percentage.format"),this.lookup("number.format"),b),this.toNumber(e,n)},n.toHumanSize=function(e,n){for(var o,t,a=e,r=0;a>=1024&&r<4;)a/=1024,r+=1;return 0===r?(o=this.t("number.human.storage_units.units.byte",{count:a}),t=0):(o=this.t("number.human.storage_units.units."+f[r]),t=a-Math.floor(a)==0?0:1),n=this.prepareOptions(n,{unit:o,precision:t,format:"%n%u",delimiter:""}),this.toNumber(a,n)},n.getFullScope=function(e,n){return n=n||{},s(e)&&(e=e.join(this.defaultSeparator)),n.scope&&(e=[n.scope,e].join(this.defaultSeparator)),e},n.extend=function(e,n){return void 0===e&&void 0===n?{}:p(e,n)},n.t=n.translate,n.l=n.localize,n.p=n.pluralize,n}),I18n.translations||(I18n.translations={}),I18n.translations.en=I18n.extend(I18n.translations.en||{},{activemodel:{errors:{format:"%{attribute} %{message}",messages:{accepted:"must be accepted",blank:"can't be blank",confirmation:"doesn't match confirmation",empty:"can't be empty",equal_to:"must be equal to %{count}",even:"must be even",exclusion:"is reserved",greater_than:"must be greater than %{count}",greater_than_or_equal_to:"must be greater than or equal to %{count}",inclusion:"is not included in the list",invalid:"is invalid",less_than:"must be less than %{count}",less_than_or_equal_to:"must be less than or equal to %{count}",not_a_number:"is not a number",not_an_integer:"must be an integer",odd:"must be odd",record_invalid:"Validation failed: %{errors}",taken:"has already been taken",too_long:{one:"is too long (maximum is 1 character)",other:"is too long (maximum is %{count} characters)"},too_short:{one:"is too short (minimum is 1 character)",other:"is too short (minimum is %{count} characters)"},wrong_length:{one:"is the wrong length (should be 1 character)",other:"is the wrong length (should be %{count} characters)"}},template:{body:"There were problems with the following fields:",header:{one:"1 error prohibited this %{model} from being saved",other:"%{count} errors prohibited this %{model} from being saved"}}}},activerecord:{attributes:{campaign_comment:{body:"Comment content"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"must be accepted",blank:"can't be blank",confirmation:"doesn't match confirmation",empty:"can't be empty",equal_to:"must be equal to %{count}",even:"must be even",exclusion:"is reserved",greater_than:"must be greater than %{count}",greater_than_or_equal_to:"must be greater than or equal to %{count}",inclusion:"is not included in the list",invalid:"is invalid",less_than:"must be less than %{count}",less_than_or_equal_to:"must be less than or equal to %{count}",not_a_number:"is not a number",not_an_integer:"must be an integer",odd:"must be odd",record_invalid:"Validation failed: %{errors}",taken:"has already been taken",too_long:{one:"is too long (maximum is 1 character)",other:"is too long (maximum is %{count} characters)"},too_short:{one:"is too short (minimum is 1 character)",other:"is too short (minimum is %{count} characters)"},wrong_length:{one:"is the wrong length (should be 1 character)",other:"is the wrong length (should be %{count} characters)"}},template:{body:"There were problems with the following fields:",header:{one:"1 error prohibited this %{model} from being saved",other:"%{count} errors prohibited this %{model} from being saved"}}}},date:{abbr_day_names:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],abbr_month_names:[null,"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],day_names:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],formats:{default:"%Y-%m-%d",long:"%B %d, %Y",short:"%b %d"},month_names:[null,"January","February","March","April","May","June","July","August","September","October","November","December"],order:["year","month","day"]},datetime:{distance_in_words:{about_x_hours:{one:"about 1 hour",other:"about %{count} hours"},about_x_months:{one:"about 1 month",other:"about %{count} months"},about_x_years:{one:"about 1 year",other:"about %{count} years"},almost_x_years:{one:"almost 1 year",other:"almost %{count} years"},half_a_minute:"half a minute",less_than_x_minutes:{one:"less than a minute",other:"less than %{count} minutes"},less_than_x_seconds:{one:"less than 1 second",other:"less than %{count} seconds"},over_x_years:{one:"over 1 year",other:"over %{count} years"},x_days:{one:"1 day",other:"%{count} days"},x_minutes:{one:"1 minute",other:"%{count} minutes"},x_months:{one:"1 month",other:"%{count} months"},x_seconds:{one:"1 second",other:"%{count} seconds"}},prompts:{day:"Day",hour:"Hour",minute:"Minute",month:"Month",second:"Seconds",year:"Year"}},devise:{confirmations:{confirmed:"We successfully confirmed your account.",send_instructions:"We sent a new email with instructions to confirm your account. It should arrive within a few minutes (be sure to check spam and bulk folders).",send_paranoid_instructions:"If your email address exists in our database, you will receive an email with instructions about how to confirm your account in a few minutes."},failure:{already_authenticated:"Don't worry! You're already signed in.",inactive:"Your account was not activated yet.",invalid:"We didn't recognize that email or password.",invalid_token:"Invalid authentication token.",last_attempt:"You have one more attempt before your account is locked.",locked:"Your account is locked.",not_found_in_database:"Invalid %{authentication_keys} or password.",timeout:"Your session expired, please sign in again to continue.",unauthenticated:"You need to sign in or sign up before you can do that.",unconfirmed:"You have to confirm your account before continuing."},mailer:{confirmation_instructions:{subject:"Welcome to CommitChange! Let's confirm your account."},reset_password_instructions:{subject:"Change your password on CommitChange"},unlock_instructions:{subject:"Account unlock instructions for CommitChange"}},omniauth_callbacks:{failure:'Could not sign you in from %{kind} because "%{reason}".',success:"Success! We've signed you in from %{kind}."},passwords:{no_token:"You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided.",send_instructions:"Check your email for further instructions!",send_paranoid_instructions:"If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes.",updated:"Your password was changed successfully. You are now signed in.",updated_not_active:"Your password was changed successfully. High five."},registrations:{destroyed:"Bye! Your account was successfully cancelled. We hope to see you again soon.",invalid:"Invalid password.",signed_up:"High five! You have signed up. Check your email for a confirmation link.",signed_up_but_inactive:"You have signed up successfully. However, we could not sign you in because your account is not yet activated.",signed_up_but_locked:"You have signed up successfully. However, we could not sign you in because your account is locked.",signed_up_but_unconfirmed:"A message with a confirmation link has been sent to your email address. Please open the link to activate your account.",update_needs_confirmation:"You updated your account successfully, but we need to verify your new email address. Please check your email and click on the confirm link to finalize confirming your new email address.",updated:"Success! You updated your account."},sessions:{already_signed_out:"Signed out successfully.",signed_in:"",signed_out:""},unlocks:{send_instructions:"We sent a new email with instructions to unlock your account. It should arrive within a few minutes (be sure to check spam and bulk folders).",send_paranoid_instructions:"If your account exists, you will receive an email with instructions about how to unlock it in a few minutes.",unlocked:"Your account has been unlocked successfully."}},errors:{format:"%{attribute} %{message}",messages:{accepted:"must be accepted",already_confirmed:"was already confirmed, please try signing in",blank:"can't be blank",carrierwave_download_error:"could not be downloaded",carrierwave_integrity_error:"is not of an allowed file type",carrierwave_processing_error:"failed to be processed",confirmation:"doesn't match confirmation",confirmation_period_expired:"needs to be confirmed within %{period}, please request a new one",empty:"can't be empty",equal_to:"must be equal to %{count}",even:"must be even",exclusion:"is reserved",expired:"has expired, please request a new one",extension_black_list_error:"You are not allowed to upload %{extension} files, prohibited types: %{prohibited_types}",extension_white_list_error:"You are not allowed to upload %{extension} files, allowed types: %{allowed_types}",greater_than:"must be greater than %{count}",greater_than_or_equal_to:"must be greater than or equal to %{count}",inclusion:"is not included in the list",invalid:"is invalid",less_than:"must be less than %{count}",less_than_or_equal_to:"must be less than or equal to %{count}",mime_types_processing_error:"Failed to process file with MIME::Types, maybe not valid content-type? Original Error: %{e}",mini_magick_processing_error:"Failed to manipulate with MiniMagick, maybe it is not an image? Original Error: %{e}",not_a_number:"is not a number",not_an_integer:"must be an integer",not_found:"not found",not_locked:"was not locked",not_saved:{one:"1 error:",other:"%{count} errors:"},odd:"must be odd",record_invalid:"Validation failed: %{errors}",rmagick_processing_error:"Failed to manipulate with rmagick, maybe it is not an image? Original Error: %{e}",taken:"has already been taken",too_long:{one:"is too long (maximum is 1 character)",other:"is too long (maximum is %{count} characters)"},too_short:{one:"is too short (minimum is 1 character)",other:"is too short (minimum is %{count} characters)"},wrong_length:{one:"is the wrong length (should be 1 character)",other:"is the wrong length (should be %{count} characters)"}},template:{body:"There were problems with the following fields:",header:{one:"1 error prohibited this %{model} from being saved",other:"%{count} errors prohibited this %{model} from being saved"}}},flash:{actions:{create:{notice:"%{resource_name} was successfully created."},destroy:{alert:"%{resource_name} could not be destroyed.",notice:"%{resource_name} was successfully destroyed."},update:{notice:"%{resource_name} was successfully updated."}}},hello:"Hello world",helpers:{button:{create:"Create %{model}",submit:"Save %{model}",update:"Update %{model}"},select:{prompt:"Please select"},submit:{create:"Create %{model}",submit:"Save %{model}",update:"Update %{model}"}},i18n:{plural:{keys:["one","other"],rule:{}}},mailer:{donations:{donor_direct_debit_notification:{donation_queued_html:"Your direct debit donation towards %{nonprofit_name} has been queued for processing.",recurring_donation_queued_html:"Your direct debit recurring donation towards %{nonprofit_name}, started on %{start_date}, has been queued for processing.",subject:"Donation receipt for %{nonprofit_name}",transfer_info_html:"This transfer will appear on your bank statement as %{label}",transfer_label_html:"Donation %{nonprofit_statement}."}}},nonprofits:{donate:{amount:{custom:"Custom",designation:{choose:"Choose a designation (optional)",label:"Designation:",most_needed:"Use my donation where most needed"},label:"Amount",next:"Next",sustaining:"Become a sustaining, monthly contributor",sustaining_bold:"sustaining, monthly",sustaining_selected:"Select an amount for your monthly contribution",sustaining_selected_bold:"monthly"},campaign:{name:"",tagline:""},dedication:{donor_note:"The donor's note was: ",email:"Email (optional)",first_name:"First name",full_address:"Full Address (optional)",in_honor_label:"In honor of",in_memory_label:"In memory of",info:"Add a dedication for your donation:",last_name:"Last name",note:"Note or message",phone:"Phone (optional)",save:"Save & Return"},followup:{finish:"Finish",message:"appreciates your support!",receipt_info:"A receipt will be emailed to",share:{facebook:"Share",twitter:"Tweet",twitter_message:"Join me in supporting"},success:"Your donation was successful!"},info:{anonymous_checkbox:"Make this donation anonymous.",dedication_link:"Make this donation in honor/memory of someone.",dedication_saved:"Dedicating donation to ",label:"Info",next:"Next",supporter:{address:"Address",city:"City",email:"Email",email_required:" (required for receipt)",errors:{email:{format:"Please enter a valid email address"}},first_name:"First name",full_name:"Full name",last_name:"Last name",phone:"Phone",postal_code:"Postal code",region:"Region",shipping_address:"Shipping address (required)",state:"Select state"}},log_out:"Logout",payment:{card:{cvc:"CVC",errors:{email:{format:"Please enter a valid email address"},field:{format:"This doesn't look like the right format",presence:"This field is required"},number:{format:"That card number doesn't look right",presence:"Please enter your card number"}},loading:"Saving...",month:"Month",name:"Cardholder's Name",number:"Card Number",postal_code:"Zip Code",secure_info:"Transactions secured with 256-bit SSL",submit:"Submit",year:"Year"},label:"Payment",loading:{checking_card:"Checking card...",sending_payment:"Sending the payment..."},monthly_recurring:"monthly recurring",one_time:"one-time",sepa:{bic:"BIC/SWIFT",errors:{field:{format:"This doesn't look like the right format",presence:"This field is required"}},iban:"IBAN",name:"Account owner name"},tabs:{card:"Credit Card",sepa:"Direct Debit"}},signed_in:"Signed in as"}},number:{currency:{format:{delimiter:",",format:"%u%n",precision:2,separator:".",significant:!1,strip_insignificant_zeros:!1,unit:"$"}},format:{delimiter:",",precision:3,separator:".",significant:!1,strip_insignificant_zeros:!1},human:{decimal_units:{format:"%n %u",units:{billion:"Billion",million:"Million",quadrillion:"Quadrillion",thousand:"Thousand",trillion:"Trillion",unit:""}},format:{delimiter:"",precision:3,significant:!0,strip_insignificant_zeros:!0},storage_units:{format:"%n %u",units:{byte:{one:"Byte",other:"Bytes"},gb:"GB",kb:"KB",mb:"MB",tb:"TB"}}},percentage:{format:{delimiter:""}},precision:{format:{delimiter:""}}},support:{array:{last_word_connector:", and ",two_words_connector:" and ",words_connector:", "}},time:{am:"am",formats:{default:"%a, %d %b %Y %H:%M:%S %z",long:"%B %d, %Y %H:%M",short:"%d %b %H:%M"},pm:"pm"}}),I18n.translations.fr=I18n.extend(I18n.translations.fr||{},{activemodel:{errors:{format:"%{attribute} %{message}",messages:{accepted:"doit être accepté(e)",blank:"doit être rempli(e)",confirmation:"ne concorde pas avec la confirmation",empty:"doit être rempli(e)",equal_to:"doit être égal à %{count}",even:"doit être pair",exclusion:"n'est pas disponible",greater_than:"doit être supérieur à %{count}",greater_than_or_equal_to:"doit être supérieur ou égal à %{count}",inclusion:"n'est pas inclus(e) dans la liste",invalid:"n'est pas valide",less_than:"doit être inférieur à %{count}",less_than_or_equal_to:"doit être inférieur ou égal à %{count}",not_a_number:"n'est pas un nombre",not_an_integer:"doit être un nombre entier",odd:"doit être impair",record_invalid:"La validation a échoué : %{errors}",taken:"n'est pas disponible",too_long:{one:"est trop long (pas plus d'un caractère)",other:"est trop long (pas plus de %{count} caractères)"},too_short:{one:"est trop court (au moins un caractère)",other:"est trop court (au moins %{count} caractères)"},wrong_length:{one:"ne fait pas la bonne longueur (doit comporter un seul caractère)",other:"ne fait pas la bonne longueur (doit comporter %{count} caractères)"}},template:{body:"Veuillez vérifier les champs suivants : ",header:{one:"Impossible d'enregistrer ce(tte) %{model} : 1 erreur",other:"Impossible d'enregistrer ce(tte) %{model} : %{count} erreurs"}}}},activerecord:{attributes:{campaign_comment:{body:"Commentez le contrenu"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"doit être accepté(e)",blank:"doit être rempli(e)",confirmation:"ne concorde pas avec la confirmation",empty:"doit être rempli(e)",equal_to:"doit être égal à %{count}",even:"doit être pair",exclusion:"n'est pas disponible",greater_than:"doit être supérieur à %{count}",greater_than_or_equal_to:"doit être supérieur ou égal à %{count}",inclusion:"n'est pas inclus(e) dans la liste",invalid:"n'est pas valide",less_than:"doit être inférieur à %{count}",less_than_or_equal_to:"doit être inférieur ou égal à %{count}",not_a_number:"n'est pas un nombre",not_an_integer:"doit être un nombre entier",odd:"doit être impair",record_invalid:"La validation a échoué : %{errors}",taken:"n'est pas disponible",too_long:{one:"est trop long (pas plus d'un caractère)",other:"est trop long (pas plus de %{count} caractères)"},too_short:{one:"est trop court (au moins un caractère)",other:"est trop court (au moins %{count} caractères)"},wrong_length:{one:"ne fait pas la bonne longueur (doit comporter un seul caractère)",other:"ne fait pas la bonne longueur (doit comporter %{count} caractères)"}},template:{body:"Veuillez vérifier les champs suivants : ",header:{one:"Impossible d'enregistrer ce(tte) %{model} : 1 erreur",other:"Impossible d'enregistrer ce(tte) %{model} : %{count} erreurs"}}}},date:{abbr_day_names:["dim","lun","mar","mer","jeu","ven","sam"],abbr_month_names:[null,"jan.","fév.","mar.","avr.","mai","juin","juil.","août","sept.","oct.","nov.","déc."],day_names:["dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"],formats:{default:"%d/%m/%Y",long:"%e %B %Y",short:"%e %b"},month_names:[null,"janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"],order:["day","month","year"]},datetime:{distance_in_words:{about_x_hours:{one:"environ une heure",other:"environ %{count} heures"},about_x_months:{one:"environ un mois",other:"environ %{count} mois"},about_x_years:{one:"environ un an",other:"environ %{count} ans"},almost_x_years:{one:"presqu'un an",other:"presque %{count} ans"},half_a_minute:"une demi-minute",less_than_x_minutes:{one:"moins d'une minute",other:"moins de %{count} minutes",zero:"moins d'une minute"},less_than_x_seconds:{one:"moins d'une seconde",other:"moins de %{count} secondes",zero:"moins d'une seconde"},over_x_years:{one:"plus d'un an",other:"plus de %{count} ans"},x_days:{one:"1 jour",other:"%{count} jours"},x_minutes:{one:"1 minute",other:"%{count} minutes"},x_months:{one:"1 mois",other:"%{count} mois"},x_seconds:{one:"1 seconde",other:"%{count} secondes"}},prompts:{day:"Jour",hour:"Heure",minute:"Minute",month:"Mois",second:"Seconde",year:"Année"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"doit être accepté(e)",blank:"doit être rempli(e)",confirmation:"ne concorde pas avec la confirmation",empty:"doit être rempli(e)",equal_to:"doit être égal à %{count}",even:"doit être pair",exclusion:"n'est pas disponible",greater_than:"doit être supérieur à %{count}",greater_than_or_equal_to:"doit être supérieur ou égal à %{count}",inclusion:"n'est pas inclus(e) dans la liste",invalid:"n'est pas valide",less_than:"doit être inférieur à %{count}",less_than_or_equal_to:"doit être inférieur ou égal à %{count}",not_a_number:"n'est pas un nombre",not_an_integer:"doit être un nombre entier",odd:"doit être impair",record_invalid:"La validation a échoué : %{errors}",taken:"n'est pas disponible",too_long:{one:"est trop long (pas plus d'un caractère)",other:"est trop long (pas plus de %{count} caractères)"},too_short:{one:"est trop court (au moins un caractère)",other:"est trop court (au moins %{count} caractères)"},wrong_length:{one:"ne fait pas la bonne longueur (doit comporter un seul caractère)",other:"ne fait pas la bonne longueur (doit comporter %{count} caractères)"}},template:{body:"Veuillez vérifier les champs suivants : ",header:{one:"Impossible d'enregistrer ce(tte) %{model} : 1 erreur",other:"Impossible d'enregistrer ce(tte) %{model} : %{count} erreurs"}}},hello:"Salut à tous",helpers:{select:{prompt:"Veuillez sélectionner"},submit:{create:"Créer un(e) %{model}",submit:"Enregistrer ce(tte) %{model}",update:"Modifier ce(tte) %{model}"}},i18n:{plural:{keys:["one","other"],rule:{}},transliterate:{rule:{"À":"A","Â":"A","Æ":"Ae","Ç":"C","È":"E","É":"E","Ê":"E","Ë":"E","Î":"I","Ï":"I","Ô":"O","Ù":"U","Û":"U","Ü":"U","à":"a","â":"a","æ":"ae","ç":"c","è":"e","é":"e","ê":"e","ë":"e","î":"i","ï":"i","ô":"oe","ù":"u","û":"u","ü":"u","ÿ":"y","Œ":"Oe","œ":"oe","Ÿ":"Y"}}},mailer:{donations:{donor_direct_debit_notification:{donation_queued_html:"Your direct debit donation towards %{nonprofit_name} has been queued for processing.",recurring_donation_queued_html:"Your direct debit recurring donation towards %{nonprofit_name}, started on %{start_date}, has been queued for processing.",subject:"Donation receipt for %{nonprofit_name}",transfer_info_html:"This transfer will appear on your bank statement as %{label}",transfer_label_html:"Donation %{nonprofit_statement}."}}},nonprofits:{donate:{amount:{custom:"Autre",designation:{choose:"Choisir une désignation (optionnel)",label:"Désignation:",most_needed:"Affectez mon don là où il sera le plus utile"},label:"Montant",monthly:"mensuel",next:"Suivant",sustaining:"Apportez un soutien régulier",sustaining_monthly:"mensuel et durable",sustaining_selected:"Choix du montant mensuel"},dedication:{donor_note:"Le message du contributeur : ",email:"Email (optionnel)",first_name:"Prénom",full_address:"Adresse complète (optionnel)",in_honor_label:"En l'honneur de",in_memory_label:"À la mémoire de",info:"Transformer ce don en hommage:",last_name:"Nom de famille",note:"Note ou message",phone:"Tél (optionnel)",save:"Sauvegarder & Retour"},followup:{finish:"Terminer",message:"apprécie votre soutien !",receipt_info:"Un reçu sera envoyé à ",share:{facebook:"Partager",twitter:"Tweeter"},success:"Votre don a été envoyé avec succès !"},info:{anonymous_checkbox:"Jé désire que ce don reste anonyme.",dedication_link:"Dédier ce don à la mémoire d'un être cher",dedication_saved:"Dédier ce don à",label:"Info",next:"Suivant",supporter:{address:"adresse",city:"Ville",email:"Email",email_required:" (pour votre reçu)",errors:{email:{format:"Cet email semble incorrect, merci de corriger"}},first_name:"Prénom",full_name:"Nom",last_name:"Nom de famille",phone:"Tél",postal_code:"code postal",region:"Pays",shipping_address:"Adresse de livraison (obligatoire)",state:"Sélectionner votre département"}},log_out:"Déconnexion",payment:{card:{cvc:"CVC",errors:{email:{format:"Cette email semble incorrect"},field:{format:"Le format semble incorrect",presence:"Champ obligatoire"},number:{format:"Cette carte semble incorrecte",presence:"Merci d'ajouter votre numéro de carte"}},loading:"Enregistrement...",month:"Mois",name:"Nom sur la carte",number:"Numéro",postal_code:"code postal",secure_info:"Transactions sécurisées avec SSL 256-bits",submit:"Envoyer",year:"Année"},label:"Paiement",loading:{checking_card:"Vérification de la carte...",sending_payment:"Envoi du paiement..."},monthly_recurring:"régulier mensuel",one_time:"unique",sepa:{bic:".BIC/SWIFT",errors:{field:{format:".Ce format semble incorrect",presence:".Ce champ est obligatoire"}},iban:".IBAN",name:".Titulaire du compte"},tabs:{card:"Avec votre carte de crédit",sepa:"Payer avec SEPA"}},signed_in:"Connecté.e en tant que"}},number:{currency:{format:{delimiter:" ",format:"%n %u",precision:2,separator:",",significant:!1,strip_insignificant_zeros:!1,unit:"€"}},format:{delimiter:" ",precision:3,separator:",",significant:!1,strip_insignificant_zeros:!1},human:{decimal_units:{format:"%n %u",units:{billion:"milliard",million:"million",quadrillion:"million de milliards",thousand:"millier",trillion:"billion",unit:""}},format:{delimiter:"",precision:2,significant:!0,strip_insignificant_zeros:!0},storage_units:{format:"%n %u",units:{byte:{one:"octet",other:"octets"},gb:"Go",kb:"ko",mb:"Mo",tb:"To"}}},percentage:{format:{delimiter:""}},precision:{format:{delimiter:""}}},support:{array:{last_word_connector:" et ",two_words_connector:" et ",words_connector:", "}},time:{am:"am",formats:{default:"%d %B %Y %H:%M:%S",long:"%A %d %B %Y %H:%M",short:"%d %b %H:%M"},pm:"pm"}}),I18n.translations.de=I18n.extend(I18n.translations.de||{},{activemodel:{errors:{format:"%{attribute} %{message}",messages:{accepted:"muss akzeptiert werden",blank:"muss ausgefüllt werden",confirmation:"stimmt nicht mit der Bestätigung überein",empty:"muss ausgefüllt werden",equal_to:"muss genau %{count} sein",even:"muss gerade sein",exclusion:"ist nicht verfügbar",greater_than:"muss größer als %{count} sein",greater_than_or_equal_to:"muss größer oder gleich %{count} sein",inclusion:"ist kein gültiger Wert",invalid:"ist nicht gültig",less_than:"muss kleiner als %{count} sein",less_than_or_equal_to:"muss kleiner oder gleich %{count} sein",not_a_number:"ist keine Zahl",not_an_integer:"muss ganzzahlig sein",odd:"muss ungerade sein",record_invalid:"Gültigkeitsprüfung ist fehlgeschlagen: %{errors}",taken:"ist bereits vergeben",too_long:"ist zu lang (mehr als %{count} Zeichen)",too_short:"ist zu kurz (weniger als %{count} Zeichen)",wrong_length:"hat die falsche Länge (muss genau %{count} Zeichen haben)"},template:{body:"Bitte überprüfen Sie die folgenden Felder:",header:{one:"Konnte %{model} nicht speichern: ein Fehler.",other:"Konnte %{model} nicht speichern: %{count} Fehler."}}}},activerecord:{attributes:{campaign_comment:{body:"Inhalt kommentieren"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"muss akzeptiert werden",blank:"muss ausgefüllt werden",confirmation:"stimmt nicht mit der Bestätigung überein",empty:"muss ausgefüllt werden",equal_to:"muss genau %{count} sein",even:"muss gerade sein",exclusion:"ist nicht verfügbar",greater_than:"muss größer als %{count} sein",greater_than_or_equal_to:"muss größer oder gleich %{count} sein",inclusion:"ist kein gültiger Wert",invalid:"ist nicht gültig",less_than:"muss kleiner als %{count} sein",less_than_or_equal_to:"muss kleiner oder gleich %{count} sein",not_a_number:"ist keine Zahl",not_an_integer:"muss ganzzahlig sein",odd:"muss ungerade sein",record_invalid:"Gültigkeitsprüfung ist fehlgeschlagen: %{errors}",taken:"ist bereits vergeben",too_long:"ist zu lang (mehr als %{count} Zeichen)",too_short:"ist zu kurz (weniger als %{count} Zeichen)",wrong_length:"hat die falsche Länge (muss genau %{count} Zeichen haben)"},template:{body:"Bitte überprüfen Sie die folgenden Felder:",header:{one:"Konnte %{model} nicht speichern: ein Fehler.",other:"Konnte %{model} nicht speichern: %{count} Fehler."}}}},date:{abbr_day_names:["So","Mo","Di","Mi","Do","Fr","Sa"],abbr_month_names:[null,"Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],day_names:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],formats:{default:"%d.%m.%Y",long:"%e. %B %Y",short:"%e. %b"},month_names:[null,"Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],order:["day","month","year"]},datetime:{distance_in_words:{about_x_hours:{one:"etwa eine Stunde",other:"etwa %{count} Stunden"},about_x_months:{one:"etwa ein Monat",other:"etwa %{count} Monate"},about_x_years:{one:"etwa ein Jahr",other:"etwa %{count} Jahre"},almost_x_years:{one:"fast ein Jahr",other:"fast %{count} Jahre"},half_a_minute:"eine halbe Minute",less_than_x_minutes:{one:"weniger als eine Minute",other:"weniger als %{count} Minuten"},less_than_x_seconds:{one:"weniger als eine Sekunde",other:"weniger als %{count} Sekunden"},over_x_years:{one:"mehr als ein Jahr",other:"mehr als %{count} Jahre"},x_days:{one:"ein Tag",other:"%{count} Tage"},x_minutes:{one:"eine Minute",other:"%{count} Minuten"},x_months:{one:"ein Monat",other:"%{count} Monate"},x_seconds:{one:"eine Sekunde",other:"%{count} Sekunden"}},prompts:{day:"Tag",hour:"Stunden",minute:"Minuten",month:"Monat",second:"Sekunden",year:"Jahr"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"muss akzeptiert werden",blank:"muss ausgefüllt werden",confirmation:"stimmt nicht mit der Bestätigung überein",empty:"muss ausgefüllt werden",equal_to:"muss genau %{count} sein",even:"muss gerade sein",exclusion:"ist nicht verfügbar",greater_than:"muss größer als %{count} sein",greater_than_or_equal_to:"muss größer oder gleich %{count} sein",inclusion:"ist kein gültiger Wert",invalid:"ist nicht gültig",less_than:"muss kleiner als %{count} sein",less_than_or_equal_to:"muss kleiner oder gleich %{count} sein",not_a_number:"ist keine Zahl",not_an_integer:"muss ganzzahlig sein",odd:"muss ungerade sein",record_invalid:"Gültigkeitsprüfung ist fehlgeschlagen: %{errors}",taken:"ist bereits vergeben",too_long:"ist zu lang (mehr als %{count} Zeichen)",too_short:"ist zu kurz (weniger als %{count} Zeichen)",wrong_length:"hat die falsche Länge (muss genau %{count} Zeichen haben)"},template:{body:"Bitte überprüfen Sie die folgenden Felder:",header:{one:"Konnte %{model} nicht speichern: ein Fehler.",other:"Konnte %{model} nicht speichern: %{count} Fehler."}}},hello:"Hallo Welt",helpers:{select:{prompt:"Bitte wählen"},submit:{create:"%{model} erstellen",submit:"%{model} speichern",update:"%{model} aktualisieren"}},i18n:{plural:{keys:["one","other"],rule:{}},transliterate:{rule:{"Ä":"Ae","Ö":"Oe","Ü":"Ue","ß":"ss","ä":"ae","ö":"oe","ü":"ue"}}},mailer:{donations:{donor_direct_debit_notification:{donation_queued_html:"Your direct debit donation towards %{nonprofit_name} has been queued for processing.",recurring_donation_queued_html:"Your direct debit recurring donation towards %{nonprofit_name}, started on %{start_date}, has been queued for processing.",subject:"Donation receipt for %{nonprofit_name}",transfer_info_html:"This transfer will appear on your bank statement as %{label}",transfer_label_html:"Donation %{nonprofit_statement}."}}},nonprofits:{donate:{amount:{custom:"benutzerdefiniert",designation:{choose:"Wählen Sie eine Bezeichnung (optional)",label:"Bezeichnung",most_needed:"Verwenden Sie meine Spende, wo sie am meisten gebraucht wird"},label:"Betrag",monthly:"monatlich",next:"Weiter",sustaining:"Werden Sie Förderer von WeMove.EU",sustaining_monthly:"monatlich",sustaining_selected:"Wählen Sie die Höhe der monatlichen Spende aus"},dedication:{donor_note:"Die Anmerkung des Spenders war: ",email:"E-Mail (optional)",first_name:"Vorname",full_address:"Adresse (optional)",in_honor_label:"Zu Ehren von",in_memory_label:"In Gedenken an",info:"Fügen Sie eine Widmung für Ihre Spende hinzu:",last_name:"Nachname",note:"Anmerkung",phone:"Telefon (optional)",save:"speichern & zurück"},followup:{finish:"Beenden",message:"Vielen Dank für Ihre Unterstützung!",receipt_info:"Eine Bestätigung wird gesendet an",share:{facebook:"Teilen",twitter:"Twittern"},success:"Ihre Spende wurde erfolgreich übermittelt!"},info:{anonymous_checkbox:"Anonym spenden",dedication_link:"Zu Ehren oder in Gedenken an jemanden spenden",dedication_saved:"Die Spende widmen für",label:"Information",next:"Weiter",supporter:{address:"Adresse",city:"Stadt",email:"E-Mail",email_required:" (für Bestätigung erforderlich)",errors:{email:{format:"Bitte geben Sie eine gültige E-Mail-Adresse ein"}},first_name:"Vorname",full_name:"Name",last_name:"Nachname",phone:"Telefon",postal_code:"Postleitzahl",region:"Bundesland",shipping_address:"Lieferadresse (erforderlich)",state:"Land wählen"}},log_out:"Abmelden",payment:{card:{cvc:"Sicherheitscode (CVC)",errors:{email:{format:"Bitte geben Sie eine gültige E-Mail-Adresse ein"},field:{format:"Das sieht nicht nach dem richtigen Format aus",presence:"Diese Angabe ist erforderlich"},number:{format:"Falsche Kartennummer",presence:"Bitten geben Sie Ihre Kartennummer ein"}},loading:"Speichert...",month:"Monat",name:"Karteninhaber",number:"Kartennummer",postal_code:"Postleitzahl",secure_info:"Mit 256-bit SSL gesicherte Transaktionen",submit:"absenden",year:"Jahr"},label:"Zahlungsart",loading:{checking_card:"Karte wird geprüft...",sending_payment:"Zahlung wird ausgeführt..."},monthly_recurring:"monatlich",one_time:"einmalig",sepa:{bic:"BIC/SWIFT",errors:{field:{format:"Das sieht nicht nach dem richtigen Format aus",presence:"Diese Angabe ist erforderlich"}},iban:"IBAN",name:"Name des Kontoinhabers"},tabs:{card:"Zahlung mit Kreditkarte",sepa:"Zahlung per Lastschrift"}},signed_in:"Eingeloggt als"}},number:{currency:{format:{delimiter:".",format:"%n %u",precision:2,separator:",",significant:!1,strip_insignificant_zeros:!1,unit:"€"}},format:{delimiter:".",precision:2,separator:",",significant:!1,strip_insignificant_zeros:!1},human:{decimal_units:{format:"%n %u",units:{billion:{one:"Milliarde",other:"Milliarden"},million:"Millionen",quadrillion:{one:"Billiarde",other:"Billiarden"},thousand:"Tausend",trillion:"Billionen",unit:""}},format:{delimiter:"",precision:1,significant:!0,strip_insignificant_zeros:!0},storage_units:{format:"%n %u",units:{byte:{one:"Byte",other:"Bytes"},gb:"GB",kb:"KB",mb:"MB",tb:"TB"}}},percentage:{format:{delimiter:""}},precision:{format:{delimiter:""}}},support:{array:{last_word_connector:" und ",two_words_connector:" und ",words_connector:", "}},time:{am:"vormittags",formats:{default:"%A, %d. %B %Y, %H:%M Uhr",long:"%A, %d. %B %Y, %H:%M Uhr",short:"%d. %B, %H:%M Uhr"},pm:"nachmittags"}}),I18n.translations.it=I18n.extend(I18n.translations.it||{},{activemodel:{errors:{format:"%{attribute} %{message}",messages:{accepted:"deve essere accettata",blank:"non può essere lasciato in bianco",confirmation:"non coincide con la conferma",empty:"non può essere vuoto",equal_to:"deve essere uguale a %{count}",even:"deve essere pari",exclusion:"è riservato",greater_than:"deve essere superiore a %{count}",greater_than_or_equal_to:"deve essere superiore o uguale a %{count}",inclusion:"non è incluso nella lista",invalid:"non è valido",less_than:"deve essere meno di %{count}",less_than_or_equal_to:"deve essere meno o uguale a %{count}",not_a_number:"non è un numero",not_an_integer:"non è un intero",odd:"deve essere dispari",record_invalid:"Validazione fallita: %{errors}",taken:"è già in uso",too_long:{one:"è troppo lungo (il massimo è 1 carattere)",other:"è troppo lungo (il massimo è %{count} caratteri)"},too_short:{one:"è troppo corto (il minimo è 1 carattere)",other:"è troppo corto (il minimo è %{count} caratteri)"},wrong_length:{one:"è della lunghezza sbagliata (deve essere di 1 carattere)",other:"è della lunghezza sbagliata (deve essere di %{count} caratteri)"}},template:{body:"Per favore ricontrolla i seguenti campi:",header:{one:"Non posso salvare questo %{model}: 1 errore",other:"Non posso salvare questo %{model}: %{count} errori."}}}},activerecord:{attributes:{campaign_comment:{body:"Commenta il contenuto "}},errors:{format:"%{attribute} %{message}",messages:{accepted:"deve essere accettata",blank:"non può essere lasciato in bianco",confirmation:"non coincide con la conferma",empty:"non può essere vuoto",equal_to:"deve essere uguale a %{count}",even:"deve essere pari",exclusion:"è riservato",greater_than:"deve essere superiore a %{count}",greater_than_or_equal_to:"deve essere superiore o uguale a %{count}",inclusion:"non è incluso nella lista",invalid:"non è valido",less_than:"deve essere meno di %{count}",less_than_or_equal_to:"deve essere meno o uguale a %{count}",not_a_number:"non è un numero",not_an_integer:"non è un intero",odd:"deve essere dispari",record_invalid:"Validazione fallita: %{errors}",taken:"è già in uso",too_long:{one:"è troppo lungo (il massimo è 1 carattere)",other:"è troppo lungo (il massimo è %{count} caratteri)"},too_short:{one:"è troppo corto (il minimo è 1 carattere)",other:"è troppo corto (il minimo è %{count} caratteri)"},wrong_length:{one:"è della lunghezza sbagliata (deve essere di 1 carattere)",other:"è della lunghezza sbagliata (deve essere di %{count} caratteri)"}},template:{body:"Per favore ricontrolla i seguenti campi:",header:{one:"Non posso salvare questo %{model}: 1 errore",other:"Non posso salvare questo %{model}: %{count} errori."}}}},date:{abbr_day_names:["dom","lun","mar","mer","gio","ven","sab"],abbr_month_names:[null,"gen","feb","mar","apr","mag","giu","lug","ago","set","ott","nov","dic"],day_names:["domenica","lunedì","martedì","mercoledì","giovedì","venerdì","sabato"],formats:{default:"%d/%m/%Y",long:"%d %B %Y",short:"%d %b"},month_names:[null,"gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre"],order:["day","month","year"]},datetime:{distance_in_words:{about_x_hours:{one:"circa un'ora",other:"circa %{count} ore"},about_x_months:{one:"circa un mese",other:"circa %{count} mesi"},about_x_years:{one:"circa un anno",other:"circa %{count} anni"},almost_x_years:{one:"circa 1 anno",other:"circa %{count} anni"},half_a_minute:"mezzo minuto",less_than_x_minutes:{one:"meno di un minuto",other:"meno di %{count} minuti"},less_than_x_seconds:{one:"meno di un secondo",other:"meno di %{count} secondi"},over_x_years:{one:"oltre un anno",other:"oltre %{count} anni"},x_days:{one:"1 giorno",other:"%{count} giorni"},x_minutes:{one:"1 minuto",other:"%{count} minuti"},x_months:{one:"1 mese",other:"%{count} mesi"},x_seconds:{one:"1 secondo",other:"%{count} secondi"}},prompts:{day:"Giorno",hour:"Ora",minute:"Minuto",month:"Mese",second:"Secondi",year:"Anno"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"deve essere accettata",blank:"non può essere lasciato in bianco",confirmation:"non coincide con la conferma",empty:"non può essere vuoto",equal_to:"deve essere uguale a %{count}",even:"deve essere pari",exclusion:"è riservato",greater_than:"deve essere superiore a %{count}",greater_than_or_equal_to:"deve essere superiore o uguale a %{count}",inclusion:"non è incluso nella lista",invalid:"non è valido",less_than:"deve essere meno di %{count}",less_than_or_equal_to:"deve essere meno o uguale a %{count}",not_a_number:"non è un numero",not_an_integer:"non è un intero",odd:"deve essere dispari",record_invalid:"Validazione fallita: %{errors}",taken:"è già in uso",too_long:{one:"è troppo lungo (il massimo è 1 carattere)",other:"è troppo lungo (il massimo è %{count} caratteri)"},too_short:{one:"è troppo corto (il minimo è 1 carattere)",other:"è troppo corto (il minimo è %{count} caratteri)"},wrong_length:{one:"è della lunghezza sbagliata (deve essere di 1 carattere)",other:"è della lunghezza sbagliata (deve essere di %{count} caratteri)"}},template:{body:"Per favore ricontrolla i seguenti campi:",header:{one:"Non posso salvare questo %{model}: 1 errore",other:"Non posso salvare questo %{model}: %{count} errori."}}},hello:"Buongiorno mondo",helpers:{select:{prompt:"Per favore, seleziona"},submit:{create:"Crea %{model}",submit:"Invia %{model}",update:"Aggiorna %{model}"}},i18n:{plural:{keys:["one","other"],rule:{}}},mailer:{donations:{donor_direct_debit_notification:{donation_queued_html:"Your direct debit donation towards %{nonprofit_name} has been queued for processing.",recurring_donation_queued_html:"Your direct debit recurring donation towards %{nonprofit_name}, started on %{start_date}, has been queued for processing.",subject:"Donation receipt for %{nonprofit_name}",transfer_info_html:"This transfer will appear on your bank statement as %{label}",transfer_label_html:"Donation %{nonprofit_statement}."}}},nonprofits:{donate:{amount:{custom:"Altro ",designation:{choose:"Scegli una designazione: (facoltativo)",label:"Designazione",most_needed:"Usa la mia donazione dove è più necessaria"},label:"Importo",monthly:"mensile",next:"Avanti",sustaining:"Diventa un sostenitore mensile regolare",sustaining_monthly:"sostenitore mensile",sustaining_selected:"Scegli un importo per la tua donazione mensile"},dedication:{donor_note:"La nota del donatore era:",email:"Email (facoltativa)",first_name:"Nome",full_address:"Indirizzo completo (facoltativo)",in_honor_label:"In onore di ",in_memory_label:"In memoria di ",info:"Aggiungi una dedica alla tua donazione:",last_name:"Cognome",note:"Nota o messaggio",phone:"Telefono (facoltativo)",save:"Salva e torna indietro"},followup:{finish:"Fine",message:"Grazie per il tuo sostegno! ",receipt_info:"Una ricevuta verrà inviata via mail a ",share:{facebook:"Condividi",twitter:"Tweet"},success:"La tua donazione è andata a buon fine!"},info:{anonymous_checkbox:"Voglio che la mia donazione resti anonima.",dedication_link:"Questa donazione è in onore/memoria di qualcuno.",dedication_saved:"Dedico la donazione a",label:"Informazioni",next:"Avanti",supporter:{address:"Indirizzo",city:"Città",email:"Email",email_required:"(necessario per la ricevuta)",errors:{email:{format:"Per favore inserisci un indirizzo mail valido"}},first_name:"Nome",full_name:"Nome completo",last_name:"Cognome",phone:"Telefono",postal_code:"Codice postale",region:"Regione",shipping_address:"Indirizzo di consegna (richiesto)",state:"Scegli un paese"}},log_out:"Disconnettiti",payment:{card:{cvc:"CVC",errors:{email:{format:"Per favore, inserisci un indirizzo mail valido"},field:{format:"Questo non sembra essere il formato giusto",presence:"Questo campo è obbligatorio"},number:{format:"Il numero della carta non sembra corretto",presence:"Per favore inserisci il numero della tua carta"}},loading:"Salvataggio informazioni... ",month:"Mese",name:"Nome del titolare della carta",number:"Numero della carta",postal_code:"Codice postale",secure_info:"Transizione sicura grazie a 256-bit SSL",submit:"Invia",year:"Anno"},label:"Pagamento",loading:{checking_card:"Stiamo controllando la carta... ",sending_payment:"Invio pagamento... "},monthly_recurring:"Mensile ricorrente",one_time:"Unico",sepa:{bic:".BIC/SWIFT",errors:{field:{format:".Questo non sembra il formato corretto",presence:".Questo campo è obbligatorio"}},iban:".IBAN",name:"Nome dell'intestatario del conto"},tabs:{card:"Paga tramite carta di credito",sepa:"Paga tramite bonifico bancario"}},signed_in:"Sei loggato come"}},number:{currency:{format:{delimiter:".",format:"%n %u",precision:2,separator:",",significant:!1,strip_insignificant_zeros:!1,unit:"€"}},format:{delimiter:".",precision:2,separator:",",significant:!1,strip_insignificant_zeros:!1},human:{decimal_units:{format:"%n %u",units:{billion:"Miliardi",million:"Milioni",quadrillion:"Biliardi",thousand:"Mila",trillion:"Bilioni",unit:""}},format:{delimiter:"",precision:1,significant:!0,strip_insignificant_zeros:!0},storage_units:{format:"%n %u",units:{byte:{one:"Byte",other:"Byte"},gb:"GB",kb:"KB",mb:"MB",tb:"TB"}}},percentage:{format:{delimiter:""}},precision:{format:{delimiter:""}}},support:{array:{last_word_connector:" e ",two_words_connector:" e ",words_connector:", "}},time:{am:"am",formats:{default:"%a %d %b %Y, %H:%M:%S %z",long:"%d %B %Y %H:%M",short:"%d %b %H:%M"},pm:"pm"}}),I18n.translations.pl=I18n.extend(I18n.translations.pl||{},{activemodel:{errors:{format:"%{attribute} %{message}",messages:{accepted:"musi zostać zaakceptowane",blank:"nie może być puste",confirmation:"nie zgadza się z potwierdzeniem",empty:"nie może być puste",equal_to:"musi być równe %{count}",even:"musi być parzyste",exclusion:"jest zarezerwowane",greater_than:"musi być większe od %{count}",greater_than_or_equal_to:"musi być większe lub równe %{count}",inclusion:"nie znajduje się na liście dopuszczalnych wartości",invalid:"jest nieprawidłowe",less_than:"musi być mniejsze od %{count}",less_than_or_equal_to:"musi być mniejsze lub równe %{count}",not_a_number:"nie jest liczbą",not_an_integer:"musi być liczbą całkowitą",odd:"musi być nieparzyste",record_invalid:"Negatywne sprawdzenie poprawności: %{errors}",taken:"zostało już zajęte",too_long:"jest za długie (maksymalnie %{count} znaków)",too_short:"jest za krótkie (przynajmniej %{count} znaków)",wrong_length:"ma nieprawidłową długość (powinna wynosić %{count} znaków)"},template:{body:"Błędy dotyczą następujących pól:",header:{few:"%{model} nie został zachowany z powodu %{count} błędów",many:"%{model} nie został zachowany z powodu %{count} błędów",one:"%{model} nie został zachowany z powodu jednego błędu",other:"%{model} nie został zachowany z powodu %{count} błędów"}}}},activerecord:{attributes:{campaign_comment:{body:"Twój komentarz"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"musi zostać zaakceptowane",blank:"nie może być puste",confirmation:"nie zgadza się z potwierdzeniem",empty:"nie może być puste",equal_to:"musi być równe %{count}",even:"musi być parzyste",exclusion:"jest zarezerwowane",greater_than:"musi być większe od %{count}",greater_than_or_equal_to:"musi być większe lub równe %{count}",inclusion:"nie znajduje się na liście dopuszczalnych wartości",invalid:"jest nieprawidłowe",less_than:"musi być mniejsze od %{count}",less_than_or_equal_to:"musi być mniejsze lub równe %{count}",not_a_number:"nie jest liczbą",not_an_integer:"musi być liczbą całkowitą",odd:"musi być nieparzyste",record_invalid:"Negatywne sprawdzenie poprawności: %{errors}",taken:"zostało już zajęte",too_long:"jest za długie (maksymalnie %{count} znaków)",too_short:"jest za krótkie (przynajmniej %{count} znaków)",wrong_length:"ma nieprawidłową długość (powinna wynosić %{count} znaków)"},template:{body:"Błędy dotyczą następujących pól:",header:{few:"%{model} nie został zachowany z powodu %{count} błędów",many:"%{model} nie został zachowany z powodu %{count} błędów",one:"%{model} nie został zachowany z powodu jednego błędu",other:"%{model} nie został zachowany z powodu %{count} błędów"}}}},date:{abbr_day_names:["nie","pon","wto","śro","czw","pią","sob"],abbr_month_names:[null,"sty","lut","mar","kwi","maj","cze","lip","sie","wrz","paź","lis","gru"],day_names:["niedziela","poniedziałek","wtorek","środa","czwartek","piątek","sobota"],formats:{default:"%d-%m-%Y",long:"%B %d, %Y",short:"%d %b"},month_names:[null,"styczeń","luty","marzec","kwiecień","maj","czerwiec","lipiec","sierpień","wrzesień","październik","listopad","grudzień"],order:["day","month","year"]},datetime:{distance_in_words:{about_x_hours:{few:"około %{count} godziny",many:"około %{count} godzin",one:"około godziny",other:"około %{count} godzin"},about_x_months:{few:"około %{count} miesiące",many:"około %{count} miesięcy",one:"około miesiąca",other:"około %{count} miesięcy"},about_x_years:{few:"około %{count} lata",many:"około %{count} lat",one:"około rok",other:"około %{count} lat"},almost_x_years:{few:"prawie %{count} lata",many:"prawie %{count} lat",one:"prawie rok",other:"prawie %{count} lat"},half_a_minute:"pół minuty",less_than_x_minutes:{few:"mniej niż %{count} minuty",many:"mniej niż %{count} minut",one:"mniej niż minutę",other:"mniej niż %{count} minut"},less_than_x_seconds:{few:"mniej niż %{count} sekundy",many:"mniej niż %{count} sekund",one:"mniej niż sekundę",other:"mniej niż %{count} sekund"},over_x_years:{few:"ponad %{count} lata",many:"ponad %{count} lat",one:"ponad rok",other:"ponad %{count} lat"},x_days:{few:"%{count} dni",many:"%{count} dni",one:"1 dzień",other:"%{count} dni"},x_minutes:{few:"%{count} minuty",many:"%{count} minut",one:"1 minuta",other:"%{count} minut"},x_months:{few:"%{count} miesiące",many:"%{count} miesięcy",one:"1 miesiąc",other:"%{count} miesięcy"},x_seconds:{few:"%{count} sekundy",many:"%{count} sekund",one:"1 sekunda",other:"%{count} sekund"}},prompts:{day:"Dzień",hour:"Godzina",minute:"Minuta",month:"Miesiąc",second:"Sekundy",year:"Rok"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"musi zostać zaakceptowane",blank:"nie może być puste",confirmation:"nie zgadza się z potwierdzeniem",empty:"nie może być puste",equal_to:"musi być równe %{count}",even:"musi być parzyste",exclusion:"jest zarezerwowane",greater_than:"musi być większe od %{count}",greater_than_or_equal_to:"musi być większe lub równe %{count}",inclusion:"nie znajduje się na liście dopuszczalnych wartości",invalid:"jest nieprawidłowe",less_than:"musi być mniejsze od %{count}",less_than_or_equal_to:"musi być mniejsze lub równe %{count}",not_a_number:"nie jest liczbą",not_an_integer:"musi być liczbą całkowitą",odd:"musi być nieparzyste",record_invalid:"Negatywne sprawdzenie poprawności: %{errors}",taken:"zostało już zajęte",too_long:"jest za długie (maksymalnie %{count} znaków)",too_short:"jest za krótkie (przynajmniej %{count} znaków)",wrong_length:"ma nieprawidłową długość (powinna wynosić %{count} znaków)"},template:{body:"Błędy dotyczą następujących pól:",header:{few:"%{model} nie został zachowany z powodu %{count} błędów",many:"%{model} nie został zachowany z powodu %{count} błędów",one:"%{model} nie został zachowany z powodu jednego błędu",other:"%{model} nie został zachowany z powodu %{count} błędów"}}},hello:"Witaj, świecie",helpers:{select:{prompt:"Proszę wybrać"},submit:{create:"Utwórz %{model}",submit:"Zapisz %{model}",update:"Aktualizuj %{model}"}},i18n:{plural:{keys:["one","few","many","other"],rule:{}},transliterate:{rule:{"Ó":"O","ó":"o","Ą":"A","ą":"a","Ć":"C","ć":"c","Ę":"E","ę":"e","Ł":"L","ł":"l","Ń":"N","ń":"n","Ś":"S","ś":"s","Ź":"Z","ź":"z","Ż":"Z","ż":"z"}}},mailer:{donations:{donor_direct_debit_notification:{donation_queued_html:"Your direct debit donation towards %{nonprofit_name} has been queued for processing.",recurring_donation_queued_html:"Your direct debit recurring donation towards %{nonprofit_name}, started on %{start_date}, has been queued for processing.",subject:"Donation receipt for %{nonprofit_name}",transfer_info_html:"This transfer will appear on your bank statement as %{label}",transfer_label_html:"Donation %{nonprofit_statement}."}}},nonprofits:{donate:{amount:{custom:"Inna kwota",designation:{most_needed:"Dorzucam się na działania gdzie najbardziej przyda się wsparcie"},label:"Kwota",monthly:"miesięcznie",next:"Dalej",sustaining:"Wspieraj regularnie, co miesiąc",sustaining_monthly:"Regularnie, co miesiąc",sustaining_selected:"Wybierz wysokość comiesięcznej darowizny"},dedication:{donor_note:"Wiadomość od darczyńcy:",email:"Email (opcjonalnie)",first_name:"Imię",full_address:"Pełen adres (opcjonalnie)",in_honor_label:"W geście szacunku",in_memory_label:"Dla upamiętnienia",info:"Dodaj treść dedykacji:",last_name:"Nazwisko",note:"Wiadomość:",phone:"Telefon (opcjonalnie)",save:"Zapisz i wróć"},followup:{finish:"Koniec",message:"dziękuje za Twoje wsparcie!",receipt_info:"Prześlemy potwierdzenie transakcji na adres: ",share:{facebook:"Udostępnij",twitter:"Zatweetuj"},success:"Sukces - darowizna została przekazana!"},info:{anonymous_checkbox:"Chcę się dorzucić anonimowo",dedication_link:"Przekaż tę darowiznę w czyimś imieniu",dedication_saved:"Darowizna zadedykowana dla:",label:"Info",next:"Dalej",supporter:{address:"Adres",city:"Miasto",email:"Email",email_required:"(potrzebne do rachunku)",errors:{email:{format:"Proszę podać prawidłowy adres email"}},first_name:"Imię",full_name:"Pełne imię",last_name:"Nazwisko",phone:"Telefon",postal_code:"Kod pocztowy",region:"Region",shipping_address:"Adres korespondencyjny (wymagane)",state:"Wybierz kraj"}},log_out:"Wyloguj",payment:{card:{cvc:"Kod CVC",errors:{email:{format:"Proszę podać poprawny adres email"},field:{format:"To nie wygląda na właściwy format",presence:"Pole wymagane"},number:{format:"Ten numer wydaje się niewłaściwy",presence:"Proszę wprowadzić numer karty"}},loading:"Zapisuję...",month:"Miesiąc",name:"Imię i nazwisko na karcie kredytowej",number:"Numer karty",postal_code:"Kod pocztowy",secure_info:"Transakcja zabezpieczona szyfrowaniem 256-bit SSL",submit:"Zatwierdź",year:"Rok"},label:"Płatność",loading:{checking_card:"Sprawdzam kartę...",sending_payment:"Przesyłam informacje o płatności..."},monthly_recurring:"co miesiąc",one_time:"jednorazowo",sepa:{bic:".BIC/SWIFT",errors:{field:{format:"To nie wygląda na właściwy format",presence:"To pole jest wymagane"}},iban:".IBAN",name:"Imię i nazwisko właściciela lub właścicielki konta"},tabs:{card:"Zapłać kartą kredytową",sepa:"Zapłać przelewem"}},signed_in:"Zalogowano jako:"}},number:{currency:{format:{delimiter:" ",format:"%u %n",precision:2,separator:",",significant:!1,strip_insignificant_zeros:!0,unit:"zł"}},format:{delimiter:" ",precision:3,separator:",",significant:!1,strip_insignificant_zeros:!1},human:{decimal_units:{format:"%n %u",units:{billion:"Miliard",million:"Milion",quadrillion:"Biliard",thousand:"Tysiąc",trillion:"Bilion",unit:""}},format:{delimiter:"",precision:3,significant:!0,strip_insignificant_zeros:!0},storage_units:{format:"%n %u",units:{byte:{few:"bajty",many:"bajty",one:"bajt",other:"bajty"},gb:"GB",kb:"KB",mb:"MB",tb:"TB"}}},percentage:{format:{delimiter:""}},precision:{format:{delimiter:""}}},support:{array:{last_word_connector:" oraz ",two_words_connector:" i ",words_connector:", "}},time:{am:"przed południem",formats:{default:"%a, %d %b %Y %H:%M:%S %z",long:"%B %d, %Y %H:%M",short:"%d %b %H:%M"},pm:"po południu"}}),I18n.translations.es=I18n.extend(I18n.translations.es||{},{activemodel:{errors:{format:"%{attribute} %{message}",messages:{accepted:"debe ser aceptado",blank:"no puede estar en blanco",confirmation:"no coincide con la confirmación",empty:"no puede estar vacío",equal_to:"debe ser igual a %{count}",even:"debe ser par",exclusion:"está reservado",greater_than:"debe ser mayor que %{count}",greater_than_or_equal_to:"debe ser mayor que o igual a %{count}",inclusion:"no está incluido en la lista",invalid:"no es válido",less_than:"debe ser menor que %{count}",less_than_or_equal_to:"debe ser menor que o igual a %{count}",not_a_number:"no es un número",not_an_integer:"debe ser un entero",odd:"debe ser impar",record_invalid:"La validación falló: %{errors}",taken:"ya está en uso",too_long:"es demasiado largo (%{count} caracteres máximo)",too_short:"es demasiado corto (%{count} caracteres mínimo)",wrong_length:"no tiene la longitud correcta (%{count} caracteres exactos)"},template:{body:"Se encontraron problemas con los siguientes campos:",header:{one:"No se pudo guardar este/a %{model} porque se encontró 1 error",other:"No se pudo guardar este/a %{model} porque se encontraron %{count} errores"}}}},activerecord:{attributes:{campaign_comment:{body:"Comenta el contenido"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"debe ser aceptado",blank:"no puede estar en blanco",confirmation:"no coincide con la confirmación",empty:"no puede estar vacío",equal_to:"debe ser igual a %{count}",even:"debe ser par",exclusion:"está reservado",greater_than:"debe ser mayor que %{count}",greater_than_or_equal_to:"debe ser mayor que o igual a %{count}",inclusion:"no está incluido en la lista",invalid:"no es válido",less_than:"debe ser menor que %{count}",less_than_or_equal_to:"debe ser menor que o igual a %{count}",not_a_number:"no es un número",not_an_integer:"debe ser un entero",odd:"debe ser impar",record_invalid:"La validación falló: %{errors}",taken:"ya está en uso",too_long:"es demasiado largo (%{count} caracteres máximo)",too_short:"es demasiado corto (%{count} caracteres mínimo)",wrong_length:"no tiene la longitud correcta (%{count} caracteres exactos)"},template:{body:"Se encontraron problemas con los siguientes campos:",header:{one:"No se pudo guardar este/a %{model} porque se encontró 1 error",other:"No se pudo guardar este/a %{model} porque se encontraron %{count} errores"}}}},date:{abbr_day_names:["dom","lun","mar","mié","jue","vie","sáb"],abbr_month_names:[null,"ene","feb","mar","abr","may","jun","jul","ago","sep","oct","nov","dic"],day_names:["domingo","lunes","martes","miércoles","jueves","viernes","sábado"],formats:{default:"%d/%m/%Y",long:"%d de %B de %Y",short:"%d de %b"},month_names:[null,"enero","febrero","marzo","abril","mayo","junio","julio","agosto","septiembre","octubre","noviembre","diciembre"],order:["day","month","year"]},datetime:{distance_in_words:{about_x_hours:{one:"alrededor de 1 hora",other:"alrededor de %{count} horas"},about_x_months:{one:"alrededor de 1 mes",other:"alrededor de %{count} meses"},about_x_years:{one:"alrededor de 1 año",other:"alrededor de %{count} años"},almost_x_years:{one:"casi 1 año",other:"casi %{count} años"},half_a_minute:"medio minuto",less_than_x_minutes:{one:"menos de 1 minuto",other:"menos de %{count} minutos"},less_than_x_seconds:{one:"menos de 1 segundo",other:"menos de %{count} segundos"},over_x_years:{one:"más de 1 año",other:"más de %{count} años"},x_days:{one:"1 día",other:"%{count} días"},x_minutes:{one:"1 minuto",other:"%{count} minutos"},x_months:{one:"1 mes",other:"%{count} meses"},x_seconds:{one:"1 segundo",other:"%{count} segundos"}},prompts:{day:"Día",hour:"Hora",minute:"Minutos",month:"Mes",second:"Segundos",year:"Año"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"debe ser aceptado",blank:"no puede estar en blanco",confirmation:"no coincide con la confirmación",empty:"no puede estar vacío",equal_to:"debe ser igual a %{count}",even:"debe ser par",exclusion:"está reservado",greater_than:"debe ser mayor que %{count}",greater_than_or_equal_to:"debe ser mayor que o igual a %{count}",inclusion:"no está incluido en la lista",invalid:"no es válido",less_than:"debe ser menor que %{count}",less_than_or_equal_to:"debe ser menor que o igual a %{count}",not_a_number:"no es un número",not_an_integer:"debe ser un entero",odd:"debe ser impar",record_invalid:"La validación falló: %{errors}",taken:"ya está en uso",too_long:"es demasiado largo (%{count} caracteres máximo)",too_short:"es demasiado corto (%{count} caracteres mínimo)",wrong_length:"no tiene la longitud correcta (%{count} caracteres exactos)"},template:{body:"Se encontraron problemas con los siguientes campos:",header:{one:"No se pudo guardar este/a %{model} porque se encontró 1 error",other:"No se pudo guardar este/a %{model} porque se encontraron %{count} errores"}}},hello:"Hola gente",helpers:{select:{prompt:"Por favor seleccione"},submit:{create:"Crear %{model}",submit:"Guardar %{model}",update:"Actualizar %{model}"}},i18n:{plural:{keys:["one","other"],rule:{}}},mailer:{donations:{donor_direct_debit_notification:{donation_queued_html:"Your direct debit donation towards %{nonprofit_name} has been queued for processing.",recurring_donation_queued_html:"Your direct debit recurring donation towards %{nonprofit_name}, started on %{start_date}, has been queued for processing.",subject:"Donation receipt for %{nonprofit_name}",transfer_info_html:"This transfer will appear on your bank statement as %{label}",transfer_label_html:"Donation %{nonprofit_statement}."}}},nonprofits:{donate:{amount:{custom:"Personalizar",designation:{choose:"Elige una denominación (opcional)",label:"Denominación:",most_needed:"Utilizad mi donativo para el fin que sea más necesario"},label:"Cantidad",monthly:"mensual",next:"Continuar",sustaining:"Haz una contribución mensual ",sustaining_monthly:"regular, mensual",sustaining_selected:"Selecciona la cantidad de tu contribución mensual"},dedication:{donor_note:"La nota del donante dice así:",email:"Correo electrónico (opcional)",first_name:"Nombre",full_address:"Dirección completa (opcional)",in_honor_label:"En honor de",in_memory_label:"En memoria de",info:"Añade una dedicatoria a tu donativo:",last_name:"Apellidos",note:"Nota o mensaje",phone:"Teléfono (opcional)",save:"Guardar y volver"},followup:{finish:"Terminar",message:"¡agradece tu apoyo!",receipt_info:"Te mandaremos el recibo a ",share:{facebook:"Compartir",twitter:"Tuitear"},success:"¡Tu contribución se ha llevado a cabo!"},info:{anonymous_checkbox:"LLeva a cabo este donativo de manera anónima",dedication_link:"LLeva a cabo este donativo en honor / memoria de alguien",dedication_saved:"Dedicar donación a ",label:"Información",next:"Continuar",supporter:{address:"Dirección",city:"Ciudad",email:"Correo electrónico",email_required:"(se requiere para recibo)",errors:{email:{format:"Introduce una dirección de correo electrónico válida"}},first_name:"Nombre",full_name:"Nombre completo",last_name:"Apellidos",phone:"Teléfono",postal_code:"Código postal",region:"Región",shipping_address:"Dirección de envío (campo obligatorio)",state:"Selecciona un país"}},log_out:"Cerrar sesión",payment:{card:{cvc:"CVC",errors:{email:{format:"Introduce un dirección de correo electrónico válida"},field:{format:"No has utilizado el formato adecuado",presence:"Este campo es obligatorio"},number:{format:"El número de tarjeta no es correcto",presence:"Introduce tu número de tarjeta"}},loading:"Guardando",month:"Mes",name:"Nombre del titular de la tarjeta",number:"Número de tarjeta",postal_code:"Código postal",secure_info:"Transacciones garantizadas con 256-bit SSL",submit:"Enviar",year:"Año"},label:"Pago",loading:{checking_card:"Comprobando tarjeta...",sending_payment:"LLevando a cabo el pago..."},monthly_recurring:"mensual",one_time:"Una sola vez",sepa:{bic:".BIC/SWIFT",errors:{field:{format:"No has utilizado el formato adecuado",presence:"Este campo es obligatorio"}},iban:".IBAN",name:".Nombre del titular de la cuenta"},tabs:{card:"Pagar con tarjeta de crédito",sepa:"Realizar una domiciliación bancaria"}},signed_in:"Has iniciado sesión como"}},number:{currency:{format:{delimiter:".",format:"%n %u",precision:2,separator:",",significant:!1,strip_insignificant_zeros:!1,unit:"€"}},format:{delimiter:".",precision:3,separator:",",significant:!1,strip_insignificant_zeros:!1},human:{decimal_units:{format:"%n %u",units:{billion:"mil millones",million:"millón",quadrillion:"mil billones",thousand:"mil",trillion:"billón",unit:""}},format:{delimiter:"",precision:1,significant:!0,strip_insignificant_zeros:!0},storage_units:{format:"%n %u",units:{byte:{one:"Byte",other:"Bytes"},gb:"GB",kb:"KB",mb:"MB",tb:"TB"}}},percentage:{format:{delimiter:""}},precision:{format:{delimiter:""}}},support:{array:{last_word_connector:", y ",two_words_connector:" y ",words_connector:", "}},time:{am:"am",formats:{default:"%A, %d de %B de %Y %H:%M:%S %z",long:"%d de %B de %Y %H:%M",short:"%d de %b %H:%M"},pm:"pm"}}),I18n.translations.ro=I18n.extend(I18n.translations.ro||{},{activemodel:{errors:{format:"%{attribute} %{message}",messages:{accepted:"trebuie dat acceptul",blank:"nu poate fi gol",confirmation:"nu este confirmat",empty:"nu poate fi gol",equal_to:"trebuie să fie egal cu %{count}",even:"trebuie să fie impar",exclusion:"este rezervat",greater_than:"trebuie să fie mai mare decât %{count}",greater_than_or_equal_to:"trebuie să fie mai mare sau egal cu %{count}",inclusion:"nu este inclus în listă",invalid:"este invalid",less_than:"trebuie să fie mai mic decât %{count}",less_than_or_equal_to:"trebuie să fie mai mic sau egal cu %{count}",not_a_number:"nu este un număr",not_an_integer:"trebuie să fie un mumăr întreg",odd:"trebuie să fie par",record_invalid:"Validare nereuşită %{errors}",taken:"este deja folosit",too_long:"este prea lung (se pot folosi maximum %{count} caractere)",too_short:"este prea scurt (minimum de caractere este %{count})",wrong_length:"nu are lungimea corectă (trebuie să aiba %{count} caractere)"},template:{body:"Încearcă să corectezi urmatoarele câmpuri:",header:{few:"Nu am putut salva acest %{model}: %{count} erori.",one:"Nu am putut salva acest %{model}: o eroare",other:"Nu am putut salva acest %{model}: %{count} erori."}}}},activerecord:{attributes:{campaign_comment:{body:"Conținutul comentariului"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"trebuie dat acceptul",blank:"nu poate fi gol",confirmation:"nu este confirmat",empty:"nu poate fi gol",equal_to:"trebuie să fie egal cu %{count}",even:"trebuie să fie impar",exclusion:"este rezervat",greater_than:"trebuie să fie mai mare decât %{count}",greater_than_or_equal_to:"trebuie să fie mai mare sau egal cu %{count}",inclusion:"nu este inclus în listă",invalid:"este invalid",less_than:"trebuie să fie mai mic decât %{count}",less_than_or_equal_to:"trebuie să fie mai mic sau egal cu %{count}",not_a_number:"nu este un număr",not_an_integer:"trebuie să fie un mumăr întreg",odd:"trebuie să fie par",record_invalid:"Validare nereuşită %{errors}",taken:"este deja folosit",too_long:"este prea lung (se pot folosi maximum %{count} caractere)",too_short:"este prea scurt (minimum de caractere este %{count})",wrong_length:"nu are lungimea corectă (trebuie să aiba %{count} caractere)"},template:{body:"Încearcă să corectezi urmatoarele câmpuri:",header:{few:"Nu am putut salva acest %{model}: %{count} erori.",one:"Nu am putut salva acest %{model}: o eroare",other:"Nu am putut salva acest %{model}: %{count} erori."}}}},date:{abbr_day_names:["Dum","Lun","Mar","Mie","Joi","Vin","Sâm"],abbr_month_names:[null,"Ian","Feb","Mar","Apr","Mai","Iun","Iul","Aug","Sep","Oct","Noi","Dec"],day_names:["Duminică","Luni","Marți","Miercuri","Joi","Vineri","Sâmbată"],formats:{default:"%d-%m-%Y",long:"%d %B %Y",short:"%d %b"},month_names:[null,"Ianuarie","Februarie","Martie","Aprilie","Mai","Iunie","Iulie","August","Septembrie","Octombrie","Noiembrie","Decembrie"],order:["day","month","year"]},datetime:{distance_in_words:{about_x_hours:{few:"aproximativ %{count} ore",one:"aproximativ o oră",other:"aproximativ %{count} ore"},about_x_months:{few:"aproximativ %{count} luni",one:"aproximativ o lună",other:"aproximativ %{count} luni"},about_x_years:{few:"aproximativ %{count} ani",one:"aproximativ un an",other:"aproximativ %{count} ani"},almost_x_years:{few:"aproape %{count} ani",one:"aproape 1 an",other:"aproape %{count} ani"},half_a_minute:"jumătate de minut",less_than_x_minutes:{few:"mai puțin de %{count} minute",one:"mai puțin de un minut",other:"mai puțin de %{count} minute"},less_than_x_seconds:{few:"mai puțin de %{count} secunde",one:"mai puțin de o secundă",other:"mai puțin de %{count} secunde"},over_x_years:{few:"mai mult de %{count} ani",one:"mai mult de un an",other:"mai mult de %{count} ani"},x_days:{few:"%{count} zile",one:"1 zi",other:"%{count} zile"},x_minutes:{few:"%{count} minute",one:"1 minut",other:"%{count} minute"},x_months:{few:"%{count} luni",one:"1 lună",other:"%{count} luni"},x_seconds:{few:"%{count} secunde",one:"1 secundă",other:"%{count} secunde"}},prompts:{day:"Ziua",hour:"Ora",minute:"Minutul",month:"Luna",second:"Secunda",year:"Anul"}},errors:{format:"%{attribute} %{message}",messages:{accepted:"trebuie dat acceptul",blank:"nu poate fi gol",confirmation:"nu este confirmat",empty:"nu poate fi gol",equal_to:"trebuie să fie egal cu %{count}",even:"trebuie să fie impar",exclusion:"este rezervat",greater_than:"trebuie să fie mai mare decât %{count}",greater_than_or_equal_to:"trebuie să fie mai mare sau egal cu %{count}",inclusion:"nu este inclus în listă",invalid:"este invalid",less_than:"trebuie să fie mai mic decât %{count}",less_than_or_equal_to:"trebuie să fie mai mic sau egal cu %{count}",not_a_number:"nu este un număr",not_an_integer:"trebuie să fie un mumăr întreg",odd:"trebuie să fie par",record_invalid:"Validare nereuşită %{errors}",taken:"este deja folosit",too_long:"este prea lung (se pot folosi maximum %{count} caractere)",too_short:"este prea scurt (minimum de caractere este %{count})",wrong_length:"nu are lungimea corectă (trebuie să aiba %{count} caractere)"},template:{body:"Încearcă să corectezi urmatoarele câmpuri:",header:{few:"Nu am putut salva acest %{model}: %{count} erori.",one:"Nu am putut salva acest %{model}: o eroare",other:"Nu am putut salva acest %{model}: %{count} erori."}}},hello:"Salut ",helpers:{select:{prompt:"Alegeţi"},submit:{create:"Creare %{model}",submit:"Salvare %{model}",update:"Modificare %{model}"}},i18n:{plural:{keys:["one","few","other"],rule:{}},transliterate:{rule:{"Â":"A","Î":"I","â":"a","î":"i","Ă":"A","ă":"a","Ș":"S","ș":"s","Ț":"T","ț":"t"}}},mailer:{donations:{donor_direct_debit_notification:{donation_queued_html:"Your direct debit donation towards %{nonprofit_name} has been queued for processing.",recurring_donation_queued_html:"Your direct debit recurring donation towards %{nonprofit_name}, started on %{start_date}, has been queued for processing.",subject:"Donation receipt for %{nonprofit_name}",transfer_info_html:"This transfer will appear on your bank statement as %{label}",transfer_label_html:"Donation %{nonprofit_statement}."}}},nonprofits:{donate:{amount:{custom:"Altă sumă",designation:{choose:"Alege un scop (opțional)",label:"Scop:",most_needed:"Folosiți donația mea acolo unde e cea mai mare nevoie de ea"},label:"Sumă",monthly:"lunar",next:"Pasul următor",sustaining:"Contribuie cu o donație lunară",sustaining_monthly:"susținere, lunară",sustaining_selected:"Selectează o sumă pentru donația lunară"},dedication:{donor_note:"Donatorul/Donatoarea a lăsat următorul mesaj:",email:"Adresă de e-mail (opțional)",first_name:"Prenume",full_address:"Adresă completă (opțional)",in_honor_label:"În onoarea ",in_memory_label:"În memoria",info:"Adaugă o dedicație pentru donația ta:",last_name:"Nume de familie",note:"Notă sau mesaj",phone:"Număr de telefon (opțional)",save:"Salvează și întoarce-te pe pagina anterioară"},followup:{finish:"Închide",message:"apreciază sprijinul tău!",receipt_info:"Chitanța va fi trimisă la adresa de e-mail",share:{facebook:"Distribuie",twitter:"Trimite un Tweet"},success:"Donația ta a fost înregistrată cu succes!"},info:{anonymous_checkbox:"Vreau ca donația să fie anonimă.",dedication_link:"Donează în onoarea sau în memoria cuiva ",dedication_saved:"Numele persoanei căreia îi este dedicată donația",label:"Date personale",next:"Pasul următor",supporter:{address:"Adresă",city:"Oraș",email:"Adresă de e-mail",email_required:"(obligatoriu pentru trimiterea chitanței)",errors:{email:{format:"Te rugăm să introduci o adresă de e-mail validă"}},first_name:"Prenume",full_name:"Nume complet",last_name:"Nume de familie",phone:"Număr de telefon",postal_code:"Cod poștal",region:"Județ",shipping_address:"Adresă de corespondență (obligatoriu)",state:"Selectează țara"}},log_out:"Deconectează-te",payment:{card:{cvc:"CVC",errors:{email:{format:"Te rugăm să introduci o adresă de e-mail validă"},field:{format:"Format incorect",presence:"Câmp obligatoriu"},number:{format:"Numărul cardului nu a fost introdus corect",presence:"Te rugăm să introduci numărul cardului"}},loading:"Se salvează...",month:"Lună",name:"Numele deținătorului/deținătoarei cardului",number:"Numărul cardului",postal_code:"Cod poștal",secure_info:"Tranzacție securizată prin criptare SSL pe 256 de biți",submit:"Trimite",year:"An"},label:"Plată",loading:{checking_card:"Verificăm cardul...",sending_payment:"Transfer în desfășurare..."},monthly_recurring:"lunară",one_time:"singulară",sepa:{bic:"Codul BIC/SWIFT",errors:{field:{format:"Format incorect",presence:"Câmp obligatoriu"}},iban:"Codul IBAN",name:"Numele deținătorului/deținătoarei contului"},tabs:{card:"Plătește cu cardul",sepa:"Plătește prin SEPA"}},signed_in:"Ești autentificat/ă ca"}},number:{currency:{format:{delimiter:".",format:"%n %u",precision:2,separator:",",significant:!1,strip_insignificant_zeros:!1,unit:"RON"}},format:{delimiter:".",precision:3,separator:",",significant:!1,strip_insignificant_zeros:!1},human:{decimal_units:{format:"%n %u",units:{billion:"Miliard",million:"Milion",quadrillion:"Quadrilion",thousand:"Mie",trillion:"Trilion",unit:""}},format:{delimiter:",",precision:3,significant:!0,strip_insignificant_zeros:!0},storage_units:{format:"%n %u",units:{byte:{few:"Bytes",one:"Byte",other:"Bytes"},gb:"GB",kb:"KB",mb:"MB",tb:"TB"}}},percentage:{format:{delimiter:","}},precision:{format:{delimiter:""}}},support:{array:{last_word_connector:" şi ",two_words_connector:" şi ",words_connector:", "}},time:{am:"",formats:{default:"%a %d %b %Y, %H:%M:%S %z",long:"%d %B %Y %H:%M",short:"%d %b %H:%M"},pm:""}});
\ No newline at end of file
diff --git a/client/js/nonprofits/donate/info-step.js b/client/js/nonprofits/donate/info-step.js
index 53297671..f7c78189 100644
--- a/client/js/nonprofits/donate/info-step.js
+++ b/client/js/nonprofits/donate/info-step.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const R = require('ramda')
const flyd = require('flyd')
diff --git a/client/js/nonprofits/donate/page.js b/client/js/nonprofits/donate/page.js
index fcbdb94d..f256fd7b 100644
--- a/client/js/nonprofits/donate/page.js
+++ b/client/js/nonprofits/donate/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('parsleyjs')
const render = require('ff-core/render')
diff --git a/client/js/nonprofits/donate/payment-step.js b/client/js/nonprofits/donate/payment-step.js
index ddf7dba5..29d3de88 100644
--- a/client/js/nonprofits/donate/payment-step.js
+++ b/client/js/nonprofits/donate/payment-step.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const R = require('ramda')
const flyd = require('flyd')
diff --git a/client/js/nonprofits/donate/plugins-available/alwaysAnonymous.js b/client/js/nonprofits/donate/plugins-available/alwaysAnonymous.js
index 1db654a6..6a8cf68f 100644
--- a/client/js/nonprofits/donate/plugins-available/alwaysAnonymous.js
+++ b/client/js/nonprofits/donate/plugins-available/alwaysAnonymous.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
jQuery(function($){
$(".donationWizard").on("render:post", function(){
var cb=document.getElementsByName("anonymous")[0];
diff --git a/client/js/nonprofits/donate/plugins-available/default-recurring.js b/client/js/nonprofits/donate/plugins-available/default-recurring.js
index a3c5343a..eb2816ae 100644
--- a/client/js/nonprofits/donate/plugins-available/default-recurring.js
+++ b/client/js/nonprofits/donate/plugins-available/default-recurring.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// This plugin allows to simplify the form (remove phone, address and city fields) if the url query has "minimal"
jQuery(function($){
$(".donationWizard").on("render:post", function(){
diff --git a/client/js/nonprofits/donate/plugins-available/dummy.js b/client/js/nonprofits/donate/plugins-available/dummy.js
index 683e98d7..26b548e9 100644
--- a/client/js/nonprofits/donate/plugins-available/dummy.js
+++ b/client/js/nonprofits/donate/plugins-available/dummy.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
(function () {
var container = document.querySelector('.js-donateForm');
diff --git a/client/js/nonprofits/donate/plugins-available/ibanonly.js b/client/js/nonprofits/donate/plugins-available/ibanonly.js
index 13e39250..b1fd3941 100644
--- a/client/js/nonprofits/donate/plugins-available/ibanonly.js
+++ b/client/js/nonprofits/donate/plugins-available/ibanonly.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
jQuery(function($){
$("input[name='bic']").closest("fieldset").hide();
$("input[name='iban']").closest("fieldset").removeClass("col-8").addClass("col-12");
diff --git a/client/js/nonprofits/donate/plugins-available/minamount.js b/client/js/nonprofits/donate/plugins-available/minamount.js
index 6538cc65..fed80060 100644
--- a/client/js/nonprofits/donate/plugins-available/minamount.js
+++ b/client/js/nonprofits/donate/plugins-available/minamount.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
jQuery(function($){
jQuery("input[name='amount']").attr("min",3);
});
diff --git a/client/js/nonprofits/donate/plugins-available/minimalForm.js b/client/js/nonprofits/donate/plugins-available/minimalForm.js
index bfc1e04c..1899e28b 100644
--- a/client/js/nonprofits/donate/plugins-available/minimalForm.js
+++ b/client/js/nonprofits/donate/plugins-available/minimalForm.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// This plugin allows to simplify the form (remove phone, address and city fields) if the url query has "minimal"
jQuery(function($){
$(".donationWizard").on("render:post", function(){
diff --git a/client/js/nonprofits/donate/plugins-available/piwik.js b/client/js/nonprofits/donate/plugins-available/piwik.js
index 86e95da0..cafad8d8 100644
--- a/client/js/nonprofits/donate/plugins-available/piwik.js
+++ b/client/js/nonprofits/donate/plugins-available/piwik.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var _paq = _paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
diff --git a/client/js/nonprofits/donate/plugins-available/prefill-identity.js b/client/js/nonprofits/donate/plugins-available/prefill-identity.js
index fea7675c..f972b391 100644
--- a/client/js/nonprofits/donate/plugins-available/prefill-identity.js
+++ b/client/js/nonprofits/donate/plugins-available/prefill-identity.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// This plugin allows to automatically fill the form (name, address..) based on the url params
jQuery(function($){
diff --git a/client/js/nonprofits/donate/plugins-available/prettify.js b/client/js/nonprofits/donate/plugins-available/prettify.js
index 7af3220a..2b757272 100644
--- a/client/js/nonprofits/donate/plugins-available/prettify.js
+++ b/client/js/nonprofits/donate/plugins-available/prettify.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
jQuery(function($){
$(".closeButton").hide();
if (app.currency_symbol != "€") $("button.sepa").hide();
diff --git a/client/js/nonprofits/donate/plugins-available/select-amount.js b/client/js/nonprofits/donate/plugins-available/select-amount.js
index e8982480..fdc02804 100644
--- a/client/js/nonprofits/donate/plugins-available/select-amount.js
+++ b/client/js/nonprofits/donate/plugins-available/select-amount.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// This plugin allows to automatically chose an amount if the url query has "amount"=xz
jQuery(function($){
$(".donationWizard").on("render:post", function(){
diff --git a/client/js/nonprofits/donate/wizard.js b/client/js/nonprofits/donate/wizard.js
index e331ce94..752cce6d 100644
--- a/client/js/nonprofits/donate/wizard.js
+++ b/client/js/nonprofits/donate/wizard.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flyd')
const R = require('ramda')
const h = require('snabbdom/h')
diff --git a/client/js/nonprofits/edit/page.js b/client/js/nonprofits/edit/page.js
index 2ed5014c..1a69d7dc 100644
--- a/client/js/nonprofits/edit/page.js
+++ b/client/js/nonprofits/edit/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../common/image_uploader')
require('../../common/on-change-sanitize-slug')
var url = "/nonprofits/" + app.nonprofit_id
diff --git a/client/js/nonprofits/payments/index/page.js b/client/js/nonprofits/payments/index/page.js
index ad8d74ca..9db03097 100755
--- a/client/js/nonprofits/payments/index/page.js
+++ b/client/js/nonprofits/payments/index/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../../components/date_range_picker')
require('../../../common/panels_layout')
require('./tour')
diff --git a/client/js/nonprofits/payments/index/payment_details.js b/client/js/nonprofits/payments/index/payment_details.js
index ee9612a4..8c416680 100644
--- a/client/js/nonprofits/payments/index/payment_details.js
+++ b/client/js/nonprofits/payments/index/payment_details.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../../common/super-agent-promise')
var readable_interval = require('../../recurring_donations/readable_interval')
var format = require('../../../common/format')
diff --git a/client/js/nonprofits/payments/index/tour.js b/client/js/nonprofits/payments/index/tour.js
index f5e963b6..7014dbe5 100644
--- a/client/js/nonprofits/payments/index/tour.js
+++ b/client/js/nonprofits/payments/index/tour.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../../common/vendor/bootstrap-tour-standalone')
var transactions_tour = new Tour({
diff --git a/client/js/nonprofits/payments_chart.js b/client/js/nonprofits/payments_chart.js
index b2a49105..9a971d03 100644
--- a/client/js/nonprofits/payments_chart.js
+++ b/client/js/nonprofits/payments_chart.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const request = require('../common/client')
const R = require('ramda')
const Chart = require('chart.js')
diff --git a/client/js/nonprofits/payouts/create.js b/client/js/nonprofits/payouts/create.js
index 69cbcdb5..673f85e0 100644
--- a/client/js/nonprofits/payouts/create.js
+++ b/client/js/nonprofits/payouts/create.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../common/super-agent-promise')
module.exports = create_payout
diff --git a/client/js/nonprofits/payouts/index/page.js b/client/js/nonprofits/payouts/index/page.js
index 8140d164..72704131 100644
--- a/client/js/nonprofits/payouts/index/page.js
+++ b/client/js/nonprofits/payouts/index/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var create_payout = require('../create')
var format_err = require('../../../common/format_response_error')
appl.verify_identity = require('./verify_identity')
diff --git a/client/js/nonprofits/payouts/index/verify_identity.js b/client/js/nonprofits/payouts/index/verify_identity.js
index 1a66789f..140d3f8f 100644
--- a/client/js/nonprofits/payouts/index/verify_identity.js
+++ b/client/js/nonprofits/payouts/index/verify_identity.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../../common/super-agent-promise')
var format_err = require('../../../common/format_response_error')
diff --git a/client/js/nonprofits/recurring_donations/index/create.js b/client/js/nonprofits/recurring_donations/index/create.js
index 494c3754..59508b3a 100644
--- a/client/js/nonprofits/recurring_donations/index/create.js
+++ b/client/js/nonprofits/recurring_donations/index/create.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../../components/wizard')
var format_err = require('../../../common/format_response_error')
var format = require('../../../common/format')
diff --git a/client/js/nonprofits/recurring_donations/index/delete.js b/client/js/nonprofits/recurring_donations/index/delete.js
index b2084307..42f8649d 100644
--- a/client/js/nonprofits/recurring_donations/index/delete.js
+++ b/client/js/nonprofits/recurring_donations/index/delete.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
appl.def('ajax_details', {
del: function(id, node) {
diff --git a/client/js/nonprofits/recurring_donations/index/page.js b/client/js/nonprofits/recurring_donations/index/page.js
index f0400630..a504de14 100644
--- a/client/js/nonprofits/recurring_donations/index/page.js
+++ b/client/js/nonprofits/recurring_donations/index/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('./index.es6')
require('./create')
require('./update')
diff --git a/client/js/nonprofits/recurring_donations/index/tour.js b/client/js/nonprofits/recurring_donations/index/tour.js
index ff61bfdb..658977c8 100644
--- a/client/js/nonprofits/recurring_donations/index/tour.js
+++ b/client/js/nonprofits/recurring_donations/index/tour.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var tour_subscribers = new Tour({
backdrop: false,
steps: [
diff --git a/client/js/nonprofits/recurring_donations/index/update.js b/client/js/nonprofits/recurring_donations/index/update.js
index f0eeb110..9f88a568 100644
--- a/client/js/nonprofits/recurring_donations/index/update.js
+++ b/client/js/nonprofits/recurring_donations/index/update.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
appl.def('ajax_details', {
update: function(id, form_obj, node) {
diff --git a/client/js/nonprofits/recurring_donations/readable_interval.js b/client/js/nonprofits/recurring_donations/readable_interval.js
index 2e9a118c..068f78e6 100644
--- a/client/js/nonprofits/recurring_donations/readable_interval.js
+++ b/client/js/nonprofits/recurring_donations/readable_interval.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// Given a time interval (eg 1,2,3..) and a time unit (eg. 'day', 'week', 'month', or 'year')
// Convert it to a nice readable single interval word like 'daily', 'biweekly', 'yearly', etc..
// If one of the above words don't exist, will return eg 'every 7 months'
diff --git a/client/js/nonprofits/reports/modal.js b/client/js/nonprofits/reports/modal.js
index 14abd5ec..cba69b2d 100644
--- a/client/js/nonprofits/reports/modal.js
+++ b/client/js/nonprofits/reports/modal.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flyd')
const flyd_filter = require('flyd/module/filter')
const R = require('ramda')
diff --git a/client/js/nonprofits/show/page.js b/client/js/nonprofits/show/page.js
index 7af33d01..8e13c5cc 100755
--- a/client/js/nonprofits/show/page.js
+++ b/client/js/nonprofits/show/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
if (app.nonprofit.brand_color) {
require('../../components/branded_fundraising')
}
diff --git a/client/js/nonprofits/show/tour.js b/client/js/nonprofits/show/tour.js
index a71e1e50..ead71f06 100644
--- a/client/js/nonprofits/show/tour.js
+++ b/client/js/nonprofits/show/tour.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../common/vendor/bootstrap-tour-standalone')
var profile_tour = new Tour({
diff --git a/client/js/nonprofits/supporter_form/page.js b/client/js/nonprofits/supporter_form/page.js
index 15d4e2c3..a3d1fc6e 100644
--- a/client/js/nonprofits/supporter_form/page.js
+++ b/client/js/nonprofits/supporter_form/page.js
@@ -1 +1,2 @@
+// License: LGPL-3.0-or-later
require('./index.es6')
diff --git a/client/js/nonprofits/supporters/create.js b/client/js/nonprofits/supporters/create.js
index 7aaadd14..d170f3b8 100644
--- a/client/js/nonprofits/supporters/create.js
+++ b/client/js/nonprofits/supporters/create.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../common/super-agent-promise')
module.exports = create_supporter
diff --git a/client/js/nonprofits/supporters/get_name.js b/client/js/nonprofits/supporters/get_name.js
index 7b0e9d80..e4650c1b 100644
--- a/client/js/nonprofits/supporters/get_name.js
+++ b/client/js/nonprofits/supporters/get_name.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
appl.def('get_supporter_name', function(supporter) {
if(!supporter) return ''
return supporter.name || supporter.email
diff --git a/client/js/nonprofits/supporters/import/regex-header-matchers.js b/client/js/nonprofits/supporters/import/regex-header-matchers.js
index 06b23b32..c9a9ea27 100644
--- a/client/js/nonprofits/supporters/import/regex-header-matchers.js
+++ b/client/js/nonprofits/supporters/import/regex-header-matchers.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// A full list of available import keys that data can be imported into
// import_key roughly translates to 'table_name.column', but not exactly... see insert_imports.rb
diff --git a/client/js/nonprofits/supporters/index/action_recipient.js b/client/js/nonprofits/supporters/index/action_recipient.js
index c68cafc1..df3a1c10 100644
--- a/client/js/nonprofits/supporters/index/action_recipient.js
+++ b/client/js/nonprofits/supporters/index/action_recipient.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
module.exports = action_recipient
function action_recipient(){
diff --git a/client/js/nonprofits/supporters/index/bulk_delete.js b/client/js/nonprofits/supporters/index/bulk_delete.js
index b6f4d870..27c2d172 100644
--- a/client/js/nonprofits/supporters/index/bulk_delete.js
+++ b/client/js/nonprofits/supporters/index/bulk_delete.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var action_recipient = require("./action_recipient")
var request = require('../../../common/client')
diff --git a/client/js/nonprofits/supporters/index/import.js b/client/js/nonprofits/supporters/index/import.js
index 2a384f64..f7ee47bb 100644
--- a/client/js/nonprofits/supporters/index/import.js
+++ b/client/js/nonprofits/supporters/index/import.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
appl.def('import_data', {
after_post: function(resp) {
diff --git a/client/js/nonprofits/supporters/index/list_supporters.js b/client/js/nonprofits/supporters/index/list_supporters.js
index cb887555..d0442899 100644
--- a/client/js/nonprofits/supporters/index/list_supporters.js
+++ b/client/js/nonprofits/supporters/index/list_supporters.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const flyd = require('flimflam/flyd') // for ajaxing /index_metrics, line 27
const request = require('../../../common/request') // for ajaxing /index_metrics
var map = require('../../../components/maps/cc_map')
diff --git a/client/js/nonprofits/supporters/index/manage_custom_fields.js b/client/js/nonprofits/supporters/index/manage_custom_fields.js
index bfc6323d..378bb099 100644
--- a/client/js/nonprofits/supporters/index/manage_custom_fields.js
+++ b/client/js/nonprofits/supporters/index/manage_custom_fields.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../../common/client')
var action_recipient = require('./action_recipient')
var fields = require('./tags_and_fields_shared_methods')
diff --git a/client/js/nonprofits/supporters/index/manage_tags.js b/client/js/nonprofits/supporters/index/manage_tags.js
index bbb10e64..1ce48156 100644
--- a/client/js/nonprofits/supporters/index/manage_tags.js
+++ b/client/js/nonprofits/supporters/index/manage_tags.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../../common/client')
var action_recipient = require('./action_recipient')
var tags = require('./tags_and_fields_shared_methods')
diff --git a/client/js/nonprofits/supporters/index/merge_supporters.js b/client/js/nonprofits/supporters/index/merge_supporters.js
index ed3ba713..c0b5177c 100644
--- a/client/js/nonprofits/supporters/index/merge_supporters.js
+++ b/client/js/nonprofits/supporters/index/merge_supporters.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var action_recipient = require("./action_recipient")
var request = require('../../../common/client')
require('../../../components/wizard')
diff --git a/client/js/nonprofits/supporters/index/page.js b/client/js/nonprofits/supporters/index/page.js
index aa9a87cd..f0e29292 100644
--- a/client/js/nonprofits/supporters/index/page.js
+++ b/client/js/nonprofits/supporters/index/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../../common/restful_resource')
require('../../../common/panels_layout')
require('../../../components/date_range_picker')
diff --git a/client/js/nonprofits/supporters/index/sidepanel/generate-content.js b/client/js/nonprofits/supporters/index/sidepanel/generate-content.js
index 678d77a1..6d740c2c 100644
--- a/client/js/nonprofits/supporters/index/sidepanel/generate-content.js
+++ b/client/js/nonprofits/supporters/index/sidepanel/generate-content.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const R = require('ramda')
const marked = require('marked')
diff --git a/client/js/nonprofits/supporters/index/sidepanel/gmail/compose-modal.js b/client/js/nonprofits/supporters/index/sidepanel/gmail/compose-modal.js
index 2f498aee..8894f011 100644
--- a/client/js/nonprofits/supporters/index/sidepanel/gmail/compose-modal.js
+++ b/client/js/nonprofits/supporters/index/sidepanel/gmail/compose-modal.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const modal = require('ff-core/modal')
const h = require('snabbdom/h')
const validated = require('ff-core/validated-form')
diff --git a/client/js/nonprofits/supporters/index/sidepanel/gmail/format.js b/client/js/nonprofits/supporters/index/sidepanel/gmail/format.js
index 91a5019c..7c02664a 100644
--- a/client/js/nonprofits/supporters/index/sidepanel/gmail/format.js
+++ b/client/js/nonprofits/supporters/index/sidepanel/gmail/format.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const moment = require('moment')
diff --git a/client/js/nonprofits/supporters/index/sidepanel/gmail/index.js b/client/js/nonprofits/supporters/index/sidepanel/gmail/index.js
index eb1f72a5..8cd8da67 100644
--- a/client/js/nonprofits/supporters/index/sidepanel/gmail/index.js
+++ b/client/js/nonprofits/supporters/index/sidepanel/gmail/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// npm
const R = require('ramda')
const serialize = require('form-serialize')
diff --git a/client/js/nonprofits/supporters/index/sidepanel/gmail/reply-modal.js b/client/js/nonprofits/supporters/index/sidepanel/gmail/reply-modal.js
index a5a50db9..48ea6dcc 100644
--- a/client/js/nonprofits/supporters/index/sidepanel/gmail/reply-modal.js
+++ b/client/js/nonprofits/supporters/index/sidepanel/gmail/reply-modal.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const modal = require('ff-core/modal')
const h = require('snabbdom/h')
const validated = require('ff-core/validated-form')
diff --git a/client/js/nonprofits/supporters/index/sidepanel/index.js b/client/js/nonprofits/supporters/index/sidepanel/index.js
index 193860d5..f9818b89 100644
--- a/client/js/nonprofits/supporters/index/sidepanel/index.js
+++ b/client/js/nonprofits/supporters/index/sidepanel/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('snabbdom/h')
const flyd = require('flyd')
diff --git a/client/js/nonprofits/supporters/index/sidepanel/offsite-donation-form.js b/client/js/nonprofits/supporters/index/sidepanel/offsite-donation-form.js
index 58ccbd79..5220f2b4 100644
--- a/client/js/nonprofits/supporters/index/sidepanel/offsite-donation-form.js
+++ b/client/js/nonprofits/supporters/index/sidepanel/offsite-donation-form.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('snabbdom/h')
const flyd = require('flyd')
diff --git a/client/js/nonprofits/supporters/index/sidepanel/supporter-actions.js b/client/js/nonprofits/supporters/index/sidepanel/supporter-actions.js
index 844e2681..c0629f5d 100644
--- a/client/js/nonprofits/supporters/index/sidepanel/supporter-actions.js
+++ b/client/js/nonprofits/supporters/index/sidepanel/supporter-actions.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const flatMap = require('flyd/module/flatmap')
const flyd = require('flyd')
diff --git a/client/js/nonprofits/supporters/index/sidepanel/supporter-activities.js b/client/js/nonprofits/supporters/index/sidepanel/supporter-activities.js
index 45517210..5178eed8 100644
--- a/client/js/nonprofits/supporters/index/sidepanel/supporter-activities.js
+++ b/client/js/nonprofits/supporters/index/sidepanel/supporter-activities.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('snabbdom/h')
const flyd = require('flyd')
diff --git a/client/js/nonprofits/supporters/index/sidepanel/supporter-note-form.js b/client/js/nonprofits/supporters/index/sidepanel/supporter-note-form.js
index a0c262a0..fa786130 100644
--- a/client/js/nonprofits/supporters/index/sidepanel/supporter-note-form.js
+++ b/client/js/nonprofits/supporters/index/sidepanel/supporter-note-form.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('snabbdom/h')
const flyd = require('flyd')
diff --git a/client/js/nonprofits/supporters/index/supporter_details.js b/client/js/nonprofits/supporters/index/supporter_details.js
index 04ba2c5f..bbb2d84d 100644
--- a/client/js/nonprofits/supporters/index/supporter_details.js
+++ b/client/js/nonprofits/supporters/index/supporter_details.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../../common/super-agent-promise')
var format_err = require('../../../common/format_response_error')
var create_offline_donation = require('../../../donations/create_offline')
diff --git a/client/js/nonprofits/supporters/index/tags_and_fields_shared_methods.js b/client/js/nonprofits/supporters/index/tags_and_fields_shared_methods.js
index 71ad6909..ece41743 100644
--- a/client/js/nonprofits/supporters/index/tags_and_fields_shared_methods.js
+++ b/client/js/nonprofits/supporters/index/tags_and_fields_shared_methods.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../../common/client')
var endpoint_prefix = '/nonprofits/' + app.nonprofit_id + '/'
var tags_or_fields = {}
diff --git a/client/js/nonprofits/supporters/index/timeline.js b/client/js/nonprofits/supporters/index/timeline.js
index 44727147..8f43e9eb 100644
--- a/client/js/nonprofits/supporters/index/timeline.js
+++ b/client/js/nonprofits/supporters/index/timeline.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
appl.def('timeline.make_clickable', function(node){
var card = appl.prev_elem(node)
diff --git a/client/js/nonprofits/supporters/index/tour.js b/client/js/nonprofits/supporters/index/tour.js
index 4cef4f82..b1a02e2c 100644
--- a/client/js/nonprofits/supporters/index/tour.js
+++ b/client/js/nonprofits/supporters/index/tour.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../../common/vendor/bootstrap-tour-standalone')
var supporters_tour = new Tour({
diff --git a/client/js/nonprofits/supporters/new/page.js b/client/js/nonprofits/supporters/new/page.js
index 051fc74d..b7ec2328 100644
--- a/client/js/nonprofits/supporters/new/page.js
+++ b/client/js/nonprofits/supporters/new/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var restful_resource = require('../../../common/restful_resource')
appl.def('supporter', {
diff --git a/client/js/onboard/page.js b/client/js/onboard/page.js
index 6736f434..7b854e1b 100644
--- a/client/js/onboard/page.js
+++ b/client/js/onboard/page.js
@@ -1,2 +1,3 @@
+// License: LGPL-3.0-or-later
require('../common/onboard')
diff --git a/client/js/page.js b/client/js/page.js
index c42ba8de..080ee951 100644
--- a/client/js/page.js
+++ b/client/js/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// vendor
window.utils = require('./common/utilities') // XXX remove
window.appl = require('./common/application_view') // XXX remove
diff --git a/client/js/pages/show/index.js b/client/js/pages/show/index.js
index 2c630759..527cc1ed 100644
--- a/client/js/pages/show/index.js
+++ b/client/js/pages/show/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var editable = require('../../common/editable')
if(app.current_admin)
diff --git a/client/js/pricing/page.js b/client/js/pricing/page.js
index 6736f434..7b854e1b 100644
--- a/client/js/pricing/page.js
+++ b/client/js/pricing/page.js
@@ -1,2 +1,3 @@
+// License: LGPL-3.0-or-later
require('../common/onboard')
diff --git a/client/js/profiles/fundraisers/page.js b/client/js/profiles/fundraisers/page.js
index e7a9e4d8..11cdcc65 100644
--- a/client/js/profiles/fundraisers/page.js
+++ b/client/js/profiles/fundraisers/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var renderListings = require('../../events/listings')
renderListings(`/profiles/${app.profile_id}/events`)
diff --git a/client/js/profiles/show/page.js b/client/js/profiles/show/page.js
index 8b137891..604fd33e 100644
--- a/client/js/profiles/show/page.js
+++ b/client/js/profiles/show/page.js
@@ -1 +1,2 @@
+// License: LGPL-3.0-or-later
diff --git a/client/js/recurring_donations/edit/followup-step.js b/client/js/recurring_donations/edit/followup-step.js
index 1b956101..26f82491 100644
--- a/client/js/recurring_donations/edit/followup-step.js
+++ b/client/js/recurring_donations/edit/followup-step.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
diff --git a/client/js/recurring_donations/edit/get-params.js b/client/js/recurring_donations/edit/get-params.js
index c2622b66..813759f6 100644
--- a/client/js/recurring_donations/edit/get-params.js
+++ b/client/js/recurring_donations/edit/get-params.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const splitParam = str =>
diff --git a/client/js/recurring_donations/edit/page.js b/client/js/recurring_donations/edit/page.js
index 47bbda73..0b4291b4 100644
--- a/client/js/recurring_donations/edit/page.js
+++ b/client/js/recurring_donations/edit/page.js
@@ -1 +1,2 @@
+// License: LGPL-3.0-or-later
require("./index.es6")
diff --git a/client/js/recurring_donations/index.js b/client/js/recurring_donations/index.js
index b64f3702..dbfae3ae 100644
--- a/client/js/recurring_donations/index.js
+++ b/client/js/recurring_donations/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../common/client')
appl.def('update_card', function(form_obj) {
diff --git a/client/js/refunds/create.js b/client/js/refunds/create.js
index aa8e87b4..d19153b8 100644
--- a/client/js/refunds/create.js
+++ b/client/js/refunds/create.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const format = require('../common/format')
var format_err = require('../common/format_response_error')
diff --git a/client/js/settings/index/branding/index.js b/client/js/settings/index/branding/index.js
index 0fc094af..2337abfd 100644
--- a/client/js/settings/index/branding/index.js
+++ b/client/js/settings/index/branding/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// npm
const snabbdom = require('snabbdom')
const flyd = require('flyd')
diff --git a/client/js/settings/index/branding/view.js b/client/js/settings/index/branding/view.js
index f7da5feb..a3eb33ed 100644
--- a/client/js/settings/index/branding/view.js
+++ b/client/js/settings/index/branding/view.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// npm
const h = require('snabbdom/h')
const R = require('ramda')
diff --git a/client/js/settings/index/email-settings/index.js b/client/js/settings/index/email-settings/index.js
index 6c51f5e4..6dcb4ca2 100644
--- a/client/js/settings/index/email-settings/index.js
+++ b/client/js/settings/index/email-settings/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// npm
const snabbdom = require('snabbdom')
const flyd = require('flyd')
diff --git a/client/js/settings/index/email-settings/view.js b/client/js/settings/index/email-settings/view.js
index 18ed73ac..493dad37 100644
--- a/client/js/settings/index/email-settings/view.js
+++ b/client/js/settings/index/email-settings/view.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const button = require('ff-core/button')
const notification = require('ff-core/notification')
diff --git a/client/js/settings/index/integrations/index.js b/client/js/settings/index/integrations/index.js
index e76f61fa..8ae97776 100644
--- a/client/js/settings/index/integrations/index.js
+++ b/client/js/settings/index/integrations/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('snabbdom/h')
const R = require('ramda')
const flyd = require('flyd')
diff --git a/client/js/settings/index/page.js b/client/js/settings/index/page.js
index 4e7f1cc5..16358647 100644
--- a/client/js/settings/index/page.js
+++ b/client/js/settings/index/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../../common/client')
require('../../common/image_uploader')
require('../../common/el_swapo')
diff --git a/client/js/stripe_wrapper/page.js b/client/js/stripe_wrapper/page.js
index 47bbda73..0b4291b4 100644
--- a/client/js/stripe_wrapper/page.js
+++ b/client/js/stripe_wrapper/page.js
@@ -1 +1,2 @@
+// License: LGPL-3.0-or-later
require("./index.es6")
diff --git a/client/js/super-admin/fullcontact-table.js b/client/js/super-admin/fullcontact-table.js
index 0bd68ddb..c15f7800 100644
--- a/client/js/super-admin/fullcontact-table.js
+++ b/client/js/super-admin/fullcontact-table.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const h = require('flimflam/h')
const searchTable = require('../components/search-table')
diff --git a/client/js/super-admin/nonprofits-table.js b/client/js/super-admin/nonprofits-table.js
index de6ce139..8efa9c47 100644
--- a/client/js/super-admin/nonprofits-table.js
+++ b/client/js/super-admin/nonprofits-table.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('flimflam/h')
const searchTable = require('../components/search-table')
diff --git a/client/js/super-admin/page.js b/client/js/super-admin/page.js
index 00b5f78f..a3491c7c 100644
--- a/client/js/super-admin/page.js
+++ b/client/js/super-admin/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('flimflam/h')
const flyd = require('flimflam/flyd')
diff --git a/client/js/super-admin/profiles-table.js b/client/js/super-admin/profiles-table.js
index d22e8236..040d60c4 100644
--- a/client/js/super-admin/profiles-table.js
+++ b/client/js/super-admin/profiles-table.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('flimflam/h')
const searchTable = require('../components/search-table')
diff --git a/client/js/supporters/index.js b/client/js/supporters/index.js
index 205b1782..faaa173d 100644
--- a/client/js/supporters/index.js
+++ b/client/js/supporters/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('snabbdom/h')
const flyd = require('flyd')
diff --git a/client/js/supporters/settings/mailchimp-integration-settings.js b/client/js/supporters/settings/mailchimp-integration-settings.js
index 94b67ffb..7fe3781a 100644
--- a/client/js/supporters/settings/mailchimp-integration-settings.js
+++ b/client/js/supporters/settings/mailchimp-integration-settings.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const h = require('snabbdom/h')
const flyd = require('flyd')
diff --git a/client/js/ticket_levels/get_totals.js b/client/js/ticket_levels/get_totals.js
index e33b71e3..0685062e 100644
--- a/client/js/ticket_levels/get_totals.js
+++ b/client/js/ticket_levels/get_totals.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
// Retrieve the total attendee (ticket) counts for every ticket level for a given event
var request = require("../common/super-agent-promise")
diff --git a/client/js/ticket_levels/manage.js b/client/js/ticket_levels/manage.js
index b218aa5a..8588aa0c 100644
--- a/client/js/ticket_levels/manage.js
+++ b/client/js/ticket_levels/manage.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var request = require('../common/client')
var path = '/nonprofits/' + app.nonprofit_id + '/events/' + appl.event_id + '/ticket_levels'
const reorder = require('../components/drag-to-reorder')
diff --git a/client/js/tickets/index/delete-ticket.js b/client/js/tickets/index/delete-ticket.js
index ec0756e0..6dcc6943 100644
--- a/client/js/tickets/index/delete-ticket.js
+++ b/client/js/tickets/index/delete-ticket.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const R = require('ramda')
const flyd = require('flyd')
flyd.flatMap = require('flyd/module/flatmap')
diff --git a/client/js/tickets/index/page.js b/client/js/tickets/index/page.js
index dfcc8584..a3ab00dd 100644
--- a/client/js/tickets/index/page.js
+++ b/client/js/tickets/index/page.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
require('../../common/restful_resource')
require('../new')
var create_card = require('../../cards/create')
diff --git a/client/js/tickets/new.js b/client/js/tickets/new.js
index 750638be..b4b90f82 100644
--- a/client/js/tickets/new.js
+++ b/client/js/tickets/new.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var path = '/nonprofits/' + app.nonprofit_id + '/events/' + appl.event_id + '/ticket_levels'
var indexTicketLevels = require('../ticket_levels/manage')
var formSerialize = require('form-serialize')
diff --git a/client/js/tickets/wizard.js b/client/js/tickets/wizard.js
index c8cef23a..ddbc2957 100644
--- a/client/js/tickets/wizard.js
+++ b/client/js/tickets/wizard.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
if(app.autocomplete) {
require('../components/address-autocomplete')
}
diff --git a/client/js/widget/donate-button.v2.js b/client/js/widget/donate-button.v2.js
index acada7d3..b7d24b2d 100644
--- a/client/js/widget/donate-button.v2.js
+++ b/client/js/widget/donate-button.v2.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
/* this file expects a config/config.json that contains
{ "button":{
"url":"https://commitchange.com",
diff --git a/postcss.config.js b/postcss.config.js
index a062f3c0..5e3b3032 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -1,7 +1,8 @@
+// License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
module.exports = {
plugins: {
'postcss-import': {},
'postcss-cssnext': {},
'cssnano': {}
},
-};
\ No newline at end of file
+};
diff --git a/spec/js/index.js b/spec/js/index.js
index ab78139c..07249eaa 100644
--- a/spec/js/index.js
+++ b/spec/js/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
mocha.setup({globals: ['google*']})
import './nonprofits'
diff --git a/spec/js/legacy/index.js b/spec/js/legacy/index.js
index 7fe84243..e5c47532 100644
--- a/spec/js/legacy/index.js
+++ b/spec/js/legacy/index.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
window.$ = require("jquery")
window.jQuery = window.$
window.domify = require("domify")
diff --git a/spec/js/legacy/utilities-spec.js b/spec/js/legacy/utilities-spec.js
index ed290db3..31efb759 100644
--- a/spec/js/legacy/utilities-spec.js
+++ b/spec/js/legacy/utilities-spec.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var utils = require("../../../app/assets/javascripts/common/utilities")
var fruit = { name: "banana", color: "yellow", flavor: "sweet" }
diff --git a/spec/js/legacy/utilities_spec.js b/spec/js/legacy/utilities_spec.js
index 740f2d85..3ee51af6 100644
--- a/spec/js/legacy/utilities_spec.js
+++ b/spec/js/legacy/utilities_spec.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
var utils = require("../../../app/assets/javascripts/common/utilities")
var fruit = { name: "banana", color: "yellow", flavor: "sweet" }
diff --git a/spec/js/nonprofits/donate/amount-step-spec.js b/spec/js/nonprofits/donate/amount-step-spec.js
index 8e60a3dd..20518ed7 100644
--- a/spec/js/nonprofits/donate/amount-step-spec.js
+++ b/spec/js/nonprofits/donate/amount-step-spec.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const snabbdom = require('snabbdom')
const flyd = require('flyd')
const render = require('ff-core/render')
diff --git a/spec/js/nonprofits/donate/wizard-spec.js b/spec/js/nonprofits/donate/wizard-spec.js
index cf5f76a2..1cbd9e77 100644
--- a/spec/js/nonprofits/donate/wizard-spec.js
+++ b/spec/js/nonprofits/donate/wizard-spec.js
@@ -1,3 +1,4 @@
+// License: LGPL-3.0-or-later
const snabbdom = require('snabbdom')
const flyd = require('flyd')
const render = require('ff-core/render')
diff --git a/spec/js/nonprofits/index.js b/spec/js/nonprofits/index.js
index d83d4013..0fecd703 100644
--- a/spec/js/nonprofits/index.js
+++ b/spec/js/nonprofits/index.js
@@ -1,2 +1,3 @@
+// License: LGPL-3.0-or-later
import './donate/amount-step-spec'
import './donate/wizard-spec'
diff --git a/webpack.common.js b/webpack.common.js
index cbe240cf..f9db2e43 100644
--- a/webpack.common.js
+++ b/webpack.common.js
@@ -1,3 +1,4 @@
+// AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
const path = require ('path')
const WebpackSweetEntry = require('webpack-sweet-entry');
const CleanWebpackPlugin = require('clean-webpack-plugin');
@@ -121,4 +122,4 @@ module.exports = {
}
-}
\ No newline at end of file
+}
diff --git a/webpack.debug.js b/webpack.debug.js
index 6182462c..3fb55c54 100644
--- a/webpack.debug.js
+++ b/webpack.debug.js
@@ -1,3 +1,4 @@
+// License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
const merge = require('webpack-merge');
const common = require('./webpack.common.js');
diff --git a/webpack.production.js b/webpack.production.js
index 82496359..4ace5045 100644
--- a/webpack.production.js
+++ b/webpack.production.js
@@ -1,3 +1,4 @@
+// License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
const merge = require('webpack-merge');
const UglifyJSPlugin = require('uglifyjs-webpack-plugin');
const CompressionPlugin = require("compression-webpack-plugin");
@@ -17,4 +18,4 @@ module.exports = [
merge(common.translations, common_stuff),
merge(common.button, common_stuff),
merge(common.css, common_stuff)
-]
\ No newline at end of file
+]