make contact form work
This commit is contained in:
parent
b9c6bfe196
commit
11824ea7e3
2 changed files with 99 additions and 44 deletions
|
@ -205,7 +205,7 @@ pandora.ui.accountForm = function(action, value) {
|
||||||
validate: function(value, callback) {
|
validate: function(value, callback) {
|
||||||
callback({
|
callback({
|
||||||
message: 'Missing code',
|
message: 'Missing code',
|
||||||
valid: !!value.length
|
valid: value.length > 0
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
width: 320
|
width: 320
|
||||||
|
@ -216,7 +216,7 @@ pandora.ui.accountForm = function(action, value) {
|
||||||
id: 'email',
|
id: 'email',
|
||||||
label: 'E-Mail Address',
|
label: 'E-Mail Address',
|
||||||
labelWidth: 120,
|
labelWidth: 120,
|
||||||
type: 'email',
|
type: 'email', // fixme: ??
|
||||||
validate: pandora.validateUser('email'),
|
validate: pandora.validateUser('email'),
|
||||||
width: 320
|
width: 320
|
||||||
});
|
});
|
||||||
|
|
|
@ -6,34 +6,31 @@ pandora.ui.contactForm = function() {
|
||||||
|
|
||||||
width = getWidth(),
|
width = getWidth(),
|
||||||
|
|
||||||
$receiptCheckbox = Ox.Checkbox({
|
|
||||||
checked: true,
|
|
||||||
id: 'receipt',
|
|
||||||
title: 'Send me a receipt',
|
|
||||||
width: width - 136
|
|
||||||
})
|
|
||||||
.bindEvent({
|
|
||||||
change: function(data) {
|
|
||||||
$receiptCheckbox.options({
|
|
||||||
title: (data.checked ? 'Send' : 'Don\'t send')
|
|
||||||
+ ' me a receipt'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
|
|
||||||
$form = Ox.Form({
|
$form = Ox.Form({
|
||||||
items: [
|
items: [
|
||||||
Ox.Input({
|
Ox.Input({
|
||||||
id: 'name',
|
id: 'name',
|
||||||
label: 'Your Name',
|
label: 'Your Name',
|
||||||
labelWidth: 128,
|
labelWidth: 128,
|
||||||
|
validate: function(value, callback) {
|
||||||
|
callback({valid: true});
|
||||||
|
},
|
||||||
value: pandora.user.username,
|
value: pandora.user.username,
|
||||||
width: width
|
width: width
|
||||||
}),
|
}),
|
||||||
Ox.Input({
|
Ox.Input({
|
||||||
|
autovalidate: pandora.autovalidateEmail,
|
||||||
id: 'email',
|
id: 'email',
|
||||||
label: 'Your E-Mail Address',
|
label: 'Your E-Mail Address',
|
||||||
labelWidth: 128,
|
labelWidth: 128,
|
||||||
|
validate: function(value, callback) {
|
||||||
|
callback({
|
||||||
|
message: 'Please enter '
|
||||||
|
+ (value.length == 0 ? 'your' : 'a valid')
|
||||||
|
+ ' e-mail address',
|
||||||
|
valid: Ox.isValidEmail(value)
|
||||||
|
});
|
||||||
|
},
|
||||||
value: pandora.user.email,
|
value: pandora.user.email,
|
||||||
width: width
|
width: width
|
||||||
}),
|
}),
|
||||||
|
@ -41,65 +38,119 @@ pandora.ui.contactForm = function() {
|
||||||
id: 'subject',
|
id: 'subject',
|
||||||
label: 'Subject',
|
label: 'Subject',
|
||||||
labelWidth: 128,
|
labelWidth: 128,
|
||||||
|
validate: function(value, callback) {
|
||||||
|
callback({valid: true});
|
||||||
|
},
|
||||||
value: '',
|
value: '',
|
||||||
width: width
|
width: width
|
||||||
}),
|
}),
|
||||||
Ox.Input({
|
Ox.Input({
|
||||||
|
autovalidate: /.+/,
|
||||||
height: 256,
|
height: 256,
|
||||||
id: 'message',
|
id: 'message',
|
||||||
placeholder: 'Message',
|
placeholder: 'Message',
|
||||||
type: 'textarea',
|
type: 'textarea',
|
||||||
|
validate: function(value, callback) {
|
||||||
|
callback({
|
||||||
|
message: 'Please enter a message',
|
||||||
|
valid: value.length > 0
|
||||||
|
});
|
||||||
|
},
|
||||||
value: '',
|
value: '',
|
||||||
width: width
|
width: width
|
||||||
}),
|
})
|
||||||
$receiptCheckbox
|
|
||||||
],
|
],
|
||||||
submit: function(data, callback) {
|
|
||||||
pandora.api.contact({
|
|
||||||
name: data.name,
|
|
||||||
email: data.email,
|
|
||||||
subject: data.subject,
|
|
||||||
message: data.message,
|
|
||||||
receipt: data.receipt
|
|
||||||
}, function(result) {
|
|
||||||
callback && callback(result);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
width: 240
|
|
||||||
})
|
})
|
||||||
|
.css({width: width + 'px'})
|
||||||
.bindEvent({
|
.bindEvent({
|
||||||
change: function(event) {
|
validate: function(data) {
|
||||||
|
$sendButton.options({
|
||||||
|
disabled: !data.valid
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.appendTo(that),
|
||||||
|
|
||||||
|
$receiptCheckbox = Ox.Checkbox({
|
||||||
|
checked: pandora.user.level != 'guest',
|
||||||
|
id: 'receipt',
|
||||||
|
title: 'Send a receipt to ' + pandora.user.email,
|
||||||
|
width: width - 136
|
||||||
|
})
|
||||||
|
.css({float: 'left', margin: '8px 4px 8px 0'})
|
||||||
|
.bindEvent({
|
||||||
|
change: function(data) {
|
||||||
|
$receiptCheckbox.options({
|
||||||
|
title: data.checked
|
||||||
|
? 'Send a receipt to ' + pandora.user.email
|
||||||
|
: 'Don\'t send me a receipt'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.appendTo(that),
|
.appendTo(that),
|
||||||
|
|
||||||
$sendButton = Ox.Button({
|
$sendButton = Ox.Button({
|
||||||
|
disabled: true,
|
||||||
title: 'Send Message',
|
title: 'Send Message',
|
||||||
width: 128
|
width: 128
|
||||||
})
|
})
|
||||||
.css({position: 'absolute', left: width - 112 + 'px', top: '352px'})
|
.css({float: 'left', margin: '8px 0 8px ' + (pandora.user.level == 'guest' ? width - 128 : 4) + 'px'})
|
||||||
.bindEvent({
|
.bindEvent({
|
||||||
click: function() {
|
click: function() {
|
||||||
$form.submit();
|
var data = $form.values();
|
||||||
|
pandora.api.contact({
|
||||||
|
name: data.name,
|
||||||
|
email: data.email,
|
||||||
|
subject: data.subject,
|
||||||
|
message: data.message,
|
||||||
|
receipt: $receiptCheckbox.value()
|
||||||
|
}, function(result) {
|
||||||
|
var $dialog = Ox.Dialog({
|
||||||
|
buttons: [
|
||||||
|
Ox.Button({
|
||||||
|
id: 'close',
|
||||||
|
title: 'Close'
|
||||||
|
}).bindEvent({
|
||||||
|
click: function() {
|
||||||
|
$dialog.close();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
],
|
||||||
|
content: Ox.Element()
|
||||||
|
.append(
|
||||||
|
$('<img>')
|
||||||
|
.attr({src: '/static/png/icon64.png'})
|
||||||
|
.css({position: 'absolute', left: '16px', top: '16px', width: '64px', height: '64px'})
|
||||||
|
)
|
||||||
|
.append(
|
||||||
|
Ox.Element()
|
||||||
|
.css({position: 'absolute', left: '96px', top: '16px', width: '192px'})
|
||||||
|
.html('Thanks for your message!<br/><br/>We will get back to you as soon as possible.')
|
||||||
|
),
|
||||||
|
fixedSize: true,
|
||||||
|
height: 128,
|
||||||
|
keys: {enter: 'close', escape: 'close'},
|
||||||
|
title: 'Message Sent',
|
||||||
|
width: 304
|
||||||
|
})
|
||||||
|
.open();
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.appendTo(that);
|
.appendTo(that);
|
||||||
|
|
||||||
$text = $('<div>')
|
$text = $('<div>')
|
||||||
.css({float: 'left', width: width + 'px'})
|
.css({width: width + 'px'})
|
||||||
.html(
|
.html(
|
||||||
'Alternatively, you can contact us via <a href="mailto:'
|
' Alternatively, you can contact us via <a href="mailto:'
|
||||||
+ pandora.site.site.email.contact + '">'
|
+ pandora.site.site.email.contact + '">'
|
||||||
+ pandora.site.site.email.contact + '</a>'
|
+ pandora.site.site.email.contact + '</a>'
|
||||||
);
|
|
||||||
|
|
||||||
$('<div>')
|
|
||||||
.css({marginTop: '8px'})
|
|
||||||
.append($text)
|
|
||||||
.append(
|
|
||||||
)
|
)
|
||||||
.appendTo(that);
|
.appendTo(that);
|
||||||
|
|
||||||
|
pandora.user.level == 'guest' && $receiptCheckbox.hide();
|
||||||
|
|
||||||
function getWidth() {
|
function getWidth() {
|
||||||
return Math.min((
|
return Math.min((
|
||||||
pandora.$ui.siteDialog
|
pandora.$ui.siteDialog
|
||||||
|
@ -110,11 +161,15 @@ pandora.ui.contactForm = function() {
|
||||||
|
|
||||||
that.resize = function() {
|
that.resize = function() {
|
||||||
var width = getWidth();
|
var width = getWidth();
|
||||||
|
$form.css({width: width + 'px'});
|
||||||
$form.options('items').forEach(function($input, i) {
|
$form.options('items').forEach(function($input, i) {
|
||||||
i < 4 && $input.options({width: width});
|
i < 4 && $input.options({width: width});
|
||||||
});
|
});
|
||||||
$receiptCheckbox.options({width: width - 136})
|
if (pandora.user.level == 'guest') {
|
||||||
$sendButton.css({left: width - 112 + 'px'})
|
$sendButton.css({marginLeft: width - 128 + 'px'});
|
||||||
|
} else {
|
||||||
|
$receiptCheckbox.options({width: width - 136});
|
||||||
|
}
|
||||||
$text.css({width: width + 'px'});
|
$text.css({width: width + 'px'});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue