From bed52380dda9a8a2c90ca63184bd45c7acf0b773 Mon Sep 17 00:00:00 2001 From: Mohammadreza Ghorbani Date: Mon, 13 May 2019 13:26:45 +0430 Subject: [PATCH 1/3] Use regex to support multiple cases for 404 redirects --- src/root_files/_common/404.html | 21 +++++++++++--------- src/templates/app_2/includes/url_handler.jsx | 2 +- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/root_files/_common/404.html b/src/root_files/_common/404.html index fd5e362a82ba..bafa8537ce76 100644 --- a/src/root_files/_common/404.html +++ b/src/root_files/_common/404.html @@ -46,18 +46,21 @@ var pathname = location.pathname.toLowerCase().replace(/\/index(\.html)?/, ''); var base = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); - var path_name_split = pathname.split('/'); - var prefix_path_items = /^\/br_/.test(location.pathname.toLowerCase()) ? 3 : 2; - var relative_path = path_name_split.splice(0, prefix_path_items - 1).join('/'); + var regex = new RegExp('^(?\\/[A-Za-z0-9-_]+){0,2}(?\\/('+ all_languages.join('|') +'))(?(\\/[A-Za-z0-9-_]+)+)', 'i'); + var result = regex.exec(pathname); + var prefix = result.groups.prefix || ''; + var default_lang = result.groups.lang.replace(/\//, '').toLowerCase() || 'en'; + var routes = result.groups.modules ? result.groups.modules.substr(1).replace('/', '::') : ''; + // var default_lang = all_languages.includes(lang.toLowerCase()) ? lang.toLowerCase() : 'EN'; var default_lang = 'EN'; // TODO remove this when i18n is ready. - location.replace( - base + relative_path // /br_branch_name - + '/' // https://deriv.app/ - + default_lang.toLowerCase() + '?from_404=true&p=' + // en?p= - path_name_split.slice(-1).join('/').replace(/&/g, '~and~') + // statement - ( + base + + prefix // /br_branch_name + + '/' // https://deriv.app/ + + default_lang.toLowerCase() + '?from_404=true&p=' // en?p= + + routes // statement + + ( location.search ? '&q=' + location.search.slice(1).replace(/&/g, '~and~') : '' ) + location.hash ); diff --git a/src/templates/app_2/includes/url_handler.jsx b/src/templates/app_2/includes/url_handler.jsx index 945279855852..f82d1f5c61ca 100644 --- a/src/templates/app_2/includes/url_handler.jsx +++ b/src/templates/app_2/includes/url_handler.jsx @@ -22,7 +22,7 @@ const URLHandler = () => ( // Converts paths in query string to HTML5 route and refresh the url if (query.p !== undefined) { window.history.replaceState(null, null, - l.pathname.slice(0) + (query.p || '') + + l.pathname.slice(0) + (query.p.split('::').join('/') || '') + (query.q ? ('?' + query.q) : '') + l.hash ); } From b9419b545c4ba49f9a35bd1a6e3e983e90aac460 Mon Sep 17 00:00:00 2001 From: Mohammadreza Ghorbani Date: Mon, 13 May 2019 14:20:43 +0430 Subject: [PATCH 2/3] Update regex to match github.io test links --- src/root_files/_common/404.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/root_files/_common/404.html b/src/root_files/_common/404.html index bafa8537ce76..d772538fe639 100644 --- a/src/root_files/_common/404.html +++ b/src/root_files/_common/404.html @@ -46,7 +46,7 @@ var pathname = location.pathname.toLowerCase().replace(/\/index(\.html)?/, ''); var base = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); - var regex = new RegExp('^(?\\/[A-Za-z0-9-_]+){0,2}(?\\/('+ all_languages.join('|') +'))(?(\\/[A-Za-z0-9-_]+)+)', 'i'); + var regex = new RegExp('^(?(\\/[A-Za-z0-9-_]+){0,2})(?\\/('+ all_languages.join('|') +'))(?(\\/[A-Za-z0-9-_]+)+)', 'i'); var result = regex.exec(pathname); var prefix = result.groups.prefix || ''; var default_lang = result.groups.lang.replace(/\//, '').toLowerCase() || 'en'; From 241f33590ce4094625e72b7db833e53b92df91be Mon Sep 17 00:00:00 2001 From: Mohammadreza Ghorbani Date: Mon, 13 May 2019 15:38:51 +0430 Subject: [PATCH 3/3] use indices instead of groups for firefox support --- src/root_files/_common/404.html | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/root_files/_common/404.html b/src/root_files/_common/404.html index d772538fe639..ee4c38674b96 100644 --- a/src/root_files/_common/404.html +++ b/src/root_files/_common/404.html @@ -46,13 +46,12 @@ var pathname = location.pathname.toLowerCase().replace(/\/index(\.html)?/, ''); var base = location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : ''); - var regex = new RegExp('^(?(\\/[A-Za-z0-9-_]+){0,2})(?\\/('+ all_languages.join('|') +'))(?(\\/[A-Za-z0-9-_]+)+)', 'i'); + var regex = new RegExp('^((\/[A-Za-z0-9-_]+){0,2})(\/('+ all_languages.join('|') +'))((\/[A-Za-z0-9-_]+)+)', 'i'); var result = regex.exec(pathname); - var prefix = result.groups.prefix || ''; - var default_lang = result.groups.lang.replace(/\//, '').toLowerCase() || 'en'; - var routes = result.groups.modules ? result.groups.modules.substr(1).replace('/', '::') : ''; + var prefix = result[1] || ''; + var default_lang = result[4].toLowerCase() || 'en'; + var routes = result[5] ? result[5].substr(1).replace('/', '::') : ''; - // var default_lang = all_languages.includes(lang.toLowerCase()) ? lang.toLowerCase() : 'EN'; var default_lang = 'EN'; // TODO remove this when i18n is ready. location.replace( base