in common/app/layout/slices/Container.scala [27:69]
def all(adFree: Boolean = false): Map[String, Container] =
Map(
("dynamic/fast", Dynamic(DynamicFast)),
("dynamic/slow", Dynamic(DynamicSlow)),
("dynamic/package", Dynamic(DynamicPackage)),
("dynamic/slow-mpu", Dynamic(DynamicSlowMPU(omitMPU = false, adFree = adFree))),
("fixed/video", Video),
("fixed/video/vertical", VerticalVideo),
("nav/list", NavList),
("nav/media-list", NavMediaList),
("news/most-popular", MostPopular),
("flexible/special", Flexible(FlexibleSpecial)),
("flexible/general", Flexible(FlexibleGeneral)),
) ++ FixedContainers.all.mapV(Fixed.apply) ++ EmailLayouts.all.mapV(Email.apply) ++ ScrollableContainers.all.mapV(
Scrollable.apply,
)
/** So that we don't blow up at runtime, which would SUCK */
val default = Fixed(FixedContainers.fixedSmallSlowIV)
def resolve(id: String, adFree: Boolean = false): Container = all(adFree).getOrElse(id, default)
def fromConfig(collectionConfig: CollectionConfig): Container =
resolve(collectionConfig.collectionType)
def storiesCount(collectionConfig: CollectionConfig, items: Seq[PressedContent]): Option[Int] = {
resolve(collectionConfig.collectionType) match {
case Dynamic(dynamicContainer) =>
dynamicContainer
.slicesFor(items.map(Story.fromFaciaContent))
.map(Front.itemsVisible)
case Fixed(fixedContainer) => Some(Front.itemsVisible(fixedContainer.slices))
case Email(_) => Some(EmailContentContainer.storiesCount(collectionConfig))
// scrollable feature containers are capped at 3 stories
case _ if collectionConfig.collectionType == "scrollable/feature" => Some(3)
// scrollable small and medium containers are capped at 4 stories
case _ if collectionConfig.collectionType == "scrollable/small" => Some(4)
case _ if collectionConfig.collectionType == "scrollable/medium" => Some(4)
// scrollable highlights containers are capped at 6 stories
case _ if collectionConfig.collectionType == "scrollable/highlights" => Some(6)
case _ => None
}
}