diff --git a/.DS_Store b/.DS_Store
deleted file mode 100644
index d526af19e4..0000000000
Binary files a/.DS_Store and /dev/null differ
diff --git a/.gitignore b/.gitignore
index df32698269..ce7a9fb20d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,4 @@ lib/
old/
CNAME
*.env
+.DS_Store
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index a0eaa0233c..472ca22d80 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3014,8 +3014,8 @@
}
},
"blockly": {
- "version": "github:binary-com/blockly#6ad25ded4aed0037cee1e523b48934c735191695",
- "from": "github:binary-com/blockly#fix-blockly",
+ "version": "git+ssh://git@github.com/binary-com/blockly.git#6ad25ded4aed0037cee1e523b48934c735191695",
+ "from": "blockly@github:binary-com/blockly#fix-blockly",
"requires": {
"jsdom": "^11.11.0"
}
@@ -4636,6 +4636,11 @@
"tapable": "^0.2.7"
}
},
+ "enquire.js": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/enquire.js/-/enquire.js-2.1.6.tgz",
+ "integrity": "sha1-PoeAybi4NQhMP2DhZtvDwqPImBQ="
+ },
"ensure-array": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/ensure-array/-/ensure-array-1.0.0.tgz",
@@ -10999,6 +11004,14 @@
}
}
},
+ "json2mq": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz",
+ "integrity": "sha1-tje9O6nqvhIsg+lyBIOusQ0skEo=",
+ "requires": {
+ "string-convert": "^0.2.0"
+ }
+ },
"json5": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
@@ -14304,6 +14317,18 @@
}
}
},
+ "react-slick": {
+ "version": "0.28.1",
+ "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.28.1.tgz",
+ "integrity": "sha512-JwRQXoWGJRbUTE7eZI1rGIHaXX/4YuwX6gn7ulfvUZ4vFDVQAA25HcsHSYaUiRCduTr6rskyIuyPMpuG6bbluw==",
+ "requires": {
+ "classnames": "^2.2.5",
+ "enquire.js": "^2.1.6",
+ "json2mq": "^0.2.0",
+ "lodash.debounce": "^4.0.8",
+ "resize-observer-polyfill": "^1.5.0"
+ }
+ },
"react-tabs": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.2.3.tgz",
@@ -14661,6 +14686,11 @@
"integrity": "sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE=",
"dev": true
},
+ "resize-observer-polyfill": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+ },
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
@@ -15509,6 +15539,11 @@
}
}
},
+ "slick-carousel": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz",
+ "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA=="
+ },
"snapdragon": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -16050,6 +16085,11 @@
"integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=",
"dev": true
},
+ "string-convert": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz",
+ "integrity": "sha1-aYLMMEn7tM2F+LJFaLnZvznu/5c="
+ },
"string-length": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
diff --git a/package.json b/package.json
index 892f011bc4..1b6a3e75ab 100644
--- a/package.json
+++ b/package.json
@@ -105,6 +105,7 @@
"webpack-stream": "^4.0.0"
},
"dependencies": {
+ "@deriv/deriv-charts": "0.3.43",
"binary-style": "^0.2.4",
"blockly": "github:binary-com/blockly#fix-blockly",
"commander": "^2.20.0",
@@ -117,7 +118,8 @@
"mobx-react": "^5.4.4",
"pako": "^1.0.11",
"react-render-html": "^0.6.0",
+ "react-slick": "^0.28.1",
"react-transition-group": "^4.0.1",
- "@deriv/deriv-charts": "0.3.43"
+ "slick-carousel": "^1.8.1"
}
}
diff --git a/src/botPage/view/TradeInfoPanel/index.js b/src/botPage/view/TradeInfoPanel/index.js
index 200e4c575e..bc20dc1a7d 100644
--- a/src/botPage/view/TradeInfoPanel/index.js
+++ b/src/botPage/view/TradeInfoPanel/index.js
@@ -68,6 +68,7 @@ class AnimateTrade extends Component {
resetAnimation();
$('.stage-tooltip.top:eq(0)').addClass('running');
this.setState({ indicatorMessage: this.indicatorMessages.starting });
+ globalObserver.setState({ isRunning: true });
globalObserver.emit('summary.disable_clear');
globalObserver.register('contract.status', contractStatus => this.animateStage(contractStatus));
});
diff --git a/src/botPage/view/View.js b/src/botPage/view/View.js
index b9dc59dadc..1c9be4e917 100644
--- a/src/botPage/view/View.js
+++ b/src/botPage/view/View.js
@@ -1,5 +1,5 @@
import React from 'react';
-import ReactDOM from 'react-dom';
+import { render } from 'react-dom';
import 'jquery-ui/ui/widgets/dialog';
import _Blockly, { load } from './blockly';
import Chart from './Dialogs/Chart';
@@ -39,6 +39,7 @@ import {
get as getStorage,
set as setStorage,
getToken,
+ remove,
} from '../../common/utils/storageManager';
import { isProduction } from '../../common/utils/tools';
import GTM from '../../common/gtm';
@@ -49,6 +50,7 @@ import {
saveBeforeUnload,
} from './blockly/utils';
import { moveToDeriv } from '../../common/utils/utility';
+import { setTimeOutBanner } from '../../indexPage/index';
let realityCheckTimeout;
let chart;
@@ -89,7 +91,18 @@ api.events.on('balance', response => {
globalObserver.setState({ balance: b, currency });
});
-
+const removeTokens = () => {
+ logoutAllTokens().then(() => {
+ updateTokenList();
+ globalObserver.emit('ui.log.info', translate('Logged you out!'));
+ clearRealityCheck();
+ clearActiveTokens();
+ window.location.reload();
+ });
+};
+const clearActiveTokens = () => {
+ setStorage(AppConstants.STORAGE_ACTIVE_TOKEN, '');
+};
const addBalanceForToken = token => {
api.authorize(token).then(() => {
api.send({ forget_all: 'balance' }).then(() => {
@@ -450,20 +463,6 @@ export default class View {
.catch(() => {});
};
- const removeTokens = () => {
- logoutAllTokens().then(() => {
- updateTokenList();
- globalObserver.emit('ui.log.info', translate('Logged you out!'));
- clearRealityCheck();
- clearActiveTokens();
- window.location.reload();
- });
- };
-
- const clearActiveTokens = () => {
- setStorage(AppConstants.STORAGE_ACTIVE_TOKEN, '');
- };
-
$('.panelExitButton').click(function onClick() {
$(this)
.parent()
@@ -624,7 +623,6 @@ export default class View {
setTimeout(() => $('#stopButton').triggerHandler('click'));
return;
}
-
const token = $('.account-id')
.first()
.attr('value');
@@ -825,7 +823,7 @@ function initRealityCheck(stopCallback) {
}
function renderErrorPage() {
- ReactDOM.render(
+ render(
, $('#server-time')[0]);
- ReactDOM.render( , $('#tour')[0]);
- ReactDOM.render(
- ,
- $('#footer')[0]
- );
- document.getElementById('errorArea').remove();
- ReactDOM.render( , $('#summaryPanel')[0]);
- ReactDOM.render( , $('#logTable')[0]);
+ $('.barspinner').show();
+ const bannerToken = getStorage('setDueDateForBanner');
+ if (new Date().getTime() > Number(bannerToken)) {
+ remove('setDueDateForBanner');
+ const getqueryParameter = document.location.search;
+ const getDefaultPath = window.location.href.replace('/bot.html', getqueryParameter);
+ window.location.replace(getDefaultPath);
+ return false;
+ }
+ if (bannerToken === null || bannerToken === undefined) {
+ const getqueryParameter = document.location.search;
+ const getDefaultPath = window.location.href.replace('/bot.html', getqueryParameter);
+ window.location.replace(getDefaultPath);
+ document.getElementById('errorArea').remove();
+ $('.barspinner').hide();
+ } else {
+ setTimeOutBanner('views');
+ render( , $('#server-time')[0]);
+ render( , $('#tour')[0]);
+ render(
+ ,
+ $('#footer')[0]
+ );
+ document.getElementById('errorArea').remove();
+ render( , $('#summaryPanel')[0]);
+ render( , $('#logTable')[0]);
+ document.getElementById('bot-main').classList.remove('hidden');
+ $('.barspinner').hide();
+ }
}
diff --git a/src/common/appId.js b/src/common/appId.js
index 63f5b42cba..30bc537746 100644
--- a/src/common/appId.js
+++ b/src/common/appId.js
@@ -38,9 +38,7 @@ const queryToObjectArray = queryStr => {
export const oauthLogin = (done = () => 0) => {
const queryStr = parseQueryString();
-
const tokenObjectList = queryToObjectArray(queryStr);
-
if (tokenObjectList.length) {
$('#main').hide();
addTokenIfValid(tokenObjectList[0].token, tokenObjectList).then(() => {
@@ -100,6 +98,11 @@ export const generateWebSocketURL = serverUrl => `wss://${serverUrl}/websockets/
export const getOAuthURL = () =>
`https://${generateOAuthDomain()}/oauth2/authorize?app_id=${getAppIdFallback()}&l=${getLanguage().toUpperCase()}`;
+export const getOAuthURLDeriv = () =>
+ `https://oauth.deriv.com/oauth2/authorize?app_id=31665&l=${getLanguage().toUpperCase()}`;
+
+// 19111
+
const options = {
apiUrl : getWebSocketURL(),
language: getLanguage().toUpperCase(),
diff --git a/src/common/lang.js b/src/common/lang.js
index 4a6c62e002..ccca214bba 100644
--- a/src/common/lang.js
+++ b/src/common/lang.js
@@ -1,9 +1,13 @@
+import React from 'react';
+import { render } from 'react-dom';
import { parseQueryString } from '../common/utils/tools';
-import { set as setStorage, get as getStorage } from '../common/utils/storageManager';
+import { set as setStorage, get as getStorage, remove } from '../common/utils/storageManager';
import { setCookieLanguage } from '../common/utils/cookieManager';
import { supportedLanguages, translate, init } from './i18n';
import { getClientsCountryByIP } from './utils/utility';
+import BotLanding from '../indexPage/react-components/bot-landing';
+const elements = ['#notification-banner', '#main', '#footer', '#header'];
export const getLanguage = () => {
const queryLang = parseQueryString().l;
const lang = queryLang in supportedLanguages ? queryLang : getStorage('lang') || 'en';
@@ -16,7 +20,6 @@ const addUiLang = () => {
$('[data-i18n-text]').each(function each() {
const el = $(this);
const contents = el.contents();
-
el.text(translate($(this).attr('data-i18n-text'))).append(contents);
});
@@ -31,7 +34,17 @@ export const load = () => {
$('#select_language li:not(:first)').click(function click() {
const newLang = $(this).attr('class');
- document.location.search = `l=${newLang}`;
+ if (document.getElementById('bot-landing').classList.contains('hidden') === false) {
+ remove('setDueDateForBanner');
+ render( , document.getElementById('bot-landing'));
+ elements.map(elem => document.querySelector(elem).classList.add('hidden'));
+ document.getElementById('bot-landing').classList.remove('hidden');
+ document.getElementById('bot-main').classList.remove('hidden');
+ $('.barspinner').hide();
+ document.location.search = `l=${newLang}`;
+ } else {
+ document.location.search = `l=${newLang}`;
+ }
});
$('.language').text(
diff --git a/src/indexPage/index.js b/src/indexPage/index.js
index 44da8fb6dd..55ac0bdc8a 100644
--- a/src/indexPage/index.js
+++ b/src/indexPage/index.js
@@ -1,5 +1,5 @@
import React from 'react';
-import ReactDOM from 'react-dom';
+import { render } from 'react-dom';
import endpoint from './endpoint';
import Logo from './react-components/logo.jsx';
import Footer from './react-components/footer.jsx';
@@ -8,32 +8,127 @@ import { isEuCountry, showHideEuElements } from '../common/footer-checks';
import GTM from '../common/gtm';
import { load as loadLang, showBanner } from '../common/lang';
import { moveToDeriv } from '../common/utils/utility';
-import { getTokenList } from '../common/utils/storageManager';
+import { get as getStorage, set as setStorage, remove, getTokenList } from '../common/utils/storageManager';
import { createUrl } from '../common/utils/tools';
import '../common/binary-ui/dropdown';
+import BotLanding from './react-components/bot-landing';
+const today = new Date().getTime();
+// eslint-disable-next-line one-var
+const oneMilliSec = 1000;
+// twentyOneDays = 21,
+// fiveMinutes = 300,
+// oneMinute = 60,
+// oneDay = 24;
+
+export const elements = ['#notification-banner', '#main', '#footer', '#header'];
+// eslint-disable-next-line one-var
+export const bannerToken = getStorage('setDueDateForBanner');
+
+// eslint-disable-next-line arrow-body-style
+export const expirationDate = () => {
+ // return today + oneMilliSec * oneMinute * oneMinute * oneDay * twentyOneDays;
+ return today + oneMilliSec * 120;
+};
+
+export const calcSetTimeoutValueBanner = expirationDate() - new Date().getTime();
+
+// eslint-disable-next-line import/no-mutable-exports
+export let timerForBanner;
+
+const checkifBotRunning = () => {
+ if (document.getElementById('runButton').style.display === 'none') {
+ return true;
+ }
+ return false;
+};
+
+export const setTimeOutBanner = route => {
+ let bannerDisplayed;
+ // eslint-disable-next-line consistent-return
+ timerForBanner = setTimeout(() => {
+ if (
+ (route === 'index' && !!bannerDisplayed === false) ||
+ (route === 'views' && checkifBotRunning() === false)
+ ) {
+ const getqueryParameter = document.location.search;
+ const getDefaultPath = window.location.href.replace('/bot.html', getqueryParameter);
+ window.location.replace(getDefaultPath);
+ renderBanner();
+ } else if (
+ (route === 'index' && !!bannerDisplayed === true) ||
+ (route === 'views' && checkifBotRunning() === true)
+ ) {
+ remove('setDueDateForBanner');
+ setStorage('setDueDateForBanner', expirationDate());
+ return false;
+ }
+ }, calcSetTimeoutValueBanner);
+};
+
+const renderBanner = () => {
+ render( , document.getElementById('bot-landing'));
+ setStorage('setDueDateForBanner', expirationDate());
+ elements.map(elem => document.querySelector(elem).classList.add('hidden'));
+ document.getElementById('bot-landing').classList.remove('hidden');
+ document.getElementById('bot-main').classList.remove('hidden');
+ $('.barspinner').hide();
+};
+
+// eslint-disable-next-line consistent-return
const renderElements = () => {
- ReactDOM.render( , document.getElementById('binary-logo'));
- ReactDOM.render(, document.getElementById('footer'));
- isEuCountry().then(isEu => showHideEuElements(isEu));
- showBanner();
+ setTimeOutBanner('index');
+ $('.barspinner').show();
- $('#shop-url').attr('href', createUrl({ subdomain: 'shop', path: 'collections/strategies', isNonBotPage: true }));
+ if (!bannerToken) {
+ if (window.location.href.indexOf('bot.html') === -1) {
+ renderBanner();
+ }
+ } else {
+ if (today > bannerToken) {
+ remove('setDueDateForBanner');
+ renderBanner();
+ return false;
+ }
+ if (window.location.href.indexOf('bot.html') === -1) {
+ render( , document.getElementById('binary-logo'));
+ render(, document.getElementById('footer'));
+ isEuCountry().then(isEu => showHideEuElements(isEu));
+ showBanner();
+ $('#shop-url').attr(
+ 'href',
+ createUrl({ subdomain: 'shop', path: 'collections/strategies', isNonBotPage: true })
+ );
+ elements.map(elem => document.querySelector(elem).classList.remove('hidden'));
+ document.getElementById('bot-landing').classList.add('hidden');
+ }
+ document.getElementById('bot-main').classList.remove('hidden');
+ $('.barspinner').hide();
+ }
};
const loginCheck = () => {
if (endpoint()) return;
moveToDeriv();
- if (getTokenList().length) {
- window.location.pathname = `${window.location.pathname.replace(/\/+$/, '')}/bot.html`;
+ loadLang();
+ $('.show-on-load').show();
+ if (bannerToken) {
+ if (getTokenList().length) {
+ if (!window.location.pathname.includes('/bot.html')) {
+ window.location.pathname = `${window.location.pathname.replace(/\/+$/, '')}/bot.html`;
+ }
+ document.getElementById('bot-main').classList.remove('hidden');
+ } else {
+ oauthLogin(() => {
+ $('.barspinner').hide();
+ renderElements();
+ GTM.init();
+ });
+ }
} else {
- loadLang();
- oauthLogin(() => {
- $('.show-on-load').show();
- $('.barspinner').hide();
- renderElements();
- GTM.init();
- });
+ setTimeout(() => {
+ renderBanner();
+ }, 2000);
}
};
diff --git a/src/indexPage/react-components/bot-landing/Carousel.jsx b/src/indexPage/react-components/bot-landing/Carousel.jsx
new file mode 100644
index 0000000000..dd8875d254
--- /dev/null
+++ b/src/indexPage/react-components/bot-landing/Carousel.jsx
@@ -0,0 +1,72 @@
+import React from 'react';
+import Slider from 'react-slick';
+import Translations from './Translations';
+
+const Carousel = () => {
+
+ const settings = {
+ dots : false,
+ infinite : true,
+ speed : 1000,
+ slidesToShow : 1,
+ slidesToScroll: 1,
+ arrows : true,
+ autoplay : true,
+ autoplaySpeed : 5000,
+ nextArrow : ,
+ prevArrow : ,
+ responsive : [
+ {
+ breakpoint: 1024,
+ settings : {
+ slidesToShow : 1,
+ slidesToScroll: 1,
+ },
+ },
+ {
+ breakpoint: 700,
+ settings : {
+ slidesToShow : 1,
+ slidesToScroll: 1,
+ },
+ },
+ ],
+ };
+
+ return (
+
+
+ {Translations.carouselContentArray.map((slide, index) => {
+ const { title, content, action_text, img } = slide;
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+ }
+ )}
+
+
+ );
+}
+export default Carousel;
diff --git a/src/indexPage/react-components/bot-landing/ChooseSection.jsx b/src/indexPage/react-components/bot-landing/ChooseSection.jsx
new file mode 100644
index 0000000000..20f7251f9c
--- /dev/null
+++ b/src/indexPage/react-components/bot-landing/ChooseSection.jsx
@@ -0,0 +1,67 @@
+import React from 'react';
+import { translate } from '../../../common/i18n';
+import Translations from './Translations';
+
+
+const ChooseSection = () => (
+
+
+
{translate('6 reasons you’ll love Deriv')}
+
+
+ {Translations.carouselContentLeftArray.map((slide, index) => {
+ const { title, content, img } = slide;
+ return (
+
+
+
+
+
+
{title}
+ {content}
+
+
+ )
+ })
+ }
+
+
+ {Translations.carouselContentRightArray.map((slide, index) => {
+ const { title, content, img } = slide;
+ return (
+
+
+
+
+
+
{title}
+ {content}
+
+
+ )
+ })
+ }
+
+
+ {Translations.carouselContentMobileArray.map((slide, index) => {
+ const { title, content, img } = slide;
+ return (
+
+
+
+
+
+
{title}
+ {content}
+
+
+ )
+ })
+ }
+
+
+
+
+);
+
+export default ChooseSection;
\ No newline at end of file
diff --git a/src/indexPage/react-components/bot-landing/Footer.jsx b/src/indexPage/react-components/bot-landing/Footer.jsx
new file mode 100644
index 0000000000..e19305cfbf
--- /dev/null
+++ b/src/indexPage/react-components/bot-landing/Footer.jsx
@@ -0,0 +1,44 @@
+import React from 'react'
+import { translate } from '../../../common/i18n';
+
+
+// TODO :- NEED TO IMPORT TEXT FROM TRANSLATONS.JS FILE
+
+const Footer = () => (
+
+
+
+
+
+
+
+
+
+
+
+
{translate('In the EU, financial products are offered by Deriv Investments (Europe) Limited, W Business Centre, Level 3, Triq Dun Karm, Birkirkara BKR 9033, Malta, licensed in Malta ')}{translate('(licence no. IS/70156)')} {translate('and regulated by the Malta Financial Services Authority, Triq l-Imdina, Zone 1, Central Business District, Birkirkara CBD 1010, Malta, under the Investments Services Act. Authorised by the Financial Conduct Authority and with deemed variation of permission. Subject to regulation by the Financial Conduct Authority. The nature and extent of consumer protections may differ from those for firms based in the UK. Details of the Financial Services Contracts Regime, which allows EEA-based firms to operate in the UK for a limited period to carry on activities that are necessary for the performance of pre-existing contracts, are available on the Financial Conduct Authority’s website.')}
+
{translate('Outside the EU, financial products are offered by the following companies: Deriv (FX) Ltd, F16, Level 1, Paragon Labuan, Jalan Tun Mustapha, 87000 Labuan, Malaysia, licensed by Labuan Financial Services Authority ')}{translate('(licence no. MB/18/0024);')} {translate('Deriv (BVI) Ltd, Kingston Chambers, P.O. Box 173, Road Town, Tortola, British Virgin Islands, licensed by the British Virgin Islands Financial Services Commission ')}{translate('(licence no.SIBA/L/18/1114);')} {translate(' Deriv (V) Ltd, 1276, Kumul Highway, Port Vila, Vanuatu, licensed and regulated by the Vanuatu Financial Services Commission; and Deriv (SVG) LLC, Hinds Buildings, Kingstown, St. Vincent and the Grenadines.')}
+
{translate('Deriv Limited — 13 Castle Street, St. Helier, JE2 3BT, Jersey — is the holding company for the above subsidiaries.')}
+
{translate('This website\'s services are not available in certain countries, including the USA, Canada, and Hong Kong, or to persons below 18.')}
+
+
+
{translate('CFDs are considered complex derivatives and may not be suitable for retail clients. CFDs are complex instruments and come with a high risk of losing money rapidly due to leverage. You should consider whether you understand how CFDs work and whether you can afford to take the high risk of losing your money. The products mentioned here may be affected by changes in currency exchange rates. If you invest in these products, you may lose some or all of your investment, and the value of your investment may fluctuate. You should never invest money that you cannot afford to lose and never trade with borrowed money.')}
+
{translate('Before trading in the complex financial products offered, please be sure to understand the risks involved and learn about ')}{translate('Secure and responsible trading.')}
+
+
+
+
+
+)
+
+export default Footer
\ No newline at end of file
diff --git a/src/indexPage/react-components/bot-landing/Hero.jsx b/src/indexPage/react-components/bot-landing/Hero.jsx
new file mode 100644
index 0000000000..a84f75cdac
--- /dev/null
+++ b/src/indexPage/react-components/bot-landing/Hero.jsx
@@ -0,0 +1,32 @@
+import React from 'react'
+import { translate } from '../../../common/i18n';
+
+const Hero = () => (
+
+
+
+
+
{translate('Binary Bot has a new home')}
+
+ {translate('We’ve been Binary.com for 2 decades and it’s time for an exciting new chapter. Your favourite bot builder, Binary Bot, is now on Deriv, our new home. Come take a peek.')}
+
+
+
+
+
+
+);
+
+export default Hero
\ No newline at end of file
diff --git a/src/indexPage/react-components/bot-landing/ModalComponent.jsx b/src/indexPage/react-components/bot-landing/ModalComponent.jsx
new file mode 100644
index 0000000000..a208721ea2
--- /dev/null
+++ b/src/indexPage/react-components/bot-landing/ModalComponent.jsx
@@ -0,0 +1,45 @@
+import React, { render } from 'react'
+import { set as setStorage, remove } from '../../../common/utils/storageManager';
+import { renderPopup, setTimeOutBanner, setTimeOutPopup, elements, timerForBanner } from '../../index';
+import { translate } from '../../../common/i18n';
+
+const setDueDateAgain = () => {
+ remove('setDueDateForBanner');
+ remove('setPopupToken');
+ setStorage('setDueDateForBanner', new Date().getTime() + 1000 * 120);
+ setStorage('setPopupToken', new Date().getTime() + 1000 * 60);
+ renderPopup('close');
+ clearTimeout(timerForBanner);
+ setTimeOutBanner();
+ setTimeOutPopup();
+}
+
+const renderBanner = () => {
+ const getqueryParameter = document.location.search;
+ const getDefaultPath = window.location.href.replace('/bot.html', getqueryParameter);
+ window.location.replace(getDefaultPath);
+ render( , document.getElementById('bot-landing-alert-popup'));
+ render( , document.getElementById('bot-landing'));
+ elements.map(elem => document.querySelector(elem).classList.add('hidden'));
+ document.getElementById('bot-landing').classList.remove('hidden');
+ document.getElementById('bot-main').classList.remove('hidden');
+ $('.barspinner').hide();
+}
+
+const ModalComponent = () => (
+
+
+
+
+
{translate('Use Binary Bot on Deriv, our new home')}
+
{translate('In 5 minutes, we’ll show you the benefits of trading Binary Bot on Deriv.If you ignore this message, we’ll remind you again in 3 weeks.')}
+
+
+)
+
+export default ModalComponent
\ No newline at end of file
diff --git a/src/indexPage/react-components/bot-landing/SwitchSection.jsx b/src/indexPage/react-components/bot-landing/SwitchSection.jsx
new file mode 100644
index 0000000000..4887d585c2
--- /dev/null
+++ b/src/indexPage/react-components/bot-landing/SwitchSection.jsx
@@ -0,0 +1,29 @@
+import React from 'react';
+import { translate } from '../../../common/i18n';
+import { getOAuthURLDeriv } from '../../../common/appId';
+
+const SwitchSection = () => (
+
+
+
+
+
+
+
{translate('It’s so easy to switch to Deriv')}
+
+ {translate('Just log in using your Binary.com credentials. No sign-up needed.')}
+
+
+
+
+
+);
+
+export default SwitchSection
\ No newline at end of file
diff --git a/src/indexPage/react-components/bot-landing/Translations.js b/src/indexPage/react-components/bot-landing/Translations.js
new file mode 100644
index 0000000000..d4e9191757
--- /dev/null
+++ b/src/indexPage/react-components/bot-landing/Translations.js
@@ -0,0 +1,124 @@
+import { translate } from '../../../common/i18n';
+
+export default {
+ carouselContentArray: [
+ {
+ title : translate('Where to find Binary Bot on Deriv'),
+ content : translate('On the Deriv homepage, hit Trade at the top of the page and choose Binary Bot.'),
+ action_text: translate('Try Binary Bot on Deriv'),
+ img : 'image/1a.webm',
+ },
+ {
+ title : translate('It’s the same Binary Bot you know and love'),
+ content : translate('Everything is exactly the way you like it.'),
+ action_text: translate('Try Binary Bot on Deriv'),
+ img : 'image/2a.webm',
+ },
+ {
+ title : translate('Bring your bots across seamlessly'),
+ content: translate(
+ 'Your strategies from Binary.com can be used on Deriv. Just load your XML files and get trading.'
+ ),
+ action_text: translate('Try Binary Bot on Deriv'),
+ img : 'image/3a.webm',
+ },
+ ],
+ carouselContentLeftArray: [
+ {
+ title : translate('7 trading platforms — old favourites and new ones, too'),
+ content: translate(
+ 'You’ll find Binary Bot and SmartTrader alongside new platforms like DBot and DTrader. Whatever your trading style, we’ve got the platform for you.'
+ ),
+ img: 'image/trading-platforms.svg',
+ },
+ {
+ title : translate('3 trade types'),
+ content: translate(
+ 'Trade CFDs, digital options, and multipliers, a new, exciting trade type that boosts your potential profits with limited risk.'
+ ),
+ img: 'image/trade-types.svg',
+ },
+ {
+ title : translate('6 market types'),
+ content: translate(
+ 'Expand your portfolio with a wide range of markets such as forex, stocks, cryptocurrencies, synthetics, and more.'
+ ),
+ img: 'image/market_types.svg',
+ },
+ ],
+
+ carouselContentRightArray: [
+ {
+ title : translate('Cryptocurrency deposits via fiat on-ramp'),
+ content: translate(
+ 'Make crypto deposits easily via exchange services such as Changelly, Banxa, and XanPool.'
+ ),
+ img: 'image/fiat-on-ramp.svg',
+ },
+ {
+ title : translate('Peer-to-peer deposits and withdrawals'),
+ content: translate(
+ 'Exchange your local currency with fellow traders to get funds in and out of your account with Deriv P2P.'
+ ),
+ img: 'image/peer-to-peer.svg',
+ },
+ {
+ title : translate('Learn with Deriv Academy'),
+ content: translate(
+ 'Enjoy complimentary articles and videos to help you learn the ropes of online trading.'
+ ),
+ img: 'image/deriv_academy.svg',
+ },
+ ],
+ carouselContentMobileArray: [
+ {
+ title : translate('7 trading platforms — old favourites and new ones, too'),
+ content: translate(
+ 'You’ll find Binary Bot and SmartTrader alongside new platforms like DBot and DTrader. Whatever your trading style, we’ve got the platform for you.'
+ ),
+ img: 'image/trading-platforms.svg',
+ },
+ {
+ title : translate('Cryptocurrency deposits via fiat on-ramp'),
+ content: translate(
+ 'Make crypto deposits easily via exchange services such as Changelly, Banxa, and XanPool.'
+ ),
+ img: 'image/fiat-on-ramp.svg',
+ },
+ {
+ title : translate('3 trade types'),
+ content: translate(
+ 'Trade CFDs, digital options, and multipliers, a new, exciting trade type that boosts your potential profits with limited risk.'
+ ),
+ img: 'image/trade-types.svg',
+ },
+ {
+ title : translate('Peer-to-peer deposits and withdrawals'),
+ content: translate(
+ 'Exchange your local currency with fellow traders to get funds in and out of your account with Deriv P2P.'
+ ),
+ img: 'image/peer-to-peer.svg',
+ },
+ {
+ title : translate('6 market types'),
+ content: translate(
+ 'Expand your portfolio with a wide range of markets such as forex, stocks, cryptocurrencies, synthetics, and more.'
+ ),
+ img: 'image/market_types.svg',
+ },
+ {
+ title : translate('Learn with Deriv Academy'),
+ content: translate(
+ 'Enjoy complimentary articles and videos to help you learn the ropes of online trading.'
+ ),
+ img: 'image/deriv_academy.svg',
+ },
+ ],
+ // TODO :- NEED TO EXPORT TEXT FROM TRANSLATONS.JS FILE
+ // Footer: [
+ // 'translate(\'In the EU, financial products are offered by Deriv Investments (Europe) Limited, W Business Centre, Level 3, Triq Dun Karm, Birkirkara BKR 9033, Malta, licensed in Malta(\')}{\'translate(\'licence no.IS / 70156\')} {translate(\') and regulated by the Malta Financial Services Authority under the Investments Services Act to provide investment services in the European Union.Authorised by the Financial Conduct Authority and with deemed variation of permission.Subject to regulation by the Financial Conduct Authority.The nature and extent of consumer protections may differ from those for firms based in the UK.Details of the Financial Services Contracts Regime, which allows EEA- based firms to operate in the UK for a limited period to carry on activities that are necessary for the performance of pre- existing contracts, are available on the Financial Conduct Authority’s website.\')',
+ // 'translate(\'Outside the EU, financial products are offered by the following companies: Deriv(FX) Ltd, F16, Level 1, Paragon Labuan, Jalan Tun Mustapha, 87000 Labuan, Malaysia, licensed by Labuan Financial Services Authority(\')}{translate(\'licence no.MB / 18 / 0024\')} {translate\') Deriv(BVI) Ltd, Kingston Chambers, P.O.Box 173, Road Town, Tortola, British Virgin Islands, licensed by the British Virgin Islands Financial Services Commission(\')}{translate(\'licence no.SIBA / L / 18 / 1114\')} {translate(\') Deriv(V) Ltd(\')}{translate(\'view licence\')} {translate(\'), 1276, Kumul Highway, Port Vila, Vanuatu, licensed and regulated by the Vanuatu Financial Services Commission; and Deriv(SVG) LLC, Hinds Buildings, Kingstown, St.Vincent and the Grenadines.\')',
+ // 'translate(\'Deriv Limited — 13 Castle Street, St.Helier, JE2 3BT, Jersey — is the holding company for the above subsidiaries.\')',
+ // 'translate(\'This website\'s services are not available in certain countries, including the USA, Canada, and Hong Kong, or to persons below 18.\')',
+ // ],
+};
diff --git a/src/indexPage/react-components/bot-landing/WaitSection.jsx b/src/indexPage/react-components/bot-landing/WaitSection.jsx
new file mode 100644
index 0000000000..4c809cae50
--- /dev/null
+++ b/src/indexPage/react-components/bot-landing/WaitSection.jsx
@@ -0,0 +1,24 @@
+import React from 'react';
+import { translate } from '../../../common/i18n';
+
+const WaitSection = () => (
+
+
+
+
{translate('Don’t wait')}
+
{translate('Future-proof your trading. Come over to Deriv now.')}
+
+
+
+
+
+
+
+
+)
+
+export default WaitSection
\ No newline at end of file
diff --git a/src/indexPage/react-components/bot-landing/index.js b/src/indexPage/react-components/bot-landing/index.js
new file mode 100644
index 0000000000..5ea0025fc8
--- /dev/null
+++ b/src/indexPage/react-components/bot-landing/index.js
@@ -0,0 +1,21 @@
+import React from 'react';
+import Hero from './Hero.jsx';
+import SwitchSection from './SwitchSection.jsx';
+import Carousel from './Carousel.jsx';
+import WaitSection from './WaitSection.jsx';
+import ChooseSection from './ChooseSection.jsx';
+import Footer from './Footer.jsx';
+
+// eslint-disable-next-line arrow-body-style
+const BotLanding = () => (
+
+
+
+
+
+
+
+
+);
+
+export default BotLanding;
diff --git a/src/indexPage/react-components/footer.jsx b/src/indexPage/react-components/footer.jsx
index a630d222e7..a2acb36f65 100644
--- a/src/indexPage/react-components/footer.jsx
+++ b/src/indexPage/react-components/footer.jsx
@@ -46,13 +46,13 @@ const Footer = () => (
{translate('In the EU, financial products are offered by Binary Investments (Europe) Ltd., W Business Centre, Level 3, Triq Dun Karm, Birkirkara, BKR 9033, Malta, regulated as a Category 3 Investment Services provider by the Malta Financial Services Authority ({$0}licence no. IS/70156{$1}).',
- [``, ' '])}
+ [``, ' '])}
{translate('Outside the EU, financial products are offered by Binary (SVG) Ltd, Hinds Building, Kingstown, St. Vincent and the Grenadines; Binary (V) Ltd, Govant Building, Port Vila, PO Box 1276, Vanuatu, regulated by the Vanuatu Financial Services Commission ({$0}view licence{$1}); Binary (BVI) Ltd, Kingston Chambers, P.O. Box 173, Road Town, Tortola, British Virgin Islands, regulated by the British Virgin Islands Financial Services Commission ({$2}licence no. SIBA/L/18/1114{$3}); and Binary (FX) Ltd., Lot No. F16, First Floor, Paragon Labuan, Jalan Tun Mustapha, 87000 Labuan, Malaysia, regulated by the Labuan Financial Services Authority to carry on a money-broking business ({$4}licence no. MB/18/0024{$5}).',
['', ' ',
- ``, ' ',
- ``, ' '])}
+ ``, ' ',
+ ``, ' '])}
{translate('This website\'s services are not made available in certain countries such as the USA, Canada, Hong Kong, Japan, or to persons under age 18.')}
@@ -106,11 +106,11 @@ const Footer = () => (
{translate('In the rest of the EU, Volatility Indices are offered by Binary (Europe) Ltd., W Business Centre, Level 3, Triq Dun Karm, Birkirkara, BKR 9033, Malta; licensed and regulated by (1) the Malta Gaming Authority in Malta (licence no. MGA/B2C/102/2000 issued on 01 August 2018), for UK clients by (2) the UK Gambling Commission (licence {$0}reference no: 39495{$1}), and for Irish clients by (3) the Revenue Commissioners in Ireland (Remote Bookmaker\'s Licence no. 1010285 issued on 1 July 2017). View complete {$2}Regulatory Information{$1}.',
- ['',
- ' ',
- ``
- ]
- )}
+ [' ',
+ ' ',
+ ``
+ ]
+ )}
@@ -119,7 +119,7 @@ const Footer = () => (
{translate('Binary.com is an award-winning online trading provider that helps its clients to trade on financial markets through binary options and CFDs. Trading binary options and CFDs on Volatility Indices is classified as a gambling activity. Remember that gambling can be addictive – please play responsibly. Learn more about {$0}Responsible Trading{$1}. Some products are not available in all countries. This website\'s services are not made available in certain countries such as the USA, Canada, Hong Kong, or to persons under age 18.',
- [``, ' ']
+ [``, ' ']
)}
diff --git a/static/.DS_Store b/static/.DS_Store
index 15a638e519..9de6c826db 100644
Binary files a/static/.DS_Store and b/static/.DS_Store differ
diff --git a/static/css/_landing.scss b/static/css/_landing.scss
new file mode 100644
index 0000000000..87be707e1d
--- /dev/null
+++ b/static/css/_landing.scss
@@ -0,0 +1,777 @@
+@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans&family=Inconsolata&family=Montserrat:ital,wght@0,900;1,700&family=Poppins&family=Sura&display=swap');
+
+$font-IBM: 'IBM Plex Sans',
+ sans-serif;
+$hero-BG : #08223d;
+$white :#fff;
+$header-color : #333333;
+
+//mixin setup
+@mixin for-size($size) {
+ @if $size==mobile {
+ @media (max-width: 1024px) {
+ @content;
+ }
+ }
+
+ @else if $size==desktop {
+ @media (max-width: 1080px) {
+ @content;
+ }
+ }
+}
+
+.section-container {
+ padding: 0 2rem;
+ margin: 0 auto;
+ max-width: 1400px;
+}
+
+.hero {
+ background: $hero-BG url(../image/BG-1.webp) no-repeat;
+ background-size: cover;
+
+ @include for-size(mobile) {
+ background: $hero-BG url(../image/MBG1.png) no-repeat;
+ background-size: cover;
+ }
+
+ &-inner {
+ display: flex;
+ align-items: center;
+ padding: calc(7rem + 5rem) 0px;
+
+ @include for-size(desktop) {
+ padding: calc(7rem + 5rem) 2rem;
+ }
+
+ @include for-size(mobile) {
+ flex-direction: column-reverse;
+ padding: 4rem 2rem;
+
+ .btn-group {
+ text-align: left;
+ }
+ }
+
+ &__content {
+ flex: 1 1 50%;
+
+ h1 {
+ color: #FFF;
+ margin: 2rem 2rem 2rem 0;
+ font: 700 5rem $font-IBM;
+
+ @include for-size(mobile) {
+ font: 700 3rem $font-IBM;
+ margin: 0 0 2rem 0;
+ }
+ }
+
+ h2 {
+ color: $white;
+ line-height: 40px;
+ margin-bottom: 2rem;
+ font: 400 2rem $font-IBM;
+
+ @include for-size(mobile) {
+ font: 400 1.5rem $font-IBM;
+ margin: 0 0 2.5rem 0;
+ }
+ }
+ }
+
+ &__placeholder {
+ flex: 1 1 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+
+ @include for-size(mobile) {
+ flex-direction: column;
+ }
+
+ img {
+ @include for-size(mobile) {
+ object-fit: contain;
+ width: 100%;
+ }
+ }
+ }
+
+ &__binary_logo {
+ display: none;
+ width: 14.75rem !important;
+ margin-bottom: 3rem;
+
+ @include for-size(mobile) {
+ display: block;
+ }
+ }
+ }
+}
+
+.l-btn {
+ height: 2.5rem;
+ border-radius: 0.25rem;
+ font: 700 0.875rem $font-IBM;
+ background-color: #C2C2C2;
+ color: #000;
+ outline: none;
+ border: none;
+ padding: 0 1rem;
+ cursor: pointer;
+ text-transform: none;
+
+ &.primary {
+ background-color: #2E8836;
+ color: $white;
+
+ &:hover {
+ background-color: #246d2a;
+ color: $white;
+ }
+ }
+
+ &.danger {
+ background: #FF444F;
+ color: $white;
+
+ &:hover {
+ background-color: #cd353e;
+ color: $white;
+ }
+ }
+
+ &:hover {
+ background-color: #979797;
+ color: #000;
+ }
+}
+
+.btn-group {
+ button {
+ margin-right: 1rem;
+ }
+
+ @include for-size(mobile) {
+ text-align: center;
+ margin-bottom: 2.4rem;
+ }
+}
+
+.switch {
+ background: url(../image/sectionTwoLandingBackground.png) no-repeat;
+ background-size: cover;
+
+ &-inner {
+ display: flex;
+ align-items: center;
+
+
+ @include for-size(desktop) {
+ padding: 0 2rem;
+ }
+
+ @include for-size(mobile) {
+ padding: 0;
+ flex-direction: column;
+ }
+
+ &__placeholder {
+ img {
+ @include for-size(mobile) {
+ object-fit: contain;
+ width: 100%;
+ }
+ }
+ }
+
+ &__content {
+ h1 {
+ margin-bottom: 1.5rem;
+ font: 700 3rem $font-IBM;
+ line-height: 4rem;
+ color: $header-color;
+
+ @include for-size(mobile) {
+ font: 700 1.5rem $font-IBM;
+ text-align: center;
+ padding: 0 2rem;
+ }
+ }
+
+ h2 {
+ margin-bottom: 1.5rem;
+ font: 400 2rem $font-IBM;
+ line-height: 3rem;
+ color: $header-color;
+
+ @include for-size(mobile) {
+ font: 400 1.2rem $font-IBM;
+ text-align: center;
+ padding: 0 2rem;
+ }
+ }
+
+ .l-btn.transparent {
+ background-color: transparent;
+ border: solid 2px #999999;
+ text-transform: none;
+
+ &:hover {
+ background-color: #C2C2C2;
+ }
+ }
+ }
+ }
+
+
+
+}
+
+.landing_carousel {
+ display: flex !important;
+ align-items: center;
+ justify-content: center;
+ display: flex !important;
+ margin: 0px auto;
+ padding: 5rem 0;
+
+ @include for-size(mobile) {
+ display: flex !important;
+ flex-direction: column-reverse;
+ text-align: center;
+ }
+
+ &_content {
+ h1 {
+ font: 700 3rem $font-IBM;
+ line-height: 4rem;
+ margin-bottom: 2rem;
+ color: $header-color;
+
+ @include for-size(mobile) {
+ font: 700 1.5rem $font-IBM;
+ margin-bottom: 1rem;
+ }
+ }
+
+ h2 {
+ font: 400 2rem $font-IBM;
+ line-height: 3rem;
+ margin-bottom: 2rem;
+ color: $header-color;
+
+ @include for-size(mobile) {
+ font: 400 1rem $font-IBM;
+ margin-bottom: 1rem;
+ }
+ }
+ }
+
+ &_placeholder {
+ width: 100%;
+ align-items: center;
+ justify-content: center;
+ display: flex;
+
+ @include for-size(mobile) {
+ display: flex;
+ /* align-items: center; */
+ justify-content: center;
+ }
+
+ img {
+ @include for-size(mobile) {
+ object-fit: contain;
+ width: 100%;
+ }
+
+ }
+ }
+}
+
+.choose-wrapper {
+ background: #F2F3F4;
+
+ &-inner {
+ padding: 3rem 0;
+
+ &-title {
+ color: $header-color;
+ text-align: center;
+ font: 700 2rem $font-IBM;
+ line-height: 2rem;
+ margin-bottom: 4rem;
+ }
+
+ &-section-content {
+ display: flex;
+ color: $header-color;
+
+ @include for-size(mobile) {
+ flex-direction: column;
+ padding: 0 2rem;
+ }
+ }
+
+
+
+ &-right,
+ &-left {
+ .mobilecontent {
+ display: none;
+ }
+
+ .desktopcontent {
+ display: block;
+ }
+
+ width: 50%;
+ padding: 0 10rem;
+
+ @include for-size(mobile) {
+ width: 100%;
+ padding: unset;
+
+ .desktopcontent {
+ display: none;
+ }
+
+ .mobilecontent {
+ display: block;
+ }
+ }
+
+
+
+ &-content {
+ display: flex;
+ margin-right: 2rem;
+ min-height: 11.25rem;
+ margin-bottom: 1rem;
+
+ &-placeholder {
+ margin-right: 2rem;
+ }
+
+ &-description {
+ margin-right: 2rem;
+ }
+
+ @include for-size(mobile) {
+ min-height: unset;
+ margin-bottom: 1.3rem;
+ }
+
+ h1 {
+ margin-top: 0;
+ font: 700 1.6rem $font-IBM;
+ color: $header-color;
+
+ @include for-size(mobile) {
+ font: 700 1.3rem $font-IBM;
+ margin-bottom: 0;
+ }
+ }
+
+ h2 {
+ font: 400 1.2rem $font-IBM;
+ color: $header-color;
+
+ @include for-size(mobile) {
+ font: 400 1rem $font-IBM;
+ margin-bottom: 0;
+ }
+ }
+
+ }
+ }
+
+ &-right {
+ padding-left: 0;
+ }
+
+ &-left {
+ padding-right: 0;
+ }
+ }
+}
+
+.carousel-wrapper {
+ margin: 0 auto;
+
+ .slick-slider {
+ padding: 0 2rem;
+
+ @include for-size(mobile) {
+ padding: 0 3rem;
+ }
+
+ .slick-arrow {
+ &.slick-next {
+ transform: rotate(180deg);
+ top: 56%;
+
+ @include for-size(mobile) {
+ top: 54%;
+
+ .slick-next {
+ right: 0;
+ }
+
+ .slick-prev {
+ left: 0;
+ }
+ }
+ }
+ }
+ }
+
+ .slick-dots {
+ bottom: 0;
+
+ @include for-size(mobile) {
+ left: 0;
+ }
+
+ }
+
+ .placeholder-outer {
+ position: relative;
+ width: 100%;
+ height: 20rem;
+
+ @include for-size(mobile) {
+ height: 15rem;
+ }
+
+ display: flex;
+ justify-content: center;
+ align-items: center;
+
+ .caousel_laptop {
+ position: absolute;
+ top: 0;
+ z-index: 1;
+
+ &_holder {
+ position: absolute;
+ top: 0;
+ z-index: 2;
+ width: 56%;
+ top: 45px;
+ height: 200px;
+
+ @include for-size(mobile) {
+ top: -10px;
+ width: 72%;
+ }
+ }
+ }
+
+ }
+}
+
+
+.arrow {
+ &.right {
+ transform: rotate(180deg);
+ }
+}
+
+.wait-wrapper {
+ background: url('../image/pattern.png') no-repeat right;
+ background-size: 65% 100%;
+ min-height: 18.75rem;
+ position: relative;
+
+ @include for-size(mobile) {
+ min-height: 43.75rem;
+ background-image: none;
+ }
+
+ &-inner {
+ display: flex;
+ margin: 0px auto;
+ justify-content: space-between;
+ padding: 0;
+
+ @include for-size(mobile) {
+ justify-content: center;
+ text-align: center;
+ flex-direction: column;
+ }
+
+ &-content {
+ h1 {
+ font: 700 3rem $font-IBM;
+ color: $header-color;
+ margin-bottom: 0.5rem;
+ }
+
+ h2 {
+ margin-top: 0.5rem;
+ font: 400 1rem $font-IBM;
+ margin-bottom: 2rem;
+ color: $header-color;
+ }
+ }
+
+ &-placeholder {
+ @include for-size(mobile) {
+ background: url('../image/Dont_Wait_Mobile.png') no-repeat right;
+ background-size: 100% 100%;
+ min-height: 28.125rem;
+ }
+
+ img {
+ position: absolute;
+ right: 20%;
+ bottom: 0;
+
+ @include for-size(mobile) {
+ bottom: 0;
+ left: 0;
+ right: 0;
+ top: unset;
+ margin: 0 auto;
+ }
+ }
+ }
+ }
+}
+
+.about-trade-wrapper {
+ background-color: #F8FAFB;
+ padding: 0;
+
+ &-inner {
+ padding: 3rem 0;
+
+ @include for-size(mobile) {
+ padding: 2rem;
+ }
+
+ &-social-icons-wrapper {
+ display: flex;
+ justify-content: space-between;
+
+ @include for-size(mobile) {
+ text-align: center;
+ flex-direction: column;
+ }
+ }
+
+
+ img {
+ margin-right: 1rem;
+ }
+
+ .social-media-icons-footer img {
+ margin-right: 1rem;
+
+ @include for-size(mobile) {
+ margin-top: 1rem
+ }
+ }
+
+ &-social-icons-mobile {
+ display: none;
+
+ @include for-size(mobile) {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 1.4rem 0;
+
+ img {
+ margin-right: 1rem;
+ }
+ }
+
+ }
+
+ &-info {
+ &-location {
+ font: 400 1rem $font-IBM;
+ color: #333;
+
+ a {
+ color: #333333 !important;
+ }
+
+ @include for-size(mobile) {
+ margin-bottom: 1.5rem;
+ }
+
+ }
+
+ &-trade {
+ padding: 1rem;
+ background: rgba(87, 122, 146, 0.04);
+ font: 400 1rem $font-IBM;
+ box-shadow: inset 4px 0px 0px rgba(255, 68, 79, 0.64);
+ color: #333;
+
+ a {
+ color: #333333
+ }
+
+ @include for-size(mobile) {
+ box-shadow: inset 0px 4px 0px rgba(255, 68, 79, 0.64);
+ }
+ }
+ }
+
+ }
+
+
+
+ &-deriv-icons {
+ text-align: left;
+ padding-bottom: 2.4rem;
+
+ @include for-size(mobile) {
+ box-shadow: inset 0px -2px 0px rgba(51, 51, 51, 0.08);
+ }
+ }
+
+ &-social-icons {
+ display: block;
+
+ @include for-size(mobile) {
+ display: none;
+ }
+
+ @include for-size(mobile) {
+ text-align: left;
+ }
+ }
+
+
+}
+
+
+.bot-gif-placeholder {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex: 1 1 50%;
+ height: 100%;
+
+ &__background {
+ width: 84%;
+ position: relative;
+
+ img {
+ height: 100%;
+ width: 100%;
+ object-fit: contain;
+ }
+
+ &__overlay {
+ position: absolute;
+ top: 0;
+ width: 72%;
+ transform: translate(20.7%, 16%);
+
+ video {
+ height: 100%;
+ width: 100%;
+ object-fit: contain;
+ }
+ }
+ }
+}
+
+.hidden {
+ display: none !important;
+}
+
+.bot-landing-alert {
+ &-popup {
+ display: none;
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ background: rgba(0, 0, 0, 0.72);
+ top: 0;
+ z-index: 1000;
+
+ &.open {
+ display: block !important;
+ }
+ }
+
+ &-header {
+ text-align: end;
+ margin-bottom: 1rem;
+
+ img {
+ cursor: pointer;
+ }
+ }
+
+ &-para {
+ margin-bottom: 1.5rem;
+ }
+
+ &-title {
+ margin-top: 0;
+ margin-bottom: 1rem;
+ }
+
+ &-draggable-dialog {
+ border-radius: 8px;
+ min-height: 250px;
+ background: white;
+ position: absolute;
+ width: 42rem;
+ margin: 0 auto;
+ padding: 2rem;
+ z-index: 1000;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+
+ &.open {
+ display: block !important;
+ }
+ }
+
+ &-btn-group {
+ text-align: center;
+
+ .default {
+ background: #C2C2C2;
+ margin-right: 1rem;
+
+ :hover {
+ background-color: #d8d6d6;
+ }
+ }
+ }
+
+}
+
+.mobilecontent {
+ display: none;
+}
+
+.desktopcontent {
+ display: block;
+}
+
+
+@include for-size(mobile) {
+ .desktopcontent {
+ display: none;
+ }
+
+ .mobilecontent {
+ display: block;
+ }
+}
+
diff --git a/static/css/bot.scss b/static/css/bot.scss
index cf334faed2..893e700ed1 100644
--- a/static/css/bot.scss
+++ b/static/css/bot.scss
@@ -10,6 +10,7 @@
@import 'reality-check';
@import 'tour';
@import 'elevio';
+@import 'landing';
* {
box-sizing: border-box;
diff --git a/static/css/index.scss b/static/css/index.scss
index c8512cc868..b6829fa464 100644
--- a/static/css/index.scss
+++ b/static/css/index.scss
@@ -146,4 +146,4 @@ ul.bullet {
p {
margin: 9px auto !important;
}
-}
+}
\ No newline at end of file
diff --git a/static/font/IBMPlexSans-Regular.ttf b/static/font/IBMPlexSans-Regular.ttf
new file mode 100644
index 0000000000..b5819647e1
Binary files /dev/null and b/static/font/IBMPlexSans-Regular.ttf differ
diff --git a/static/image/.DS_Store b/static/image/.DS_Store
deleted file mode 100644
index 895c9b6a2e..0000000000
Binary files a/static/image/.DS_Store and /dev/null differ
diff --git a/static/image/1a.webm b/static/image/1a.webm
new file mode 100644
index 0000000000..f807cb5754
Binary files /dev/null and b/static/image/1a.webm differ
diff --git a/static/image/2a.webm b/static/image/2a.webm
new file mode 100644
index 0000000000..ac4bc3cc34
Binary files /dev/null and b/static/image/2a.webm differ
diff --git a/static/image/3a.webm b/static/image/3a.webm
new file mode 100644
index 0000000000..034a440b92
Binary files /dev/null and b/static/image/3a.webm differ
diff --git a/static/image/BG-1.webp b/static/image/BG-1.webp
new file mode 100644
index 0000000000..0901016aa3
Binary files /dev/null and b/static/image/BG-1.webp differ
diff --git a/static/image/BG_Bot-to-deriv-1.webp b/static/image/BG_Bot-to-deriv-1.webp
new file mode 100644
index 0000000000..bf24fbea16
Binary files /dev/null and b/static/image/BG_Bot-to-deriv-1.webp differ
diff --git a/static/image/Dont_Wait_Mobile.png b/static/image/Dont_Wait_Mobile.png
new file mode 100644
index 0000000000..6e14730fa5
Binary files /dev/null and b/static/image/Dont_Wait_Mobile.png differ
diff --git a/static/image/MBG1.png b/static/image/MBG1.png
new file mode 100644
index 0000000000..cc13a61914
Binary files /dev/null and b/static/image/MBG1.png differ
diff --git a/static/image/Mask.svg b/static/image/Mask.svg
new file mode 100644
index 0000000000..23aa81f5f4
--- /dev/null
+++ b/static/image/Mask.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/static/image/binary.svg b/static/image/binary.svg
new file mode 100644
index 0000000000..5804ad8d7a
--- /dev/null
+++ b/static/image/binary.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/image/carousel_arrow.svg b/static/image/carousel_arrow.svg
new file mode 100644
index 0000000000..8a2abb5692
--- /dev/null
+++ b/static/image/carousel_arrow.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/static/image/close_icon.svg b/static/image/close_icon.svg
new file mode 100644
index 0000000000..3e2c82ef37
--- /dev/null
+++ b/static/image/close_icon.svg
@@ -0,0 +1,3 @@
+
+
+
diff --git a/static/image/derivLogo.png b/static/image/derivLogo.png
new file mode 100644
index 0000000000..a2e84baee9
Binary files /dev/null and b/static/image/derivLogo.png differ
diff --git a/static/image/deriv_academy.svg b/static/image/deriv_academy.svg
new file mode 100644
index 0000000000..f082d35152
--- /dev/null
+++ b/static/image/deriv_academy.svg
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/static/image/dont-wait-image.png b/static/image/dont-wait-image.png
new file mode 100644
index 0000000000..ca473f23c7
Binary files /dev/null and b/static/image/dont-wait-image.png differ
diff --git a/static/image/dont-wait-image.svg b/static/image/dont-wait-image.svg
new file mode 100644
index 0000000000..a9cabe81ee
--- /dev/null
+++ b/static/image/dont-wait-image.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/static/image/facebook.svg b/static/image/facebook.svg
new file mode 100644
index 0000000000..f14050c028
--- /dev/null
+++ b/static/image/facebook.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/static/image/fiat-on-ramp.svg b/static/image/fiat-on-ramp.svg
new file mode 100644
index 0000000000..b74def3add
--- /dev/null
+++ b/static/image/fiat-on-ramp.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/static/image/footerLogos.svg b/static/image/footerLogos.svg
new file mode 100644
index 0000000000..797219b0f5
--- /dev/null
+++ b/static/image/footerLogos.svg
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/image/instagram.svg b/static/image/instagram.svg
new file mode 100644
index 0000000000..31e60ede62
--- /dev/null
+++ b/static/image/instagram.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/static/image/laptop-1.webp b/static/image/laptop-1.webp
new file mode 100644
index 0000000000..028356b7db
Binary files /dev/null and b/static/image/laptop-1.webp differ
diff --git a/static/image/laptop_carousel.webp b/static/image/laptop_carousel.webp
new file mode 100644
index 0000000000..b21e40d2a6
Binary files /dev/null and b/static/image/laptop_carousel.webp differ
diff --git a/static/image/linkedin.svg b/static/image/linkedin.svg
new file mode 100644
index 0000000000..724dbe71d9
--- /dev/null
+++ b/static/image/linkedin.svg
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/static/image/market_types.svg b/static/image/market_types.svg
new file mode 100644
index 0000000000..5e130ae4ef
--- /dev/null
+++ b/static/image/market_types.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/static/image/pattern.png b/static/image/pattern.png
new file mode 100644
index 0000000000..601b0f76eb
Binary files /dev/null and b/static/image/pattern.png differ
diff --git a/static/image/peer-to-peer.svg b/static/image/peer-to-peer.svg
new file mode 100644
index 0000000000..fc086742cb
--- /dev/null
+++ b/static/image/peer-to-peer.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/static/image/sectionTwoLandingBackground.png b/static/image/sectionTwoLandingBackground.png
new file mode 100644
index 0000000000..f5d98482a0
Binary files /dev/null and b/static/image/sectionTwoLandingBackground.png differ
diff --git a/static/image/sectionTwoLandingImages.png b/static/image/sectionTwoLandingImages.png
new file mode 100644
index 0000000000..1d3605a804
Binary files /dev/null and b/static/image/sectionTwoLandingImages.png differ
diff --git a/static/image/trade-types.svg b/static/image/trade-types.svg
new file mode 100644
index 0000000000..7b80753020
--- /dev/null
+++ b/static/image/trade-types.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/static/image/trading-platforms.svg b/static/image/trading-platforms.svg
new file mode 100644
index 0000000000..b938581be0
--- /dev/null
+++ b/static/image/trading-platforms.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/static/image/twitter.svg b/static/image/twitter.svg
new file mode 100644
index 0000000000..36b4e68b87
--- /dev/null
+++ b/static/image/twitter.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/static/image/videoCarousel.mp4 b/static/image/videoCarousel.mp4
new file mode 100644
index 0000000000..fac28f11c7
Binary files /dev/null and b/static/image/videoCarousel.mp4 differ
diff --git a/templates/bot.mustache b/templates/bot.mustache
index 4f7ac827b3..297c7681bc 100644
--- a/templates/bot.mustache
+++ b/templates/bot.mustache
@@ -10,6 +10,7 @@
+
@@ -20,18 +21,22 @@
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+