<commit_before>library module
--------------
* [eed3si9n][eed3si9n] `Accepts.Javascript` now accepts `text/javascript` or `application/javascript`
* [eed3si9n][eed3si9n] `Accepts.Jsonp` now accepts `application/json`, `text/javascript`, or `application/javascript`

json-p module
-------------
* [eed3si9n][eed3si9n] The jsonp wrapper object now defines a `respond` method that returns a `ChainResponse` that handles a
by-name parameter which produces a lift-json `JValue`.

    case GET(UFPath("/jsonp/lift-json/optional") & Jsonp.Optional(callback)) => callback respond {
      import net.liftweb.json.JsonAST._
      import net.liftweb.json.JsonDSL._
      "answer" -> Seq(42)
    }

netty module
------------
* [gh-15](https://github.com/n8han/Unfiltered/issues/15) Fixed issue with undecoded parameter keys

[eed3si9n]: https://github.com/eed3si9n/<commit_msg>release notes<commit_after>library module
--------------
* [eed3si9n][eed3si9n] `Accepts.Javascript` now accepts `text/javascript` or `application/javascript`
* [eed3si9n][eed3si9n] `Accepts.Jsonp` now accepts `application/json`, `text/javascript`, or `application/javascript`
* Deprecating `HttpRequest.requestURI` and `HttpRequest.contextPath` and replacing with `HttpRequest.uri`. `HttpRequest.contextPath` only existed to suit the `HttpServletRequest` spec and had no context in the `Netty` module and thus should not be in the base `HttpRequest` interface.
* Added `QueryString(qs)` extractor for extracting the raw query string from a request
* Added `HostPort(hostname, port)` extractor for extracting out a request's host and port

filter module
-------------
* Added `ContextPath(ctx, path)` module to suit filter plans mounted on a context path. Note, the `Path` extractor will contain the context path. To remove redundancy in filter plans, use `ContextPath(ctx, path)`

Prior to this release, you used matched filters on context paths with

    jettySvr.context("/foo") { _.filter(Planify { case Path("/bar") => ... } }

To accomplish the same match in this release and beyond,

    jettySvr.context("/foo") { _.filter(Planify { case ContextPath(_, "/bar") => ... } }

json-p module
-------------
* [eed3si9n][eed3si9n] The jsonp wrapper object now defines a `respond` method that returns a `ChainResponse` that handles a
by-name parameter which produces a lift-json `JValue`.

    case GET(UFPath("/jsonp/lift-json/optional") & Jsonp.Optional(callback)) => callback respond {
      import net.liftweb.json.JsonAST._
      import net.liftweb.json.JsonDSL._
      "answer" -> Seq(42)
    }

netty module
------------
* [gh-15](https://github.com/n8han/Unfiltered/issues/15) Fixed issue with undecoded parameter keys

[eed3si9n]: https://github.com/eed3si9n/
{'fraction_non_alphanumeric': 0.14635931211123307, 'fraction_numerical': 0.016831320892791803, 'mean_word_length': 3.926126126126126, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 9, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4471457', 'n_tokens_mistral': 849, 'n_tokens_neox': 819, 'n_words': 252}