def idMemoizeReplace(f: IdMemoizeTransform => NodeSeqFuncOrSeqNodeSeqFunc): IdMemoizeTransform = { new IdMemoizeTransform { var latestElem: Elem = <span/> val latestKids: NodeSeq = NodeSeq.Empty var latestId = Helpers.nextFuncName private def fixElem(e: Elem): Elem = { e.attribute("id") match { case Some(id) => latestId = id.text ; e case None => e % ("id" -> latestId) } } def apply(ns: NodeSeq): NodeSeq = Helpers.findBox(ns){e => latestElem = fixElem(e); Full(e)}. map(ignore => applyAgain()).openOr(NodeSeq.Empty) def applyAgain(): NodeSeq = f(this)(latestElem) def setHtml(): JsCmd = Replace(latestId, f(this)(latestElem)) } }