houdini/client/js/nonprofits/button/appearance.js

95 lines
3.3 KiB
JavaScript
Raw Normal View History

// License: LGPL-3.0-or-later
var flyd = require("flyd")
var h = require("virtual-dom/h")
var footer = require('./footer')
var radioAndLabelWrapper = require('../../components/radio-and-label-wrapper')
var appearanceStream = flyd.stream()
module.exports = {
root: root,
stream: appearanceStream
}
function root(state) {
return [
h('header.step-header', [
h('h4.step-title', 'Appearance'),
h('p', 'How would you like to accept donations?')
]),
h('div.step-inner', [
table(state),
customText(state),
footer.root('Next', 'designations')
])
]
}
function table(state) {
return h('table', [
h('tr', [defaultButton(), fixedButton()]),
h('tr', [embeddedButton(), imageButton(state)])
])
}
function contentWrapper(title, content) {
return [title, h('div.u-paddingTop--15', content)]
}
var color = app.nonprofit.brand_color ? app.nonprofit.brand_color : '#42B3DF'
var font = app.nonprofit.brand_font ? app.nonprofit.brand_font : 'inherit'
var buttonStyles = {background: color, 'font-family': font}
var namePrefix = 'settings.appearance.'
function defaultButton(){
var title = 'Default button'
var content = [ h('p.branded-donate-button', {style: buttonStyles}, 'Donate'),
brandedButtonMessage()]
function brandedButtonMessage(){
if(app.nonprofit.brand_color){return}
return h('p.u-paddingTop--15',
h('small', "To customize the color and font of your button, \
head over to your settings page and click on 'branding'")
)
}
return h('td', [radioAndLabelWrapper('radio-default', namePrefix + 'name', {'value': 'default', 'checked': 'checked'},
contentWrapper(title, content), appearanceStream)])
}
function fixedButton(){
var title = 'Fixed position button'
var content = [h('p.branded-donate-button.is-fixed', {style: buttonStyles}, 'Donate')]
return h('td', [radioAndLabelWrapper('radio-fixed', namePrefix + 'name', {'value': 'fixed'},
contentWrapper(title, content), appearanceStream)])
}
function embeddedButton(){
var title = 'Embed directly on page'
var content = [ h('img', {src: app.asset_path + "/graphics/mini-amount-step.png", title: title})]
return h('td', [radioAndLabelWrapper('radio-embedded', namePrefix + 'name', {'value': 'embedded'},
contentWrapper(title, content), appearanceStream)])
}
function imageButton(state){
var title = 'Custom image'
var defaultImg = app.asset_path + "/graphics/donate-elephant.png"
var imgUrl = state.settings.appearance.customImg ? state.settings.appearance.customImg : defaultImg
var content = [ h('img', {src: imgUrl, title: title}),
h('input', {type: 'text', name: namePrefix + 'customImg', placeholder: 'Add your image URL here', onkeyup: appearanceStream})]
return h('td', [radioAndLabelWrapper('radio-custom-image', namePrefix + 'name', {'value': 'custom image'},
contentWrapper(title, content), appearanceStream)])
}
function customText(state) {
var text = state.settings.appearance.customText ? state.settings.appearance.customText : 'Donate'
var title = 'Custom text'
var content = [
h('a.customText-text', text),
h('input', {type: 'text', name: namePrefix + 'customText', placeholder: 'Type here to change text', onkeyup: appearanceStream})
]
return h('section.customText-wrapper', [radioAndLabelWrapper('radio-custom-text', namePrefix + 'name', {'value': 'custom text'},
contentWrapper(title, content), appearanceStream)])
}