diff -r 196896cc3f58 -r c7d21399c726 src/main/scala/fis/pm/ui/TaskSnippet.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/scala/fis/pm/ui/TaskSnippet.scala Fri Apr 27 12:04:35 2012 +0200 @@ -0,0 +1,109 @@ +/* + * Copyright 2012 Tomas Zeman + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package fis.pm.ui + +import fis.base.ui._ +import fis.pm.model._ +import net.liftweb.common._ +import net.liftweb.http._ +import net.liftweb.sitemap._ +import net.liftweb.sitemap.Loc._ +import net.liftweb.util._ +import net.liftweb.util.Helpers._ +import net.tz.lift.model._ +import net.tz.lift.snippet._ +import scala.xml.{Elem, NodeSeq, Text} + +object TaskSnippet extends TaskCrud with EntitySnippet[Task] { + val prefix = "task" + + private val listM = Menu("task.list", l10n("Tasks")) / prefix >> + Title(_ => i18n("Tasks")) >> + locTpl("entity/list") >> Snippet("list", ClearNodes) >> Hidden + + private val viewPre = Menu.param[Task]("task.view", l10n("Task"), parse, + encode) / prefix / * >> Title(t => i18n("Task %s", t.linkName)) >> + locTpl("entity/view") >> Snippet("panel", panel) >> Hidden + + private val editPre = Menu.param[Task]("task.edit", l10n("Edit"), parse, + encode) / prefix / * / EDIT >> + Title(t => i18n("Edit task %s", t.linkName)) >> + locTpl("entity/form") >> Snippet("form", form) >> Hidden + + private val deletePre = Menu.param[Task]("task.delete", l10n("Delete"), + parse, encode) / prefix / * / DELETE >> + Title(t => i18n("Delete task %s", t.linkName)) >> + locTpl("entity/delete") >> Snippet("form", deleteF) >> Hidden + + private val viewM = viewPre >> (SecNav(editPre) + deletePre).build + private val editM = editPre >> SecNav(viewPre).build + private val deleteM = deletePre >> SecNav(viewPre).build + + private lazy val viewLoc = viewM.toLoc + private lazy val editLoc = editM.toLoc + private lazy val deleteLoc = deleteM.toLoc + + val menu = listM submenus(viewM, editM, deleteM) + + private def cur = viewLoc.currentValue or editLoc.currentValue or + deleteLoc.currentValue + + private def panel: CssTr = "*" #> cur.map { c => ViewPanel(fields(c)) } + + object url { + def view: Task => Box[String] = (viewLoc.calcHref _) andThen (Box !! _) + } + + private def fields(t: Task) = List(t.name, t.project, t.taskType, t.stateFld, + t.createdBy, t.createdAt, t.deadline, t.responsible, t.note) + + private case class TaskLink(t: Task) extends EntityLink[Task](t, url.view) + + EntityLink.register[Task](TaskLink(_)) + + private object form extends TaskForm { + + override def localSetup() { + cur.foreach(task(_)) + } + + protected def onSuccess(t: Task) { + S.redirectTo(viewLoc.calcHref(t)) + } + } + + private object deleteF extends HorizontalScreen with CancelButton with + DeleteButton { + + val confirm = field(l10n("Really delete this task?"), false) + + def finish() { + for { + t <- deleteLoc.currentValue if confirm + p <- t.project.vend + u <- ProjectSnippet.url.view(p) + r <- delete(t) + n <- r.box(t.linkName) + } { + S notice l10n("Task %s deleted.", n) + S redirectTo u + } + } + } + +} + +// vim: set ts=2 sw=2 et: