<commit_before><?xml version="1.0" encoding="UTF-8"?>

<!--
  ~ Copyright 2007-2010 WorldWide Conferencing, LLC
  ~
  ~ 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.
  -->

<document xmlns="http://maven.apache.org/changes/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">

  <properties>
    <title>Changes in ${project.name}</title>
    <author>The Lift Team</author>
  </properties>

  <body>
    <!-- mini guide
    <action
        dev     = "Id of developer who committed the change - must be same as the one in POM"
        type    = "add|fix|remove|update"
        issue   = "(optional) Id of the issue related to this change"
        system  = "(optional) Set this to 'github' if this action has an issue id"
        due-to  = "(optional) Name of the person 'non-committer' to be credited for this change">
      Short description of the change
    </action>
   see http://maven.apache.org/plugins/maven-changes-plugin/usage.html for full guide
   -->
    <release version="${project.version}" date="${publishDate}" description="Lift 2.0 Snapshot">
      <action dev="dpp" type="add" issue="350" system="assembla">
	Added toHtml method to Mapper/MetaMapper
      </action>
      <action dev="dpp" type="fix" issue="367" system="assembla">
	Issues with template cache updating incorrectly
      </action>
      <action dev="dpp" type="add" issue="70" system="assembla">
	Added support for area tags
      </action>
      <action dev="hseeberger" type="fix" issue="112" system="assembla">
	Fixed misspelled keys for resource bundles: *pasword* and reset.password.confirmarion
      </action>
      <action dev="hseeberger" type="add" issue="251" system="assembla">
	xxxMenuLoc methods now delegate to protected xxxMenuLocParams methods in order to get their LocParams.
      </action>
      <action dev="dpp" type="add" issue="353" system="assembla">
	Added NOT IN to Mapper query builder
      </action>
      <action dev="dpp" type="add" issue="335" system="assembla">
	Enhancements to LiftActors and LRU to support Goat Rodeo
      </action>
      <action dev="dpp" type="fix" issue="296" system="assembla">
	Fixed a comparison bug in ReplaceOption (wishing for type-safety in ==)
      </action>
      <action dev="dpp" type="add" issue="298" system="assembla">
	ByList is uniqued before the query is built
      </action>
      <action dev="dpp" type="add" issue="343" system="assembla">
	Added linkToSelf option to Menu.build snippet
      </action>
      <action dev="dpp" type="fix" issue="357" system="assembla">
	Support for Scala 2.8 deltas in the way Nodes are compared
      </action>
      <action dev="dpp" type="fix" issue="239" system="assembla">
	304 responses should not include Content-Type headers
      </action>
      <action dev="hseeberger" type="add" issue="326" system="assembla">
        Extend Comet (ListenerManager) to selectively update subscribers
      </action>
      <action dev="jonifreeman" type="fix" issue="323" system="assembla">
        lift-Json doesn't appear to be correctly handling attributes
      </action>
      <action dev="jonifreeman" type="fix" issue="279" system="assembla">
        net.liftweb.json.JsonParser.extract fails with List[List[Int]]
      </action>
      <action dev="jonifreeman" type="add" issue="279" system="assembla">
        Multidimensional arrays supported in JSON serialization and extraction
      </action>
      <action dev="jonifreeman" type="update" issue="303" system="assembla">
        JSON object can be extracted into scala.Map (and scala.Map can be serialized as JSON object). Recursive types
        can be serialized.
      </action>
      <action dev="jonifreeman" type="update" issue="333" system="assembla">
        JSON pull parser API
      </action>
      <action dev="indrajitr" type="update" issue="292" system="assembla">
        Make Lfit both Scala 2.7 and 2.8 friendly
      </action>
      <action dev="indrajitr" type="fix" issue="307" system="assembla">
        Streamline JDBC library dependencies
      </action>
      <action dev="mads" type="fix" issue="46" system="assembla">
        autocomplete widget - make options settable
      </action>
      <action dev="hoffrocket" type="update" issue="304" system="assembla">
        Upgrade jQuery to 1.4.1
      </action>
      <action dev="hoffrocket" type="add" issue="311" system="assembla">
        Enable jQuery version switching in LiftRules
      </action>
      <action dev="marius.danciu" type="fix" issue="280" system="assembla">
        Ajax form submission with multiple submit buttons
      </action>
      <action dev="marius.danciu" type="new" issue="286" system="assembla">
        Submitting a form by ID and provide a Scala function
      </action>
      <action dev="marius.danciu" type="fix" issue="295" system="assembla">
        Ajax change from () => Any to () => JsCmd
      </action>
      <action dev="dpp" type="fix" issue="254" system="assembla">
        Add field-by-field error notifications to CRUDified fields
      </action>
      <action dev="dpp" type="fix" issue="282" system="assembla">
        MappedLongForeignKey::asJsonValue should generate JNull
      </action>
      <action dev="dpp" type="fix" issue="284" system="assembla">
        Additional tag support for TextileParser
      </action>
      <action dev="dpp" type="fix" issue="290" system="assembla">
        TextileParser molests divs
      </action>
      <action dev="dpp" type="add" issue="293" system="assembla">
        New LRU Map that works better than Apache LRU map
      </action>
      <action dev="dpp" type="fix" issue="308" system="assembla">
        The order of fields is random in Mapper
      </action>
      <action dev="dpp" type="add" issue="314" system="assembla">
        Allow thread-local Connection Identerifer resolution
      </action>
      <action dev="dpp" type="fix" issue="315" system="assembla">
        How overriding of _showAllTemplate to show a limited number of columns
      </action>
      <action dev="dpp" type="fix" issue="319" system="assembla">
        Control characters in input can lead to Denial of Service attacks
      </action>
    </release>

    <release version="2.0-M1" date="2010-01-13" description="Lift 2.0 Milestone 1">
      <action dev="boisvert" type="fix" issue="273" system="assembla">
        Changed LiftRules.getResourceAsStream() to doWithResource() to ensure InputStream is always closed
        Removed duplicate LiftRules.finder()
      </action>
      <action dev="dchenbecker" type="fix" issue="232" system="assembla">
        Added logging of bad prepared statements to help diagnose things.
      </action>
      <action dev="dchenbecker" type="fix" issue="231" system="assembla">
        Fixed Mapper to properly deal with generated values
      </action>
      <action dev="dpp" type="update" issue="268" system="assembla">
        Misc sitemap enhancements
      </action>
      <action dev="dpp" type="fix" issue="267" system="assembla">
        Lift explicitly closed streams rather than waiting for garbage collection
      </action>
      <action dev="dpp" type="fix" issue="266" system="assembla">
        Jetty restarts do not cause exceptions to be thrown
      </action>
      <action dev="dpp" type="update" issue="262" system="assembla">
        lift-json's Jsvalue may be used with JsonResponse
      </action>
      <action dev="dpp" type="fix" issue="248" system="assembla">
        Fixed NPE problems in Mapper to Json
      </action>
      <action dev="dpp" type="update" issue="247" system="assembla">
        Better handling of flot widget in Comet
      </action>
      <action dev="dpp" type="fix" issue="244" system="assembla">
        Fixed misc Textile bugs
      </action>
      <action dev="dpp" type="update" issue="243" system="assembla">
        Enhanced stateful rewrite
      </action>
      <action dev="dpp" type="update" issue="242" system="assembla">
        Added post-commit hook to DB
      </action>
      <action dev="dpp" type="update" issue="241" system="assembla">
        Wizard supports file upload forms
      </action>
      <action dev="dpp" type="update" issue="240" system="assembla">
        Enhanced TestCond widget
      </action>
      <action dev="dpp" type="fix" issue="239" system="assembla">
        304 responses no longer contain content type
      </action>
      <action dev="dpp" type="update" issue="236" system="assembla">
        Enhanced connection pool logic
      </action>
      <action dev="dpp" type="fix" issue="234" system="assembla">
        Fixed some null exceptions with DB queries
      </action>
      <action dev="dpp" type="fix" issue="223" system="assembla">
        Fixed problems with the JNDI context
      </action>
      <action dev="dpp" type="fix" issue="222" system="assembla">
        Fixed synchronization issues with Vars
      </action>
      <action dev="dpp" type="update" issue="276" system="assembla">
        OAuth support (thanks to the FourSquare guys)
      </action>
      <action dev="dpp" type="fix" issue="275" system="assembla">
        File handles released correctly in Jetty
      </action>
      <action dev="dpp" type="update" issue="250" system="assembla">
        Extracted "Screen" code from Wizard for stand-alone declarative input screens
      </action>
      <action dev="indrajitr" type="update">
        Restructure project (segregated into three logical projects: framework, archetypes, examples)
      </action>
    </release>

    <release version="1.1-M8" date="2009-12-10" description="Lift 1.1 Milestone 8">
      <action dev="boisvert" type="add" issue="" system="">
        Added new built-in &lt;lift:html5&gt; snippet that sets HTML5 DOCTYPE on the XHTML response
      </action>
      <action dev="boisvert" type="fix" issue="218" system="assembla">
        JqJsCmds.ModalDialog now takes JsObj argument to work with BlockUI v2.x
      </action>
      <action dev="boisvert" type="fix" issue="" system="assembla">
        Fixed typo in DerbyDriver.integerIndexColumnType: IDENITY -> IDENTITY
      </action>
      <action dev="dchenbecker" type="fix" issue="211" system="assembla">
        Fixed Mapper to use DriverType.columnTypeMap everywhere
      </action>
      <action dev="dchenbecker" type="fix" issue="210" system="assembla">
        Fixed Mapper logging to properly log inserts, updates and deletes
      </action>
      <action dev="<NAME>" type="fix" issue="139" system="assembla">
        Breaking Changes:

        1) LocParam

        LocParam has been made a sealed trait to facilitate pattern matching within the Lift codebase and has had a contravariant type parameter added to its type to facilitate typesafe interactions with Loc[T]. The new trait is hence LocParam[-T]. As LocParam is now a sealed trait, I have added an extension point for user-specified LocParam subtypes as UserLocParam[-T] extends LocParam[T]. Since the new type parameter is contravariant, LocParam subclasses that are applicable for any Loc[T] have the type LocParam[Any], and a type alias AnyLocParam has been added for this type.

        The Loc.checkProtected method now enforces type consistency between the evaluated Link[T] and the list of LocParam[T] which are used to evaluate whether the link is accessible given the specified parameters.

        2) Renames

        Previously, the "Param" suffix was used for two unrelated purposes within Loc: first, to refer to the type parameter of the Loc, and secondly for the LocParam configuration. This overloading made the code and the API somewhat difficult to read, so the first usage has been removed resulting in the following renames:

        ParamType => T
        NullLocParams => //removed, Unit is sufficient!
        Loc.defaultParams => Loc.defaultValue
        Loc.forceParam => Loc.overrideValue
        Loc.foundParam => Loc.requestValue
        Loc.additionalKidParams => Loc.childValues

        After this change, all instances of the "param" name within Loc should refer to something having to do with LocParam instances.

        Non-Breaking Additions:

        case class IfValue[T](test: Box[T] => Boolean, failMsg: FailMsg) extends LocParam[T]
        case class UnlessValue[T](test: Box[T] => Boolean, failMsg: FailMsg) extends LocParam[T]
        case class TestValueAccess[T](func: Box[T] => Box[LiftResponse]) extends LocParam[T]

        If you are using a non-Unit typed Loc, you can use these LocParam instances to enforce access rules at the value level.

        case class ValueTemplate[T](template: Box[T] => NodeSeq) extends LocParam[T] //per-value template selection

        DataLoc[T] subclass of Loc was added to facilitate the use of the new more typeful LocParam subtypes.

        A few changes to Link:

        Since Link.createLink creates a Box[Text] (and not a clickable link) a couple of methods were added to create the intermediate, unboxed
        values in order that subclasses can more easily manipulate the resulting path:

        Link.pathList(value: T): List[String] // added to facilitate creation of value-aware paths by subclasses.
        Link.createPath(value: T): String //creates the String representation of the path that is subsequently turned into XML and boxed by Link.createLink
      </action>

      <action dev="marius.danciu" type="fix" issue="56" system="assembla">
        Allowing page fragments wrapped by &lt;lift:lazy-load&gt; node to be processed and loaded asynchronously.
      </action>

      <action dev="boisvert" type="fix" issue="153" system="assembla">
        Updated documentation for Msgs
      </action>

      <action dev="boisvert" type="fix" issue="177" system="assembla">
        XmlResponse(...) now accepts optional HTTP status code, mime type and cookies.
      </action>

      <action dev="boisvert" type="fix" issue="14" system="assembla">
        SQL Server Alter Table Fails
      </action>

      <action dev="boisvert" type="fix" issue="170" system="assembla">
        Typo in Req.scala
      </action>

      <action dev="hseeberger" type="fix" issue="166" system="assembla">
        Snapshot jars contains several Box.class files
      </action>

      <action dev="indrajitr" type="update" issue="156" system="assembla" due-to="econoplas">
        Update hibernate-entitymanager to 3.4.0.GA.
      </action>

      <action dev="indrajitr" type="update" issue="168" system="assembla" due-to="awhitford">
        Adjust javax.mail version range to avoid issues when Sun's repo is used and
        honor javax.activation being transitively pulled up my javax.mail.
      </action>

      <action dev="indrajitr" type="fix" issue="180" system="assembla">
        Fix scala:doc and vscaladoc configuration along with provision for module specific configuration for packageLinkDefs.
      </action>

      <action dev="indrajitr" type="update" issue="203" system="assembla">
        Enforce Maven version 2.1.0 or higher, but lower than 3.0.
      </action>

      <action dev="indrajitr" type="fix" issue="161" system="assembla">
        Upgrade Lift archetypes to use the new archetype metadata format. Enhance/fix archetype integration tests during build.
      </action>

      <action dev="indrajitr" type="fix" issue="227" system="assembla">
        Enhance archetype metadata not to depend on ext.vm and allow one to set Lift version (-DliftVersion) or Scala version (-DscalaVersion) during archetype:generate.
      </action>

      <action dev="dchenbecker" type="add" issue="148" system="assembla">
        Add ability to call JS code after AJAX form submit
      </action>

      <action dev="dchenbecker" type="add" issue="181" system="assembla">
        Add AJAX editable field generator to SHtml, add AjaxEditableField to Mapper.
      </action>

      <action dev="dchenbecker" type="fix" issue="16" system="assembla">
        Fixed SQL Server drivers to use version-appropriate unicode columns for text.
      </action>

    </release>

    <release version="1.1-M7" date="2009-11-07" description="Lift 1.1 Milestone 7">
      <action dev="alex.boisvert" type="update" issue="57" system="assembla">
        Improve error message if database is not supported
      </action>
      <action dev="alex.boisvert" type="update" issue="77" system="assembla">
        Change net.liftweb.mapper.ByList to take a Seq[T] instead of a List[T]
      </action>
      <action dev="timperrett" type="update" issue="88" system="assembla">
        Boxed payment status so that IPN cancelations appear as
        Empty. Breaking API change for implementors.
      </action>
      <action dev="dpp" type="fix" issue="94" system="assembla" due-to="vdichev">
        Textile parser outputs non-valid output. Changed some null to Null.
      </action>
      <action dev="dpp" type="add" system="assembla">
        Enhanced the documentation for an type signatures for Actors
      </action>
      <action dev="dpp" type="add" system="assembla">
        Revised Lift to use LiftActors and be compatible with Akka Actors
      </action>
      <action dev="dpp" type="fix" issue="126" system="assembla">
        S.deleteCookie broken in M6
      </action>
      <action dev="dpp" type="add" issue="125" system="assembla">
        DB.runQuery isn't ConnectionIdentifier-aware
      </action>
      <action dev="dpp" type="fix" issue="119" system="assembla">
        Misspelling in field name in ProtoExtendedSession
      </action>

      <action dev="dpp" type="fix" issue="120" system="assembla">
        net.liftweb.widgets.autocomplete in version 1.1-M6
        changed return type from NodeSeq to Elem
      </action>

      <action dev="dpp" type="fix" issue="122" system="assembla">
        StatefulSnippets generate invalid markup
      </action>

      <action dev="dpp" type="update" issue="142" system="assembla">
        Updated Lift to use Scala 2.7.7
      </action>

      <action dev="dpp" type="fix" issue="143" system="assembla">
        Stacked URL Rewriting correctly deals with params
      </action>

      <action dev="dpp" type="fix" issue="141" system="assembla">
        Simplified Factory signatures in LiftRules
      </action>

      <action dev="indrajitr" type="update" issue="127" system="assembla">
        Restructured Lift codebase (now categorized into lift-base, lift-persistence, lift-modules, lift-archetypes and lift-examples).
      </action>

    </release>

    <release version="1.1-M6" date="2009-10-09" description="Lift 1.1 Milestone 6">
      <action dev="indrajitr" type="update" issue="128" system="assembla">
        Project build models are more enriched and streamlined.
      </action>

      <action dev="joni" type="add">JSON diff and merge</action>
      <action dev="joni" type="update">Generalized JSON serialization</action>
      <action dev="joni" type="fix">Use paranamer to find out case class constructor argument names</action>

      <action dev="heiko.seeberger" type="fix" issue="84" system="assembla">Enhance CRUDify i18n</action>
      <action dev="heiko.seeberger" type="add" issue="82" system="assembla">Add parameterized ?? to S</action>
      <action dev="heiko.seeberger" type="fix" issue="87" system="assembla">Inaccurate ranges for previous and next (page) in CRUDify
      </action>
      <action dev="heiko.seeberger" type="fix" issue="81" system="assembla">No i18n for "Sign Up" in MetaMegaProtoUser.signupXhtm</action>
      <action dev="heiko.seeberger" type="fix" issue="111" system="assembla">Lost password submit button is not rendered correctly
      </action>
      <action dev="heiko.seeberger" type="fix" issue="113" system="assembla">Signup mail body not i18ned</action>
      <action dev="heiko.seeberger" type="fix" issue="114" system="assembla">Misspelled Key "pasword.changed" in ProtoUser.scala</action>
      <action dev="heiko.seeberger" type="fix" issue="123" system="assembla">Enhance Msgs snippet to optionally show all messages</action>
      <action dev="heiko.seeberger" type="fix" issue="157" system="assembla">MappedPassword contains misspelled key for unset password
      </action>
    </release>

    <release version="1.1-M5" date="2009-09-08" description="Lift 1.1 Milestone 5"/>

    <release version="1.1-M4" date="2009-08-04" description="Lift 1.1 Milestone 4">
      <action dev="<NAME>" type="add">Added HTTP abstraction for making Lift container agnostic.</action>
    </release>

    <release version="1.1-M3" date="2009-07-02" description="Lift 1.1 Milestone 3">
      <action dev="<NAME>" type="add">Added &lt;lift:tail&gt; builtin snippet for merging content at the end of
        body tag
      </action>
    </release>

    <release version="1.1-M1" date="2009-05-01" description="Lift 1.1 Milestone 1">
      <action dev="<NAME>" type="add">Fixed Bug #34 - lift processing directives should be implemented as
        snippets
      </action>
      <action dev="<NAME>" type="add">Added support for templates caching</action>
    </release>

    <release version="1.0" date="2009-02-26" description="First Major">
      <action dev="<NAME>" type="add">Added support for multiple resource bundles</action>
    </release>

    <release version="0.10" date="2009-01-14" description="api refactor">
      <action dev="<NAME>" type="update">Consolidate LiftRules</action>
      <action dev="<NAME>" type="update">Added HTTP authentication support</action>
      <action dev="<NAME>" type="update">Upgrade to Scala 2.7.3</action>
      <action dev="<NAME>" type="update">Upgrade to Scalacheck 1.5</action>
      <action dev="<NAME>" type="update">Upgrade to Specs 1.4.0</action>
      <action dev="<NAME>" type="update">Added Record/Field generic support</action>
      <action dev="<NAME>" type="update">Changed Can to Box</action>
      <action dev="<NAME>" type="update">Changed RequestState to Req</action>
      <action dev="<NAME>" type="update">Updated LiftView to be more syntactically pleasing</action>
      <action dev="<NAME>" type="update">Fixed a bug with how RequestVars and traits work</action>
      <action dev="<NAME>" type="update">Enhanced the DateTime inputs</action>
      <action dev="<NAME>" type="update">First pass at complete PayPal ITN and PDT stuff</action>
      <action dev="<NAME>" type="update">Refactoring of the PayPal stuff</action>
      <action dev="<NAME>" type="add">A Currency class</action>
      <action dev="<NAME>" type="add">Added a nifty mechanism for stateful form management (Hoot)</action>
      <action dev="<NAME>" type="add">Added fix CSS support</action>
      <action dev="<NAME>" type="add">Added support for other JS libraries</action>
      <action dev="<NAME>" type="add">Added JSON forms support</action>
      <action dev="<NAME>" type="update">Updated to jQuery 1.2.6</action>
      <action dev="timperrett" type="add">Added PayPal Integration module</action>
      <action dev="timperrett" type="update">Redesigned Gavatar widget</action>
    </release>

    <release version="0.9" date="2008-06-15" description="">
      <action dev="<NAME>" type="add">Added URL rewriting support</action>
      <action dev="<NAME>" type="add">Added CalendarDayView widget</action>
      <action dev="<NAME>" type="add">Added CalendarWeekView widget</action>
      <action dev="<NAME>" type="update">Switch from svn (code.google.com) to git (github) has scm to manage
        source
      </action>
    </release>

    <release version="0.8" date="2008-05-09" description="">
      <action dev="<NAME>" type="update">Use vscaladoc to generate API</action>
      <action dev="<NAME>" type="update">Compiled the project with Scala-2.7.1</action>
      <action dev="<NAME>" type="add">Start the lift-openid module</action>
      <action dev="<NAME>" type="add">Start the lift-oauth module</action>
      <action dev="<NAME>" type="add">Added CalendarMonthView widget</action>
      <action dev="<NAME>" type="add">Start the lift-widgets module</action>
      <action dev="<NAME>" type="add">Added ActorPing#scheduleAtFixedRate</action>
      <action dev="<NAME>" type="add">Added notices support for Comet actors</action>
      <action dev="<NAME>" type="add">Added JavaScript statements as JsCmd</action>
    </release>

    <release version="0.7" date="2008-04-03" description="">
      <action dev="<NAME>" type="add">
        Gave AMQPDispatcher users the ability to auto-reconnect to the amqp server if it restarts.
      </action>
      <action dev="<NAME>" type="update">
        - Separating html functions from S object to SHtml object
        - Putting LiftRules in its own file
        - Adding support for associating messages with ID's to allow form fields validation messages.
        - ValidationIssue renamed into FieldError and lives in http package
        - ErrorReport built in snippet was renamed to Msgs
        - Added Msg built in snippet used for form field messages (Renders only messages associated with this tag id)
      </action>
      <action dev="<NAME>" type="add">
        Extracted from the Helpers class, documented and tested ClassHelpers, ControlHelpers and TimeHelpers Traits
      </action>
      <action dev="<NAME>" type="add">
        Adding unload hooks so a user's lift app can make sure that certain methods are called when
        the war is unloaded by the servlet container.
      </action>
      <action dev="<NAME>" type="add">
        Adding a bunch of Responses to help make building RESTful Web Services easier in lift.
      </action>
      <action dev="<NAME>" type="add">
        Added extensible support for specifying the behavior for invalid URI's (with or without site map)
      </action>
      <action dev="<NAME>" type="update">
        Changes LiftServlet object name to LiftRules
      </action>
      <action dev="<NAME>" type="update">
        Changed Loc behavior to use ResponseIt
      </action>
      <action dev="<NAME>" type="add">
        Added RedirectWithState
      </action>
      <action dev="<NAME>" type="add">
        Added a KeyedCache for model objects built on top of the LRU class.
      </action>
      <action dev="<NAME>" type="updates">
        Split lift-core into several modules : lift-webkit, lift-amqp, lift-facebook, lift-testkit, lift-textile,
        lift-xmpp
      </action>
    </release>

    <release version="0.6" date="2008-03-10" description="">
      <action dev="<NAME>" type="update">
        Compiled the project with Scala-2.7.0
      </action>
      <action dev="<NAME>" type="add">
        Added RedirectResponse class
      </action>
      <action dev="<NAME>" type="add">
        Added lift core localization support.
      </action>
      <action dev="<NAME>" type="add">
        Added Cookie support.
      </action>
      <action dev="<NAME>" type="update">
        Updating our version of jQuery to 1.2.3.
      </action>
      <action dev="<NAME>" type="add">
        Added a new method to MetaMapper that lets you find models by PreparedStatement. findByPreparedStatement
      </action>
    </release>

    <release version="0.5" date="2008-02-05" description="">
      <action dev="<NAME>" type="add">Added a new QueryParam, ByList which lets you query on Model objects with a
        List[T].
      </action>
      <action dev="<NAME>" type="update">Revised the example site to use Blueprint CSS for style</action>
      <action dev="<NAME>" type="add">jlift JavaScript utilities and associated binder helpers.</action>
      <action dev="<NAME>" type="add">Blueprint CSS built in (version 0.6) so it can be served via /classpath
      </action>
      <action dev="<NAME>" type="add">XML -> JavaScript bindings so that JSON -> XHTML rendering can be defined
        using Scala XML literals, but the resulting JavaScript code can be sent to the browser to do mass rendering of
        JSON objects.
      </action>
      <action dev="<NAME>" type="add">Added JSON support including: - S.buildJSONFunc - JSONHandler class - Lots
        of
        fancy JavaScript expression building
      </action>
      <action dev="<NAME>" type="update">When lift is running in test mode, the default form generators will
        insert
        lift:field_name attribute into the form fields to aid in testing
      </action>
      <action dev="<NAME>" type="update">
        Added json2.js (and minified version)
        Enhanced the resource serving stuff so that:
        - The path is defined in LiftServlet and changable (defaults to "classpath")
        - Moved the resource location from the root to "toserve" (can be changed) to avoid any possible way of serving
        up
        classes
        - The white list is a Partial Function for more flexibility
        - The white list by default contains jquery.js and json.js
        - There's a re-writer to re-write the request into an actual file (so jquery.js gets re-written to
        jquery-1.2.2-min.js)
      </action>
      <action dev="<NAME>" type="add">Parser Combinator Helper routines</action>
      <action dev="<NAME>" type="update">MappedField.toForm now returns a Can[NodeSeq] so a field can be omitted
        from a form
      </action>
      <action dev="<NAME>" type="add">Added the "record" and "record_mgt" packages with half-baked record and
        field
        stuff in them
      </action>
      <action dev="<NAME>" type="update">Added LocInfo and LocInfoVal to SiteMap for storing CSS and other tidbits
        about each menu item
      </action>
      <action dev="<NAME>" type="update">Fixed the 'Welcome to the your project' type-o</action>
      <action dev="<NAME>" type="update">Further abstracted the whole logging thing. There's a default log4j setup
        that can be overriden. The LiftLogger trait is made concrete in Log4JLogger, but the generic LiftLogger creation
        is done by function that can be modified in LogBoot: var loggerByName: String => LiftLogger = _logger; var
        loggerByClass: Class => LiftLogger = _loggerCls; One can insert a new logging system into lift by replacing the
        loggerByName and loggerByClass functions with appropriate functions that return a LiftLogger.
      </action>
      <action dev="<NAME>" type="add">MappedText and MapperFakeClob classes</action>
      <action dev="<NAME>" type="update">Extensive updates to the &lt;lift:xxx /&gt; tag mechanism that uses tag
        labels as snippets and support for adding arbitrary tag handling to lift.
      </action>
    </release>

    <release version="0.4" date="2008-01-07" description="">
      <action dev="<NAME>" type="add">Added XMPP support for lift applications. see the package net.liftweb.xmpp
      </action>
      <action dev="<NAME>" type="add">Added support for switching XHTML MIME type serving off. See
        LiftServet.useXhtmlMimeType
      </action>
      <action dev="<NAME>" type="update">Upgrade to scala-2.6.1</action>
      <action dev="<NAME>" type="update">Support for PosgreSQL 8.1 and some tests</action>
      <action dev="<NAME>" type="add">Adding support to H2 to lift-ORM</action>
      <action dev="<NAME>" type="add">Adding support to PostgreSQL to lift-ORM</action>
      <action dev="<NAME>" type="add">/html/body//head are merged into /html/head, to allow html fragment inlined
        into body to contribute to /html/head
      </action>
      <action dev="<NAME>" type="add">Adding a new lift archetype, lift-archetype-basic that will generate a lift
        template with basic database and users functionality.
      </action>
      <action dev="<NAME>" type="add">Adding LiftConsole to archetype to play with lift-based application in
        console
        mode
      </action>
      <action dev="<NAME>" type="add">Adding mock for HTTPRequest and Co</action>
      <action dev="<NAME>" type="add">Adding first Specs test to test lift-core</action>
      <action dev="<NAME>" type="update">The look of the maven site generated (for lift itself and for
        archetypes)
      </action>
      <action dev="<NAME>" type="remove">Removing deprecated new_proj (replaced by archetypes)</action>
      <action dev="<NAME>" type="remove">Removing lift-archetype-hellolift (replaced by lift-archetype-basic (and
        the sample application hellolift))
      </action>
    </release>

    <release version="0.3.0" date="2007-12-07" description="champagne">
      <action dev="<NAME>" type="add">Support for Ajax including integration of jQuery</action>
      <action dev="<NAME>" type="add">Radically improved Comet support</action>
      <action dev="<NAME>" type="add">Facebook API support</action>
      <action dev="<NAME>" type="add">AMQP (RabbitMQ) support</action>
      <action dev="<NAME>" type="add">Radically improved Comet support</action>
      <action dev="<NAME>" type="add">Built in Traits for Users (including user management) and Tags</action>
      <action dev="<NAME>" type="add">Support for a variety of new Mapped types (Country, Locale, Postal Code,
        etc.)
      </action>
      <action dev="<NAME>" type="add">New examples including a real-time blog</action>
      <action dev="<NAME>" type="update">Project builder using Maven and significantly improved Maven support
      </action>
      <action dev="<NAME>" type="add">Localization</action>
      <action dev="<NAME>" type="add">Improved XHTML support including proper headers based on browser type
      </action>
      <action dev="Team" type="update">Improved documentation</action>
      <action dev="Team" type="update">Radically improved samples and "getting started" pieces</action>
      <action dev="<NAME>" type="add">support for multiple database instances</action>
      <action dev="<NAME>" type="add">improved regex support including some Regex -> object creation support for
        parsing
      </action>
      <action dev="<NAME>" type="add">a new and improved textile parser</action>
    </release>

    <release version="0.2.0" date="2007-06-06">
      <action dev="<NAME>" type="add">"new_proj" script to create a new project</action>
      <action dev="<NAME>" type="add">HTTP test framework for writing tests</action>
      <action dev="<NAME>" type="add">Skittr code example -- a Twitter clone in lift and Scala</action>
      <action dev="<NAME>" type="add">SiteMap -- define site navigation and access control rules in a Domain
        Specific Language
      </action>
      <action dev="<NAME>" type="add">each model can live in a different database (multi database support)
      </action>
      <action dev="<NAME>" type="add">support for Jetty continuations on AJAX calls (automatic, not application
        code
        required)
      </action>
      <action dev="<NAME>" type="update">improvements to query building</action>
      <action dev="<NAME>" type="add">Shared session variable across Snippets and Controllers</action>
      <action dev="<NAME>" type="add">"recursive snippets" to re-write the page</action>
      <action dev="<NAME>" type="add">ability to pass attributes to Snippets and Controllers</action>
      <action dev="<NAME>" type="add">built in support for blowfish encryption</action>
      <action dev="<NAME>" type="add">logging via log4j</action>
      <action dev="<NAME>" type="add">MappedListEnum to persist List[Enumeration] easily</action>
      <action dev="<NAME>" type="add">lots of HTML form elements (select, multiselect, etc.)</action>
      <action dev="<NAME>" type="update">enhanced SQL queries</action>
      <action dev="<NAME>" type="add">filterMap support for queries as the rows come back from the database
      </action>
      <action dev="<NAME>" type="add">comparison operators for MappedField</action>
      <action dev="<NAME>" type="add">run modes (Production, Test, Development, etc.)</action>
      <action dev="<NAME>" type="add">properties that are based on user, machine, and run mode</action>
      <action dev="<NAME>" type="add">filters for fields such that input (and comparison and queries) can
        automatically be made upper case, lower case, trim, etc.
      </action>
    </release>

    <release version="0.1.0" date="2007-02-26" description="first public release"></release>

  </body>
</document>
<commit_msg>Updated changes.xml<commit_after><?xml version="1.0" encoding="UTF-8"?>

<!--
  ~ Copyright 2007-2010 WorldWide Conferencing, LLC
  ~
  ~ 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.
  -->

<document xmlns="http://maven.apache.org/changes/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">

  <properties>
    <title>Changes in ${project.name}</title>
    <author>The Lift Team</author>
  </properties>

  <body>
    <!-- mini guide
    <action
        dev     = "Id of developer who committed the change - must be same as the one in POM"
        type    = "add|fix|remove|update"
        issue   = "(optional) Id of the issue related to this change"
        system  = "(optional) Set this to 'github' if this action has an issue id"
        due-to  = "(optional) Name of the person 'non-committer' to be credited for this change">
      Short description of the change
    </action>
   see http://maven.apache.org/plugins/maven-changes-plugin/usage.html for full guide
   -->
    <release version="${project.version}" date="${publishDate}" description="Lift 2.0 Snapshot">
      <action dev="dpp" type="fix" issue="342" system="assembla">
	Fix runtime errors in a couple of example programs
      </action>
      <action dev="dpp" type="add" issue="350" system="assembla">
	Added toHtml method to Mapper/MetaMapper
      </action>
      <action dev="dpp" type="fix" issue="367" system="assembla">
	Issues with template cache updating incorrectly
      </action>
      <action dev="dpp" type="add" issue="70" system="assembla">
	Added support for area tags
      </action>
      <action dev="hseeberger" type="fix" issue="112" system="assembla">
	Fixed misspelled keys for resource bundles: *pasword* and reset.password.confirmarion
      </action>
      <action dev="hseeberger" type="add" issue="251" system="assembla">
	xxxMenuLoc methods now delegate to protected xxxMenuLocParams methods in order to get their LocParams.
      </action>
      <action dev="dpp" type="add" issue="353" system="assembla">
	Added NOT IN to Mapper query builder
      </action>
      <action dev="dpp" type="add" issue="335" system="assembla">
	Enhancements to LiftActors and LRU to support Goat Rodeo
      </action>
      <action dev="dpp" type="fix" issue="296" system="assembla">
	Fixed a comparison bug in ReplaceOption (wishing for type-safety in ==)
      </action>
      <action dev="dpp" type="add" issue="298" system="assembla">
	ByList is uniqued before the query is built
      </action>
      <action dev="dpp" type="add" issue="343" system="assembla">
	Added linkToSelf option to Menu.build snippet
      </action>
      <action dev="dpp" type="fix" issue="357" system="assembla">
	Support for Scala 2.8 deltas in the way Nodes are compared
      </action>
      <action dev="dpp" type="fix" issue="239" system="assembla">
	304 responses should not include Content-Type headers
      </action>
      <action dev="hseeberger" type="add" issue="326" system="assembla">
        Extend Comet (ListenerManager) to selectively update subscribers
      </action>
      <action dev="jonifreeman" type="fix" issue="323" system="assembla">
        lift-Json doesn't appear to be correctly handling attributes
      </action>
      <action dev="jonifreeman" type="fix" issue="279" system="assembla">
        net.liftweb.json.JsonParser.extract fails with List[List[Int]]
      </action>
      <action dev="jonifreeman" type="add" issue="279" system="assembla">
        Multidimensional arrays supported in JSON serialization and extraction
      </action>
      <action dev="jonifreeman" type="update" issue="303" system="assembla">
        JSON object can be extracted into scala.Map (and scala.Map can be serialized as JSON object). Recursive types
        can be serialized.
      </action>
      <action dev="jonifreeman" type="update" issue="333" system="assembla">
        JSON pull parser API
      </action>
      <action dev="indrajitr" type="update" issue="292" system="assembla">
        Make Lfit both Scala 2.7 and 2.8 friendly
      </action>
      <action dev="indrajitr" type="fix" issue="307" system="assembla">
        Streamline JDBC library dependencies
      </action>
      <action dev="mads" type="fix" issue="46" system="assembla">
        autocomplete widget - make options settable
      </action>
      <action dev="hoffrocket" type="update" issue="304" system="assembla">
        Upgrade jQuery to 1.4.1
      </action>
      <action dev="hoffrocket" type="add" issue="311" system="assembla">
        Enable jQuery version switching in LiftRules
      </action>
      <action dev="marius.danciu" type="fix" issue="280" system="assembla">
        Ajax form submission with multiple submit buttons
      </action>
      <action dev="marius.danciu" type="new" issue="286" system="assembla">
        Submitting a form by ID and provide a Scala function
      </action>
      <action dev="marius.danciu" type="fix" issue="295" system="assembla">
        Ajax change from () => Any to () => JsCmd
      </action>
      <action dev="dpp" type="fix" issue="254" system="assembla">
        Add field-by-field error notifications to CRUDified fields
      </action>
      <action dev="dpp" type="fix" issue="282" system="assembla">
        MappedLongForeignKey::asJsonValue should generate JNull
      </action>
      <action dev="dpp" type="fix" issue="284" system="assembla">
        Additional tag support for TextileParser
      </action>
      <action dev="dpp" type="fix" issue="290" system="assembla">
        TextileParser molests divs
      </action>
      <action dev="dpp" type="add" issue="293" system="assembla">
        New LRU Map that works better than Apache LRU map
      </action>
      <action dev="dpp" type="fix" issue="308" system="assembla">
        The order of fields is random in Mapper
      </action>
      <action dev="dpp" type="add" issue="314" system="assembla">
        Allow thread-local Connection Identerifer resolution
      </action>
      <action dev="dpp" type="fix" issue="315" system="assembla">
        How overriding of _showAllTemplate to show a limited number of columns
      </action>
      <action dev="dpp" type="fix" issue="319" system="assembla">
        Control characters in input can lead to Denial of Service attacks
      </action>
    </release>

    <release version="2.0-M1" date="2010-01-13" description="Lift 2.0 Milestone 1">
      <action dev="boisvert" type="fix" issue="273" system="assembla">
        Changed LiftRules.getResourceAsStream() to doWithResource() to ensure InputStream is always closed
        Removed duplicate LiftRules.finder()
      </action>
      <action dev="dchenbecker" type="fix" issue="232" system="assembla">
        Added logging of bad prepared statements to help diagnose things.
      </action>
      <action dev="dchenbecker" type="fix" issue="231" system="assembla">
        Fixed Mapper to properly deal with generated values
      </action>
      <action dev="dpp" type="update" issue="268" system="assembla">
        Misc sitemap enhancements
      </action>
      <action dev="dpp" type="fix" issue="267" system="assembla">
        Lift explicitly closed streams rather than waiting for garbage collection
      </action>
      <action dev="dpp" type="fix" issue="266" system="assembla">
        Jetty restarts do not cause exceptions to be thrown
      </action>
      <action dev="dpp" type="update" issue="262" system="assembla">
        lift-json's Jsvalue may be used with JsonResponse
      </action>
      <action dev="dpp" type="fix" issue="248" system="assembla">
        Fixed NPE problems in Mapper to Json
      </action>
      <action dev="dpp" type="update" issue="247" system="assembla">
        Better handling of flot widget in Comet
      </action>
      <action dev="dpp" type="fix" issue="244" system="assembla">
        Fixed misc Textile bugs
      </action>
      <action dev="dpp" type="update" issue="243" system="assembla">
        Enhanced stateful rewrite
      </action>
      <action dev="dpp" type="update" issue="242" system="assembla">
        Added post-commit hook to DB
      </action>
      <action dev="dpp" type="update" issue="241" system="assembla">
        Wizard supports file upload forms
      </action>
      <action dev="dpp" type="update" issue="240" system="assembla">
        Enhanced TestCond widget
      </action>
      <action dev="dpp" type="fix" issue="239" system="assembla">
        304 responses no longer contain content type
      </action>
      <action dev="dpp" type="update" issue="236" system="assembla">
        Enhanced connection pool logic
      </action>
      <action dev="dpp" type="fix" issue="234" system="assembla">
        Fixed some null exceptions with DB queries
      </action>
      <action dev="dpp" type="fix" issue="223" system="assembla">
        Fixed problems with the JNDI context
      </action>
      <action dev="dpp" type="fix" issue="222" system="assembla">
        Fixed synchronization issues with Vars
      </action>
      <action dev="dpp" type="update" issue="276" system="assembla">
        OAuth support (thanks to the FourSquare guys)
      </action>
      <action dev="dpp" type="fix" issue="275" system="assembla">
        File handles released correctly in Jetty
      </action>
      <action dev="dpp" type="update" issue="250" system="assembla">
        Extracted "Screen" code from Wizard for stand-alone declarative input screens
      </action>
      <action dev="indrajitr" type="update">
        Restructure project (segregated into three logical projects: framework, archetypes, examples)
      </action>
    </release>

    <release version="1.1-M8" date="2009-12-10" description="Lift 1.1 Milestone 8">
      <action dev="boisvert" type="add" issue="" system="">
        Added new built-in &lt;lift:html5&gt; snippet that sets HTML5 DOCTYPE on the XHTML response
      </action>
      <action dev="boisvert" type="fix" issue="218" system="assembla">
        JqJsCmds.ModalDialog now takes JsObj argument to work with BlockUI v2.x
      </action>
      <action dev="boisvert" type="fix" issue="" system="assembla">
        Fixed typo in DerbyDriver.integerIndexColumnType: IDENITY -> IDENTITY
      </action>
      <action dev="dchenbecker" type="fix" issue="211" system="assembla">
        Fixed Mapper to use DriverType.columnTypeMap everywhere
      </action>
      <action dev="dchenbecker" type="fix" issue="210" system="assembla">
        Fixed Mapper logging to properly log inserts, updates and deletes
      </action>
      <action dev="<NAME>" type="fix" issue="139" system="assembla">
        Breaking Changes:

        1) LocParam

        LocParam has been made a sealed trait to facilitate pattern matching within the Lift codebase and has had a contravariant type parameter added to its type to facilitate typesafe interactions with Loc[T]. The new trait is hence LocParam[-T]. As LocParam is now a sealed trait, I have added an extension point for user-specified LocParam subtypes as UserLocParam[-T] extends LocParam[T]. Since the new type parameter is contravariant, LocParam subclasses that are applicable for any Loc[T] have the type LocParam[Any], and a type alias AnyLocParam has been added for this type.

        The Loc.checkProtected method now enforces type consistency between the evaluated Link[T] and the list of LocParam[T] which are used to evaluate whether the link is accessible given the specified parameters.

        2) Renames

        Previously, the "Param" suffix was used for two unrelated purposes within Loc: first, to refer to the type parameter of the Loc, and secondly for the LocParam configuration. This overloading made the code and the API somewhat difficult to read, so the first usage has been removed resulting in the following renames:

        ParamType => T
        NullLocParams => //removed, Unit is sufficient!
        Loc.defaultParams => Loc.defaultValue
        Loc.forceParam => Loc.overrideValue
        Loc.foundParam => Loc.requestValue
        Loc.additionalKidParams => Loc.childValues

        After this change, all instances of the "param" name within Loc should refer to something having to do with LocParam instances.

        Non-Breaking Additions:

        case class IfValue[T](test: Box[T] => Boolean, failMsg: FailMsg) extends LocParam[T]
        case class UnlessValue[T](test: Box[T] => Boolean, failMsg: FailMsg) extends LocParam[T]
        case class TestValueAccess[T](func: Box[T] => Box[LiftResponse]) extends LocParam[T]

        If you are using a non-Unit typed Loc, you can use these LocParam instances to enforce access rules at the value level.

        case class ValueTemplate[T](template: Box[T] => NodeSeq) extends LocParam[T] //per-value template selection

        DataLoc[T] subclass of Loc was added to facilitate the use of the new more typeful LocParam subtypes.

        A few changes to Link:

        Since Link.createLink creates a Box[Text] (and not a clickable link) a couple of methods were added to create the intermediate, unboxed
        values in order that subclasses can more easily manipulate the resulting path:

        Link.pathList(value: T): List[String] // added to facilitate creation of value-aware paths by subclasses.
        Link.createPath(value: T): String //creates the String representation of the path that is subsequently turned into XML and boxed by Link.createLink
      </action>

      <action dev="marius.danciu" type="fix" issue="56" system="assembla">
        Allowing page fragments wrapped by &lt;lift:lazy-load&gt; node to be processed and loaded asynchronously.
      </action>

      <action dev="boisvert" type="fix" issue="153" system="assembla">
        Updated documentation for Msgs
      </action>

      <action dev="boisvert" type="fix" issue="177" system="assembla">
        XmlResponse(...) now accepts optional HTTP status code, mime type and cookies.
      </action>

      <action dev="boisvert" type="fix" issue="14" system="assembla">
        SQL Server Alter Table Fails
      </action>

      <action dev="boisvert" type="fix" issue="170" system="assembla">
        Typo in Req.scala
      </action>

      <action dev="hseeberger" type="fix" issue="166" system="assembla">
        Snapshot jars contains several Box.class files
      </action>

      <action dev="indrajitr" type="update" issue="156" system="assembla" due-to="econoplas">
        Update hibernate-entitymanager to 3.4.0.GA.
      </action>

      <action dev="indrajitr" type="update" issue="168" system="assembla" due-to="awhitford">
        Adjust javax.mail version range to avoid issues when Sun's repo is used and
        honor javax.activation being transitively pulled up my javax.mail.
      </action>

      <action dev="indrajitr" type="fix" issue="180" system="assembla">
        Fix scala:doc and vscaladoc configuration along with provision for module specific configuration for packageLinkDefs.
      </action>

      <action dev="indrajitr" type="update" issue="203" system="assembla">
        Enforce Maven version 2.1.0 or higher, but lower than 3.0.
      </action>

      <action dev="indrajitr" type="fix" issue="161" system="assembla">
        Upgrade Lift archetypes to use the new archetype metadata format. Enhance/fix archetype integration tests during build.
      </action>

      <action dev="indrajitr" type="fix" issue="227" system="assembla">
        Enhance archetype metadata not to depend on ext.vm and allow one to set Lift version (-DliftVersion) or Scala version (-DscalaVersion) during archetype:generate.
      </action>

      <action dev="dchenbecker" type="add" issue="148" system="assembla">
        Add ability to call JS code after AJAX form submit
      </action>

      <action dev="dchenbecker" type="add" issue="181" system="assembla">
        Add AJAX editable field generator to SHtml, add AjaxEditableField to Mapper.
      </action>

      <action dev="dchenbecker" type="fix" issue="16" system="assembla">
        Fixed SQL Server drivers to use version-appropriate unicode columns for text.
      </action>

    </release>

    <release version="1.1-M7" date="2009-11-07" description="Lift 1.1 Milestone 7">
      <action dev="alex.boisvert" type="update" issue="57" system="assembla">
        Improve error message if database is not supported
      </action>
      <action dev="alex.boisvert" type="update" issue="77" system="assembla">
        Change net.liftweb.mapper.ByList to take a Seq[T] instead of a List[T]
      </action>
      <action dev="timperrett" type="update" issue="88" system="assembla">
        Boxed payment status so that IPN cancelations appear as
        Empty. Breaking API change for implementors.
      </action>
      <action dev="dpp" type="fix" issue="94" system="assembla" due-to="vdichev">
        Textile parser outputs non-valid output. Changed some null to Null.
      </action>
      <action dev="dpp" type="add" system="assembla">
        Enhanced the documentation for an type signatures for Actors
      </action>
      <action dev="dpp" type="add" system="assembla">
        Revised Lift to use LiftActors and be compatible with Akka Actors
      </action>
      <action dev="dpp" type="fix" issue="126" system="assembla">
        S.deleteCookie broken in M6
      </action>
      <action dev="dpp" type="add" issue="125" system="assembla">
        DB.runQuery isn't ConnectionIdentifier-aware
      </action>
      <action dev="dpp" type="fix" issue="119" system="assembla">
        Misspelling in field name in ProtoExtendedSession
      </action>

      <action dev="dpp" type="fix" issue="120" system="assembla">
        net.liftweb.widgets.autocomplete in version 1.1-M6
        changed return type from NodeSeq to Elem
      </action>

      <action dev="dpp" type="fix" issue="122" system="assembla">
        StatefulSnippets generate invalid markup
      </action>

      <action dev="dpp" type="update" issue="142" system="assembla">
        Updated Lift to use Scala 2.7.7
      </action>

      <action dev="dpp" type="fix" issue="143" system="assembla">
        Stacked URL Rewriting correctly deals with params
      </action>

      <action dev="dpp" type="fix" issue="141" system="assembla">
        Simplified Factory signatures in LiftRules
      </action>

      <action dev="indrajitr" type="update" issue="127" system="assembla">
        Restructured Lift codebase (now categorized into lift-base, lift-persistence, lift-modules, lift-archetypes and lift-examples).
      </action>

    </release>

    <release version="1.1-M6" date="2009-10-09" description="Lift 1.1 Milestone 6">
      <action dev="indrajitr" type="update" issue="128" system="assembla">
        Project build models are more enriched and streamlined.
      </action>

      <action dev="joni" type="add">JSON diff and merge</action>
      <action dev="joni" type="update">Generalized JSON serialization</action>
      <action dev="joni" type="fix">Use paranamer to find out case class constructor argument names</action>

      <action dev="heiko.seeberger" type="fix" issue="84" system="assembla">Enhance CRUDify i18n</action>
      <action dev="heiko.seeberger" type="add" issue="82" system="assembla">Add parameterized ?? to S</action>
      <action dev="heiko.seeberger" type="fix" issue="87" system="assembla">Inaccurate ranges for previous and next (page) in CRUDify
      </action>
      <action dev="heiko.seeberger" type="fix" issue="81" system="assembla">No i18n for "Sign Up" in MetaMegaProtoUser.signupXhtm</action>
      <action dev="heiko.seeberger" type="fix" issue="111" system="assembla">Lost password submit button is not rendered correctly
      </action>
      <action dev="heiko.seeberger" type="fix" issue="113" system="assembla">Signup mail body not i18ned</action>
      <action dev="heiko.seeberger" type="fix" issue="114" system="assembla">Misspelled Key "pasword.changed" in ProtoUser.scala</action>
      <action dev="heiko.seeberger" type="fix" issue="123" system="assembla">Enhance Msgs snippet to optionally show all messages</action>
      <action dev="heiko.seeberger" type="fix" issue="157" system="assembla">MappedPassword contains misspelled key for unset password
      </action>
    </release>

    <release version="1.1-M5" date="2009-09-08" description="Lift 1.1 Milestone 5"/>

    <release version="1.1-M4" date="2009-08-04" description="Lift 1.1 Milestone 4">
      <action dev="<NAME>" type="add">Added HTTP abstraction for making Lift container agnostic.</action>
    </release>

    <release version="1.1-M3" date="2009-07-02" description="Lift 1.1 Milestone 3">
      <action dev="<NAME>" type="add">Added &lt;lift:tail&gt; builtin snippet for merging content at the end of
        body tag
      </action>
    </release>

    <release version="1.1-M1" date="2009-05-01" description="Lift 1.1 Milestone 1">
      <action dev="<NAME>" type="add">Fixed Bug #34 - lift processing directives should be implemented as
        snippets
      </action>
      <action dev="<NAME>" type="add">Added support for templates caching</action>
    </release>

    <release version="1.0" date="2009-02-26" description="First Major">
      <action dev="<NAME>" type="add">Added support for multiple resource bundles</action>
    </release>

    <release version="0.10" date="2009-01-14" description="api refactor">
      <action dev="<NAME>" type="update">Consolidate LiftRules</action>
      <action dev="<NAME>" type="update">Added HTTP authentication support</action>
      <action dev="<NAME>" type="update">Upgrade to Scala 2.7.3</action>
      <action dev="<NAME>" type="update">Upgrade to Scalacheck 1.5</action>
      <action dev="<NAME>" type="update">Upgrade to Specs 1.4.0</action>
      <action dev="<NAME>" type="update">Added Record/Field generic support</action>
      <action dev="<NAME>" type="update">Changed Can to Box</action>
      <action dev="<NAME>" type="update">Changed RequestState to Req</action>
      <action dev="<NAME>" type="update">Updated LiftView to be more syntactically pleasing</action>
      <action dev="<NAME>" type="update">Fixed a bug with how RequestVars and traits work</action>
      <action dev="<NAME>" type="update">Enhanced the DateTime inputs</action>
      <action dev="<NAME>" type="update">First pass at complete PayPal ITN and PDT stuff</action>
      <action dev="<NAME>" type="update">Refactoring of the PayPal stuff</action>
      <action dev="<NAME>" type="add">A Currency class</action>
      <action dev="<NAME>" type="add">Added a nifty mechanism for stateful form management (Hoot)</action>
      <action dev="<NAME>" type="add">Added fix CSS support</action>
      <action dev="<NAME>" type="add">Added support for other JS libraries</action>
      <action dev="<NAME>" type="add">Added JSON forms support</action>
      <action dev="<NAME>" type="update">Updated to jQuery 1.2.6</action>
      <action dev="timperrett" type="add">Added PayPal Integration module</action>
      <action dev="timperrett" type="update">Redesigned Gavatar widget</action>
    </release>

    <release version="0.9" date="2008-06-15" description="">
      <action dev="<NAME>" type="add">Added URL rewriting support</action>
      <action dev="<NAME>" type="add">Added CalendarDayView widget</action>
      <action dev="<NAME>" type="add">Added CalendarWeekView widget</action>
      <action dev="<NAME>" type="update">Switch from svn (code.google.com) to git (github) has scm to manage
        source
      </action>
    </release>

    <release version="0.8" date="2008-05-09" description="">
      <action dev="<NAME>" type="update">Use vscaladoc to generate API</action>
      <action dev="<NAME>" type="update">Compiled the project with Scala-2.7.1</action>
      <action dev="<NAME>" type="add">Start the lift-openid module</action>
      <action dev="<NAME>" type="add">Start the lift-oauth module</action>
      <action dev="<NAME>" type="add">Added CalendarMonthView widget</action>
      <action dev="<NAME>" type="add">Start the lift-widgets module</action>
      <action dev="<NAME>" type="add">Added ActorPing#scheduleAtFixedRate</action>
      <action dev="<NAME>" type="add">Added notices support for Comet actors</action>
      <action dev="<NAME>" type="add">Added JavaScript statements as JsCmd</action>
    </release>

    <release version="0.7" date="2008-04-03" description="">
      <action dev="<NAME>" type="add">
        Gave AMQPDispatcher users the ability to auto-reconnect to the amqp server if it restarts.
      </action>
      <action dev="<NAME>" type="update">
        - Separating html functions from S object to SHtml object
        - Putting LiftRules in its own file
        - Adding support for associating messages with ID's to allow form fields validation messages.
        - ValidationIssue renamed into FieldError and lives in http package
        - ErrorReport built in snippet was renamed to Msgs
        - Added Msg built in snippet used for form field messages (Renders only messages associated with this tag id)
      </action>
      <action dev="<NAME>" type="add">
        Extracted from the Helpers class, documented and tested ClassHelpers, ControlHelpers and TimeHelpers Traits
      </action>
      <action dev="<NAME>" type="add">
        Adding unload hooks so a user's lift app can make sure that certain methods are called when
        the war is unloaded by the servlet container.
      </action>
      <action dev="<NAME>" type="add">
        Adding a bunch of Responses to help make building RESTful Web Services easier in lift.
      </action>
      <action dev="<NAME>" type="add">
        Added extensible support for specifying the behavior for invalid URI's (with or without site map)
      </action>
      <action dev="<NAME>" type="update">
        Changes LiftServlet object name to LiftRules
      </action>
      <action dev="<NAME>" type="update">
        Changed Loc behavior to use ResponseIt
      </action>
      <action dev="<NAME>" type="add">
        Added RedirectWithState
      </action>
      <action dev="<NAME>" type="add">
        Added a KeyedCache for model objects built on top of the LRU class.
      </action>
      <action dev="<NAME>" type="updates">
        Split lift-core into several modules : lift-webkit, lift-amqp, lift-facebook, lift-testkit, lift-textile,
        lift-xmpp
      </action>
    </release>

    <release version="0.6" date="2008-03-10" description="">
      <action dev="<NAME>" type="update">
        Compiled the project with Scala-2.7.0
      </action>
      <action dev="<NAME>" type="add">
        Added RedirectResponse class
      </action>
      <action dev="<NAME>" type="add">
        Added lift core localization support.
      </action>
      <action dev="<NAME>" type="add">
        Added Cookie support.
      </action>
      <action dev="<NAME>" type="update">
        Updating our version of jQuery to 1.2.3.
      </action>
      <action dev="<NAME>" type="add">
        Added a new method to MetaMapper that lets you find models by PreparedStatement. findByPreparedStatement
      </action>
    </release>

    <release version="0.5" date="2008-02-05" description="">
      <action dev="<NAME>" type="add">Added a new QueryParam, ByList which lets you query on Model objects with a
        List[T].
      </action>
      <action dev="<NAME>" type="update">Revised the example site to use Blueprint CSS for style</action>
      <action dev="<NAME>" type="add">jlift JavaScript utilities and associated binder helpers.</action>
      <action dev="<NAME>" type="add">Blueprint CSS built in (version 0.6) so it can be served via /classpath
      </action>
      <action dev="<NAME>" type="add">XML -> JavaScript bindings so that JSON -> XHTML rendering can be defined
        using Scala XML literals, but the resulting JavaScript code can be sent to the browser to do mass rendering of
        JSON objects.
      </action>
      <action dev="<NAME>" type="add">Added JSON support including: - S.buildJSONFunc - JSONHandler class - Lots
        of
        fancy JavaScript expression building
      </action>
      <action dev="<NAME>" type="update">When lift is running in test mode, the default form generators will
        insert
        lift:field_name attribute into the form fields to aid in testing
      </action>
      <action dev="<NAME>" type="update">
        Added json2.js (and minified version)
        Enhanced the resource serving stuff so that:
        - The path is defined in LiftServlet and changable (defaults to "classpath")
        - Moved the resource location from the root to "toserve" (can be changed) to avoid any possible way of serving
        up
        classes
        - The white list is a Partial Function for more flexibility
        - The white list by default contains jquery.js and json.js
        - There's a re-writer to re-write the request into an actual file (so jquery.js gets re-written to
        jquery-1.2.2-min.js)
      </action>
      <action dev="<NAME>" type="add">Parser Combinator Helper routines</action>
      <action dev="<NAME>" type="update">MappedField.toForm now returns a Can[NodeSeq] so a field can be omitted
        from a form
      </action>
      <action dev="<NAME>" type="add">Added the "record" and "record_mgt" packages with half-baked record and
        field
        stuff in them
      </action>
      <action dev="<NAME>" type="update">Added LocInfo and LocInfoVal to SiteMap for storing CSS and other tidbits
        about each menu item
      </action>
      <action dev="<NAME>" type="update">Fixed the 'Welcome to the your project' type-o</action>
      <action dev="<NAME>" type="update">Further abstracted the whole logging thing. There's a default log4j setup
        that can be overriden. The LiftLogger trait is made concrete in Log4JLogger, but the generic LiftLogger creation
        is done by function that can be modified in LogBoot: var loggerByName: String => LiftLogger = _logger; var
        loggerByClass: Class => LiftLogger = _loggerCls; One can insert a new logging system into lift by replacing the
        loggerByName and loggerByClass functions with appropriate functions that return a LiftLogger.
      </action>
      <action dev="<NAME>" type="add">MappedText and MapperFakeClob classes</action>
      <action dev="<NAME>" type="update">Extensive updates to the &lt;lift:xxx /&gt; tag mechanism that uses tag
        labels as snippets and support for adding arbitrary tag handling to lift.
      </action>
    </release>

    <release version="0.4" date="2008-01-07" description="">
      <action dev="<NAME>" type="add">Added XMPP support for lift applications. see the package net.liftweb.xmpp
      </action>
      <action dev="<NAME>" type="add">Added support for switching XHTML MIME type serving off. See
        LiftServet.useXhtmlMimeType
      </action>
      <action dev="<NAME>" type="update">Upgrade to scala-2.6.1</action>
      <action dev="<NAME>" type="update">Support for PosgreSQL 8.1 and some tests</action>
      <action dev="<NAME>" type="add">Adding support to H2 to lift-ORM</action>
      <action dev="<NAME>" type="add">Adding support to PostgreSQL to lift-ORM</action>
      <action dev="<NAME>" type="add">/html/body//head are merged into /html/head, to allow html fragment inlined
        into body to contribute to /html/head
      </action>
      <action dev="<NAME>" type="add">Adding a new lift archetype, lift-archetype-basic that will generate a lift
        template with basic database and users functionality.
      </action>
      <action dev="<NAME>" type="add">Adding LiftConsole to archetype to play with lift-based application in
        console
        mode
      </action>
      <action dev="<NAME>" type="add">Adding mock for HTTPRequest and Co</action>
      <action dev="<NAME>" type="add">Adding first Specs test to test lift-core</action>
      <action dev="<NAME>" type="update">The look of the maven site generated (for lift itself and for
        archetypes)
      </action>
      <action dev="<NAME>" type="remove">Removing deprecated new_proj (replaced by archetypes)</action>
      <action dev="<NAME>" type="remove">Removing lift-archetype-hellolift (replaced by lift-archetype-basic (and
        the sample application hellolift))
      </action>
    </release>

    <release version="0.3.0" date="2007-12-07" description="champagne">
      <action dev="<NAME>" type="add">Support for Ajax including integration of jQuery</action>
      <action dev="<NAME>" type="add">Radically improved Comet support</action>
      <action dev="<NAME>" type="add">Facebook API support</action>
      <action dev="<NAME>" type="add">AMQP (RabbitMQ) support</action>
      <action dev="<NAME>" type="add">Radically improved Comet support</action>
      <action dev="<NAME>" type="add">Built in Traits for Users (including user management) and Tags</action>
      <action dev="<NAME>" type="add">Support for a variety of new Mapped types (Country, Locale, Postal Code,
        etc.)
      </action>
      <action dev="<NAME>" type="add">New examples including a real-time blog</action>
      <action dev="<NAME>" type="update">Project builder using Maven and significantly improved Maven support
      </action>
      <action dev="<NAME>" type="add">Localization</action>
      <action dev="<NAME>" type="add">Improved XHTML support including proper headers based on browser type
      </action>
      <action dev="Team" type="update">Improved documentation</action>
      <action dev="Team" type="update">Radically improved samples and "getting started" pieces</action>
      <action dev="<NAME>" type="add">support for multiple database instances</action>
      <action dev="<NAME>" type="add">improved regex support including some Regex -> object creation support for
        parsing
      </action>
      <action dev="<NAME>" type="add">a new and improved textile parser</action>
    </release>

    <release version="0.2.0" date="2007-06-06">
      <action dev="<NAME>" type="add">"new_proj" script to create a new project</action>
      <action dev="<NAME>" type="add">HTTP test framework for writing tests</action>
      <action dev="<NAME>" type="add">Skittr code example -- a Twitter clone in lift and Scala</action>
      <action dev="<NAME>" type="add">SiteMap -- define site navigation and access control rules in a Domain
        Specific Language
      </action>
      <action dev="<NAME>" type="add">each model can live in a different database (multi database support)
      </action>
      <action dev="<NAME>" type="add">support for Jetty continuations on AJAX calls (automatic, not application
        code
        required)
      </action>
      <action dev="<NAME>" type="update">improvements to query building</action>
      <action dev="<NAME>" type="add">Shared session variable across Snippets and Controllers</action>
      <action dev="<NAME>" type="add">"recursive snippets" to re-write the page</action>
      <action dev="<NAME>" type="add">ability to pass attributes to Snippets and Controllers</action>
      <action dev="<NAME>" type="add">built in support for blowfish encryption</action>
      <action dev="<NAME>" type="add">logging via log4j</action>
      <action dev="<NAME>" type="add">MappedListEnum to persist List[Enumeration] easily</action>
      <action dev="<NAME>" type="add">lots of HTML form elements (select, multiselect, etc.)</action>
      <action dev="<NAME>" type="update">enhanced SQL queries</action>
      <action dev="<NAME>" type="add">filterMap support for queries as the rows come back from the database
      </action>
      <action dev="<NAME>" type="add">comparison operators for MappedField</action>
      <action dev="<NAME>" type="add">run modes (Production, Test, Development, etc.)</action>
      <action dev="<NAME>" type="add">properties that are based on user, machine, and run mode</action>
      <action dev="<NAME>" type="add">filters for fields such that input (and comparison and queries) can
        automatically be made upper case, lower case, trim, etc.
      </action>
    </release>

    <release version="0.1.0" date="2007-02-26" description="first public release"></release>

  </body>
</document>

{'fraction_non_alphanumeric': 0.12323676215277778, 'fraction_numerical': 0.016832139756944444, 'mean_word_length': 3.4048870832835463, 'pattern_counts': {'":': 0, '<': 1267, '<?xml version=': 2, '>': 1303, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 7}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1272359', 'n_tokens_mistral': 21961, 'n_tokens_neox': 20740, 'n_words': 7156}