From b80ab2cbb4505163188eb8e65c9ef8177fc5c0f7 Mon Sep 17 00:00:00 2001 From: McSam Date: Mon, 5 Aug 2019 15:04:07 +0800 Subject: [PATCH 01/12] fix page not load when random text pass to strategy parameter --- src/botPage/view/blockly/index.js | 34 ++++++++++++++++++------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 9bf3a102b3..8382792664 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -266,20 +266,26 @@ export default class _Blockly { const defaultStrat = parseQueryString().strategy; const xmlFile = defaultStrat ? `xml/${defaultStrat}.xml` : 'xml/main.xml'; - $.get(xmlFile, main => { - repaintDefaultColours(); - overrideBlocklyDefaultShape(); - this.blocksXmlStr = Blockly.Xml.domToPrettyText(main); - Blockly.Xml.domToWorkspace(main.getElementsByTagName('xml')[0], workspace); - this.zoomOnPlusMinus(); - disposeBlocksWithLoaders(); - setTimeout(() => { - setBeforeUnload(true); - Blockly.mainWorkspace.cleanUp(); - Blockly.mainWorkspace.clearUndo(); - }, 0); - resolve(); - }); + const getFile = xml => { + $.get(xml, main => { + repaintDefaultColours(); + overrideBlocklyDefaultShape(); + this.blocksXmlStr = Blockly.Xml.domToPrettyText(main); + Blockly.Xml.domToWorkspace(main.getElementsByTagName('xml')[0], workspace); + this.zoomOnPlusMinus(); + disposeBlocksWithLoaders(); + setTimeout(() => { + setBeforeUnload(true); + Blockly.mainWorkspace.cleanUp(); + Blockly.mainWorkspace.clearUndo(); + }, 0); + resolve(); + }).catch(() => { + getFile('xml/main.xml'); + }); + }; + + getFile(xmlFile); }); }); }); From e5694df0b70f79bdb88d2c78c7b684772595e1b3 Mon Sep 17 00:00:00 2001 From: McSam Date: Wed, 7 Aug 2019 18:15:14 +0800 Subject: [PATCH 02/12] resolve changes --- src/botPage/view/blockly/index.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 8382792664..7c36d3aa45 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -279,9 +279,18 @@ export default class _Blockly { Blockly.mainWorkspace.cleanUp(); Blockly.mainWorkspace.clearUndo(); }, 0); + + localStorage.setItem('previousStrat', xml); resolve(); }).catch(() => { - getFile('xml/main.xml'); + const previousStrat = localStorage.getItem('previousStrat') || 'xml/main.xml'; + getFile(previousStrat); + + globalObserver.emit('Notify', { + className: 'warn', + message : translate('Invalid link'), + position : 'right', + }); }); }; From 9c2c6b047f166551576ae823b41a5a81826288fa Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 8 Aug 2019 10:06:44 +0800 Subject: [PATCH 03/12] resolve changes --- src/botPage/view/blockly/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 7c36d3aa45..051f6dcdfa 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -288,7 +288,7 @@ export default class _Blockly { globalObserver.emit('Notify', { className: 'warn', - message : translate('Invalid link'), + message : translate('The strategy you tried to load is invalid'), position : 'right', }); }); From 42d99f55ffe62a22282701f6e814788ba1ad65a4 Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 15 Aug 2019 15:24:46 +0800 Subject: [PATCH 04/12] fix reset to main xml --- src/botPage/view/blockly/index.js | 55 +++++++++++++------------------ src/botPage/view/blockly/utils.js | 6 ++++ 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 051f6dcdfa..c1c4abe7c1 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -14,6 +14,7 @@ import { removeUnavailableMarkets, strategyHasValidTradeTypeCategory, cleanBeforeExport, + importFile, } from './utils'; import Interpreter from '../../bot/Interpreter'; import { createErrorAndEmit } from '../../common/error'; @@ -266,35 +267,20 @@ export default class _Blockly { const defaultStrat = parseQueryString().strategy; const xmlFile = defaultStrat ? `xml/${defaultStrat}.xml` : 'xml/main.xml'; - const getFile = xml => { - $.get(xml, main => { - repaintDefaultColours(); - overrideBlocklyDefaultShape(); - this.blocksXmlStr = Blockly.Xml.domToPrettyText(main); - Blockly.Xml.domToWorkspace(main.getElementsByTagName('xml')[0], workspace); - this.zoomOnPlusMinus(); - disposeBlocksWithLoaders(); - setTimeout(() => { - setBeforeUnload(true); - Blockly.mainWorkspace.cleanUp(); - Blockly.mainWorkspace.clearUndo(); - }, 0); - - localStorage.setItem('previousStrat', xml); - resolve(); - }).catch(() => { - const previousStrat = localStorage.getItem('previousStrat') || 'xml/main.xml'; - getFile(previousStrat); - - globalObserver.emit('Notify', { - className: 'warn', - message : translate('The strategy you tried to load is invalid'), - position : 'right', - }); - }); - }; - - getFile(xmlFile); + importFile(xmlFile).then(dom => { + repaintDefaultColours(); + overrideBlocklyDefaultShape(); + this.blocksXmlStr = Blockly.Xml.domToPrettyText(dom); + Blockly.Xml.domToWorkspace(dom.getElementsByTagName('xml')[0], workspace); + this.zoomOnPlusMinus(); + disposeBlocksWithLoaders(); + setTimeout(() => { + setBeforeUnload(true); + Blockly.mainWorkspace.cleanUp(); + Blockly.mainWorkspace.clearUndo(); + }, 0); + resolve(); + }); }); }); }); @@ -309,10 +295,13 @@ export default class _Blockly { } } resetWorkspace() { - Blockly.Events.setGroup('reset'); - Blockly.mainWorkspace.clear(); - Blockly.Xml.domToWorkspace(Blockly.Xml.textToDom(this.blocksXmlStr), Blockly.mainWorkspace); - Blockly.Events.setGroup(false); + importFile('xml/main.xml').then(dom => { + Blockly.Events.setGroup('reset'); + Blockly.mainWorkspace.clear(); + Blockly.Xml.domToWorkspace(dom.getElementsByTagName('xml')[0], Blockly.mainWorkspace); + Blockly.Events.setGroup(false); + this.cleanUp(); + }); } /* eslint-disable class-methods-use-this */ cleanUp() { diff --git a/src/botPage/view/blockly/utils.js b/src/botPage/view/blockly/utils.js index cacb8aa752..8cfacd018f 100644 --- a/src/botPage/view/blockly/utils.js +++ b/src/botPage/view/blockly/utils.js @@ -506,3 +506,9 @@ export const cleanBeforeExport = xml => { } }); }; + +export const importFile = xml => new Promise(resolve => { + $.get(xml, dom => { + resolve(dom); + }); +}); From 8fe83a2f9cd10924701f83303a61629bcd64a01f Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 15 Aug 2019 17:29:32 +0800 Subject: [PATCH 05/12] fix previous strat no loaded --- src/botPage/view/View.js | 12 ++------- src/botPage/view/blockly/index.js | 43 +++++++++++++++++++------------ src/botPage/view/blockly/utils.js | 26 ++++++++++++++++--- 3 files changed, 51 insertions(+), 30 deletions(-) diff --git a/src/botPage/view/View.js b/src/botPage/view/View.js index 01fbc666f8..654fc9314f 100644 --- a/src/botPage/view/View.js +++ b/src/botPage/view/View.js @@ -92,14 +92,6 @@ const chart = new Chart(api); const tradingView = new TradingView(); -const setBeforeUnload = off => { - if (off) { - window.onbeforeunload = null; - } else { - window.onbeforeunload = () => 'You have some unsaved blocks, do you want to save them before you exit?'; - } -}; - const showRealityCheck = () => { $('.blocker').show(); $('.reality-check').show(); @@ -474,7 +466,7 @@ export default class View { $('#toggleHeaderButton').click(() => this.showHeader($('#header').is(':hidden'))); $('#logout, #toolbox-logout').click(() => { - setBeforeUnload(true); + saveBeforeUnload(true); logout(); hideRealityCheck(); }); @@ -612,7 +604,7 @@ export default class View { $('#login, #toolbox-login') .bind('click.login', () => { - setBeforeUnload(true); + saveBeforeUnload(true); document.location = getOAuthURL(); }) .text(translate('Log in')); diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index c1c4abe7c1..243383d725 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -15,6 +15,7 @@ import { strategyHasValidTradeTypeCategory, cleanBeforeExport, importFile, + saveBeforeUnload, } from './utils'; import Interpreter from '../../bot/Interpreter'; import { createErrorAndEmit } from '../../common/error'; @@ -49,7 +50,7 @@ const disableStrayBlocks = () => { }; const disposeBlocksWithLoaders = () => { Blockly.mainWorkspace.addChangeListener(ev => { - setBeforeUnload(); + saveBeforeUnload(); if (ev.type === 'delete' && ev.oldXml.getAttribute('type') === 'loader' && ev.group !== 'undo') { deleteBlocksLoadedBy(ev.blockId, ev.group); } @@ -267,20 +268,30 @@ export default class _Blockly { const defaultStrat = parseQueryString().strategy; const xmlFile = defaultStrat ? `xml/${defaultStrat}.xml` : 'xml/main.xml'; - importFile(xmlFile).then(dom => { - repaintDefaultColours(); - overrideBlocklyDefaultShape(); - this.blocksXmlStr = Blockly.Xml.domToPrettyText(dom); - Blockly.Xml.domToWorkspace(dom.getElementsByTagName('xml')[0], workspace); - this.zoomOnPlusMinus(); - disposeBlocksWithLoaders(); - setTimeout(() => { - setBeforeUnload(true); - Blockly.mainWorkspace.cleanUp(); - Blockly.mainWorkspace.clearUndo(); - }, 0); - resolve(); - }); + const getFile = xml => { + importFile(xml) + .then(dom => { + repaintDefaultColours(); + overrideBlocklyDefaultShape(); + this.blocksXmlStr = Blockly.Xml.domToPrettyText(dom); + Blockly.Xml.domToWorkspace(dom.getElementsByTagName('xml')[0], workspace); + this.zoomOnPlusMinus(); + disposeBlocksWithLoaders(); + setTimeout(() => { + saveBeforeUnload(true); + Blockly.mainWorkspace.cleanUp(); + Blockly.mainWorkspace.clearUndo(); + }, 0); + + localStorage.setItem('previousStrat', xml); + resolve(); + }) + .catch(xml => { + getFile(xml); + }); + }; + + getFile(xmlFile); }); }); }); @@ -376,7 +387,7 @@ export default class _Blockly { save(arg) { const { filename, collection } = arg; - setBeforeUnload(true); + saveBeforeUnload(true); const xml = Blockly.Xml.workspaceToDom(Blockly.mainWorkspace); cleanBeforeExport(xml); diff --git a/src/botPage/view/blockly/utils.js b/src/botPage/view/blockly/utils.js index 8cfacd018f..ada51702f3 100644 --- a/src/botPage/view/blockly/utils.js +++ b/src/botPage/view/blockly/utils.js @@ -507,8 +507,26 @@ export const cleanBeforeExport = xml => { }); }; -export const importFile = xml => new Promise(resolve => { - $.get(xml, dom => { - resolve(dom); +export const importFile = xml => + new Promise((resolve, reject) => { + $.get(xml, dom => { + resolve(dom); + }).catch(() => { + const previousStrat = localStorage.getItem('previousStrat') || 'xml/main.xml'; + reject(previousStrat); + + globalObserver.emit('Notify', { + className: 'warn', + message : translate('The strategy you tried to load is invalid'), + position : 'right', + }); + }); }); -}); + +export const saveBeforeUnload = off => { + if (off) { + window.onbeforeunload = null; + } else { + window.onbeforeunload = () => 'You have some unsaved blocks, do you want to save them before you exit?'; + } +}; From 989c8dcda347e97b11ec98a00ac5fd89a1ec6379 Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 15 Aug 2019 17:38:31 +0800 Subject: [PATCH 06/12] delete unused function --- src/botPage/view/blockly/index.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 243383d725..1180f14e20 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -26,14 +26,6 @@ import { showDialog } from '../../bot/tools'; import GTM from '../../../common/gtm'; import { parseQueryString } from '../../../common/utils/tools'; -const setBeforeUnload = off => { - if (off) { - window.onbeforeunload = null; - } else { - window.onbeforeunload = () => 'You have some unsaved blocks, do you want to save them before you exit?'; - } -}; - const disableStrayBlocks = () => { const topBlocks = Blockly.mainWorkspace.getTopBlocks(); topBlocks.forEach(block => { From e3a17c1fc7e3e66f1ee89e54b1d245e3db87fdfb Mon Sep 17 00:00:00 2001 From: McSam Date: Thu, 15 Aug 2019 17:58:44 +0800 Subject: [PATCH 07/12] fix import --- src/botPage/view/View.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/botPage/view/View.js b/src/botPage/view/View.js index 654fc9314f..515a52d03f 100644 --- a/src/botPage/view/View.js +++ b/src/botPage/view/View.js @@ -40,6 +40,7 @@ import { } from '../../common/utils/storageManager'; import { isProduction } from '../../common/utils/tools'; import GTM from '../../common/gtm'; +import { saveBeforeUnload } from './blockly/utils'; let realityCheckTimeout; @@ -466,7 +467,7 @@ export default class View { $('#toggleHeaderButton').click(() => this.showHeader($('#header').is(':hidden'))); $('#logout, #toolbox-logout').click(() => { - saveBeforeUnload(true); + saveBeforeUnload(); logout(); hideRealityCheck(); }); From 8b8929f7758dcd805fdb84265e3a22556a985730 Mon Sep 17 00:00:00 2001 From: McSam Date: Mon, 19 Aug 2019 15:35:32 +0800 Subject: [PATCH 08/12] load previous strat if reload --- src/botPage/view/blockly/index.js | 38 ++++++++++++++++++------------- src/botPage/view/blockly/utils.js | 9 +++++--- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 1180f14e20..c7d368b7ac 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -214,7 +214,6 @@ const repaintDefaultColours = () => { export default class _Blockly { constructor() { - this.blocksXmlStr = ''; this.generatedJs = ''; // eslint-disable-next-line no-underscore-dangle Blockly.WorkspaceSvg.prototype.preloadAudio_ = () => {}; // https://github.com/google/blockly/issues/299 @@ -260,26 +259,33 @@ export default class _Blockly { const defaultStrat = parseQueryString().strategy; const xmlFile = defaultStrat ? `xml/${defaultStrat}.xml` : 'xml/main.xml'; + const loadDomToWorkspace = dom => { + repaintDefaultColours(); + overrideBlocklyDefaultShape(); + Blockly.Xml.domToWorkspace(dom, workspace); + this.zoomOnPlusMinus(); + disposeBlocksWithLoaders(); + setTimeout(() => { + saveBeforeUnload(true); + Blockly.mainWorkspace.cleanUp(); + Blockly.mainWorkspace.clearUndo(); + }, 0); + }; + const getFile = xml => { importFile(xml) .then(dom => { - repaintDefaultColours(); - overrideBlocklyDefaultShape(); - this.blocksXmlStr = Blockly.Xml.domToPrettyText(dom); - Blockly.Xml.domToWorkspace(dom.getElementsByTagName('xml')[0], workspace); - this.zoomOnPlusMinus(); - disposeBlocksWithLoaders(); - setTimeout(() => { - saveBeforeUnload(true); - Blockly.mainWorkspace.cleanUp(); - Blockly.mainWorkspace.clearUndo(); - }, 0); - - localStorage.setItem('previousStrat', xml); + loadDomToWorkspace(dom.getElementsByTagName('xml')[0]); resolve(); }) - .catch(xml => { - getFile(xml); + .catch(text => { + if (text) { + const previousStrat = Blockly.Xml.textToDom(text); + loadDomToWorkspace(previousStrat); + resolve(); + } else { + getFile('xml/main.xml'); + } }); }; diff --git a/src/botPage/view/blockly/utils.js b/src/botPage/view/blockly/utils.js index ada51702f3..0c12c568b6 100644 --- a/src/botPage/view/blockly/utils.js +++ b/src/botPage/view/blockly/utils.js @@ -512,8 +512,8 @@ export const importFile = xml => $.get(xml, dom => { resolve(dom); }).catch(() => { - const previousStrat = localStorage.getItem('previousStrat') || 'xml/main.xml'; - reject(previousStrat); + const previous_workspace_text = sessionStorage.getItem('previousStrat'); + reject(previous_workspace_text); globalObserver.emit('Notify', { className: 'warn', @@ -527,6 +527,9 @@ export const saveBeforeUnload = off => { if (off) { window.onbeforeunload = null; } else { - window.onbeforeunload = () => 'You have some unsaved blocks, do you want to save them before you exit?'; + window.onbeforeunload = () => { + const currentDom = Blockly.Xml.workspaceToDom(Blockly.mainWorkspace); + sessionStorage.setItem('previousStrat', Blockly.Xml.domToPrettyText(currentDom)); + }; } }; From 82f174899d943605a0768b9e6b5e9e0962a545d9 Mon Sep 17 00:00:00 2001 From: McSam Date: Mon, 19 Aug 2019 15:54:34 +0800 Subject: [PATCH 09/12] fix preivous strat not load if no strategy parameter on url --- src/botPage/view/blockly/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index c7d368b7ac..016c6c2a26 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -257,7 +257,7 @@ export default class _Blockly { renderInstance(); addBlocklyTranslation().then(() => { const defaultStrat = parseQueryString().strategy; - const xmlFile = defaultStrat ? `xml/${defaultStrat}.xml` : 'xml/main.xml'; + const xmlFile = `xml/${defaultStrat}.xml`; const loadDomToWorkspace = dom => { repaintDefaultColours(); From 086206f4f8636e9d0d66e4dd8bf35aa2ba87ec55 Mon Sep 17 00:00:00 2001 From: McSam Date: Tue, 20 Aug 2019 17:26:58 +0800 Subject: [PATCH 10/12] fix eslint --- src/botPage/view/blockly/utils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/botPage/view/blockly/utils.js b/src/botPage/view/blockly/utils.js index 0c12c568b6..46b64a460f 100644 --- a/src/botPage/view/blockly/utils.js +++ b/src/botPage/view/blockly/utils.js @@ -512,8 +512,8 @@ export const importFile = xml => $.get(xml, dom => { resolve(dom); }).catch(() => { - const previous_workspace_text = sessionStorage.getItem('previousStrat'); - reject(previous_workspace_text); + const previousWorkspaceText = sessionStorage.getItem('previousStrat'); + reject(previousWorkspaceText); globalObserver.emit('Notify', { className: 'warn', From ab4c8cea9508c6184a39ec68b53d7997d8cc148a Mon Sep 17 00:00:00 2001 From: McSam Date: Fri, 23 Aug 2019 16:22:38 +0800 Subject: [PATCH 11/12] resolve issues --- src/botPage/view/View.js | 2 +- src/botPage/view/blockly/index.js | 15 +++++++++-- src/botPage/view/blockly/utils.js | 44 ++++++++++++++++++++----------- src/indexPage/endpoint.js | 2 +- 4 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/botPage/view/View.js b/src/botPage/view/View.js index 515a52d03f..5f1e680eee 100644 --- a/src/botPage/view/View.js +++ b/src/botPage/view/View.js @@ -605,7 +605,7 @@ export default class View { $('#login, #toolbox-login') .bind('click.login', () => { - saveBeforeUnload(true); + saveBeforeUnload(); document.location = getOAuthURL(); }) .text(translate('Log in')); diff --git a/src/botPage/view/blockly/index.js b/src/botPage/view/blockly/index.js index 016c6c2a26..b5f1a80f47 100644 --- a/src/botPage/view/blockly/index.js +++ b/src/botPage/view/blockly/index.js @@ -16,6 +16,7 @@ import { cleanBeforeExport, importFile, saveBeforeUnload, + removeParam, } from './utils'; import Interpreter from '../../bot/Interpreter'; import { createErrorAndEmit } from '../../common/error'; @@ -266,7 +267,7 @@ export default class _Blockly { this.zoomOnPlusMinus(); disposeBlocksWithLoaders(); setTimeout(() => { - saveBeforeUnload(true); + saveBeforeUnload(); Blockly.mainWorkspace.cleanUp(); Blockly.mainWorkspace.clearUndo(); }, 0); @@ -286,6 +287,14 @@ export default class _Blockly { } else { getFile('xml/main.xml'); } + + if (defaultStrat) { + globalObserver.emit('Notify', { + className: 'warn', + message : translate('The strategy you tried to load is invalid'), + position : 'right', + }); + } }); }; @@ -371,6 +380,8 @@ export default class _Blockly { } }); + removeParam('strategy'); + try { if (xml.hasAttribute('collection') && xml.getAttribute('collection') === 'true') { loadBlocks(xml, dropEvent); @@ -385,7 +396,7 @@ export default class _Blockly { save(arg) { const { filename, collection } = arg; - saveBeforeUnload(true); + saveBeforeUnload(); const xml = Blockly.Xml.workspaceToDom(Blockly.mainWorkspace); cleanBeforeExport(xml); diff --git a/src/botPage/view/blockly/utils.js b/src/botPage/view/blockly/utils.js index 46b64a460f..33eed2584c 100644 --- a/src/botPage/view/blockly/utils.js +++ b/src/botPage/view/blockly/utils.js @@ -512,24 +512,38 @@ export const importFile = xml => $.get(xml, dom => { resolve(dom); }).catch(() => { - const previousWorkspaceText = sessionStorage.getItem('previousStrat'); + const previousWorkspaceText = localStorage.getItem('previousStrat'); reject(previousWorkspaceText); - - globalObserver.emit('Notify', { - className: 'warn', - message : translate('The strategy you tried to load is invalid'), - position : 'right', - }); }); }); -export const saveBeforeUnload = off => { - if (off) { - window.onbeforeunload = null; - } else { - window.onbeforeunload = () => { - const currentDom = Blockly.Xml.workspaceToDom(Blockly.mainWorkspace); - sessionStorage.setItem('previousStrat', Blockly.Xml.domToPrettyText(currentDom)); - }; +export const saveBeforeUnload = () => { + window.onbeforeunload = () => { + const currentDom = Blockly.Xml.workspaceToDom(Blockly.mainWorkspace); + localStorage.setItem('previousStrat', Blockly.Xml.domToPrettyText(currentDom)); + return null; + }; +}; + +export const removeParam = key => { + const sourceURL = window.location.href; + let rtn = sourceURL.split('?')[0]; + let paramsArr = []; + const queryString = sourceURL.indexOf('?') !== -1 ? sourceURL.split('?')[1] : ''; + if (queryString !== '') { + paramsArr = queryString.split('&'); + for (let i = paramsArr.length - 1; i >= 0; i -= 1) { + const paramPair = paramsArr[i]; + const paramKey = paramPair.split('='); + const param = paramKey[0]; + if (param === key) { + paramsArr.splice(i, 1); + } + } + if (paramsArr.length) { + rtn = `${rtn}?${paramsArr.join('&')}`; + } } + + window.history.pushState({}, window.title, rtn); }; diff --git a/src/indexPage/endpoint.js b/src/indexPage/endpoint.js index 872d037d90..705ae59162 100644 --- a/src/indexPage/endpoint.js +++ b/src/indexPage/endpoint.js @@ -65,7 +65,7 @@ function addEndpoint(e) { setStorage('config.server_url', serverUrl); setStorage('config.app_id', appId); - const urlReg = /^(?:http(s)?:\/\/)?[\w.-]+(?:.[\w.-]+)+[\w-._~:\/?#[\]@!$&'()*+,;=.]+$/; + const urlReg = /^(?:http(s)?:\/\/)?[\w.-]+(?:.[\w.-]+)+[\w-._~:?#[\]@!$&'()*+,;=.]+$/; if (!urlReg.test(serverUrl)) { $('#error') From 90b96962e7e6d6dca576c9f88cdc2cf14b00f02c Mon Sep 17 00:00:00 2001 From: Aaron Imming Date: Fri, 4 Oct 2019 11:51:44 +0800 Subject: [PATCH 12/12] Refactor dropdown logic --- src/botPage/view/blockly/blocks/shared.js | 87 ++++++++++++++----- .../view/blockly/blocks/trade/components.js | 6 +- .../view/blockly/blocks/trade/index.js | 6 ++ .../view/blockly/blocks/trade/tools.js | 2 +- 4 files changed, 73 insertions(+), 28 deletions(-) diff --git a/src/botPage/view/blockly/blocks/shared.js b/src/botPage/view/blockly/blocks/shared.js index 7e5ed841fe..c7f61cb17d 100644 --- a/src/botPage/view/blockly/blocks/shared.js +++ b/src/botPage/view/blockly/blocks/shared.js @@ -16,6 +16,10 @@ let purchaseChoices = [[translate('Click to select'), '']]; export const getPurchaseChoices = () => purchaseChoices; const filterPurchaseChoices = (contractType, oppositesName) => { + if (oppositesName.toLowerCase() === 'na') { + return [[translate('Not available'), 'na']]; + } + const { [oppositesName]: tradeTypes } = config.opposites; let tmpPurchaseChoices = tradeTypes.filter(k => @@ -86,46 +90,79 @@ const getActiveMarket = markets => fieldGeneratorMapping.MARKET_LIST = () => { const markets = getActiveMarket(symbolApi.activeSymbols.getMarkets()); + + if (Object.keys(markets).length === 0) { + return [[translate('Not available'), 'na']]; + } return Object.keys(markets).map(e => [markets[e].name, e]); }; fieldGeneratorMapping.SUBMARKET_LIST = block => () => { const markets = getActiveMarket(symbolApi.activeSymbols.getMarkets()); const marketName = block.getFieldValue('MARKET_LIST'); - if (!marketName || marketName === 'Invalid') { - return [['', 'Invalid']]; + const submarketOptions = []; + + if (Object.keys(markets).length > 0 && marketName !== 'na') { + const marketObj = markets[marketName]; + + if (marketObj) { + const submarkets = getActiveSubMarket(marketObj.submarkets); + + submarketOptions.push( + ...Object.keys(submarkets) + .map(e => [submarkets[e].name, e]) + // Filter out markets we don't have contracts for + .filter(submarket => !['energy'].includes(submarket[1])) + ); + } } - const submarkets = getActiveSubMarket(markets[marketName].submarkets); - return ( - Object.keys(submarkets) - .map(e => [submarkets[e].name, e]) - // Filter out markets we don't have contracts for - .filter(submarket => !['energy'].includes(submarket[1])) - ); + + if (submarketOptions.length === 0) { + return [[translate('Not available'), 'na']]; + } + + return submarketOptions; }; fieldGeneratorMapping.SYMBOL_LIST = block => () => { const markets = getActiveMarket(symbolApi.activeSymbols.getMarkets()); const submarketName = block.getFieldValue('SUBMARKET_LIST'); - if (!submarketName || submarketName === 'Invalid') { - return [['', '']]; + const symbolOptions = []; + + if (Object.keys(markets).length > 0 && submarketName !== 'na') { + const marketName = block.getFieldValue('MARKET_LIST'); + const marketObj = markets[marketName]; + + if (marketObj) { + const { submarkets } = marketObj; + + if (Object.keys(submarkets).length > 0 && submarkets[submarketName]) { + const symbols = getActiveSymbols(submarkets[submarketName].symbols); + + symbolOptions.push( + ...Object.keys(symbols) + .map(e => [symbols[e].display, symbols[e].symbol]) + // Filter out symbols we don't have contracts for (these symbols have only forward-starting) + .filter(symbol => !['frxGBPNOK', 'frxUSDNOK', 'frxUSDNEK', 'frxUSDSEK'].includes(symbol[1])) + ); + } + } } - const marketName = block.getFieldValue('MARKET_LIST'); - const submarkets = getActiveSubMarket(markets[marketName].submarkets); - const symbols = getActiveSymbols(submarkets[submarketName].symbols); - return ( - Object.keys(symbols) - .map(e => [symbols[e].display, symbols[e].symbol]) - // Filter out symbols we don't have contracts for (these symbols have only forward-starting) - .filter(symbol => !['frxGBPNOK', 'frxUSDNOK', 'frxUSDNEK', 'frxUSDSEK'].includes(symbol[1])) - ); + + if (symbolOptions.length === 0) { + return [[translate('Not available'), 'na']]; + } + + return symbolOptions; }; fieldGeneratorMapping.TRADETYPECAT_LIST = block => () => { const symbol = block.getFieldValue('SYMBOL_LIST'); - if (!symbol) { - return [['', '']]; + + if (!symbol || symbol === 'na') { + return [[translate('Not available'), 'na']]; } + const allowedCategories = symbolApi.getAllowedCategories(symbol.toLowerCase()); return Object.keys(config.conditionsCategoryName) .filter(e => allowedCategories.indexOf(e) >= 0) @@ -134,9 +171,11 @@ fieldGeneratorMapping.TRADETYPECAT_LIST = block => () => { fieldGeneratorMapping.TRADETYPE_LIST = block => () => { const tradeTypeCat = block.getFieldValue('TRADETYPECAT_LIST'); - if (!tradeTypeCat) { - return [['', '']]; + + if (!tradeTypeCat || tradeTypeCat === 'na') { + return [[translate('Not available'), 'na']]; } + return ( config.conditionsCategory[tradeTypeCat] .map(e => [config.opposites[e.toUpperCase()].map(c => c[Object.keys(c)[0]]).join('/'), e]) diff --git a/src/botPage/view/blockly/blocks/trade/components.js b/src/botPage/view/blockly/blocks/trade/components.js index a99f248f9b..8c1deefb66 100644 --- a/src/botPage/view/blockly/blocks/trade/components.js +++ b/src/botPage/view/blockly/blocks/trade/components.js @@ -8,7 +8,7 @@ export const marketDropdown = block => { block .appendDummyInput('MARKETDEFINITION') .appendField(`${translate('Market')}:`) - .appendField(new Blockly.FieldDropdown(fieldGeneratorMapping.MARKET_LIST), 'MARKET_LIST') + .appendField(new Blockly.FieldDropdown(fieldGeneratorMapping.MARKET_LIST()), 'MARKET_LIST') .appendField('>') .appendField(new Blockly.FieldDropdown(fieldGeneratorMapping.SUBMARKET_LIST(block)), 'SUBMARKET_LIST') .appendField('>') @@ -28,10 +28,10 @@ export const contractTypes = block => { if (!block.getInput('CONTRACT_TYPE')) { const getContractTypes = () => { const tradeType = block.getFieldValue('TRADETYPE_LIST'); - if (tradeType) { + if (tradeType && tradeType !== 'na') { return [[translate('Both'), 'both'], ...oppositesToDropdown(config.opposites[tradeType.toUpperCase()])]; } - return [['', '']]; + return [[translate('Not available'), 'na']]; }; block .appendDummyInput('CONTRACT_TYPE') diff --git a/src/botPage/view/blockly/blocks/trade/index.js b/src/botPage/view/blockly/blocks/trade/index.js index 77dc0f9139..0327010694 100644 --- a/src/botPage/view/blockly/blocks/trade/index.js +++ b/src/botPage/view/blockly/blocks/trade/index.js @@ -107,6 +107,12 @@ Blockly.Blocks.trade = { resetTradeFields(this, ev); } + if (ev.type === Blockly.Events.BLOCK_CREATE && ev.group !== 'load') { + const marketField = this.getField('MARKET_LIST'); + marketField.setValue(''); + marketField.setValue(marketField.menuGenerator_[0][1]); // eslint-disable-line + } + decorateTrade(ev); }, }; diff --git a/src/botPage/view/blockly/blocks/trade/tools.js b/src/botPage/view/blockly/blocks/trade/tools.js index ad62dbdf0b..96439a86c7 100644 --- a/src/botPage/view/blockly/blocks/trade/tools.js +++ b/src/botPage/view/blockly/blocks/trade/tools.js @@ -9,7 +9,7 @@ export const getParentValue = (block, fieldName) => { export const updateInputList = block => { const tradeType = getParentValue(block, 'TRADETYPE_LIST'); - if (tradeType) { + if (Blockly.Blocks[tradeType]) { Blockly.Blocks[tradeType].init.call(block); } };