plasma-banner-scripts
Version:
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
280 lines (247 loc) • 8.78 kB
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Source: utils/parameters.js</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Source: utils/parameters.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>/**
* @namespace Utils
* @description Other instruments for normal working project
*/
import DomService from '../initiators/domService';
/**
* @memberof Utils
* @constructor Parameters
* @param {string} selector - selector to main wrapper for promotion block
* @example
* const params = parameters.parse('.Promotion');
*/
export default class Parameters {
defaultParams = {
startDate: 'none',
endDate: 'none',
withoutTimer: false,
name: '', // normal name ex "WINTER FROST DISCOUNTS UP TO -70%"
timerFace: 'daily', // daily || hourly || counter
timerDirection: 'decrement', // decrement || increment
closeCookieLifeTime: '-1', // in days -> -1 (to end promotion) || 1-9999 (days promotion is close)
timerCounter: 1,
popupId: 'unusedBlockId',
locale: 'en',
errors: false,
errorMessage: '',
isLink: 0,
link: 'empty',
targetBlank: 1,
isSticky: 1,
promocodePageId: false,
};
params = {};
/**
* @method Parameters#parse
* @memberof Utils
* @description Parse and return all params
* @param {string} selector jQuery selector
* @example
* const params = new Parameters();
* params.parse('.Promotion');
* @return {Object}
*/
parse(selector) {
const el = DomService.get(selector);
const dataSet = DomService.data(el);
this.params = this.prepareData({
...this.defaultParams,
...dataSet,
});
return this.params;
}
/**
* @method Parameters#update
* @memberof Utils
* @description Parse and return all params
* @param {Object} data new data
* @example
* const params = new Parameters();
* params.update({});
* @return {Object}
*/
update(data) {
return this.prepareData({
...this.params,
...data,
});
}
/**
* @method Parameters#prepareData
* @memberof Utils
* @description prepare data for all initiators
* @param {Object} data row parameters
* @return {Object} data
*/
prepareData(data) {
const other = { ...data, ...this.other(data) };
const lang = { ...other, ...this.lang(other) };
const time = { ...lang, ...this.time(lang) };
const flipClock = { ...time, ...this.flipClock(time) };
const banner = { ...flipClock, ...this.banner(flipClock) };
const validate = { ...banner, ...this.validate(banner) };
if (validate.errors) throw new Error(validate.errorMessage);
return validate;
}
/**
* @method Parameters#validate
* @memberof Utils
* @description prepare data for time
* @param {Object} data row parameters
* @return {Object} validate data
*/
validate = (data) => {
const newData = data;
if (data.startDate === 'none') return data;
if (!newData.name.length) {
newData.errorMessage = 'Field "data-name" is not valid. Is required.';
} else if (JSON.stringify(new Date(newData.startDate)) === 'null') {
newData.errorMessage = 'Value "data-start-date" is not valid. Format mm/dd/yyy hh:mm:ss and is required.';
} else if (JSON.stringify(new Date(newData.endDate)) === 'null') {
newData.errorMessage = 'Value "data-end-date" is not valid. Format mm/dd/yyy hh:mm:ss and is required.';
}
if (newData.errorMessage.length) newData.errors = true;
return newData;
};
/**
* @method Parameters#other
* @memberof Utils
* @description prepare data for other
* @param {Object} data row parameters
* @return {Object} data
*/
other = data => ({
...data,
id: data.name.toLowerCase().replace(' ', '_'),
targetBlank: parseInt(data.targetBlank, 10),
isSticky: parseInt(data.isSticky, 10),
});
/**
* @method Parameters#lang
* @memberof Utils
* @description prepare data for lang
* @param {Object} data row parameters
* @return {Object} data
*/
lang = (data) => {
const newData = data;
switch (newData.locale) {
case 'br':
newData.locale = 'pt';
break;
case 'cn':
newData.locale = 'zh';
break;
case 'se':
newData.locale = 'sv';
break;
default:
break;
}
return newData;
};
/**
* @method Parameters#time
* @memberof Utils
* @description prepare data for time
* @param {Object} data row parameters
* @return {Object} data
*/
time = (data) => {
const endDateMs = new Date(data.endDate).getTime();
const startDateMs = new Date(data.startDate).getTime();
const currentDateMs = new Date().getTime();
return {
...data,
endDateMs,
startDateMs,
currentDateMs,
endDateS: endDateMs / 1000,
startDateS: startDateMs / 1000,
currentDateS: currentDateMs / 1000,
};
};
/**
* @method Parameters#flipClock
* @memberof Utils
* @description prepare data for flipClock
* @param {Object} data row parameters
* @return {Object} final Data
*/
flipClock = (data) => {
const newData = data;
newData.withoutTimer = data.startDate === 'none';
newData.language = newData.locale;
newData.countdown = newData.timerDirection === 'decrement';
newData.time = (newData.endDateS - newData.currentDateS);
newData.timerCounter = parseInt(newData.timerCounter, 10);
const {
endDateMs,
startDateMs,
timerCounter,
currentDateMs,
} = newData;
switch (newData.timerFace) {
case 'daily':
newData.clockFace = 'PlasmaDailyCounter';
break;
case 'hourly':
newData.clockFace = 'PlasmaHourlyCounter';
break;
case 'counter':
newData.clockFace = 'counter';
newData.timeInterval = Math.ceil((endDateMs - startDateMs) / timerCounter);
newData.time = (endDateMs - currentDateMs) / newData.timeInterval;
break;
default:
newData.clockFace = newData.timerFace;
break;
}
return newData;
};
/**
* @method Parameters#banner
* @memberof Utils
* @description prepare data for banner and popup
* @param {Object} data row parameters
* @return {Object} final Data
*/
banner = data => ({
...data,
href: data.link === 'empty' ? '#' : data.link,
isLink: parseInt(data.isLink, 10),
});
}
</code></pre>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="Initiators.Promotion.html">Promotion</a></li><li><a href="Initiators_Analytics.TagManager.html">TagManager</a></li><li><a href="Initiators_FlipClock.FlipClockInitiator.html">FlipClockInitiator</a></li><li><a href="Initiators_UI.UiBanner.html">UiBanner</a></li><li><a href="Initiators_UI.UiPopup.html">UiPopup</a></li><li><a href="Utils.Parameters.html">Parameters</a></li></ul><h3>Namespaces</h3><ul><li><a href="Initiators.html">Initiators</a></li><li><a href="Initiators_Analytics.html">Initiators/Analytics</a></li><li><a href="Initiators_FlipClock.html">Initiators/FlipClock</a></li><li><a href="Initiators_FlipClock_Faces.html">Initiators/FlipClock/Faces</a></li><li><a href="Initiators_FlipClock_Language.html">Initiators/FlipClock/Language</a></li><li><a href="Initiators_UI.html">Initiators/UI</a></li><li><a href="Main.html">Main</a></li><li><a href="Utils.html">Utils</a></li></ul><h3>Global</h3><ul><li><a href="global.html#addClass">addClass</a></li><li><a href="global.html#attr">attr</a></li><li><a href="global.html#data">data</a></li><li><a href="global.html#dispatch">dispatch</a></li><li><a href="global.html#get">get</a></li><li><a href="global.html#getAll">getAll</a></li><li><a href="global.html#hasClass">hasClass</a></li><li><a href="global.html#prepend">prepend</a></li><li><a href="global.html#removeAttribute">removeAttribute</a></li><li><a href="global.html#removeClass">removeClass</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.5.5</a> on Tue Jun 18 2019 11:40:32 GMT+0300 (Eastern European Summer Time)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>