import $ from 'jquery'; import React from 'react'; import { InfoDialog } from 'vj/components/dialog'; import { NamedPage } from 'vj/misc/Page'; import { tpl, withTransitionCallback } from 'vj/utils'; export default new NamedPage('record_detail', async () => { $(document).on('click', '.compiler-text', () => { withTransitionCallback(() => { $('.collapsed').removeClass('collapsed'); }); }); $(document).on('click', '.subtask-case', function () { const text = $(this).find('.message').text(); const data = $(this).find('.message').html(); if (!text?.trim() || (!text.includes('\n') && text.length < 20)) return; new InfoDialog({ $body: tpl(
), }).open(); }); if (!UiContext.socketUrl) return; const [{ default: WebSocket }, { DiffDOM }] = await Promise.all([ import('../components/socket'), import('diff-dom'), ]); const sock = new WebSocket(UiContext.ws_prefix + UiContext.socketUrl, false, true); const dd = new DiffDOM(); sock.onmessage = (_, data) => { const msg = JSON.parse(data); if (typeof msg.status === 'number' && window.parent) window.parent.postMessage({ status: msg.status }); withTransitionCallback(() => { const newStatus = $(msg.status_html); const oldStatus = $('#status'); oldStatus.trigger('vjContentRemove'); dd.apply(oldStatus[0], dd.diff(oldStatus[0], newStatus[0])); $('#status').trigger('vjContentNew'); const newSummary = $(msg.summary_html); const oldSummary = $('#summary'); oldSummary.trigger('vjContentRemove'); dd.apply(oldSummary[0], dd.diff(oldSummary[0], newSummary[0])); $('#summary').trigger('vjContentNew'); }); }; });