| import {parseView} from '../common/TWBasicUtils.js'; |
| import ThreadModel from '../models/Thread.js'; |
| |
| var CCThreadWithoutMessage = /forum\/[0-9]*\/thread\/[0-9]*$/; |
| |
| /** |
| * @returns {boolean} Whether the redirection was successful. |
| */ |
| export function redirectIfApplicable() { |
| if (window.TWPTShouldRedirect) { |
| let ok = redirectToCommunityConsoleV2(); |
| if (ok) return true; |
| |
| return redirectToCommunityConsoleV1(); |
| } |
| } |
| |
| function redirectToCommunityConsoleV2() { |
| try { |
| const threadView = parseView('thread_view'); |
| if (!threadView) throw new Error('Could not find thread data.'); |
| |
| const thread = new ThreadModel(threadView); |
| const forumId = thread.getForumId(); |
| const threadId = thread.getId(); |
| |
| if (!forumId || !threadId) |
| throw new Error('Forum id and thread id not present in thread data.'); |
| |
| const searchParams = new URLSearchParams(location.search); |
| const msgId = searchParams.get('msgid'); |
| |
| const msgSuffix = msgId ? `/message/${msgId}` : ''; |
| const hash = window.TWPTRedirectHash ?? ''; |
| const url = |
| `/s/community/forum/${forumId}/thread/${threadId}${msgSuffix}${hash}`; |
| window.location = url; |
| return true; |
| } catch (err) { |
| console.error('Error redirecting to the Community Console (v2): ', err); |
| return false; |
| } |
| } |
| |
| function redirectToCommunityConsoleV1() { |
| try { |
| const redirectLink = document.querySelector('.community-console'); |
| if (redirectLink === null) throw new Error('Could not find redirect link.'); |
| |
| let redirectUrl = redirectLink.href; |
| |
| const searchParams = new URLSearchParams(location.search); |
| if (searchParams.has('msgid') && searchParams.get('msgid') !== '' && |
| CCThreadWithoutMessage.test(redirectUrl)) { |
| redirectUrl += |
| '/message/' + encodeURIComponent(searchParams.get('msgid')); |
| } |
| redirectUrl += window.TWPTRedirectHash ?? ''; |
| |
| window.location = redirectUrl; |
| return true; |
| } catch (err) { |
| console.error('Error redirecting to the Community Console (v1): ', err); |
| return false; |
| } |
| } |