Sendmessage function

This commit is contained in:
斟酌 鵬兄 2016-09-10 02:00:17 +08:00
parent e674d339b0
commit 32804d23fb
2 changed files with 139 additions and 0 deletions

View File

@ -5,8 +5,12 @@
var Cycle = __import( "System.Cycle" );
/** @type {System.Cycle.Trigger} */
var Trigger = __import( "System.Cycle.Trigger" );
/** @type {System.utils.IKey} */
var IKey = __import( "System.utils.IKey" );
/** @type {System.utils.DataKey} */
var DataKey = __import( "System.utils.DataKey" );
/** @type {System.utils.Perf} */
var Perf = __import( "System.utils.Perf" );
/** @type {Dandelion} */
var Dand = __import( "Dandelion" );
/** @type {Dandelion.IDOMElement} */
@ -21,6 +25,10 @@
var CharacterCloud = __import( "Astro.Mechanism.CharacterCloud" );
/** @type {Astro.Mechanism.Parallax} */
var Parallax = __import( "Astro.Mechanism.Parallax" );
/** @type {Astro.Blog.Components.Bubble} */
var Bubble = __import( "Astro.Blog.Components.Bubble" );
var postData = __import( "System.Net.postData" );
// __import( "Dandelion.CSSReset" ); CSS_RESERVATION
// __import( "Dandelion.CSSAnimations" ); CSS_RESERVATION
@ -88,6 +96,7 @@
wrapper.innerHTML = data["mesg"];
Cycle.next( function()
{
PrepareForm();
expandContact( e );
wrapper.style.marginTop = .5 * ( 400 - wrapper.clientHeight ) + "px";
} );
@ -95,6 +104,124 @@
} );
};
var cBubble;
var PrepareForm = function()
{
var captcha = Dand.id( "contact-recaptcha", true );
var mesgform = Dand.id( "cc-send-mesg", true );
var reUUID = Perf.uuid;
var limit = 5;
var sitekey = captcha.getDAttribute( "sitekey" );
var src = captcha.getDAttribute( "src" );
var action = captcha.getDAttribute( "action" );
var script = Dand.wrapna( "script", new IKey( "src", src ) );
document.head.appendChild( script );
/** @type {_3rdParty_.Recaptcha} */
var Recaptcha;
if( !cBubble )
{
cBubble = new Bubble();
document.body.appendChild( cBubble.init() );
}
var i = 0;
var errMesg = Dand.id( "contact-errmesg" );
var submitMessage = function( action, name, email, mesg )
{
postData( action, {
"name": name, "email": email, "mesg": mesg
, "recaptcha_response_field": Recaptcha.getResponse().trim()
}
, function ( e ) {
doCollapse();
if( e.status )
{
// pop message
cBubble.setColor( "cornflowerblue" );
Cycle.next( function () { cBubble.pop( "Message sent" ); } );
// blurp after 1 sec
Cycle.delay( function () { cBubble.blurp(); }, 3500 );
}
}
, function( err )
{
errMesg.innerHTML = "Error occurred";
if( !err.status )
{
errMesg.innerHTML = err[ "mesg" ];
}
errMesg.removeAttribute( "data-disabled" );
} );
};
mesgform.addEventListener( "Submit", function( e ) {
var name = Dand.id( "contact-name" ).value.trim();
var email = Dand.id( "contact-email" ).value.trim();
var mesg = Dand.id( "contact-message" ).value.trim();
errMesg.setAttribute( "data-disabled", 1 );
try
{
if( !name )
throw new Error( "How should I address You?" );
if( !email )
throw new Error( "Please enter your email." );
if( !mesg )
throw new Error( "And your message?" );
}
catch( ex )
{
errMesg.removeAttribute( "data-disabled" );
errMesg.innerHTML = ex.message;
return;
}
submitMessage( action, name, email, mesg );
} );
var CaptchaReady = function()
{
captcha.clear();
try
{
Recaptcha.render( "contact-recaptcha", {
"theme": "light", "sitekey": sitekey
} );
}
catch( ex )
{
debug.Error( ex );
}
};
Cycle.perma(
reUUID, function()
{
if( limit < i ++ )
{
var mesg = Dand.glass( "c_so_sorry" );
if( mesg.length ) mesg[0].style.display = "block";
}
if( Recaptcha = window["grecaptcha"] )
{
Cycle.permaRemove( reUUID );
CaptchaReady();
}
} , 500
);
};
var navControl = function ()
{
// Page control

View File

@ -113,6 +113,18 @@ header {
width: auto;
}
#contact-errmesg {
margin: 0 0.5em;
padding: 0.25em 0.5em;
color: orangered;
background-color: rgba( 0, 0, 0, 0.8 );
opacity: 1;
}
#contact-errmesg[data-disabled] {
opacity: 0;
}
.c-sep {
display: inline-block;
width: 1px;