OASIS_MOBILE/src/views/pm_view.js

97 lines
4.8 KiB
JavaScript

const { div, h2, p, section, button, form, input, textarea, br, label, pre, span, strong } = require("../server/node_modules/hyperaxe");
const { template, i18n } = require('./main_views');
const { getConfig } = require('../configs/config-manager.js');
exports.pmView = async (initialRecipients = '', initialSubject = '', initialText = '', showPreview = false, sentKey = '', crypterError = false, crypterPreview = null, recipientError = false) => {
const title = i18n.pmSendTitle;
const description = i18n.pmDescription;
const textLen = (initialText || '').length;
const { renderEncryptedChip, renderDoubleEncryptionChip } = require('./clearnet_view');
return template(
title,
section(
div({ class: "tags-header" },
div({ class: "title-with-chip" }, h2(title), renderEncryptedChip(i18n)),
p(description)
),
crypterError
? div({ class: "pm-form-error-msg" }, p('✗ ' + i18n.pmCrypterTooLong))
: null,
recipientError
? div({ class: "pm-form-error-msg" }, p('✗ ' + i18n.pmInvalidRecipients))
: null,
sentKey
? div({ class: "pm-sent-key" },
input({ type: "text", readonly: true, value: sentKey, class: "pm-sent-key-value" })
)
: null,
section(
div({ class: "pm-form" },
form({ method: "POST", action: "/pm", id: "pm-form" },
label({ for: "recipients" }, i18n.pmLimitsHint),
br(),
input({
type: "text",
name: "recipients",
placeholder: i18n.pmRecipientsHint,
required: true,
value: initialRecipients,
maxlength: "511"
}),
br(),
label({ for: "subject" }, i18n.pmSubject),
br(),
input({ type: "text", name: "subject", placeholder: i18n.pmSubjectHint, value: initialSubject, maxlength: "150" }),
br(),
label({ for: "text" }, i18n.pmText),
br(),
textarea({ name: "text", rows: "6", cols: "50", id: "pm-text", maxlength: "8096" }, initialText),
div({ class: "pm-crypter-row" },
label({ for: "pm-crypter" },
input({ type: "checkbox", name: "crypter", value: "1", id: "pm-crypter" }),
renderDoubleEncryptionChip(i18n)
)
),
div({ class: "pm-actions-block" },
div({ class: "pm-actions" },
button({ type: "submit", formaction: "/pm/preview", formmethod: "POST" }, i18n.pmPreview),
button({ type: "submit", class: "btn-compact" }, i18n.pmSend)
)
)
),
showPreview
? (crypterPreview
? div({ class: "pm-preview pm-crypter-preview" },
div({ class: "title-with-chip" }, h2(i18n.pmPreviewTitle), renderEncryptedChip(i18n)),
p({ class: "pm-preview-count" }, `${(initialText || '').length} ${i18n.pmCrypterCharsLabel}`),
div({ class: "pm-preview-content" }, pre({ class: "pm-pre" }, initialText || '')),
div({ class: "pm-sent-key" },
input({ type: "text", readonly: true, value: crypterPreview.key, class: "pm-sent-key-value" })
),
div({ class: "title-with-chip" }, h2(i18n.pmCrypterCipherLabel), renderDoubleEncryptionChip(i18n)),
p({ class: "pm-preview-count" }, `${(crypterPreview.cipher || '').length} ${i18n.pmCrypterCharsLabel}`),
div({ class: "pm-preview-content" }, pre({ class: "pm-pre" }, crypterPreview.cipher || '')),
form({ method: "POST", action: "/pm", class: "pm-crypter-send-form" },
input({ type: "hidden", name: "recipients", value: initialRecipients }),
input({ type: "hidden", name: "subject", value: initialSubject }),
input({ type: "hidden", name: "text", value: initialText }),
input({ type: "hidden", name: "crypter", value: "1" }),
input({ type: "hidden", name: "crypterKey", value: crypterPreview.key }),
input({ type: "hidden", name: "precomputed", value: crypterPreview.cipher }),
button({ type: "submit", class: "btn-compact" }, i18n.pmSend)
)
)
: div({ id: "pm-preview-area", class: "pm-preview" },
div({ class: "title-with-chip" }, h2(i18n.pmPreviewTitle), renderEncryptedChip(i18n)),
p({ id: "pm-preview-count", class: "pm-preview-count" }, `${textLen}/8096`),
div({ id: "pm-preview-content", class: "pm-preview-content" },
pre({ class: "pm-pre" }, initialText || '')
)
))
: null
)
)
)
);
};