Skip to content


Subversion checkout URL

You can clone with
Download ZIP

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
Checking mergeability… Don’t worry, you can still create the pull request.
This comparison is big! We’re only showing the most recent 250 commits
Commits on Dec 10, 2014
@Shadowfiend Shadowfiend Map function on ajaxOnSubmit invocation.
Before, we bound the function when we processed the element. Because this
occurred in NodeSeq=>NodeSeq function, we had no guarantee that it would run in
the correct formGroup, oneShot, callOnce, etc contexts. To deal with the form
group part of this, we were capturing the form group and setting it when we
went to actually run the binding function. However, this left oneShot,
callOnce, and potential future contexts like them out in the dark.

We now run the fmapFunc call as soon as ajaxOnSubmit is called, and the
NodeSeq=>NodeSeq function is used solely to bind the resulting id to the
matching element(s). This means the function mapping happens in the calling
context, and we avoid all of the above issues.

There is a subtle shift in behavior: multiple matching elements will get the
same function id, where before they would get different ones. Realistically,
this shouldn't cause a big problem, since they'll be invoking the same function
Commits on Dec 11, 2014
@Shadowfiend Shadowfiend Distinguish LiftSession uniqueId from underlyingId.
What used to be uniqueId is now called underlyingId, to
indicate the fact that it is tied to the underlying host’s session
id. A new uniqueId is introduced, which is secure and unique,
and is not tied to the host id and cannot be used to look the
session up in the future.

The only place that is currently continuing to use uniqueId is
when we emit the id into the page as data-lift-session-id for
cache-busting purposes. The underlying id used to be
emitted into the page, which triggered some small security
concerns, so we switch to this model to be on the safe side.
Commits on Dec 14, 2014
@farmdawgnation farmdawgnation Merge pull request #1609 from lift/ball-and-chain
Ball and Chain: toSingleBox now sets up the failure chain properly.
Commits on Dec 15, 2014
@Shadowfiend Shadowfiend Add ability to link to other Scaladocs in ours.
We do two things: turn on autoAPIMappings, which
automatically lets us link to Scaladocs for modules that set
their public URIs, and explicitly add the mapping for the
scala-xml module. The addition of the scala-xml module is
also reasonably generic, so we can add more module-specific
URIs fairly easily in the future as needed.
@Shadowfiend Shadowfiend Clean up/improve lift-common Scaladocs.
Some places get more detailed Scaladocs, others get some facelifts and get
converted to wiki syntax instead of HTML. Examples added throughout.
@Shadowfiend Shadowfiend Move an import up to the head of Conversions.scala. b017a28
@Shadowfiend Shadowfiend Clean out documentation that adds nothing.
Some of the scaladocs were extremely redundant with respect
to the functions they were describing. This commit drops
those Scaladocs.
@Shadowfiend Shadowfiend Deprecate NodeSeqFunc.
It doesn’t seem to be used anywhere and we generally lean
on transformation functions rather than generation functions
for NodeSeq. This is also something we want to continue to
encourage, so making using NodeSeqs directly a little more
painful is okay.
@Shadowfiend Shadowfiend Rename a variable in Logger.
checkConfig was used to make sure setup was being run. It’s
now named ranSetup, since that’s more reflective of what it
@Shadowfiend Shadowfiend Use UnsupportedOperationException where reasonable.
SimpleList and SimpleVector have a bunch of unsupported
operations with respect to regular Java collections; these
were through Exception instances. We switch them to throw
UnsupportedOperationException as per the Java collection
Commits on Dec 21, 2014
@Shadowfiend Shadowfiend Fix incorrect emphasis scaladoc markers.
Apparently * doesn’t emphasize, ''' does. Seems legit…
@Shadowfiend Shadowfiend Fix a typo in the Logger docs. 0825363
@Shadowfiend Shadowfiend Clarify and improve various scaladocs.
Mostly adding `` around classes and parameters in docs, with
a couple of tweaks to docs that weren’t clear enough.
@Shadowfiend Shadowfiend Bump to Scala 2.11.3.
The specific motivation is that scaladoc in 2.11.3 fixes an
issue with picking up indentation in code blocks properly.
@Shadowfiend Shadowfiend Restore some implicit conversion scaladocs.
These are implicits that take implicits as parameters, and the
docs make it a little clearer what that’s for.
Commits on Dec 23, 2014
@joescii joescii ContentParser is now a thing 0288300
@joescii joescii addContentParser is needed since we have to also update templateSuffixes 22d260a
@joescii joescii Changed ContentParser to a mere function e1d5adf
@joescii joescii Defined LiftRules.contentParsers and dontAutoSurround 83036ba
Commits on Dec 24, 2014
@Shadowfiend Shadowfiend Bump to Scala 2.11.4 because Scala.
Evidently 2.11.3 had binary compatibility issues, so 2.11.4 it is!
@joescii joescii This version of unified parsers incorporates some good community feed…
Commits on Jan 03, 2015
@Shadowfiend Shadowfiend Clarify that all PR criteria must be met in contribution guidelines. 8310630
@Shadowfiend Shadowfiend Take a stab at clarifying the FuncJBridge class comment. d57119b
Commits on Jan 04, 2015
@joescii joescii Incorporating feedback regarding style, naming, scaladocs, etc e42fbed
Commits on Jan 05, 2015
@Shadowfiend Shadowfiend Fix two issues with LiftMerge id extraction.
When we were detecting the id for use by event handlers, we
were doing two things wrong:
 - We were failing to pass on any existing event attributes that
   we’d extracted along the way, so if there were any they
   were lost.
 - We were failing to append the fixed attributes to the current
   attribute, so we were losing the id attribute altogether.

This meant that if an element had an id, we always lost that
id in the process of trying to reuse it for event attributes. We
also only kept the event attributes for attributes before the id,
as the ones after were lost while we processed the id.
@Shadowfiend Shadowfiend Support extracting javascript: actions and hrefs.
javascript: and javascript:// are used in a couple of places in
Lift, and can be used in client code. We look for these in
action and href elements and extract them into proper event
handlers with return false; appended (since return false is
implied in these situations).

We also clarify some variable names and comments along
the way.
@Shadowfiend Shadowfiend Support using event in extracted handlers.
The wrapping anonymous functions now take an event
parameters (as is ideal).
@Shadowfiend Shadowfiend preventDefault on javascript: hrefs.
This instead of return false, which can also interfere with the
event bubble.
@Shadowfiend Shadowfiend Merge pull request #1650 from lift/doc-stock-and-two-smoking-html-tags
Doc, Stock and Two Smoking HTML Tags: Cleanup pass in lift-common scaladocs

This pass removes HTML from scaladocs, adds wiki markup in its stead, adds wiki
markup in places where we were using just text, adds examples here and there, and
generally tidies up the documentation.

It also adds the ability to link to Scala's APIs and scala-xml APIs from our scaladocs,
which required some tweaks to the build.
@Shadowfiend Shadowfiend Make HLists covariant in their type parameters.
Also add a spec for HList length.
Commits on Jan 06, 2015
@Shadowfiend Shadowfiend Merge branch 'master' into extract-o-matic
@arkadius arkadius Fixes LAFuture.collect/collectAll behaviour for empty list parameter
For empty list parameter, were returned future which never been satisfied.
Now is returned future that is immediately satisfied by empty list.
Commits on Jan 07, 2015
@arkadius arkadius update 98d8e65
@Shadowfiend Shadowfiend Merge pull request #1639 from lift/recting-and-reding
Recting and Reding: Fix ResponseShortcutException issues for AJAX calls

Allow arbitrary ResponseShortcutExceptions in AJAX calls. Before we only handled
@Shadowfiend Shadowfiend Merge pull request #1648 from lift/this-is-where-the-function-stops
This is Where the Function Stops: Map function on ajaxOnSubmit invocation.

ajaxOnSubmit would lose certain contexts like oneShot and callOnce. It no longer does.
@Shadowfiend Shadowfiend Merge pull request #1649 from lift/air-gap
Air Gap: Distinguish LiftSession uniqueId from underlyingId.

This makes it so we're no longer emitting the session's unique id (which is
the same as the session cookie) into the page.
@arkadius arkadius Fix CombParserHelperSpec for digits with newlines.
Probed strings may include new line indicators. However CombParserHelperSpec
checks string matching using standard pattern matching and dots don't match \n.
Now it uses DOTALL pattern matching mode
@Shadowfiend Shadowfiend Merge branch 'arkadius-clean-comb-parser-helpers-spec-fix' f12a1d9
@Shadowfiend Shadowfiend Revert "Merge branch 'arkadius-clean-comb-parser-helpers-spec-fix'"
This reverts commit f12a1d9, reversing
changes made to c1f3162.

The original merge was done off a branch that was not yet ready to be merged,
so we'll cherry-pick the spec fix onto the non-merged master branch instead.
@arkadius arkadius Fix CombParserHelperSpec for digits with newlines.
Probed strings may include new line indicators. However CombParserHelperSpec
checks string matching using standard pattern matching and dots don't match \n.
Now it uses DOTALL pattern matching mode
@Shadowfiend Shadowfiend Revert "Revert "Merge branch 'arkadius-clean-comb-parser-helpers-spec…

This reverts commit bf25bf6. The
original revert was there because I cherry-picked a commit I wanted
on master onto the a branch off of this one, and then merged it
into master before this one was ready to go (shoulda opened a PR...).
This commit reverts the revert on this branch, so that when we merge
this branch to master its changes will take hold (otherwise the first
revert would make the original changes be lost). Whew!
@Shadowfiend Shadowfiend Add some curly braces in some JS for safety.
Friends don't let friends JavaScript braceless.
Commits on Jan 08, 2015
@Shadowfiend Shadowfiend Merge pull request #1664 from arkadius/collectFutureFix
Fixes LAFuture.collect/collectAll behaviour for empty list parameter

For empty list parameter, were returned future which never been satisfied.
Now is returned future that is immediately satisfied by empty list.
@Shadowfiend Shadowfiend Switch find/isDefined to exists. 7feacef
Commits on Jan 10, 2015
@arkadius arkadius Fix failing LiftJavaScriptSpec in non-English environments.
Generated Lift JS is localized based on the current environment. However,
LiftJavaScriptSpec checks for English messages, so running it under a
non-English environment causes it to fail due to the mismatch in expected
message.  Now settings are tested with english locale, internationalization is
tested separately.
@Shadowfiend Shadowfiend Merge pull request #1657 from arkadius/liftJavaScriptSpecFix2
Tweaked the merge a bit to keep only the relevant commit.

Generated Lift JS is localized based on the current environment. However,
LiftJavaScriptSpec checks for English messages, so running it under a
non-English environment causes it to fail due to the mismatch in expected
message.  Now settings are tested with english locale, internationalization is
tested separately.
Commits on Jan 12, 2015
@joescii joescii Making ContentParser ever so slightly more awesome with Antonio's sug…
…gestion to use 'apply' as the factory method name
Commits on Jan 14, 2015
@Shadowfiend Shadowfiend Merge pull request #1663 from lift/hlist-improvements
Make HLists covariant in their type parameters.

Also add a spec for HList length.

I'm using this code in lift-formality and it works as advertised!
@Shadowfiend Shadowfiend Slight style cleanup. afb8197
@pbrant pbrant Improve public API c99d8cc
Commits on Jan 15, 2015
@Shadowfiend Shadowfiend Merge pull request #1619 from lift/pmb_cometfixes
Comet fixes

This fixes a handful of bugs that when taken together kept things mostly working!

 - Unify lastListenerTime (which was previously always zero) with lastListenTime
 - Make lastRenderTime, delta timestamps, and lastListenerTime consistent with each
   other as they are directly compared
 - More accurately track whether any deltas have been sent
 - Pretend initial render happened at creation time to prevent a second render call from
   running on the initial Listen message
 - Rename devMode to alwaysReRenderOnPageLoad
 - Add MessageCometActor to handle comets that only push messages. It has a
   pushMessage method to use instead of partialUpdate, to reflect its use more

We'll be reworking the CometActor hierarchy a bit to stack CometActor on top of
a reworked MessageCometActor to layer on just rendering stuff to MessageCometActor,
but that's for later.
@Shadowfiend Shadowfiend Merge pull request #1646 from lift/comet-comet-on-the-wall
Comet, Comet on the Wall: Fix comets sent down via AJAX from within a comet

This fixes a few issues:

 - We centralize comet command generation into S.jsToAppend.
 - We fix when we look up S.jsToAppend during AJAX processing in comet contexts
   so we don't miss anything that might be added during the actual AJAX function execution.
 - We make sure not to trigger a second comet request when setting up new comets
   client-side from within a comet response.
@joescii joescii Adding details regarding the behavior of LiftRules.contentParsers in …
@joescii joescii Changing LiftRules.contentParsers from a Seq to a List to encourage p…
…repending/emphasize the first-one-wins behavior
Commits on Jan 17, 2015
@Shadowfiend Shadowfiend Merge pull request #1652 from lift/unified-parsers
Unified parsers

Enhancement for configuring parsers per discussion at!topic/liftweb/WnaUFd9Fw5E . Adds a
LiftRules.contentParsers rule which is a list of ContentParser objects. These
can be used to define parsers for templates, which the template loading pipeline
can use in turn. Out of the box, we provide the existing HTML and Markdown
parsers, but this can easily be used to add, e.g., asciidoc support.

ContentParsers can specify the template suffixes that they support, as well as
provide a parser function that takes an InputStream and produces a Box[NodeSeq]
and a surround function that may be used to auto-surround the content if it is at
the root of a file (instead of included from another template).
Commits on Jan 18, 2015
@arkadius arkadius TimeSpan represents duration in milliseconds.
Before the change TimeSpan has many responsibilities - in equality behave as a
joda Period (was checking duration field equality), can represent a Date (using
toDate/toDateTime operations) or be used as a simple container for
milliseconds. Now is responsible only for operations on milliseconds.
Problematic methods have been deprecated (.ago/.later have been moved to
implicit PeriodExtension). For backward compatibility there is introduced
implicit conversion from Period to TimeSpan.

Also added a variety of deprecations and cleaned up specs that are
timezone-dependent to run in explicit conditions.
@arkadius arkadius Expand and clarify deprecations
- deprecations for Int/Long -> TimeSpan, TimeSpan -> Long conversion
- deprecation since version notice added
@Shadowfiend Shadowfiend Clarify/expand on scaladocs for TimeSpan methods. 52bf6f5
@Shadowfiend Shadowfiend Reword TimeSpan deprecations.
They all include suggested alternatives now.
@Shadowfiend Shadowfiend Drop ConvertableToDate deprecations.
These aren’t directly related to TimeSpans, and we need to
figure out how exactly we want these deprecations to work
@fmpwizard fmpwizard Merge pull request #1670 from lift/time-span-deprecation
TimeSpan Deprecation
@fmpwizard fmpwizard update build script to build 3.0 from master efc7a15
@arkadius arkadius travis integration:
- build script
- build status in README
@arkadius arkadius openjdk7 profile 0652dcd
@Shadowfiend Shadowfiend Merge pull request #1666 from lift/travis-integration
Travis Integration

Adds Travis CI build script, including building for both OpenJDK and Oracle
JDK. More to come!
Commits on Jan 21, 2015
@Shadowfiend Shadowfiend Merge pull request #1603 from lift/your-data-lift-is-my-data-lift
Your data-lift is my data-lift: Reimplement data-lift as a data attribute parser.

This PR reimplements data-lift as a data attribute parser.

Few points of concern:
 - I want to go through at some point and clean up the copy-pasting of helper
   methods that I did wrt MetaData parsing.
 - I'm not entirely sure why I'm having to manually check for the parallel attribute
   in my parser. My understanding was that if my parser generates a lift: node,
   that should be processed subsequently by the regular SnippetNode parser, which
   does checks for parallel processing.
@Shadowfiend Shadowfiend Merge pull request #1665 from lift/extract-o-matic
Extract-o-matic: Extract event handlers to page JS

The main functionality here moves event handler attachment from inline
attributes to the page JavaScript that Lift 3 now supports. The reason for
this is so that, out of the box, Lift will be compatible with very restrictive
Content Security Policy settings when using built-in Lift features.

To do this, we add a lift.onEvent function that has both jQuery and vanilla
implementations. There are also a couple of fixes to existing JS functionality
@andreak andreak Fixed NPE in LiftRules:913 68de581
@fmpwizard fmpwizard Merge pull request #1672 from lift/fix_parallel_attribute_check_1671
Fixed NPE in LiftRules:913
Commits on Jan 23, 2015
@Shadowfiend Shadowfiend Ensure uniqueness of comet requests.
We now track a "current count" for a comet request, and any calls to start a
request carry the then-current count. Once a comet request is fired, the count
is incremented, ensuring that even if a new comet request is scheduled multiple
times, only one will run at any given moment.

This is only the new part of the guard. The other part of the guard is that we
track the actual current comet request and abort it if a comet request restart
is needed. However, an AJAX request that was just begun cannot be aborted, so
if multiple restarts are scheduled in one tick for whatever reason, we end up
with multiple requests--this fix guards against that scneario.
@Shadowfiend Shadowfiend Fix a misnamed parameter in registerComet.
The paramter was named restartComet, but restartComet is the name of the
restart function, while startComet is the correct name for the parameter.
Commits on Jan 25, 2015
@Shadowfiend Shadowfiend Fixed an == vs === issue codacy caught in JS. 16e23d7
@Shadowfiend Shadowfiend Dropped an unused function in lift.js. 58c4d0b
@Shadowfiend Shadowfiend Merge pull request #1673 from lift/beautiful-and-unique-snowflake
Beautiful and Unique Snowflake: Try to ensure uniqueness of comet requests

We already did some work to make sure comet requests were unique;
this adds one more layer of checking around that. When we schedule a
new comet request, we include the current "comet request count". That
count is incremented when the request is actually fired off. This means
that scheduling a new request multiple times before the request is fired
will only result in one request, rather than multiple requests that will walk
all over each other.
@andreak andreak Fixed premature termination of declaration-list. 6ed96fc
Commits on Jan 26, 2015
@Shadowfiend Shadowfiend Add SecurityRules and related code.
SecurityRules provides a way to set security rules like HTTPS
requirements and a content security policy, which are in turn
served with resources from Lift via headers. Right now, we
support Content-Security-Policy and Strict-Transport-Security

While a default reporting URI is in place for content security
policy violations, there’s not yet any code that handles
information sent to that URI.
@Shadowfiend Shadowfiend Add BadRequest response, deprecate BadResponse.
BadResponse was a misnomer, since that response actually
represents a 400 Bad *Request* response.

Additionally, we add support for a custom message to the
BadRequest case class.
@Shadowfiend Shadowfiend Handle enforceInDevMode in ContentSecurityPolicy.
We were doing this incorrectly before.
@Shadowfiend Shadowfiend Support content security policy violation reports.
In particular, we now have a default handler that logs the
violation, a case class to represent the violation JSON,
and logging (and a 400 response) if we can’t parse the
violation JSON.
@Shadowfiend Shadowfiend Simplify
Only have a single overload, which just clears the imageSources
@Shadowfiend Shadowfiend Fix up documentation throughout.
Commits on Jan 27, 2015
@pbrant pbrant Comet fix fix
AsyncRenderComet should be a MessageCometActor. Use BaseCometActor in
more places.
Commits on Jan 31, 2015
@arkadius arkadius returns Future satisfied with Failure when Exce…
…ption in transforming function occurs

Before the change in this case return never satisfied Future. After the change, returned Future is satisfied by Failure.
@Shadowfiend Shadowfiend Merge pull request #1675 from lift/pmb_comet
Comet fix fix

AsyncRenderComet should be a MessageCometActor. Use BaseCometActor in
more places.

(overlooked in the initial round of changes)
@Shadowfiend Shadowfiend Move X-Frame-Options into SecurityRules.
We add a FrameRestrictions sealed trait to represent the
available frame restrictions, and make it Optional. The default
is FrameRestrictions.SameOrigin, so as to line up with the
previous Lift default of only allowing inclusion in frames from
the same origin.
@Shadowfiend Shadowfiend Add GeneralSourceRestriction.
This is meant to indicate restrictions that apply to JavaScript,
stylesheets, and other content.
@Shadowfiend Shadowfiend Default scriptSources to include unsafe-eval.
We do this because Lift does a lot of AJAX-based script
injection at the moment, which requires eval. So, to avoid
breaking a Lift application, unsafe-eval stays on.

Also expand a little on documentation to indicate Lift’s
reliance on this functionality.
Commits on Feb 01, 2015
@Shadowfiend Shadowfiend Lock security rules on first use.
Security rules-related stuff will be running every request, so
we want to minimize the overhead of using it. We can relax
the limitation if someone says they need to modify these at
@Shadowfiend Shadowfiend Handle logInDevMode in ContentSecurityPolicy.
We now use report-only in dev mode only if enforceInDevMode
is off and logInDevMode is on.
@Shadowfiend Shadowfiend Log non-HTTPS requests when requested.
When LiftRules.https is set, we’re in dev mode, and
logInDevMode is on, we log requests that come in and are
not HTTPS.
@Shadowfiend Shadowfiend Small documentation tweaks.
Add a note about default frame restrictions to SecurityRules
and fix the link to contentSecurityPolicyViolationReport.
Commits on Feb 07, 2015
@fmpwizard fmpwizard Fixed missing `s` in string interpolation
Commits on Feb 08, 2015
@arkadius arkadius Reuse of tryo inside LAFuture
Before change, in case of circular module dependencies it wasn't possible to use tryo inside actor module (was used by util which would be used by actor). Now tryo is available from Box singleton and ControlHelpers refer back to it.
@arkadius arkadius tryo inside separated Tryo object
Import of Box._ and Helpers._ was causing ambiguousity errors. Now tryo is inside separate class in common module.
@arkadius arkadius Timeout for tests was too short
Commits on Feb 10, 2015
@fmpwizard fmpwizard Merge pull request #1679 from lift/diego_issue_string_inter
Fixed missing `s` in string interpolation
@pbrant pbrant Fix Comet clean-up bug
Comet actors which defined a life span were being half-cleaned up with
correspondingly strange results. The cause was java.util.Map#remove
taking an Object, not a K with the result that this was missed when
migrating from a tuple to CometId.
@pbrant pbrant Merge pull request #1682 from lift/pmb_cometlifespan
Fix Comet clean-up bug
Commits on Feb 12, 2015
@farmdawgnation farmdawgnation Augment the JsonAST scaladocs. 83212f4
@farmdawgnation farmdawgnation Rename xs to values. e2ab4fc
@farmdawgnation farmdawgnation Reformat implementation of JValue.\\ for clarity. a5e88db
Commits on Feb 14, 2015
@farmdawgnation farmdawgnation Documentation work on JsonAST. 2ef5150
@farmdawgnation farmdawgnation Remove the use of a return in d654b51
@farmdawgnation farmdawgnation Finish out documentation updates for JsonAST.
@farmdawgnation farmdawgnation Split SessionMaster into its own file from LiftSession. 780d36d
@farmdawgnation farmdawgnation Split ScopedLiftActor out into its own file.
@arkadius arkadius Removed Tryo object. Added more explicit conversion from Option/scala…
….uitl.Try to Box: extension implicit classes with toBox methods.
@arkadius arkadius Fixed missing braces
Commits on Feb 16, 2015
@fmpwizard fmpwizard Removed many warnings
@fmpwizard fmpwizard Merge pull request #1684 from lift/session-ipa
Session IPA: Split out SessionMaster and ScopedLiftActor from LiftSession
@Shadowfiend Shadowfiend Make BadRequest be BadRequestResponse.
This is more in line with the naming of other LiftResponse subclasses, and
makes it clear that the class doesn't represent a bad request, but rather the
response to one.
@Shadowfiend Shadowfiend Make some visibility modifiers a bit more strict.
@Shadowfiend Shadowfiend Try adding maven caching to travis.
@Shadowfiend Shadowfiend Merge pull request #1678 from arkadius/futureExInMapFlatMap
Fix when an exception happens inside.

Before the change ``/`.flatMap` never satisfied the future in cases
where the function threw an exception. After the change, returned future is satisfied
by a `Failure`.

This change also contains minor fix: `get(timeout)` was returning `Empty` instead of
a `Failure` if the `LAFuture` was aborted.

Also added extensions providing `toBox` conversions from `scala.Option` and from
Commits on Feb 17, 2015
@fmpwizard fmpwizard code review fixes
Commits on Feb 18, 2015
@fmpwizard fmpwizard use contant for eof char
Commits on Feb 21, 2015
@fmpwizard fmpwizard Merge pull request #1674 from lift/locket-down
Locket Down: Add support for Content-Security-Policy and Strict-Transport-Security
@fmpwizard fmpwizard Merge pull request #1685 from lift/diego_warnings
Removed many warnings
Commits on Feb 22, 2015
@farmdawgnation farmdawgnation Various updates per review.
@farmdawgnation farmdawgnation More updates based on code review.
Commits on Mar 15, 2015
@Shadowfiend Shadowfiend Provide a secure XML parser in SecurityHelpers, use it throughout.
The secure XML parser does not allow entity references to refer to external
entities; allowing this exposes an application to XXE (XML External Entity)
attacks, where the external reference can be to a local file with sensitive
data, whose contents will then appear in the resulting parse error messages.
External entities are ignored and will not appear in the parsed or reserialized

All of Lift's built-in XML parsing now uses Helpers.secureXML instead of
directly using scala.xml.XML, including in tests.

More at .

Signed-off-by: Diego Medina <>
Commits on Mar 21, 2015
@Shadowfiend Shadowfiend Fix an issue where we could lose event attributes.
This particularly manifested when the attribute whose href we wanted to fix
(e.g., the `href` attribute on an `a` element or the `action` attribute on a
`form` element) also had an event handler (e.g. `onclick`). The code that fixed
the href failed to pass on the event handlers that had been seen so far to the
attribute-fixing chain, so they got lost before they could be applied.
@Shadowfiend Shadowfiend Centralize call to fix remaining attributes.
We were calling fixAttrs with in five places, which meant it was a
bit error prone. We now do it up front so the call can be changed in one place.
@farmdawgnation farmdawgnation Implement ParamFailure chaining for ~>
Now, when ~> is invoked in a ParamFailure, the existing ParamFailure
will be chained, thereby preserving the original param that was
@Shadowfiend Shadowfiend Don't assume postPageFunctions are Some.
When generating post-page JavaScript, we were assuming that because our first
access of the post-page functions was non-empty, all of them would be. This led
to occasional .get-related NullPointerExceptions. We now allow for later calls
to the post-page functions to be None, and simply assume we have no more
functions to fetch once we get a None for them.
@Shadowfiend Shadowfiend Further documentation tweaks.
A few clarifications, cross-references, and formatting tweaks.
Commits on Mar 23, 2015
@Shadowfiend Shadowfiend Lock down SecurityHelpers.secureXML further.
We disable external doctypes altogether, and We also enable secure processing;
combined, these mitigate more attacks than just the XML External Entity attack.

The tests are updated to indicate that we now throw an exception whenever we
encounter an XML document with a doctype declaration.

Signed-off-by: Diego Medina <>
Commits on Apr 13, 2015
@natekupp natekupp Replace defunct reference is no longer active. Pointing to for the jar instead.
@farmdawgnation farmdawgnation Merge pull request #1696 from natekupp/patch-1
Replace defunct reference
Commits on Apr 15, 2015
@dcbriccetti dcbriccetti Fix spelling error 53dd790
Commits on Apr 16, 2015
@dpp dpp Added extra arguments to method to allow for lifecycle support
@dpp dpp Include the actor in the setup and shutdown params 346a255
@dpp dpp Include the actor in the setup and shutdown params
Commits on Apr 17, 2015
@dpp dpp Merge pull request #1698 from lift/dpp_extra_comet_args
Enhanced Support for browser Actor proxies
Commits on Apr 19, 2015
@Shadowfiend Shadowfiend Drop some sleeps in LAFutureSpec.
A couple of these specs are behaving intermittently in the CI environment, and
the sleeps seem beside the point to these two specs.
@Shadowfiend Shadowfiend Merge pull request #1692 from lift/midair-collision
Midair Collision: Fix issue where binding an `href` and an `onclick` together could fail.

This only manifested when the onclick came before the href on an
a element, and probably also manifested if you bound an onsubmit
on a form that had an action attribute. The cause was just that I had
forgotten to properly pass on already-seen event attributes when
processing the href attributes, so we lost them.
@Shadowfiend Shadowfiend Merge pull request #1683 from lift/documentation-ape
Documentation Ape: Documentation updates to JsonAST and a few small code optimizations.

This PR does some updates to the documentation in JsonAST.
Commits on Apr 20, 2015
@Shadowfiend Shadowfiend Merge pull request #1693 from lift/tilde-down-for-what
Implement ParamFailure chaining for ~>

Now, when ~> is invoked in a ParamFailure, the existing ParamFailure
will be chained, thereby preserving the original param that was
@Shadowfiend Shadowfiend Merge pull request #1694 from lift/null-anti-null
Null-Anti-Null: Don't assume postPageFunctions are Some.

When generating post-page JavaScript, we were assuming that because our first
access of the post-page functions was non-empty, all of them would be. This led
to occasional .get-related NullPointerExceptions. We now allow for later calls
to the post-page functions to be None, and simply assume we have no more
functions to fetch once we get a None for them.
Commits on Apr 25, 2015
@andreak andreak Add data-lift-fixedeventattribute-<event-name> for each replaced even…
…t-attribute, with settings in LiftRules: LiftRules.includeFixedEventAttributesAsDataAttributes_? (default false)
@dcbriccetti dcbriccetti Create test for Issue 1677, “Lift stores messages in LiftSession.come…
…tSetup List in wrong order”
Commits on Apr 26, 2015
@dcbriccetti dcbriccetti Move TestComet inside LiftSessionSpec.scala and create it with the ne…
…wer form of findOrCreateComet.
@dcbriccetti dcbriccetti Fix spelling and English errors 232678b
Commits on Apr 27, 2015
@dcbriccetti dcbriccetti Change LiftSession to accumulate pre-creation CometActor messages in …
…the order received, rather than reverse order.
@dcbriccetti dcbriccetti Simplify the cometPreMessages dispersal code
Commits on Apr 28, 2015
@dpp dpp Fixed the new bind-less password change in ProtoUser
@Shadowfiend Shadowfiend Merge pull request #1703 from lift/working_pwd_reset
Fixed the new bind-less password change in ProtoUser

The right side of CSS selector transforms is call-by-name, so we were computing
two separate password fields for the password and confirmation input. As a result,
we were failing to set the password because the confirmation input and password
input both registered as not having a confirmation submitted for them. We now
generate the password input ahead of time and reuse it to get the right behavior.
Commits on May 13, 2015
@Shadowfiend Shadowfiend Merge pull request #1702 from lift/dcb_issue_1677
Dcb issue 1677, send pre-creation CometActor messages in the order received

Fixes an issue where CometActor messages sent with session.sendCometActorMessage
to actors that are not yet initialized would be sent to it in the wrong order once the actor
*was* eventually initialized. Specifically, they were sent backwards. They are now sent in
the correct order.
Commits on May 23, 2015
@farmdawgnation farmdawgnation Log if JSON parsing fails when handling a jsonCall invocation.
Commits on May 27, 2015
Christopher Webster optimize StringBuilder.append for character insertion
Commits on Jun 13, 2015
@farmdawgnation farmdawgnation Correct liftsh bootstrapping for new sbt.
It looks like sbt changed their download location and the amount of work
we have to do to bootstrap the liftsh script. This resolves those
@farmdawgnation farmdawgnation Add a warning comment to the top of liftsh.cmd.
@farmdawgnation farmdawgnation Only build master and lift_26 on push.
Without this specifier Travis will attempt to execute two jobs for each
PR: the PR-merged job and the push job. The former is really the most
useful of the two. Also, without this specifier Travis will execute a
build for every push to every branch. Both of these conditions mean
we're making Travis do more work than is really useful.

With this change we should only be running builds on:
  - Push to master to lift_26
  - Opening or push to open PR.
@farmdawgnation farmdawgnation Revert "Only build master and lift_26 on push."
This reverts commit b95327c.
Commits on Jun 14, 2015
@Shadowfiend Shadowfiend Merge pull request #1707 from lift/sbt-fixes
SBT Fixes

Looks like SBT changed some things about the way you have to
download the tool. I've updated the liftsh shell script to compensate
for it. This should get things in travis passable again. I also added a
comment to the top of liftsh.cmd explaining that it's probably broken.
Going to shoot something out to the mailing list and see if I can get
some love on getting that updated by a Windows user.
Commits on Jun 22, 2015
@andreak andreak Use data-lift-removed-attributes
Commits on Jun 24, 2015
@andreak andreak Renamed LiftRules.includeFixedEventAttributesAsDataAttributes_? and a…
…dded configurable attribute-name for "data-lift-removed-attributes", set in LiftRules.removedEventAttributesAttributeName
Commits on Jul 03, 2015
@Shadowfiend Shadowfiend Stylistic tweaks to appendEscapedString improvements. d427fa4
@Shadowfiend Shadowfiend Merge branch 'appendStringOp'
The StringBuilder.append method invoked was StringBuilder.append(Object) as
both String and Char are being returned. The implementation of
StringBuilder.append(Object) when applied to a Character is essentially:

* call Character.toString - which produces a one element char[] and then
  creates a new String with the char array, which in turn does a defensive copy
  of the buffer.
* the string created is then used to add to the StringBuilder

This PR changes JsonAST.appendEscapedString to use StringBuilder.append(Char)
which directly inserts the character into the buffer avoiding the operations
described above
@Shadowfiend Shadowfiend Switch to single LiftRule for removed attribute inclusion.
We now have one LiftRules.attributeForRemovedEventAttributes, which can be None
to indicate no attribute should be emitted. The default is currently None.
@Shadowfiend Shadowfiend Merge pull request #1699 from lift/test-fixes
Test Fixes: Drop some sleeps in LAFutureSpec.

A couple of these specs are behaving intermittently in the CI environment, and
the sleeps seem beside the point to these two specs.
@Shadowfiend Shadowfiend Merge remote-tracking branch 'origin/master' into msf_issue_1615
@Shadowfiend Shadowfiend Merge pull request #1705 from lift/msf_issue_1615
Log if JSON parsing fails when handling a jsonCall invocation.

This PR is designed to address an issue where the call sent to a
function wired up to a jsonCall isn't something that the JSON parser can
actually parse. This tends to happen in cases where developers are doing
some custom things with the jsonCall system---a bit more custom than
just wiring it up to a button directly in a CSS transform.
@Shadowfiend Shadowfiend Add LiftSession.onFunctionOwnersRemoved.
These functions are invoked with the set of function owners that had
all of their remaining associated functions evicted from a session in a
given run. A function owner is typically a page’s RenderVersion, though
there are cases (e.g., comets) where this is not necessarily the case.
Commits on Jul 04, 2015
@Shadowfiend Shadowfiend Bump sbt to 0.13.8.
0.13.5 seems to be having alllll sorts of issues.
Commits on Jul 06, 2015
@Shadowfiend Shadowfiend Merge pull request #1701 from lift/ajk_datalift-fixedattrs
Add LiftRules.attributeForRemovedEventAttributes

This PR adds a LiftRule, LiftRules.attributeForRemovedEventAttributes.
When we remove a JavaScript event from an element for separate
application via the page's JS file, if this rule is set, the attribute it specified
is populated with the names of the attributes that were removed from the
element. If no attributes were removed, no attribute is added to the element.

The default for the LiftRule is to be None, meaning this information is never
added to the output.
Commits on Jul 09, 2015
@Shadowfiend Shadowfiend Merge pull request #1709 from lift/scope-callback
Add LiftSession.onFunctionOwnersRemoved.

These functions are invoked with the set of function owners that had
all of their remaining associated functions evicted from a session in a
given run. A function owner is typically a page’s RenderVersion, though
there are cases (e.g., comets) where this is not necessarily the case.

As a sample usage:

object pageIdWatchers extends java.util.concurrent.ConcurrentHashMap[String,List[()=>Unit]] {
    def addCleanupFunc(func: () => Unit): Unit = {
        put(S.renderVersion, List(func) ::: pageIdWatchers.getOrDefault(S.renderVersion, Nil))

In Boot:

LiftSession.onFunctionOwnersRemoved ::= { removedOwners =>
    for {
        owner <- removedOwners
        watcher <- Option(pageIdWatchers.get(owner))} {

In a snippet:

def cleanupPage(): Unit = {
    println(s"Running cleanupPage for ${S.renderVersion}.")
println(s"Adding cleanupFunc for ${S.renderVersion}")
@farmdawgnation farmdawgnation Rip out Document for JSON printing; drop in a few FIXMEs. d14a4ad
@farmdawgnation farmdawgnation Start tracking RenderSettings and indent level in buffer render pipeline c80ead1
@farmdawgnation farmdawgnation Tweak formatting of buffRenderArr/Obj. c42d508
@farmdawgnation farmdawgnation Provide a prettyRender method that uses an indent of 2. 7dbf96f
@farmdawgnation farmdawgnation Add support for pretty rendering of arrays in bufRenderArr.
I'm surprised there hasn't been a pirate pun added to this method yet.


             ./ /| `\.
            /  | |   `\.
           |   | |     `\.
           |    \|       `\.
         .  `----|__________\.
           \               ""/
@farmdawgnation farmdawgnation Improve rendering of arrays with no members. 1cdf391
@farmdawgnation farmdawgnation Implement pretty rendering support for objects in bufRenderObj. 1fb6d0b
@farmdawgnation farmdawgnation Add support for spaces after field names in objects. b6da771
@farmdawgnation farmdawgnation Implement a render method for passing in custom settings.
Commits on Jul 12, 2015
@farmdawgnation farmdawgnation Refactor ignoring of JNothing to avoid unnecessary indentation. 82ca4f4
@farmdawgnation farmdawgnation Change implementation of bufRenderArr to be append-only. eba4865
@farmdawgnation farmdawgnation Change implementation of bufRenderObj to be append-only. a960136
@farmdawgnation farmdawgnation Switch to using the single-char version of append wherever possible.
The single-char version of append should be much more efficient per our
previous changes to addEscapedString, so let's be sure to use it where
we can in the other code as well.
@farmdawgnation farmdawgnation Simplify bufRenderArr.
It looks like bufRenderArr was doing a check for null that we didn't
really need, since bufRender already handles null correctly. We also
were doing a match when we didn't really need one. I've replaced the
match with a simpler if-statement that should result in less code to
execute along this critical path.
@farmdawgnation farmdawgnation Implement AppendContainer pattern to provide support for Appendables
We use Scala's StringBuilder which performs much better than Java's, it
seems. But we also want to support general Java Appendables so we can
use Writers. This pattern should allow us to do both.
@farmdawgnation farmdawgnation Switch to using the AppendContainers throughout the rendering pipeline. dcd6176
@farmdawgnation farmdawgnation Implement support for Appendables with the new rendering pipeline.
Commits on Jul 13, 2015
@Shadowfiend Shadowfiend Add clearAfterRead parameter to jsToAppend.
This will change the way you have to invoke jsToAppend to require
parens, but allows for jsToAppend to clear the appendable JS after
having assembled it to be returned. This ensures Lift’s internals won’t
double-evaluate jsToAppend in weird ways.

It may be worth making this private[http] and exposing a public version
that takes no parameters and sets clearAfterReading to false, we’ll see.
@Shadowfiend Shadowfiend Centralize most jsToAppend handling in JsCommands.
Places that return JS via a JsCommands toResponse call now add
jsToAppend after evaluating all JS commands passed to the JsCommands
class. What this allows is for JsCmd classes that implement toJsCmd as
a def that in turn appends JS via S.appendJs, to still send down the
appended JS.

Before, because the toJsCmd calls were done after jsToAppend was
evaluated, that JS would be lost or sent down in a future AJAX response.

Additionally, JsCommands and LiftMerge now clear the jsToAppend after
reading it, to ensure that if two JsCommands are used, you won’t get
duplicate appended JS.
Commits on Jul 24, 2015
@farmdawgnation farmdawgnation Add back Printer methods.
This means that any code that relies on using the code style
will still compile and work as expected in client code, but will now
generate a deprecation warning.

This would, however, break code that relies on the scala.text.Document
format. That may be undesireable, but my current reasoning for why that
is O.K. is that scala.text.Document has been deprecated in Scala since
2.11.0 so, in theory, anyone relying on that format has had time to
implement work arounds.

I'll throw that reasoning out on the ML. Others may insist we support
scala.text.Document somehow for another release.
@farmdawgnation farmdawgnation Nuke some test compile warnings in JValueGen. 4c0e034
@farmdawgnation farmdawgnation Update JsonPrintingSpec to use new code. 678944d
@farmdawgnation farmdawgnation Nuke a bunch of warnings in json specs.
@farmdawgnation farmdawgnation Undo some extra paren'ing. b83ae55
@farmdawgnation farmdawgnation Fix DSL error with nulls val.
It looks like some magic was happening somewhere previously that
resulted in this looking like some type other than Null. So I manually
cast it and everything seems happy.
@farmdawgnation farmdawgnation Add a spec demonstrating failing behavior from gh-1669 6799241
@farmdawgnation farmdawgnation Enable MatchWithoutCurrentValue even without a * in the path.
It looks like we hit a completely different pipeline for computing the
currentValue if the menu doesn't have a * in the path anywhere. This
adds a MatchWithoutCurrentValue check to that pipeline, and ensures that
if your location definition looks like:

  / "product" >> MatchWithoutCurrentValue

That things will behave as you expect.
Commits on Jul 25, 2015
@farmdawgnation farmdawgnation Get lift-proto compiling with new LocRewrite changes. 05be3bb
@farmdawgnation farmdawgnation Get spec for non-* MatchWithoutCurrentValue menus working.
@farmdawgnation farmdawgnation Get lift-webkit compiling again with new lift-json rendering updates. 09c5d58
@farmdawgnation farmdawgnation Update various lift-webkit usages of lift-json rendering to new format. 041f66a
@farmdawgnation farmdawgnation Nuke various warnings generated by relying on old compact/render code.
As a bonus, all of these modules will no longer depend on the slower
JValue->Document->String transformation. So there may be some
performance improvements we get "for free" for lack of a better term.
Commits on Aug 06, 2015
@farmdawgnation farmdawgnation Minor tweaks per code review.
Commits on Aug 07, 2015
@farmdawgnation farmdawgnation Merge pull request #1714 from lift/loc-loco
Fix behavior of MatchWithoutCurrentValue when stars aren't present in path.
Commits on Aug 08, 2015
@Shadowfiend Shadowfiend Update JsCommands API docs.
This lets us be explicit that calling it clears S.jsToAppend.
Commits on Aug 10, 2015
@Shadowfiend Shadowfiend Merge pull request #1711 from lift/high-wire
High Wire: Fix appendJs when invoked from inside a toJsCmd def

appendJs should append JavaScript to be sent down with the
current request. However, if appendJs is called in a toJsCmd
method, and that method is defined as a def, not a val, then
toJsCmd will be called after the jsToAppend is read. This
means that this appended JS won't be sent down.

One place where this manifests is when a JsCmd's toJsCmd
method sends down a rendered snippet that contains a Wiring
component (because Wiring uses appendJs). In this case, the
appendJs that Wiring does is evaluated during the toJsCmd
invocation, which means the JsCmd that is sent down misses it.

When we send down JS in bulk for an AJAX or comet response,
we wrap it in a JsCommands, which is a collector of JsCmd.
We then call its toResponse to get a JavaScriptResponse.

Before, we passed the jsToAppend to JsCommands, and then
let JsCommands run toJsCmd on everyone while constructing
the response. In this PR, let the toResponse method call toJsCmd
on all the commands that are explicitly being sent down, and then
we read jsToAppend and concatenate that on the end of the other
commands inside toResponse. In the process, we remove external
invocations of jsToAppend.

So as to avoid accidental duplicate send-downs of jsToAppend, we
give jsToAppend a clearAfterReading boolean that, when set to
true (it defaults to false), will clear the list of JsCmds that need
to be appended. JsCommands and the jsToAppend reading in
CometActor, which sends down additional JS as a partial update,
both set it to true. Amongst other things, this ensures the two won't
both try to send down the same JS.
Commits on Aug 18, 2015
@joescii joescii Upgraded json Serialization.write from AnyRef to Any. However, the Ch…
…ar test fails
@joescii joescii Adding a Json Serialization round trip spec for Unit 63fd877
@joescii joescii Adding the CharUnit case class Json serialization/read roundtrip f90c5f6
@joescii joescii Removed failing tests that I wrote for discussion purposes 49c744e
Commits on Aug 19, 2015
@farmdawgnation farmdawgnation Use Java's StringBuilder directly, remove intermediary AppendContainer.
Commits on Aug 20, 2015
@Shadowfiend Shadowfiend Merge pull request #1710 from lift/msf_issue_1681
Eliminate the need for Document during JSON Serialization

This branch is focused on hitting two birds with one stone:
 - Removing the use of the deprecated scala.text.Document intermediary
   format for JSON.
 - Providing more flexible JSON rendering settings that permit options like
   having spaces between field names and values in JSON objects.

We already put in a good bit of work to implement compactRender in the
JsonAST, and with some trivial changes it was possible to implement a
prettyRender that uses the same pipeline with different options. My hypothesis
is that by eliminating the need for an intermediary format we'll see similar
performance gains during pretty rendering that we did for compact rendering
using compactRender.
Commits on Aug 29, 2015
@farmdawgnation farmdawgnation Special case handling of Option internal types in extraction.
This essentially treats Option as a type of collection, which it is in a
way, and special-cases the handling of it so that invoking something
like `extract[List[Option[String]]]` will work as the user expects.
@farmdawgnation farmdawgnation A few minor readability improvements.
@farmdawgnation farmdawgnation Fix spec wording to be more consistent.
@farmdawgnation farmdawgnation Add a spec asserting that we blow up if we get the wrong type.
We want to change our behavior to blow up if we get a value for an
Option, but that value is of the wrong type.
@farmdawgnation farmdawgnation Merge branch 'msf_issue_1071' into msf_issue_1425 bdfc7bc
@farmdawgnation farmdawgnation Readability improvements to Extraction.scala. 26b4332
@farmdawgnation farmdawgnation Improve the spec we're working against a bit. 29d0308
@farmdawgnation farmdawgnation Improve our error specs to check the message. 1f3424b
@farmdawgnation farmdawgnation Only swallow MappingException for JNothing/JNull.
Previously, if a field was considered optional, we would eat any
conversion exceptions that occured while trying to understand that
field. This meant that if something was an Option and we couldn't
understand what was at that key, we'd just give you a None.

Now, if something is an Option and nothing is provided for that key then
we still give you a None. But if something *is* provided for that key
and it doesn't make sense to us, we're going to give you a
MappingException because you probably are expecting something to be
there and that thing is of the wrong format.
Commits on Sep 26, 2015
@farmdawgnation farmdawgnation Merge pull request #1717 from lift/msf_issue_1071
We now special case Option as a type of collection in the generation of the Meta ADT, and handle that case when constructing an Option[_] when invoking extract[...].
@farmdawgnation farmdawgnation Merge branch 'master' into json-serialization-any
@farmdawgnation farmdawgnation Merge pull request #1719 from lift/json-serialization-any
Open up the json serialization to take Any rather than restricting the input to AnyRef.
Commits on Oct 12, 2015
@farmdawgnation farmdawgnation Implement radioCssSel alternative for binding radios.
Commits on Oct 23, 2015
@farmdawgnation farmdawgnation Execute map/flatMap LAFuture tests on same thread for reliability.
We were running into issues with test realibility in TravisCI with these
specs. So, let's make them more reliable by using an LAScheduler that
doesn't start a separate thread.
Commits on Oct 24, 2015
@farmdawgnation farmdawgnation Merge pull request #1724 from lift/la-future-spec-reliability
LAFuture Spec Reliability: Execute map/flatMap LAFuture tests on same thread for reliability.
@farmdawgnation farmdawgnation Merge remote-tracking branch 'origin/master' into radio-csssel
Commits on Oct 26, 2015
@joescii joescii No need to explicitly check for null when creating an option, as that…
@joescii joescii Updating usage example because curly braces don't work 6d2fd2d
@joescii joescii Also discovered that the cssSelToValue doesn't assume IDs like the ex…
…ample suggests, so updating example
@joescii joescii Also adding a sample submitHandler for good measure
@farmdawgnation farmdawgnation Merge pull request #1723 from lift/radio-csssel
Implements the new radioCssSel alternative for binding radios on forms.

Now, you can bind radios using this syntax:

  SHtml.radioCssSel[String](Empty, submitHandler) (
    "#all-emails" -> "All emails",
    "#some-emails" -> "Some emails"

This will bind radios without inherently changing the structure of the page that you're
binding on, unlike the existing radio* functions that will effectively replace the buttons
you started with on the page wholesale. This method relies on CSS selectors to
more gracefully bind the buttons and preserve CSS classes, IDs, and the relative
positioning of elements (it doesn't add hidden fields like the radio* functions do).
Commits on Oct 27, 2015
@farmdawgnation farmdawgnation Merge pull request #1718 from lift/msf_issue_1425
lift-json: Generate MappingExceptions when you are attempting to do something like extract an Option[String] but the value for that field is present, but doesn't conform to a String.
Commits on Oct 31, 2015
@joescii joescii Making the default for LiftRules.autoIncludeAjaxCalc smarter by check…
…ing to see if the session is stateful
Commits on Nov 03, 2015
@farmdawgnation farmdawgnation Only build master branch and PRs.
By specifying that we only build master, we should only build master and
PRs and we should no longer be kicking off two jobs for each PR.
@farmdawgnation farmdawgnation Implement the build script.
This build script for travis will check whether or not we're currently
in a Travis PR build. If not, it'll check the branch. If we're on master
or lift_26, we'll trigger a SNAPSHOT image deploy.

Of course, we don't yet have the credentials in travis yet so this won't
_quite_ work how we want it for the moment. But give me more than one
commit to get that sorted out!

@farmdawgnation farmdawgnation See if we can override the travis env vars. 7503da0
@farmdawgnation farmdawgnation Set to be executable.
@farmdawgnation farmdawgnation Remove environment variable set test. f61c817
@farmdawgnation farmdawgnation Use liftsh to attempt publish. 2687fe6
@farmdawgnation farmdawgnation Switch builds to use JDK 8.
There was a discussion on the Lift list about switching to building with
Java 8 for Lift 3 so we could support Scala 2.12 when it comes out. I
don't remember if there was a strong consensus against this, but I do
want to go ahead and start moving that direction, so we're going to
switch the Travis build over to that.
@farmdawgnation farmdawgnation No such thing as openjdk8 apparently.
Commits on Nov 21, 2015
@farmdawgnation farmdawgnation Add encrypted credentials for publishing snapshots. 2daec9c
@farmdawgnation farmdawgnation Commit a variant that should cause a publish.
Commits on Nov 24, 2015
@Shadowfiend Shadowfiend Fix BaseParsers ws parser to not match newlines.
In lift-markdown, BaseParsers was using a regex containing `\v` to indicate a
vertical tab. As of Java 8, `\v` refers to a character class that contains all
vertical whitespace, including newlines. We now explicitly use the unicode
value for vertical tab in the regex, fixing the failing test in Java 8 and
generally making things work as expected.
@Shadowfiend Shadowfiend Merge pull request #1726 from lift/autoIncludeAjaxCalc-default
Making the default for LiftRules.autoIncludeAjaxCalc smarter 

A Lift session is required for Lift's AJAX JS to work correctly, so including it
while a session is stateless is a waste of time and triggers session creation to
boot. We now disable autoIncludeAjaxCalc when we don't have a stateful Lift
session available.
Commits on Nov 25, 2015
@farmdawgnation farmdawgnation Merge pull request #1733 from lift/markdown-vertical-tabs
Fix BaseParsers ws parser to not match newlines.
@farmdawgnation farmdawgnation Merge remote-tracking branch 'origin/master' into publishable-by-travis
Commits on Nov 26, 2015
@Shadowfiend Shadowfiend TRAVIS_BRANCH is the target branch for PRs; use TRAVIS_PULL_REQUEST.
We were using TRAVIS_BRANCH to run the build on just our PR, but it's set to
`master` for our PR since that variable is set to the *target* branch, not the
source branch, in case of a PR. We use TRAVIS_PULL_REQUEST now.
@Shadowfiend Shadowfiend Place credentials where sbt's lookin'.
We were going to ~/.credentials, but that's not where sbt is looking for them!
@Shadowfiend Shadowfiend Deploy on non-PR build.
We were deploying on PR build so we could test things, but now we switch to
deploying only when the build is a non-PR build.
@farmdawgnation farmdawgnation Merge pull request #1729 from lift/publishable-by-travis
Implement build publishing of snapshots from Travis.