// fore.st is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. fore.st is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with fore.st. If not, see < http://www.gnu.org/licenses/ >. (C) 2022- by rainbownapkin, // Original cytube license: MIT License Copyright (c) 2013-2022 Calvin Montgomery Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. mixin lcheckbox(id, label) .form-group label.control-label.col-sm-4(for=id)= label .col-sm-8 .checkbox input(type="checkbox", id=id) mixin rcheckbox(id, label) .form-group .col-sm-8.col-sm-offset-4 .checkbox label(for=id) input(type="checkbox", id=id) = label mixin textbox(id, label, placeholder) .form-group label.control-label.col-sm-4(for=id)= label .col-sm-8 if placeholder input.form-control(id=id, type="text", placeholder=placeholder) else input.form-control(id=id, type="text") mixin lcheckbox-auto(id, label) .form-group label.control-label.col-sm-4(for=id)= label .col-sm-8 .checkbox input.cs-checkbox(type="checkbox", id=id) mixin rcheckbox-auto(id, label) .form-group .col-sm-8.col-sm-offset-4 .checkbox label(for=id) input.cs-checkbox(type="checkbox", id=id) = label mixin textbox-auto(id, label, placeholder) .form-group label.control-label.col-sm-4(for=id)= label .col-sm-8 if placeholder input.form-control.cs-textbox(id=id, type="text", placeholder=placeholder) else input.form-control.cs-textbox(id=id, type="text") mixin textbox-timeinput-auto(id, label, placeholder) .form-group label.control-label.col-sm-4(for=id)= label .col-sm-8 if placeholder input.form-control.cs-textbox-timeinput(id=id, type="text", placeholder=placeholder) else input.form-control.cs-textbox-timeinput(id=id, type="text") mixin miscoptions #cs-miscoptions.tab-pane.active h4 General Settings form.form-horizontal(action="javascript:void(0)") +rcheckbox-auto("cs-allow_voteskip", "Allow voteskip") +rcheckbox-auto("cs-allow_dupes", "Allow duplicate videos on the playlist") +textbox-auto("cs-voteskip_ratio", "Voteskip ratio", "0.5") +textbox-auto("cs-maxlength", "Max video length", "HH:MM:SS") +textbox-timeinput-auto("cs-playlist_max_duration_per_user", "Max total queue time per user", "HH:MM:SS") +textbox-auto("cs-afk_timeout", "Auto-AFK Delay", "0 (disabled)") .form-group .col-sm-offset-4 h4 Chat Settings form.form-horizontal(action="javascript:void(0)") +rcheckbox-auto("cs-enable_link_regex", "Convert URLs in chat to links") +rcheckbox-auto("cs-chat_antiflood", "Throttle chat") +textbox-auto("cs-chat_antiflood_burst", "# of messages allowed before throttling") +textbox-auto("cs-chat_antiflood_sustained", "# of messages (after burst) allowed per second") +textbox-timeinput-auto("cs-new_user_chat_delay", "Delay before new accounts can chat", "0") .form-group .col-sm-8.col-sm-offset-4 span.text-info Restrictions to new accounts can be disabled by setting the delay to 0. +textbox-timeinput-auto("cs-new_user_chat_link_delay", "Delay before new accounts can post links in chat", "0") .form-group .col-sm-8.col-sm-offset-4 span.text-info Changes are automatically saved. mixin adminoptions #cs-adminoptions.tab-pane h4 Admin-Only Settings form.form-horizontal(action="javascript:void(0)") - var defname = `CyTube - /${channelPath}/${channelName}` +textbox-auto("cs-pagetitle", "Page title", defname) +textbox-auto("cs-password", "Password", "leave blank to disable") +textbox-auto("cs-externalcss", "External CSS", "Stylesheet URL") +textbox-auto("cs-externaljs", "External Javascript", "Script URL") +rcheckbox-auto("cs-show_public", "List channel publicly") +rcheckbox-auto("cs-torbanned", "Block connections from Tor") +rcheckbox-auto("cs-block_anonymous_users", "Block anonymous users") +rcheckbox-auto("cs-allow_ascii_control", "Allow ASCII control characters (e.g. newlines)") +textbox-auto("cs-playlist_max_per_user", "Maximum # of videos per user") .form-group .col-sm-8.col-sm-offset-4 span.text-info Set to 0 for no limit .form-group .col-sm-8.col-sm-offset-4 span.text-info Changes are automatically saved. mixin motdeditor #cs-motdeditor.tab-pane h4 MOTD editor p The MOTD can be formatted using a subset of HTML. Tags which attempt to execute Javascript will be removed. textarea.form-control#cs-motdtext(rows="10") button.btn.btn-primary#cs-motdsubmit Save MOTD mixin csseditor #cs-csseditor.tab-pane h4 CSS editor p Maximum size 20KB. If more space is required, use the External CSS option under General Settings to link to an externally hosted stylesheet. textarea.form-control#cs-csstext(rows="10") button.btn.btn-primary#cs-csssubmit Save CSS mixin jseditor #cs-jseditor.tab-pane h4 JS editor p Maximum size 20KB. If more space is required, use the External JS option under General Settings to link to an externally hosted stylesheet. textarea.form-control#cs-jstext(rows="10") button.btn.btn-primary#cs-jssubmit Save JS mixin banlist #cs-banlist.tab-pane h4 Ban list table.table.table-striped thead tr th Unban th IP th Name th Banned by mixin recentjoins #cs-recentjoins.tab-pane h4 Recent connections table.table.table-striped thead tr th Name th Aliases th Time mixin chanranks #cs-chanranks.tab-pane h4 Moderator List form.form-inline(action="javascript:void(0)", role="form") .input-group input#cs-chanranks-name.form-control(type="text", placeholder="Name") span.input-group-btn button#cs-chanranks-mod.btn.btn-success +Mod button#cs-chanranks-adm.btn.btn-info +Admin button#cs-chanranks-owner.btn.btn-info +Owner table.table.table-striped thead tr th Name th Rank mixin chatfilters #cs-chatfilters.tab-pane h4 Chat Filters form.form-horizontal(action="javascript:void(0)", role="form") +textbox("cs-chatfilters-newname", "Filter name") +textbox("cs-chatfilters-newregex", "Filter regex") .form-group label.control-label.col-sm-4(for="cs-chatfilters-newflags") Flags .col-sm-8 input#cs-chatfilters-newflags.form-control.cs-textbox(type="text", value="g") +textbox("cs-chatfilters-newreplace", "Replacement") .form-group .col-sm-8.col-sm-offset-4 button#cs-chatfilters-newsubmit.btn.btn-primary Create Filter table.table.table-striped.table-condensed thead tr th Control th Name th Active button#cs-chatfilters-export.btn.btn-default Export filter list button#cs-chatfilters-import.btn.btn-default Import filter list textarea#cs-chatfilters-exporttext.form-control(rows="5") mixin emotes #cs-emotes.tab-pane h4 Emotes form.form-horizontal(action="javascript:void(0)", role="form") +textbox("cs-emotes-newname", "Emote name") +textbox("cs-emotes-newimage", "Emote image") .form-group .col-sm-8.col-sm-offset-4 button#cs-emotes-newsubmit.btn.btn-primary Create Emote form.form-inline .form-group input.emotelist-search.form-control(type="text", placeholder="Search") .form-group .checkbox label input.emotelist-alphabetical(type="checkbox") | Sort alphabetically .emotelist-paginator-container table.emotelist-table.table.table-striped.table-condensed thead tr th Delete th Name th Image tbody button#cs-emotes-export.btn.btn-default Export emote list button#cs-emotes-import.btn.btn-default Import emote list textarea#cs-emotes-exporttext.form-control(rows="5") mixin chanlog #cs-chanlog.tab-pane h4 Channel Log strong Filter Log: select#cs-chanlog-filter.form-control(multiple="multiple") pre#cs-chanlog-text button.btn.btn-default#cs-chanlog-refresh Refresh mixin permeditor #cs-permedit.tab-pane