MiniDigger/Hangar

View on GitHub
ore/app/views/projects/list.scala.html

Summary

Maintainability
Test Coverage
@*
Collection of all projects.
*@
@import ore.models.project.{Project, Version, VersionTag}
@import ore.models.user.User
@import ore.OreConfig
@import ore.data.project.Category
@import models.querymodels.{ProjectListEntry, ViewTag}
@import util.syntax._
@import views.html.utils
@import ore.models.project.io.ProjectFiles
@import ore.util.OreMDC
@(models: Seq[ProjectListEntry], page: Int, pageSize: Long, call: Int => Call)(implicit config: OreConfig, projectFiles: ProjectFiles, mdc: OreMDC)

@projectRoutes = @{
    controllers.project.routes.Projects
}

@entryIcon(entry: ProjectListEntry) = @{
    if(projectFiles.getIconPath(entry.namespace.ownerName, entry.name).isDefined) {
        projectRoutes.showIcon(entry.namespace.ownerName, entry.namespace.slug).url
    }
    else {
        User.avatarUrl(entry.namespace.ownerName)
    }
}

<ul class="list-group project-list">
    @models.map { entry =>
        <li class="list-group-item project @entry.visibility.cssClass">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-xs-12 col-sm-1">
                    @utils.userAvatar(
                        userName = Some(entry.namespace.ownerName),
                        avatarUrl = User.avatarUrl(entry.namespace.ownerName),
                        imgSrc = entryIcon(entry),
                        clazz = "user-avatar-sm")
                    </div>
                    <div class="col-xs-12 col-sm-11">
                        <div class="row">
                            <div class="col-sm-6">
                                <a class="title" href="@projectRoutes.show(entry.namespace.ownerName, entry.namespace.slug)">@entry.name</a>
                            </div>
                            <div class="col-sm-6 hidden-xs">
                                <div class="info minor">
                                    @entry.version.map { recommendedVersion =>
                                        <span class="stat recommended-version" title="Recommended version">
                                            <i class="far fa-gem"></i>
                                            <a href="@controllers.project.routes.Versions.show(
                                                entry.namespace.ownerName, entry.namespace.slug, recommendedVersion)">
                                            @recommendedVersion
                                            </a>
                                        </span>
                                    }

                                    <span class="stat" title="Views"><i class="fas fa-eye"></i> @entry.views</span>
                                    <span class="stat" title="Download"><i class="fas fa-download"></i> @entry.downloads</span>
                                    <span class="stat" title="Stars"><i class="fas fa-star"></i> @entry.stars</span>

                                    @defining(entry.category) { category: Category =>
                                        <span class="stat" title="@category.title">
                                            <i class="fas @category.icon"></i>
                                        </span>
                                    }
                                </div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-sm-7 description-column">
                                <div class="description">@entry.description.getOrElse("")</div>
                            </div>
                            <div class="col-xs-12 col-sm-5 tags-line">
                                @for(t <- entry.tags) {
                                    @projects.tag(t, entry.tags.size)
                                }
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </li>
    }

    @if(models.size >= pageSize || page > 1) {
        <li class="list-group-item project-list-footer">
            <div class="pull-right">
                @if(page > 1) {
                    <a href="@call(page - 1)" class="btn btn-default"><i class="fas fa-arrow-left"></i></a>
                }
                @if(models.size >= pageSize) {
                    <a href="@call(page + 1)" class="btn btn-default"><i class="fas fa-arrow-right"></i></a>
                }
            </div>
            <div class="clearfix"></div>
        </li>
    }
</ul>