Liberate event handlers
These are extracted from rating-fw commit 5d4019f1973f9271f4b1bd24ce1f55b56ccda09e.master
parent
25701c747b
commit
bd81e2e726
|
@ -0,0 +1,77 @@
|
||||||
|
/**
|
||||||
|
* Cvv2DialogEventHandler
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 LoVullo Associates, Inc.
|
||||||
|
*
|
||||||
|
* This file is part of the Liza Data Collection Framework
|
||||||
|
*
|
||||||
|
* Liza is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* TODO: This can be generalized.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Class = require( 'easejs' ).Class,
|
||||||
|
EventHandler = require( './EventHandler' );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows Cvv2 Dialog
|
||||||
|
*/
|
||||||
|
module.exports = Class( 'Cvv2DialogEventHandler' )
|
||||||
|
.implement( EventHandler )
|
||||||
|
.extend(
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* jQuery instance
|
||||||
|
*
|
||||||
|
* @type {jQuery}
|
||||||
|
*/
|
||||||
|
'private _jquery': null,
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes with client that will delegate the event
|
||||||
|
*
|
||||||
|
* @param {jQuery} jquery jquery instance
|
||||||
|
*/
|
||||||
|
__construct: function( jquery )
|
||||||
|
{
|
||||||
|
this._jquery = jquery;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles kick-back
|
||||||
|
*
|
||||||
|
* @param {string} type event id; ignored
|
||||||
|
*
|
||||||
|
* @param {function(*,Object)} continuation to invoke on completion
|
||||||
|
*
|
||||||
|
* @return {StatusEventHandler} self
|
||||||
|
*/
|
||||||
|
'public handle': function( type, c, data )
|
||||||
|
{
|
||||||
|
var $dialog = this._jquery( '#' + data.ref ).dialog( {
|
||||||
|
title: "CVV/CSV Verification Information",
|
||||||
|
width: "500px",
|
||||||
|
resizable: false,
|
||||||
|
buttons: {
|
||||||
|
'Close': function()
|
||||||
|
{
|
||||||
|
$dialog.dialog( 'close' );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
} );
|
|
@ -0,0 +1,124 @@
|
||||||
|
/**
|
||||||
|
* Event handler proxy
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 LoVullo Associates, Inc.
|
||||||
|
*
|
||||||
|
* This file is part of the Liza Data Collection Framework
|
||||||
|
*
|
||||||
|
* Liza is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Class = require( 'easejs' ).Class,
|
||||||
|
EventHandler = require( './EventHandler' ),
|
||||||
|
UnknownEventError = require( './UnknownEventError' );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delegates events to an apropriate handler
|
||||||
|
*
|
||||||
|
* Handlers must be registered to recgonize an event.
|
||||||
|
*/
|
||||||
|
module.exports = Class( 'DelegateEventHandler' )
|
||||||
|
.implement( EventHandler )
|
||||||
|
.extend(
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Hash of event handlers to delegate to for various events
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
'private _handlers': {},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize delegate with handlers to delegate requests to for each
|
||||||
|
* supported event type
|
||||||
|
*
|
||||||
|
* @param {Object} handlers events as keys, handlers as values
|
||||||
|
*/
|
||||||
|
__construct: function( handlers )
|
||||||
|
{
|
||||||
|
// register each provided handler
|
||||||
|
for ( var type in handlers )
|
||||||
|
{
|
||||||
|
this._addHandler( type, handlers[ type ] );
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if a handler has been registered for the given type
|
||||||
|
*
|
||||||
|
* @param {string} type event id
|
||||||
|
*
|
||||||
|
* @return {boolean} whether a handler exists for the given type
|
||||||
|
*/
|
||||||
|
'public hasHandler': function( type )
|
||||||
|
{
|
||||||
|
return ( this._handlers[ type ] !== undefined );
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle an event of the given type
|
||||||
|
*
|
||||||
|
* An exception will be thrown if the event cannot be handled.
|
||||||
|
*
|
||||||
|
* The handler should always return itself; if a return value is needed to
|
||||||
|
* the caller, then a callback should be provided as an argument to the
|
||||||
|
* handler.
|
||||||
|
*
|
||||||
|
* Additional arguments will be passed to the appropriate handler.
|
||||||
|
*
|
||||||
|
* @param {string} type event id
|
||||||
|
*
|
||||||
|
* @return {EventHandler} self
|
||||||
|
*/
|
||||||
|
'public handle': function( type )
|
||||||
|
{
|
||||||
|
var handler = this._handlers[ type ];
|
||||||
|
|
||||||
|
// fail if we do not have a handler for this particular event
|
||||||
|
if ( !handler )
|
||||||
|
{
|
||||||
|
throw UnknownEventError( "Unsupported event type: " + type );
|
||||||
|
}
|
||||||
|
|
||||||
|
// delegate
|
||||||
|
handler.handle.apply( handler, arguments );
|
||||||
|
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add an EventHandler for a given event type
|
||||||
|
*
|
||||||
|
* Warning: this will overwrite existing handlers for this type.
|
||||||
|
*
|
||||||
|
* @param {string} type event id
|
||||||
|
* @param {EventHandler} handler handler for event
|
||||||
|
*
|
||||||
|
* @return {ClientEventHandler} self
|
||||||
|
*/
|
||||||
|
'private _addHandler': function( type, handler )
|
||||||
|
{
|
||||||
|
if ( !( Class.isA( EventHandler, handler ) ) )
|
||||||
|
{
|
||||||
|
throw TypeError( "Expected EventHandler for event type " + type );
|
||||||
|
}
|
||||||
|
|
||||||
|
this._handlers[ type ] = handler;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
} );
|
|
@ -0,0 +1,41 @@
|
||||||
|
/**
|
||||||
|
* Event handling interface
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 LoVullo Associates, Inc.
|
||||||
|
*
|
||||||
|
* This file is part of the Liza Data Collection Framework
|
||||||
|
*
|
||||||
|
* Liza is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Interface = require( 'easejs' ).Interface;
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = Interface( 'EventHandler',
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle an event of the given type
|
||||||
|
*
|
||||||
|
* An exception should be thrown if the event cannot be handled.
|
||||||
|
*
|
||||||
|
* The handler should always return itself; if a return value is needed to
|
||||||
|
* the caller, then a callback should be provided as an argument to the
|
||||||
|
* handler.
|
||||||
|
*
|
||||||
|
* @param {string} type event id
|
||||||
|
*
|
||||||
|
* @return {EventHandler} self
|
||||||
|
*/
|
||||||
|
'public handle': [ 'type' /*, ... */ ]
|
||||||
|
} );
|
|
@ -0,0 +1,53 @@
|
||||||
|
/**
|
||||||
|
* Invidiual rate request event handler
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 LoVullo Associates, Inc.
|
||||||
|
*
|
||||||
|
* This file is part of the Liza Data Collection Framework
|
||||||
|
*
|
||||||
|
* Liza is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Class = require( 'easejs' ).Class,
|
||||||
|
RateEventHandler = require( './RateEventHandler' );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs rate requests
|
||||||
|
*/
|
||||||
|
module.exports = Class( 'IndvRateEventHandler' )
|
||||||
|
.extend( RateEventHandler,
|
||||||
|
{
|
||||||
|
'override protected postRate': function( err, data, client, quote )
|
||||||
|
{
|
||||||
|
if ( err )
|
||||||
|
{
|
||||||
|
var inelig = {};
|
||||||
|
inelig[ action.id + '_ineligible' ] = 'Error calculating premium.';
|
||||||
|
|
||||||
|
// uh oh. notify the user that there was a problem.
|
||||||
|
quote.setData( inelig ).save();
|
||||||
|
}
|
||||||
|
|
||||||
|
// we must force a screen update (TODO: make this unnecessary)
|
||||||
|
client.getUi().getCurrentStep().emptyBucket();
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
'override protected queueProgressDialog': function( after_ms )
|
||||||
|
{
|
||||||
|
// no dialog.
|
||||||
|
return function() {};
|
||||||
|
}
|
||||||
|
} );
|
|
@ -0,0 +1,82 @@
|
||||||
|
/**
|
||||||
|
* Kickback event handler
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 LoVullo Associates, Inc.
|
||||||
|
*
|
||||||
|
* This file is part of the Liza Data Collection Framework
|
||||||
|
*
|
||||||
|
* Liza is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Class = require( 'easejs' ).Class,
|
||||||
|
EventHandler = require( './EventHandler' );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs rate requests
|
||||||
|
*/
|
||||||
|
module.exports = Class( 'KickbackEventHandler' )
|
||||||
|
.implement( EventHandler )
|
||||||
|
.extend(
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Client that will perform requests on this handler
|
||||||
|
* @type {Client}
|
||||||
|
*/
|
||||||
|
'private _client': null,
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes with client that will delegate the event
|
||||||
|
*
|
||||||
|
* @param {Client} client client object
|
||||||
|
*/
|
||||||
|
__construct: function( client )
|
||||||
|
{
|
||||||
|
this._client = client;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles kick-back
|
||||||
|
*
|
||||||
|
* @param {string} type event id; ignored
|
||||||
|
*
|
||||||
|
* @param {function(*,Object)} continuation to invoke on completion
|
||||||
|
*
|
||||||
|
* @return {KickbackEventHandler} self
|
||||||
|
*/
|
||||||
|
'public handle': function( type, c, data )
|
||||||
|
{
|
||||||
|
var step_id = +data.stepId,
|
||||||
|
quote = this._client.getQuote(),
|
||||||
|
nav = this._client.nav,
|
||||||
|
ui = this._client.getUi();
|
||||||
|
|
||||||
|
if ( quote.getTopVisitedStepId() > step_id )
|
||||||
|
{
|
||||||
|
quote.setTopVisitedStepId( step_id );
|
||||||
|
nav.setTopVisitedStepId( step_id );
|
||||||
|
|
||||||
|
if ( quote.getCurrentStepId() > step_id )
|
||||||
|
{
|
||||||
|
nav.navigateToStep( step_id );
|
||||||
|
}
|
||||||
|
|
||||||
|
ui.redrawNav();
|
||||||
|
}
|
||||||
|
|
||||||
|
c();
|
||||||
|
}
|
||||||
|
} );
|
|
@ -0,0 +1,233 @@
|
||||||
|
/**
|
||||||
|
* Rate event handler
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 LoVullo Associates, Inc.
|
||||||
|
*
|
||||||
|
* This file is part of the Liza Data Collection Framework
|
||||||
|
*
|
||||||
|
* Liza is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Class = require( 'easejs' ).Class,
|
||||||
|
EventHandler = require( './EventHandler' );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs rate requests
|
||||||
|
*/
|
||||||
|
module.exports = Class( 'RateEventHandler' )
|
||||||
|
.implement( EventHandler )
|
||||||
|
.extend(
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Number of milliseconds to delay rating progress dialog display
|
||||||
|
* @type {number}
|
||||||
|
*/
|
||||||
|
'private const _DIALOG_DELAY_MS': 500,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Client that will perform requests on this handler
|
||||||
|
* @type {Client}
|
||||||
|
*/
|
||||||
|
'private _client': null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data proxy used for requests
|
||||||
|
* @type {ClientDataProxy}
|
||||||
|
*/
|
||||||
|
'private _dataProxy': null,
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes event handler with a data proxy that may be used to
|
||||||
|
* communicate with a remote server for rate requests
|
||||||
|
*
|
||||||
|
* @param {Client} client client object
|
||||||
|
* @param {ClientDataProxy} data proxy used for rate requests
|
||||||
|
*/
|
||||||
|
__construct: function( client, data_proxy )
|
||||||
|
{
|
||||||
|
this._client = client;
|
||||||
|
this._dataProxy = data_proxy;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle rating request and performs rating
|
||||||
|
*
|
||||||
|
* If the quote is locked, no rating request will be made and the
|
||||||
|
* continuation will be immediately invoked with no error and null rate
|
||||||
|
* data.
|
||||||
|
*
|
||||||
|
* If the client is in the process of saving, then rating will be deferred
|
||||||
|
* until all save operations have completed, after which rating will proceed
|
||||||
|
* as normal.
|
||||||
|
*
|
||||||
|
* After rating is complete, the coninuation will be invoked. If there is an
|
||||||
|
* error, it will be provided as the first argument and the data argument
|
||||||
|
* will be null. Otherwise, the error argument will be null and the data
|
||||||
|
* argument will contain the result of the rate call. Note that the quote
|
||||||
|
* will be automatically filled with the return data.
|
||||||
|
*
|
||||||
|
* @param {string} type event id; ignored
|
||||||
|
*
|
||||||
|
* @param {function(*,Object)} continuation to invoke on completion
|
||||||
|
*
|
||||||
|
* @return {RateEventHandler} self
|
||||||
|
*/
|
||||||
|
'public handle': function( type, c, data )
|
||||||
|
{
|
||||||
|
var _self = this,
|
||||||
|
quote = this._client.getQuote(),
|
||||||
|
qstep = quote.getCurrentStepId();
|
||||||
|
|
||||||
|
// do not perform rating if quote is locked; use existing rates, if
|
||||||
|
// available (stored in bucket)
|
||||||
|
if ( quote.isLocked()
|
||||||
|
|| ( qstep <= quote.getExplicitLockStep() )
|
||||||
|
)
|
||||||
|
{
|
||||||
|
// no error, no data.
|
||||||
|
c( null, null );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we're in the process of saving, then wait until all saves are
|
||||||
|
// complete before continuing
|
||||||
|
if ( this._client.isSaving() )
|
||||||
|
{
|
||||||
|
// defer rating until after saving is complete
|
||||||
|
this._client.once( 'postSaveAll', function()
|
||||||
|
{
|
||||||
|
dorate();
|
||||||
|
} );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function dorate()
|
||||||
|
{
|
||||||
|
_self._performRating( quote, c, data.indv, data.stepId );
|
||||||
|
}
|
||||||
|
|
||||||
|
// perform rating immediately
|
||||||
|
dorate();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
'private _performRating': function( quote, c, indv, dest_step_id )
|
||||||
|
{
|
||||||
|
var _self = this;
|
||||||
|
|
||||||
|
// queue display of "rating in progress" dialog
|
||||||
|
var dialog_close = this.queueProgressDialog(
|
||||||
|
this.__self.$( '_DIALOG_DELAY_MS' )
|
||||||
|
);
|
||||||
|
|
||||||
|
// grab the rates from the server for the already posted quote data
|
||||||
|
this._dataProxy.get( this._genRateUrl( quote, indv ),
|
||||||
|
function( response, err )
|
||||||
|
{
|
||||||
|
var data = ( response.content.data || {} );
|
||||||
|
|
||||||
|
if ( err )
|
||||||
|
{
|
||||||
|
// error; do not provide rate data
|
||||||
|
c( err, null );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// fill the bucket with the response data and save (client-side
|
||||||
|
// save only; no transport is specified)
|
||||||
|
quote.refreshData( data );
|
||||||
|
|
||||||
|
// let subtypes handle additional processing
|
||||||
|
_self.postRate( err, data, _self._client, quote );
|
||||||
|
|
||||||
|
// close rating dialog after rates are displayed
|
||||||
|
dialog_close();
|
||||||
|
|
||||||
|
// invalidate the step to force emptying of the bucket, ensuring
|
||||||
|
// that data is updated on the screen when it's re-rated (will
|
||||||
|
// be undefined if the step hasn't been loaded yet, in which
|
||||||
|
// case it doesn't need to be invalidated)
|
||||||
|
var stepui = _self._client.getUi().getStep( dest_step_id );
|
||||||
|
if ( stepui !== undefined )
|
||||||
|
{
|
||||||
|
stepui.invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
c( null, response.content.data );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
'virtual protected postRate': function( err, data, client, quote )
|
||||||
|
{
|
||||||
|
// reserved for subtypes
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate the rate request URL
|
||||||
|
*
|
||||||
|
* @param {Quote} quote to get premium for
|
||||||
|
* @param {string} indv optional individual supplier to request
|
||||||
|
*
|
||||||
|
* @return {string} request URL
|
||||||
|
*/
|
||||||
|
'private _genRateUrl': function( quote, indv )
|
||||||
|
{
|
||||||
|
return quote.getId() + '/rate' +
|
||||||
|
( ( indv )
|
||||||
|
? '/' + indv
|
||||||
|
: ''
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Queue "rating in progress" dialog for display after a short period of
|
||||||
|
* time
|
||||||
|
*
|
||||||
|
* The dialog may be closed/cancelled by invoking the returned function.
|
||||||
|
*
|
||||||
|
* @param {number} after_ms display dialog after this number of millisecs
|
||||||
|
*
|
||||||
|
* @return {function()} function to close dialog
|
||||||
|
*/
|
||||||
|
'virtual protected queueProgressDialog': function( after_ms )
|
||||||
|
{
|
||||||
|
var _self = this,
|
||||||
|
$dialog = null;
|
||||||
|
|
||||||
|
// only display the dialog if the rating time exceeds 500ms
|
||||||
|
var timeout = setTimeout( function()
|
||||||
|
{
|
||||||
|
$dialog = _self._client.uiDialog.showRatingInProgressDialog();
|
||||||
|
}, after_ms );
|
||||||
|
|
||||||
|
// return a function that may be used to close the dialog
|
||||||
|
return function()
|
||||||
|
{
|
||||||
|
// prevent the dialog from being displayed and close it if it has
|
||||||
|
// already been displayed
|
||||||
|
clearTimeout( timeout );
|
||||||
|
$dialog && $dialog.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
|
@ -0,0 +1,81 @@
|
||||||
|
/**
|
||||||
|
* Field status event handler
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 LoVullo Associates, Inc.
|
||||||
|
*
|
||||||
|
* This file is part of the Liza Data Collection Framework
|
||||||
|
*
|
||||||
|
* Liza is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Class = require( 'easejs' ).Class,
|
||||||
|
EventHandler = require( './EventHandler' );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs rate requests
|
||||||
|
*/
|
||||||
|
module.exports = Class( 'StatusEventHandler' )
|
||||||
|
.implement( EventHandler )
|
||||||
|
.extend(
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Styler used to manipulate the DOM
|
||||||
|
*
|
||||||
|
* TODO: deprecate
|
||||||
|
*
|
||||||
|
* @type {ElementStyler}
|
||||||
|
*/
|
||||||
|
'private _styler': null,
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes with client that will delegate the event
|
||||||
|
*
|
||||||
|
* @param {ElementStyler} styler element styler
|
||||||
|
*/
|
||||||
|
__construct: function( styler )
|
||||||
|
{
|
||||||
|
this._styler = styler;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles kick-back
|
||||||
|
*
|
||||||
|
* @param {string} type event id; ignored
|
||||||
|
*
|
||||||
|
* @param {function(*,Object)} continuation to invoke on completion
|
||||||
|
*
|
||||||
|
* @return {StatusEventHandler} self
|
||||||
|
*/
|
||||||
|
'public handle': function( type, c, data )
|
||||||
|
{
|
||||||
|
var indexes = data.indexes || [],
|
||||||
|
value = data.value || '',
|
||||||
|
name = data.elementName;
|
||||||
|
|
||||||
|
for ( var i in indexes )
|
||||||
|
{
|
||||||
|
// string means a static value; otherwise, an array
|
||||||
|
// represents bucket values, of which we should take the
|
||||||
|
// associated index
|
||||||
|
var value = ( typeof value === 'string' )
|
||||||
|
? value
|
||||||
|
: value[ i ];
|
||||||
|
|
||||||
|
this._styler.setStatus( name, indexes[ i ], value );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} );
|
|
@ -0,0 +1,37 @@
|
||||||
|
/**
|
||||||
|
* Contains UnknownEventError
|
||||||
|
*
|
||||||
|
* Copyright (C) 2017 LoVullo Associates, Inc.
|
||||||
|
*
|
||||||
|
* This file is part of the Liza Data Collection Framework
|
||||||
|
*
|
||||||
|
* Liza is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = function UnknownEventError( msg )
|
||||||
|
{
|
||||||
|
// 'new' keyword optional
|
||||||
|
if ( !( this instanceof module.exports ) )
|
||||||
|
{
|
||||||
|
return new module.exports( msg );
|
||||||
|
}
|
||||||
|
|
||||||
|
Error.prototype.constructor.apply( this, arguments );
|
||||||
|
};
|
||||||
|
|
||||||
|
// extends TypeError
|
||||||
|
module.exports.constructor = module.exports;
|
||||||
|
module.exports.prototype = TypeError();
|
||||||
|
module.exports.prototype.name = 'UnknownEventError';
|
||||||
|
|
Loading…
Reference in New Issue