You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

147 lines
6.4 KiB

extends ../../layouts/main
block content
- var formAction = channel ? `/admin/venue/channel/${channel._id}` : '/admin/venue/channel';
form(method="POST", action= formAction, onsubmit="return dtp.channelEditor.submitForm(event);").uk-form
.uk-card.uk-card-secondary.uk-card-small
.uk-card-header
h1.uk-card-title= channel ? 'Update Channel' : 'Create Channel'
p You are linking a Shing.tv stream channel to your Venue. Venue wants the Shing channel information, but wants the local user information for the owner of the channel. You are tying a remote Shing channel to a local user of #{site.name}.
.uk-card-body
.uk-margin
label(for="slug").uk-form-label Channel URL
input(type="url", name="url", placeholder="Paste Shing.tv channel URL", value= channel ? `https://${dtp.services.venue.soapboxDomain}/channel/${channel.slug}` : undefined).uk-input
.uk-text-small.uk-text-muted #{site.name} integrates #{dtp.services.venue.soapboxDomain} and wants the channel URL from there.
div(uk-grid)
div(class="uk-width-1-1 uk-width-2-3@m")
label(for="stream-key").uk-form-label Stream Key
div(uk-grid).uk-grid-small.uk-flex-middle
.uk-width-expand
input(
id="stream-key",
name="credentials.streamKey",
type="text",
placeholder="Paste Shing.tv stream key",
data-key-value= channel ? channel.credentials.streamKey : undefined,
).uk-input
.uk-width-auto
button(
type="button",
onclick="return dtp.channelEditor.toggleKeyValue(event, 'stream-key');",
).uk-button.uk-button-text
span
i.button-icon.fas.fa-lock
span.button-label.uk-margin-small-left Show
div(class="uk-width-1-1 uk-width-1-3@m")
label(for="widget-key").uk-form-label Widget Key
div(uk-grid).uk-grid-small.uk-flex-middle
.uk-width-expand
input(
id="widget-key",
name="credentials.widgetKey",
type="text",
placeholder="Paste Shing.tv widget key",
data-key-value= channel ? channel.credentials.widgetKey : undefined,
).uk-input
.uk-width-auto
button(
type="button",
onclick="return dtp.channelEditor.toggleKeyValue(event, 'widget-key');",
).uk-button.uk-button-text
span
i.button-icon.fas.fa-lock
span.button-label.uk-margin-small-left Show
div(uk-grid).uk-flex-middle
div(class="uk-width-1-1 uk-width-1-2@s")
label(for="owner").uk-form-label Owner
.uk-form-controls
input(id="owner", type="text", name="owner", placeholder=`Enter channel owner's local username (here on ${site.name})`, value= channel ? channel.owner.username : user.username).uk-input
div(class="uk-width-1-1 uk-width-1-2@s")
label(for="sort-order").uk-form-label Sort order
.uk-form-controls
input(id="sort-order", name="sortOrder", type="number", min=0, step=1, placeholder="Enter channel sort order", value= channel ? channel.sortOrder : 0).uk-input
div(uk-grid).uk-card-footer
.uk-width-expand
+renderBackButton({ includeLabel: true, label: 'Cancel' })
if channel
.uk-width-auto
button(
type="button",
data-channel={ _id: channel._id, name: channel.name },
onclick="return dtp.adminApp.deleteVenueChannel(event);",
).uk-button.dtp-button-danger.uk-border-rounded
span
i.fas.fa-trash
span.uk-margin-small-left DELETE
.uk-width-auto
button(type="submit").uk-button.dtp-button-primary.uk-border-rounded
span
i.fas.fa-save
span.uk-margin-small-left= channel ? 'Update' : 'Create'
block viewjs
script.
(async ( ) => {
window.dtp = window.dtp || { };
window.dtp.channelEditor = { };
window.dtp.channelEditor.toggleKeyValue = async (event, fieldId) => {
event.preventDefault();
event.stopPropagation();
const button = event.currentTarget || event.target;
const target = document.getElementById(fieldId);
target.toggleAttribute('data-masked');
if (target.hasAttribute('data-masked')) {
target.value = target.getAttribute('data-masked-value');
target.toggleAttribute('data-masked', true);
target.toggleAttribute('disabled', true);
button.querySelector('.button-label').textContent = 'SHOW';
const icon = button.querySelector('.button-icon');
icon.classList.remove('fa-lock-open');
icon.classList.add('fa-lock');
} else {
target.value = target.getAttribute('data-key-value');
target.toggleAttribute('disabled', false);
button.querySelector('.button-label').textContent = 'HIDE';
const icon = button.querySelector('.button-icon');
icon.classList.remove('fa-lock');
icon.classList.add('fa-lock-open');
}
};
window.dtp.channelEditor.submitForm = async (event) => {
// simply restore the values back to their key values, and allow the
// form to submit per normal processing.
window.dtp.channelEditor.keyInputs.forEach((input) => {
if (input.hasAttribute('data-masked')) {
input.value = input.getAttribute('data-key-value');
input.toggleAttribute('data-masked', false);
input.toggleAttribute('disabled', false);
}
input.style.visibility = 'hidden'; // since we are "showing" the keys
});
};
window.dtp.channelEditor.keyInputs = document.querySelectorAll("input[data-key-value]");
window.dtp.channelEditor.keyInputs.forEach((input) => {
const keyValue = input.getAttribute('data-key-value');
const maskedValue = keyValue.split('').map((char) => '*').join('');
input.setAttribute('data-masked-value', maskedValue);
input.toggleAttribute('data-masked', true);
input.toggleAttribute('disabled', true);
input.value = maskedValue;
});
})();