|
| 1 | +(function () { |
| 2 | + const vscode = acquireVsCodeApi(); |
| 3 | + |
| 4 | + const updateState = (state) => { |
| 5 | + const prevState = vscode.getState(); |
| 6 | + vscode.setState({ ...prevState, ...state }); |
| 7 | + updatePage(); |
| 8 | + }; |
| 9 | + |
| 10 | + window.addEventListener('message', ({ data }) => { |
| 11 | + if (data && data.type === 'update-state') { |
| 12 | + updateState(data.payload); |
| 13 | + } |
| 14 | + }); |
| 15 | + vscode.postMessage({ type: 'initialization', payload: null }); |
| 16 | + |
| 17 | + const delegate = (element, selector, eventName, handler) => { |
| 18 | + if (!element) return null; |
| 19 | + element.addEventListener(eventName, function (event) { |
| 20 | + const children = element.querySelectorAll(selector); |
| 21 | + for (let i = 0, len = children.length; i < len; i++) { |
| 22 | + if (children[i] === event.target) { |
| 23 | + handler.call(this, event); |
| 24 | + } |
| 25 | + } |
| 26 | + }); |
| 27 | + }; |
| 28 | + |
| 29 | + delegate(document.body, '#save-button', 'click', () => { |
| 30 | + const tokenInput = document.getElementById('token-input'); |
| 31 | + vscode.postMessage({ type: 'update-token', payload: tokenInput ? tokenInput.value : '' }); |
| 32 | + }); |
| 33 | + |
| 34 | + delegate(document.body, '#preview-button', 'click', () => { |
| 35 | + updateState({ pageType: 'PREVIEW' }); |
| 36 | + }); |
| 37 | + |
| 38 | + delegate(document.body, '#validate-button', 'click', () => { |
| 39 | + const state = vscode.getState(); |
| 40 | + vscode.postMessage({ type: 'validate-token', payload: state ? state.token : '' }); |
| 41 | + }); |
| 42 | + |
| 43 | + delegate(document.body, '#edit-button', 'click', () => { |
| 44 | + updateState({ pageType: 'EDIT' }); |
| 45 | + }); |
| 46 | + |
| 47 | + delegate(document.body, '#clear-button', 'click', () => { |
| 48 | + vscode.postMessage({ type: 'clear-token' }); |
| 49 | + }); |
| 50 | + |
| 51 | + const updatePage = () => { |
| 52 | + const { token, pageType, valid, validating } = vscode.getState() || { token: '', preview: 'EDIT', valid: true, validating: true }; |
| 53 | + if (validating) { |
| 54 | + document.querySelector('.loading-page').style.display = 'block'; |
| 55 | + document.querySelector('.preview-page').style.display = 'none'; |
| 56 | + document.querySelector('.edit-page').style.display = 'none'; |
| 57 | + return; |
| 58 | + } |
| 59 | + |
| 60 | + if (pageType === 'EDIT') { |
| 61 | + document.querySelector('.loading-page').style.display = 'none'; |
| 62 | + document.querySelector('.preview-page').style.display = 'none'; |
| 63 | + document.querySelector('.edit-page').style.display = 'block'; |
| 64 | + document.querySelector('#preview-button').style.display = (token ? 'block' : 'none'); |
| 65 | + return; |
| 66 | + } |
| 67 | + |
| 68 | + document.querySelector('.loading-page').style.display = 'none'; |
| 69 | + document.querySelector('.edit-page').style.display = 'none'; |
| 70 | + document.querySelector('.preview-page').style.display = 'block'; |
| 71 | + document.querySelector('.container .token-status .token-status-text').innerText = (valid ? ' VALID' : ' INVALID'); |
| 72 | + document.querySelector('#token-text').innerText = token.slice(0, 7) + token.slice(7).replace(/./g, '*'); |
| 73 | + document.querySelector('#token-text').style.color = (valid ? '#73c991' : '#f88070'); |
| 74 | + }; |
| 75 | +})(); |
0 commit comments