Return-Path: Delivered-To: apmail-incubator-esme-commits-archive@minotaur.apache.org Received: (qmail 45445 invoked from network); 5 Jul 2010 07:47:06 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 5 Jul 2010 07:47:06 -0000 Received: (qmail 80624 invoked by uid 500); 5 Jul 2010 07:47:06 -0000 Delivered-To: apmail-incubator-esme-commits-archive@incubator.apache.org Received: (qmail 80598 invoked by uid 500); 5 Jul 2010 07:47:05 -0000 Mailing-List: contact esme-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: esme-dev@incubator.apache.org Delivered-To: mailing list esme-commits@incubator.apache.org Received: (qmail 80584 invoked by uid 99); 5 Jul 2010 07:47:04 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 05 Jul 2010 07:47:04 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 05 Jul 2010 07:47:02 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 093A62388994; Mon, 5 Jul 2010 07:45:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r960470 - in /incubator/esme/trunk/server/src/main/scala/org/apache/esme/liftwebext: ./ SHtml.scala Date: Mon, 05 Jul 2010 07:45:38 -0000 To: esme-commits@incubator.apache.org From: rhirsch@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100705074539.093A62388994@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: rhirsch Date: Mon Jul 5 07:45:38 2010 New Revision: 960470 URL: http://svn.apache.org/viewvc?rev=960470&view=rev Log: [ESME-180] Creating a new pool doesn't lead to a ajax-based refresh [ESME-216] Can't add a user to a pool Patch by Imtiaz Ahmed Hajee Esmail Added: incubator/esme/trunk/server/src/main/scala/org/apache/esme/liftwebext/ incubator/esme/trunk/server/src/main/scala/org/apache/esme/liftwebext/SHtml.scala Added: incubator/esme/trunk/server/src/main/scala/org/apache/esme/liftwebext/SHtml.scala URL: http://svn.apache.org/viewvc/incubator/esme/trunk/server/src/main/scala/org/apache/esme/liftwebext/SHtml.scala?rev=960470&view=auto ============================================================================== --- incubator/esme/trunk/server/src/main/scala/org/apache/esme/liftwebext/SHtml.scala (added) +++ incubator/esme/trunk/server/src/main/scala/org/apache/esme/liftwebext/SHtml.scala Mon Jul 5 07:45:38 2010 @@ -0,0 +1,99 @@ +package org.apache.esme.liftwebext + +import _root_.net.liftweb._ +import http._ +import S._ +import _root_.net.liftweb.http.SHtml._ +import _root_.net.liftweb.common._ +import _root_.net.liftweb.util._ +import _root_.net.liftweb.util.Helpers._ +import _root_.net.liftweb.http.js._ +import _root_.net.liftweb.http.js.AjaxInfo +import JE._ +import JsCmds._ +import _root_.scala.xml._ + +/** + * Created by IntelliJ IDEA. + * User: imtiaz + * Date: Jun 27, 2010 + * Time: 11:40:19 AM + * To change this template use File | Settings | File Templates. + */ + +object SHtml { + import net.liftweb.http.js.JsCmds.JsCrVar + + def ajaxSortedSelect(opts: Seq[(String, String)], excludeFirstOpt: Boolean, deflt: Box[String], + func: String => JsCmd, attrs: (String, String)*): Elem = + ajaxSelect_*(getSortedOpts(opts, excludeFirstOpt), deflt, Empty, SFuncHolder(func), attrs: _*) + + def ajaxSortedSelect(opts: Seq[(String, String)], excludeFirstOpt: Boolean, deflt: Box[String], + jsFunc: Call, func: String => JsCmd, attrs: (String, String)*): Elem = + ajaxSelect_*(getSortedOpts(opts, excludeFirstOpt), deflt, Full(jsFunc), SFuncHolder(func), attrs: _*) + + def ajaxUntrustedSortedSelect(opts: Seq[(String, String)], excludeFirstOpt: Boolean, deflt: Box[String], + func: String => JsCmd, attrs: (String, String)*): Elem = + ajaxUntrustedSelect_*(getSortedOpts(opts, excludeFirstOpt), deflt, Empty, SFuncHolder(func), attrs: _*) + + def ajaxUntrustedSortedSelect(opts: Seq[(String, String)], excludeFirstOpt: Boolean, deflt: Box[String], + jsFunc: Call, func: String => JsCmd, attrs: (String, String)*): Elem = + ajaxUntrustedSelect_*(getSortedOpts(opts, excludeFirstOpt), deflt, Full(jsFunc), SFuncHolder(func), attrs: _*) + + def ajaxUntrustedSelect(opts: Seq[(String, String)], deflt: Box[String], + func: String => JsCmd, attrs: (String, String)*): Elem = + ajaxUntrustedSelect_*(opts, deflt, Empty, SFuncHolder(func), attrs: _*) + + def ajaxUntrustedSelect(opts: Seq[(String, String)], deflt: Box[String], + jsFunc: Call, func: String => JsCmd, attrs: (String, String)*): Elem = + ajaxUntrustedSelect_*(opts, deflt, Full(jsFunc), SFuncHolder(func), attrs: _*) + + private def ajaxSelect_*(opts: Seq[(String, String)], deflt: Box[String], + jsFunc: Box[Call], func: AFuncHolder, attrs: (String, String)*): Elem = { + val raw = (funcName: String, value: String) => JsRaw("'" + funcName + "=' + this.options[" + value + ".selectedIndex].value") + val key = formFuncName + + val vals = opts.map(_._1) + val testFunc = LFuncHolder(in => in.filter(v => vals.contains(v)) match {case Nil => false case xs => func(xs)}, func.owner) + fmapFunc(contextFuncBuilder(testFunc)) { + funcName => + (attrs.foldLeft()(_ % _)) % + ("onchange" -> (jsFunc match { + case Full(f) => JsCrVar(key, JsRaw("this")) & deferCall(raw(funcName, key), f) + case _ => makeAjaxCall(raw(funcName, "this")) + })) + } + } + private def ajaxUntrustedSelect_*(opts: Seq[(String, String)], deflt: Box[String], + jsFunc: Box[Call], func: AFuncHolder, attrs: (String, String)*): Elem = { + val raw = (funcName: String, value: String) => JsRaw("'" + funcName + "=' + this.options[" + value + ".selectedIndex].value") + val key = formFuncName + + val vals = opts.map(_._1) + //val testFunc = LFuncHolder(in => in.filter(v => vals.contains(v)) match {case Nil => false case xs => func(xs)}, func.owner) + val testFunc = LFuncHolder(in => in match {case Nil => false case xs => func(xs)}, func.owner) + fmapFunc(contextFuncBuilder(testFunc)) { + import net.liftweb.http.js.JsCmds.JsCrVar + funcName => + (attrs.foldLeft()(_ % _)) % + ("onchange" -> (jsFunc match { + case Full(f) => JsCrVar(key, JsRaw("this")) & deferCall(raw(funcName, key), f) + case _ => makeAjaxCall(raw(funcName, "this")) + })) + } + } + + private def selected(in: Boolean) = if (in) new UnprefixedAttribute("selected", "selected", Null) else Null + + private def deferCall(data: JsExp, jsFunc: Call): Call = + Call(jsFunc.function, (jsFunc.params ++ List(AnonFunc(makeAjaxCall(data)))): _*) + + private def getSortedOpts(opts: Seq[(String, String)], excludeFirstOpt: Boolean): Seq[(String, String)] = + if ( excludeFirstOpt ) + opts match { + case first :: rest => first :: rest.toList.sort(_._2 < _._2) + case _ => opts + } + else + opts.toList.sort(_._2 < _._2) +}