MiniDigger/Hangar

View on GitHub
ore/app/views/projects/versions/create.scala.html

Summary

Maintainability
Test Coverage
@import java.sql.Timestamp
@import java.time.Instant

@import controllers.project.{routes => projectRoutes}
@import controllers.sugar.Requests.OreRequest
@import ore.db.ObjId
@import ore.models.project.Channel
@import ore.OreConfig
@import ore.models.project.factory.PendingVersion
@import views.html.helper.{CSRF, form}
@import views.html.utils.editor
@import views.html.helper.CSPNonce
@import ore.util.{FileUtils, StringUtils}
@import models.querymodels.ViewTag
@(projectName: String, pluginId: String, projectSlug: String, ownerName: String, projectDescription: Option[String], forumSync: Boolean, pending: Option[PendingVersion],
  channels: Seq[Channel])(implicit messages: Messages, flash: Flash, request: OreRequest[_], config: OreConfig)

@mainWidth = @{
    "col-md-10"
}

@scripts = {
    <script type="text/javascript" src="@routes.Assets.versioned("javascripts/channelManage.js")"></script>
    <script type="text/javascript" src="@routes.Assets.versioned("javascripts/pluginUpload.js")"></script>
    <script type="text/javascript" src="@routes.Assets.versioned("javascripts/projectDetail.js")"></script>
    <script type="text/javascript" src="@routes.Assets.versioned("javascripts/versionCreateChannelNew.js")"></script>
    <script @CSPNonce.attr>
            DEFAULT_COLOR = '@config.defaultChannelColor.hex';
    </script>
}

@layout.base(messages("version.create.pageTitle"), scripts) {

    <div class="row">
        <div class="@mainWidth">
            <div class="panel panel-default panel-create">
                <div class="panel-heading">
                    <h3 class="panel-title">
                    @messages("version.create.title")
                    </h3>
                </div>

                <div class="create-body panel-body">
                    <div class="minor create-blurb">
                        <p>@Html(messages("version.create.info", projectName, pluginId))</p>
                    </div>

                    @if(pending.isDefined) {
                        @* Show plugin meta *@
                        @defining(pending.get) { version: PendingVersion =>
                            <div class="plugin-meta">
                                <table class="plugin-meta-table">
                                    <tr>
                                        <td><strong>@messages("version")</strong></td>
                                        <td>@version.versionString</td>
                                    </tr>
                                    <tr>
                                        <td><strong>@messages("version.description")</strong></td>
                                        <td>
                                        @version.description.map { description =>
                                            @description
                                        }.getOrElse {
                                            @projectDescription.getOrElse(messages("version.create.noDescription"))
                                        }
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><strong>@messages("version.filename")</strong></td>
                                        <td>@version.fileName</td>
                                    </tr>
                                    <tr>
                                        <td><strong>@messages("version.fileSize")</strong></td>
                                        <td>@FileUtils.formatFileSize(version.fileSize)</td>
                                    </tr>
                                    <tr>
                                        <td><strong>Channel</strong></td>
                                        <td class="form-inline">
                                            @* Show channel selector if old project, editor if new project *@
                                            <select id="select-channel" form="form-publish" name="channel-input" class="form-control">
                                            @channels.map { channel =>
                                                <option value="@channel.name" data-color="@channel.color.hex" @if(channel.name.equals(version.channelName)) {selected}>
                                                @channel.name
                                                </option>
                                            }
                                            </select>
                                            <a href="#">
                                                <i id="channel-new" class="fas fa-plus" data-toggle="modal"
                                                data-target="#channel-settings"></i>
                                            </a>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><strong>Platform</strong></td>
                                        <td>
                                            <div class="pull-right" id="upload-platform-tags">
                                            @for(t <- version.dependenciesAsGhostTags) {
                                                @projects.tag(ViewTag.fromVersionTag(t))
                                            }
                                            </div>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td><strong>@messages("version.create.unstable")</strong></td>
                                        <td class="rv">
                                            <div class="checkbox-inline">
                                                <input form="form-publish" name="unstable" type="checkbox" value="true"/>
                                            </div>
                                            <div class="clearfix"></div>
                                        </td>
                                    </tr>

                                    <tr>
                                        <td><strong>Recommended</strong></td>
                                        <td class="rv">
                                            <div class="checkbox-inline">
                                                <input form="form-publish" name="recommended" type="checkbox" checked
                                                value="true"/>
                                            </div>
                                            <div class="clearfix"></div>
                                        </td>
                                    </tr>

                                    <tr>
                                        <td><strong>Create forum post</strong></td>
                                        <td class="rv">
                                            <div class="checkbox-inline">
                                                <input form="form-publish" name="forum-post" type="checkbox"
                                                @if(forumSync) { checked } value="true"/>
                                            </div>
                                            <div class="clearfix"></div>
                                        </td>
                                    </tr>
                                </table>
                            </div>

                            <div class="release-bulletin">
                                <div>
                                    <h3>@messages("version.releaseBulletin")</h3>
                                    <p>@messages("version.releaseBulletin.info")</p>

                                    @editor(
                                        savable = false,
                                        enabled = true,
                                        raw = version.description.getOrElse(""),
                                        cancellable = false,
                                        targetForm = "form-publish"
                                    )
                                </div>
                            </div>
                            <script @CSPNonce.attr>$(function () { $('.btn-edit').click() });</script>
                        }
                    }

                    @form(action = projectRoutes.Versions.upload(ownerName, projectSlug),
                        'enctype -> "multipart/form-data", 'id -> "form-upload") {
                        @CSRF.formField
                            <label class="btn btn-default pull-left" for="pluginFile">
                                <input id="pluginFile" name="pluginFile" type="file" style="display: none;">
                                @messages("version.create.selectFile")
                            </label>

                            @projects.helper.alertFile()
                    }

                    @if(pending.isDefined) {
                        @* Ready to go! *@
                        @defining(pending.get) { version: PendingVersion =>
                            @form(action = projectRoutes.Versions.publish(
                                ownerName, projectSlug, version.versionString),
                                'id -> "form-publish", 'class -> "pull-right") {
                                @CSRF.formField
                                <input type="hidden" class="channel-color-input" name="channel-color-input"
                                value="@config.defaultChannelColor.hex" />

                                <div>
                                    <input type="submit" name="create" value="@messages("version.create.publish")"
                                    class="btn btn-primary" />
                                </div>
                            }
                        }
                    }

                </div>
            </div>
            <span class="pull-left tos"><i>@Html(messages("version.create.tos", "#"))</i></span>
        </div>
        @if(pending.isDefined) {
            @projects.helper.createSteps(2)
        } else {
            @projects.helper.createSteps(1)
        }

    </div>

    @projects.channels.helper.modalManage()

}