common/app/layout/slices/FlexibleContainer.scala (28 lines of code) (raw):

package layout.slices import common.Seqs._ import layout.slices.Story._ private[slices] trait FlexibleContainer { protected def standardSlices(stories: Seq[Story], firstSlice: Option[Slice]): Seq[Slice] protected def optionalFirstSlice(stories: Seq[Story]): Option[(Slice, Seq[Story])] final def slicesFor(stories: Seq[Story]): Option[Seq[Slice]] = { if (stories.nonEmpty && stories.isDescending && stories.forall(story => story.group >= 0 && story.group <= 3)) { optionalFirstSlice(stories) map { case (firstSlice, remaining) => Some(firstSlice +: standardSlices(remaining, Some(firstSlice))) } getOrElse { Some(standardSlices(stories, None)) } } else { None } } final def containerDefinitionFor(stories: Seq[Story]): Option[ContainerDefinition] = { slicesFor(stories) map { slices => ContainerDefinition( slices, slicesWithoutMPU = slices, mobileShowMore = DesktopBehaviour, Set.empty, ) } } }