- Added a welcome screen app on "/" that lists the active apps.
create-widget-from
now returns a more user-friendly error message, explaining that the widget is not of a good type, instead of "no applicable generic method".
- Added a log in
weblocks/app:start
to show the prefix of the app that is started. - Changed
(weblocks/debug:on)
andoff
so they set the log level todebug
andwarn
, respectively. - Changed a library used to log unhandled errors. Now log4cl-extras is used, because it is a successor of log4cl-json.
Fixed processing of the value
x-forwarded-port
. Previously, when Weblocks was used along with lastest (after the 2019-09-07)Woo
server, this header lead to the 500 error. Because behavior of theWoo
was changed:Now Woo does not parses numeric headers and Weblocks has to do it itself.
A new macro
weblocks/routes:defroute
was added.It defines a handler for a given route. By default route should return a serialized JSON:
(defroute (app /api/data) "{\"my-data\": [1, 2, 3]}")
but you can redefine the content type:
(defroute (app /api/data :content-type "application/xml") "<my-data><item>1</item><item>2</item></my-data>")
each route is associate with application class and these routes are added to the mapper when you call a
start
method.
- A small fix to make it work with
weblocks-websocket
.
- Unhandled error processing was fixed. There were numerous problems with error processing:
- Previosly server stopped to work because clack tried to write into a closed stream.
- Also, before this fix, error page didn't showed propertly.
- Any error in the route lead to a server stop because there wasn't any handler at all. Now they are handled with
on-error
method as errors in block/page rendering.
- Removed check if
:bordeaux-threads
is in the*features*
, because this does not work in runtime in precompiled binary.
- Added function
weblocks/session:expire
, which can be used to tell Weblocks to delete current session after request processing. - Also, now session middleware is created explicitly along with memory store. This made possible to add another two functions to gather some statistics about number of sessions:
weblocks/session:get-number-of-sessions
;weblocks/session:get-number-of-anonymous-sessions
;
- The function
weblocks/widgets/base:get-html-tag
was fixed to render tables correctly. If the widget's parent is a:table
element, then this function returns:tr
(instead of a:div
). If it is:tr
, it returns:td
, and:div
otherwise. - A new setting
weblocks/html:*pretty-html*
was created, to further control pretty printing of html both in code and in tests.
Added a
weblocks/response:add-retpath-to
function, useful to add aretpath
GET parameter to the URL.For example, calling:
(add-retpath-to "/login" :retpath "http://example.com:10050/foo/bar")
Will return:
"/login?retpath=http%3A%2F%2Fexample.com%3A10050%2Ffoo%2Fbar"
Argument
:retpath
is optional. By default, function will take an URL of the current web page.
- Subsystem
weblocks/utils/i18n
was added to asd file, because otherwise systemweblocks-ui
can't be installed from the Ultralisp.
Previosly, when you called
(weblocks/debug:off)
, subsequent call to(weblocks/debug:status)
returnedT
, but should returnNIL
.This was fixed now.
Request handling pipeline was refactored.
The idea of this refactoring, is to separate roles of the functions which process requests. Now weblocks/server:handle-http-request
prepares data received from the Clack
and calls weblocks/request-handler:handle-request
to do the real job.
In it's turn, weblocks/request-handler:handle-request
should return an object of type weblocks/response:response
containing a content, HTTP status code and headers of the response. Any error signal, thrown from the handle-request
is considered by handle-http-request
as an "unhandled error" and returned with 500 HTTP status code.
Here is a list of changes:
- Macro
weblocks/hooks:on-application-hook-handle-request
was renamed toweblocks/hooks:on-application-hook-handle-http-request
. - Generic-function
weblocks/request-handler:handle-client-request
was renamed toweblocks/request-handler:handle-request
and now this function should return eitherstring
or an object of typeresponse
. Previously, it also made a non-local exit by throwing a tag, if request was aborted (for example to return a redirect response). But now it should only unwind a stack in case if some unhandled errow was thrown. Any condition of typeweblocks/response:immediate-response
will be catched inside a:around weblocks/request-handler:handle-request
method and returned as usualresponse
object. - Function
weblocks/response:abort-processing
was renamed toweblocks/response:immediate-return
, symbols*code*
,*headers*
and*content-type
are not exported anymore. Instead of these global variables, use newly exported functionsget-content
,get-code
,get-headers
,get-custom-headers
andget-content-type
to extract information from theresponse
object. * Packageweblocks/response
does not export symbols*code*
and*content-type*
anymore, but exports a functionmake-response
which can be used by aweblocks/request-handler:handle-reqiest
to return response.
- Function
weblocks/request:get-scheme
was added and it is usesX-Forwarded-Proto
header, if it is available.
- Function
weblocks/request:get-port
now will useX-Forwarded-Port
header if it is available. - Function
weblocks/request:get-host
now will useX-Forwarded-Host
header if it is available.
- Fixed issue introduced in
0.33.2
release - systemlack-middleware-session
was loaded successfully, but SBCL was unable to findlack-middleware-session
package. - Now HTML is pretty-printed by default on all implementations.
- Function
weblocks/request:get-uri
was fixed to work correctly when server is behind a reverse proxy which providesX-Forwarded-*
headers.
- Added dependency on
lack-middleware-session
system because wee use it to store sessions.
Now unhandled exceptions are logged with tracebacks if you are using
log4cl-json
library. To turn it on, just do:(log4cl-json:setup)
- Function
response:redirect
and it's JS counterpart was fixed and now work as expected. Request processing was streamlined and now
weblocks/server:handle-request
does not contain non-local exits. This fixes usage of thehandle-request
hook, because previously, if you wrap some code around(call-next-hook)
, then part followingcall-next-hook
was ignored.For example:
(weblocks/hooks:on-application-hook-handle-request connect-to-database () (let ((success nil)) (unwind-protect (progn (setup-transaction) (weblocks/hooks:call-next-hook) (setf success t)) (if success (commit) (rollback)))))
Before this fix,
rollback
always called, because execution never hitted(setf success t)
. Now this is fixed.
Removed external symbol
weblocks/app:make-uri
because it wasn't fbound to any function after some refactoring.Use
weblocks/response:make-uri
instead.
- A separate file
widget.lisp
was added to define aweblocks/widget
package. This solves issues when ASDF package inferred loading is unable to findweblocks/widget
system. Seems it plays badly whenweblocks/widget
is nickname forweblocks/widgets/base
.
- A new hook was added -
start-weblocks
. It is called around the code in(weblocks/server:start)
and can be used to setup some additional routes, for example.
Previosly, there was an error if you are using ASDF's package inferred system class and don't have explicit dependency on the
weblocks
page.The error was raised during code loading:
;;; > Error: There is no applicable method for the generic function: > #<STANDARD-GENERIC-FUNCTION WEBLOCKS/JS/BASE:MAKE-JS-BACKEND #x3020027E292F> > when called with arguments: > (:JQUERY)
Now it is fixed and package
weblocks/js/jquery
is a dependency ofweblocks/server
and always loads.
- Now weblocks system explicitly requires ASDF >= 3.1, because it uses
package-inferred-system
class.
- Fixed error about missing 'bool type under SBCL.
We don't enforce
*print-pretty*
inside ofweblocks/html:with-html
macro. This hack was required because the bug in the spinneret, which was fixed at 2018-01-04:https://github.com/ruricolist/spinneret/commit/06b280612aff07cf376f593746d080230f2c7462
Error was fixed when you are trying to start a server which is already running. Now you have a "restart" to stop the old version of the server before starting the new one.
However, it does not work with
Woo
server, because C library libev crashes with error:Assertion failed: (("libev: a signal must not be attached to two different loops", !signals [w->signum - 1].loop || signals [w->signum - 1].loop == loop)), function ev_signal_start, file ev.c, line 4082
- Fixed the order of commands for frontend. Now they are returned in the chronological order.
Class weblocks/dependencies:dependency
now requires that type
attribute shoulde be of type (member :css :js :png :jpg :gif)
Also, functions make-local-js-dependency
, make-local-css-dependency
, make-local-image-dependency
, make-remote-js-dependency
and make-remote-css-dependency
were removed from package weblocks/dependencies
. Use make-dependency
function, it will figure out which dependency type to create itself.
A new function weblocks/debug:get-session-value
was added. It can be used to get values from the last session seen by weblocks.
Error handling was fixed. Previously it aborted Woo's worker thread and break the server.
Variable weblocks/variables::*catch-errors-p*
was renamed to weblocks/variables::*invoke-debugger-on-error*
and it's value was inverted. If this variable is True, then debugger will be invoked. Otherwise - Weblocks will return 500 error page.
Argument :invoke-debugger-on-errors
of weblocks/debug:on
function was renamed to :invoke-debugger-on-error
.
Method weblocks/error-handler:on-error
now is called when you abort request processing from the debugger. It is called with current app as the first argument and the nil
instead of condition.
Fixed a typo in string-widget
and funcall-widget
package definitions.
Now string-widget
and funcall-widget
depends on weblocks/widgets/base
instead of weblocks/widget. 0.27.0 (2018-03-11) =================== Reloading of the defapp definition now does not tries to restart an application. Previously, restart caused the problem – when there is only one application, whole Weblocks server was shut down. So, I've removed this implicit action. Code which logs action result on the client-side was improved. 0.26.0 (2018-02-20) =================== Symbols
add-application-hook,
add-request-hook,
add-session-hook,
prepare-hooksand
call-hookaren't exported from
weblocks/hooksanymore. Use new macro
defhookinstead. Here is how it works: You use
defhookas the toplevel form of your file if you want to define a new hook. This macro will create few other macroses in
weblocks/hookspackage and will export them. For example: .. code:: common-lisp (defhook database-opened "This hook is called when your application opens a database.") This code will add these macroses into the
weblocks/hookspackage:
on-session-hook-database-opened,
on-request-hook-database-opened,
on-application-hook-database-opened,
with-database-opened-hookand
call-database-opened-hook. You need to wrap code, which opens a database, with
with-database-opened-hook: .. code:: common-lisp (weblocks/hooks:with-database-opened-hook () (do-some-staff-to-open-database)) And in any other piece of code, you can define callbacks, using one of other three macroses: .. code:: common-lisp (weblocks/hooks:on-session-hook-database-opened log-database-opening () (weblocks/hooks:call-next-hook) (log:info "Database was opened")) Usage of
defhookmacro gives more transparency to all defined hooks, because all of them now visible as external symbols in
weblocks/hookspackage. 0.25.2 (2018-02-04) =================== System
weblocks/hooksnow depends on
log4cland
metatilities, because previously sometimes it was impossible to load
weblocks. 0.25.1 (2018-02-04) =================== Old tests for widgets, removed from core framework were removed. Tests for widget's MOP methods were ported to Rove. Package
weblocks/utils/closenow loaded with main
:weblockssystem. Few old widget tests were removed. Added function
weblocks/session:resetwhich resets current session. 0.25.0 (2018-01-31) =================== Good news, everyone! -------------------- Quickstart tutorial was fixed! Widget related changes ---------------------- Function
render-widgetwas replaced with
weblocks/widget:render :aroundmethod. Method implementation were moved to
weblocks/widgets/render-methods. Funcall-widget's package was refactored to conform package inferred requirements. Actions processing ------------------ Function
make-js-actionwas moved to
weblocks/actionspackage. Application and server restarting --------------------------------- Package
weblocks/appnow exports functions
stopand
restart. Previously they were internal and were called like
stop-webappand
restart-webapp. Package
weblocks/serverdoes not export
start-weblocksand
stop-weblocksfunctions. They were replaced with just
startand
stop. Also, it's internal generics
startand
stopwere renamed and transformed to
start-serverand
stop-serverfunctions. Session initialization changes ------------------------ File
default-application.lispwas removed, because now every application has default session initialization method. File
default-init.lispwas refactored. Now it provides default method for
weblocks/session:initgeneric and
:aroundmethod for same generic, which allows end user just to return a string or a function from his
initmethod. Now user can return any string or function from his method
weblocks/session:initand it will be passed to a new generic
weblocks/widget:create-widget-fromto create a root widget. You can also define
create-widget-fromfor you custom types. Debug ----- Function
weblocks/debug:onnow turns on mode when Weblocks does not intercept unhandled conditions, but calls an interactive debugger. Removals -------- *
session-name-string-pairthis function was removed in previous releases, but didn't find it's way to the changelog, still used in some older tests not ported to the Rove. * Macro
defrenderwas removed. 0.24.0 (2018-01-29) =================== All rendering code was refactored. Macroses
with-htmland
with-html-to-stringreplaced with
weblocks.html:with-htmland
weblocks.html:with-html-string. Stream
weblocks-output-streamwas moved to
weblocks.html::streamand is not external anymore. Please, don't use it directly. Widget refactorings ------------------- Procedure
update-widget-treewas removed and not widgets can't change html header's tags, description, title, etc. If you need this, change them in the
rendermethod. Macro
root-widgetwas removed and replaced with function
weblocks.widgets.root:get. Request level ------------- Functions
post-action-redirect,
post-render-redirectand
initial-request-pwere removed from
weblockspackage. Function
pure-request-pwas moved to
weblocks.requestpackage. Variable
json-content-typewas removed. Variable
latest-requestwas moved to
weblocks.debug:latest-request. Functions
parse-location-hash,
ajax-request-pwere moved to
weblocks.requestpackage. Function
redirectwas moved to
weblocks.response:redirect. Functionality, related to opening another window instead of redirection or deferring redirection until the end of action or rendering was removed. Request handler --------------- Functions
remove-duplicate-dirty-widgets,
update-location-hash-dependentsand
update-widget-treewere removed. Call to
weblocks::update-dialog-on-requestfrom
handle-client-requestwas commented. Error handler ------------- Generic method
weblocks/error-handler:on-errornow accepts two arguments - application object and condition. Application level ----------------- All code from
uri-parameters-slotmap.lispwas removed. All code, related to application class, was moved to the package
weblocks.app. Base aplication class was renamed to
weblocks.app:app, and macro for definition of the new application was renamed to
weblocks.app:defapp. All code related to application's metaclass, was moved to the package
weblocks.app-mop. Metaclass was renamed to
weblocks.app-mop:app-class. Application's slot
html-indent-pand corresponding accessor
weblocks-webapp-html-indent-pwere removed because now spinneret generates non indented code. Slot
init-user-sessionwas completely removed and replace with a generic
weblocks.session:init. These dependency related slots and accessors were removed: *
application-dependencies*
weblocks-webapp-application-dependencies*
bundle-dependency-types*
version-dependency-types*
gzip-dependency-typesAnd macro for defining a special readers for them was removed as well:
def-debug-p-slot-readers. Also, these arguments to
defappwas removed:
:ignore-default-dependencies,
:dependenciesFunction
update-thread-statusand method
webapp-update-thread-statuswere removed. Function
get-webapps-for-classwas renamed to
app-active-pand now returns
tif application of given class is already active. Function
start-webappwas renamed to
weblocks.app:start. Function
get-webappwas renamed to
get-active-appand optional argument
error-pwas renamed to keyword argument
signal-error. Function
find-appwas removed. Function
in-webappwas moved to
weblocks.debug:in-app. Variable
default-webappwas removed. Variable
active-webappswas renamed to
weblocks.app::active-appsand made internal. Use
weblocks.app:get-active-appsfunction. Reader
weblocks-webapp-prefixwas renamed to
weblocks.app:get-prefix. Slot
default-store-nameand its accessor
webapp-default-store-namewere removed. Variable
current-webappwas moved to
weblocks.variables::current-app. Functions
compute-webapp-public-files-uri-prefix,
compute-webapp-public-files-uri-prefix,
compute-webapp-public-files-path,
make-webapp-public-file-uri,
weblocks-webapp-public-files-cache-timeand variable
default-public-files-pathwere removed because now there is another way to serve static. Function
webapp-serves-hostnamewas renamed to
weblocks.app:app-serves-hostname-pand now accepts app as the first argument and hostname as the second. Variable
uri-tokenswas removed and weblocks does not set 'last-request-uri session value to all uri tokens anymore. Macro
with-webappwas moved to
weblocks.app:with-app. Function
webapp-permanent-actionwas moved to
weblocks.app-actions:get-action. Function
add-webapp-permanent-actionwas moved to
weblocks.app-actions:add-actionand
remove-webapp-permanent-actionto
weblocks.app-actions:remove-action. Macroses
define-permanent-actionand
define-permanent-action/ccwere moved to
weblocks.app-actions:define-actionand
weblocks.app-actions:define-action/cc. Function
make-webapp-uriwas removed, use
weblocks/response:make-uriinstedad. Accessor
webapp-js-backendwas renamed to get-js-backend These functions were moved into the separate package
weblocks.current-appand renamed: *
webapp-prefix->
get-prefix; Actions and commands -------------------- Function
weblocks.actions:add-commandwas moved to
weblocks.commands. Function
weblocks:get-request-actionwas moved to
weblocks/actions:get-request-actionKeyword argment
:actionwas removed from action calls. Javascript ---------- Package
weblocks.jswas renamed to
weblocks/js/base. Functions
escape-script-tags,
%jsand macroses
with-javascript,
with-javascript-to-stringwere moved to the package
weblocks/js/base. Variables --------- These variables were moved from
weblockspackage to
weblocks/variables: *
current-page-title*
current-page-keywords*
current-page-headers*
rewrite-for-session-urls*
default-content-type*
ignore-missing-actionsSymbols moved from :weblocks to other packages ---------------------------------------------- To :weblocks/widgets/dom ~~~~~~~~~~~~~~~~~~~~~~~~ *
dom-object-mixin*
dom-idTo :weblocks/utils/uri ~~~~~~~~~~~~~~~~~~~~~~ *
request-uri-path*
add-get-param-to-url*
remove-parameter-from-uriTo :weblocks/linguistic/grammar ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *
pluralize*
singularize*
proper-number-form*
vowelp*
consonantp*
proper-indefinite-article*
articlize*
current-locale*
current-locale*
russian-proper-number-form*
noun-vocative-to-genitive*
debug-words-forms*
debug-words-genders*
determine-genderTo weblocks/utils/warn ~~~~~~~~~~~~~~~~~~~~~~ *
style-warn*
webapp-style-warningrenamed to
style-warning. *
non-idempotent-rendering*
misunderstood-actionTo weblocks/actions ~~~~~~~~~~~~~~~~~~~ *
function-or-action->action*
make-action*
generate-action-codeRemovals -------- To make Weblocks core smaller, many files were removed:
views,
widgets,
html-parts,
utilities. Systems
weblocks-util,
weblocks-testutilswere removed. Accessor
dom-classand generic function
dom-classeswere removed and replaced with generic function
weblocks/widget:get-css-classes. Generic function
weblocks:handle-error-conditionwas removed. Variable
dirty-widgetswas removed along with
render-dirty-widgetsfunction. Dependencies ------------ Rendering of remote (non cached) dependencies was fixed. 0.23.0 (2018-01-11) =================== * Symbol
weblocks.routes:routesis not external anymore. Use
weblocks.routes:add-routeand
weblocks.routes:get-routeto add new routes and to search a route matched on a path. * Fixed getting the rendered widgets in
weblocks.widget:updatemethod when making
:update-widgetor
:insert-widget (before)commands. * Temporary added method
weblocks::child-of-pfor new type of widget. This should fix some issues, with widgets updating. 0.22.2 (2018-01-07) =================== * Class
weblocks.widget:widgetwas exported, to make possible to define widgets based on it and some mixins. 0.22.1 (2018-01-07) =================== * Code broken in previos release was fixed. 0.22.0 (2018-01-06) =================== Most functions from
weblocks.requestwere refactored and renamed: *
request-parameters->
get-parameters; *
request-parameter->
get-parameter; *
request-header->
get-header; *
remove-request-header->
remove-header; *
request-server-name->
get-host; *
request-server-port->
get-port; *
request-uri->
get-uri(and now it returns full URI with scheme, host and port; *
request-path-info->
get-path(and now it has keyword argument
with-paramsto copy behaviour of old
request-uriand return strings like
/some/path?with=parameters; *
request-method->
get-method. All these function now accept keyword argument
:request. Previously it was
&optional. Another change is a new function
weblocks.response:make-uri. It can be used to build new uri, based on the uri of the current request. This can be useful when embedding links into emails, for example. .. warning:: These changes require a newer version of Lack. I've made a pull request https://github.com/fukamachi/lack/pull/31 it is not merged yet, so, alternative version of Lack can be used, by installing it using Qlot, from here: https://github.com/40ants/lack 0.21.0 (2018-01-01) =================== * Macro
weblocks.session:get-valuewas replaced with a regular function. * Function
weblocks.session:set-valuewas removed and replaced with a setter
(setf get-value). 0.20.1 (2017-12-20) =================== * Removed debug these debug messages from client-side JS: * LOADED; * Starting AJAX; * Stopping AJAX progress; * Some AJAX error; * Action success. 0.20.0 (2017-12-15) =================== * Package
weblocks.debugnow does not export
on`` variable, but provides three functions ``on``, ``off`` and ``status``. New method weblocks.server:serve-static-file
was introduced. It can be used to create static routes which will respond with file's content. For example, you could add this to your app's initialize-instance
method:
(weblocks.server:serve-static-file "/favicon.png" (asdf:system-relative-pathname :app "favicon.png"))
- Now weblocks rebinds
*random-state*
to itself for each request to allow it to usesetf
and change*random-state*
until the end of request processing.
- Dirty widgets rendering was fixed.
- Variable
*expired-action-handler*
, methodexpired-action-handler
and functiondefault-expired-action-handler
were replaced with methodweblocks.actions:on-missing-action
. - Now we are trying to call action only if action's name was given.
- Old method
weblocks:handle-client-request ((app weblocks-webapp))
was removed. Look at it's newer version inweblocks.request-handler
.
Commented out call to
update-widget-tree
inside of(setf widget-children)
, because it breaks on(get-widgets-by-type 'selector :root obj)
sometimes. Seems this is because I've removed selector's code previously.Warning
Probably parent/children handling code will be removed soon.
- Backtrace printing code was replaced with direct usage of
trivial-backtrace:print-backtrace
. - Call to
prepare-hooks
was moved fromweblocks.request-handler:handle-client-request
to the the weblocks.server:handler-request, to fix session hooks processing when:process-request
hook is called.
- Error handling code was fixed. It was broken in 0.17.1 and prevented system loading.
- Fixed error handling when debug mode is "off". Now weblocks returns result of
(weblocks.error-handler:on-error app)
call.
- Added a
weblocks.actions
package. - Also, a
commands
were introduced. Commands describe remote calls which have to be applied on a client as a result of action's execution. Previously, weblocks used similar technic to replace dirty widgets and to execute some javascript code before or after replacement. The new mechanism of "commands" is more generic and uses the JSON-RPC to pass function name and parameters from backend to client-side. - Added
weblocks.session:in-session-p
function which returnst
if session data can be retrived or stored without error. - Now function
initiateActionWithArgsAndCallback
send arguments as JSON payload. This allows to send any datastructures as action's params. - Function
weblocks.response:send-script
was changed to use new mechanizm with commands. When you send script from the action, it will add a command:execute-code
to the stack. All commands are executed in same order as they were added. If you want some code to be executed before widget update, just executesend-code
beforeweblocks.widget:update
.
- New package was introduced -
weblocks.widget
it contains a newwidget
class with simplified rendering based onspinneret
templating library. - Now class
route
is exported fromweblocks.routes
and should be used instead ofroutes:route
. - New package
weblocks.error-handler
was introduced. It contains aon-error
generic method which is called when some unhandled error raise by application. - Fixed issue of adding multuple routes mapped to the same path. Now if url mapper already have a route all subsequent attempts to add a route with same path are ignored.
Fixed error:
Undefined function WEBLOCKS:WEBAPP-SESSION-KEY called with arguments (#<APP::APP #x3020052F01DD>)
Fixed
Content-Type
of the default 500 page. Previously it wasplain/text
and browser didn't undestand that and downloaded the file.Now
Content-Type
istext/plain
.
- Now weblocks does not checks if all tokens from URL were consumed by app during root widget rendering. Previously it returned 404 if some token weren't consumed. Implement this logic in your app if needed.
Macro
assert-hooks-called
was changed to return hooks in the order they were called. Also, now it waits hooks description as a DSL, like:(assert-hooks-called (:fact-created contact "vasya@pupkin.com") (:fact-removed contact "vasya@pupkin.com"))
New system
weblocks-testutils
was introduced. It compilesweblocks.t.utils
package which macroses useful for unittesting.Also, a new macro
catch-hooks
was added to check if some hooks were called during a unittest.- Now weblocks does not open a new tab or window on 500 error during an action execution.
- No more
declaim optimize
in different places. These declarations changed compiler's settings at unexpected moments. - Fixed error happened when "File not found", and now
with-hook
macro returns the value of the last form's evaluation.
- Default method of
render-page
was fixed to really wrap page with<html>...
block. - Fixed a way how weblocks.debug:latest-session is processed.
- Function
weblocks.request:remove-request-header
now returns a new instance of request object and does not modify the original request. This fixes issue inweblocks-websocket
.
- Added package
weblocks.debug
and keeping latest session was rewritten using:process-request
hook.
- Added function
weblocks.request:remove-request-header
. - Added a hook
(:reset-session session)
, which is called around a code for clearing given session. Right now it is called only fromweblocks.sessions:reset-latest-session
.
html
,menu
,suggest
andrepl
utilities were excluded.- Code which was in
request-handler.lisp
, was excluded from build and partly moved torequest-handler2.lisp
. - Added
:stop-weblocks
hook. - Misc helper for repl were removed:
sessions
,in-session
andpt
. May be the will be restored in separate package. - Page boilerplate rendering method
render-page
now does not use complex templating with contextes. - Symbols refactoring:
*style-warn-on-circular-dirtying*
variable ->weblocks.variables
;*style-warn-on-late-propagation*
variable ->weblocks.variables
;gen-id
function ->weblocks.session
;send-script
function ->weblocks.response
;with-html-form
macro ->weblocks-ui
;*approved-return-codes*
variable ->weblocks.variables
;handle-ajax-request
method ->weblocks.request-handler
;update-location-hash-dependents
function ->weblocks.request-handler
.render-link
function was moved toweblocks-ui.form
in separate system.
- Added
weblocks.hooks:call-hook
helper. - Now
call-next-hook
is called automatically if it wasn't called explicitly.
- Package
weblocks.request-hooks
was renamed toweblocks.hooks
. - Macro
with-dynamic-hooks
was renamed towith-hook
. Functions add-application-hook, add-session-hook, add-request-hook became a macroses and their argument lists were changed. Now the should be used like:
(weblocks.hooks:add-session-hook :some-hook my-beautiful-callback (param) (do-something-useful-with param))
weblocks.request-hooks:eval-hooks
was renamed toweblocks.hooks:call
and now can be called with params:(weblocks.hooks:call :some-hook first-param second-param)
Added
:handle-request
dynamic hook called around request handling code.Called when
weblocks.request:*request*
andweblocks.session:*session*
are already bound.
- Added integrity field for remove javascript dependencies. Also,
get-cross-origin
and:cross-origin
were removed toget-crossorigin
and:crossorigin
, to conform the html attibute's spelling.
- Fixed error on
(weblocks:redirect...)
call. - Fixed dependency handling in ajax requests.
- Now if unhandled exception occure, Woo's handler remains working. Previously, handler's thread shut down on any unhandled exception.
- Ajax progress now does not inserted into the document, but if element with id
ajax-progress
is present, it will be shown and hidden by jQuery's.show
and.hide
methods. Also, they take optional speed parameters fromdata-*
attributesdata-show-speed
anddata-hide-speed
. - Reformatted documentation. Started to keep a changelog.
- Previous history wasn't tracked.