#22: Consider lazy session initialization
-----------------------------------------+----------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: low | Milestone: 0.2
Component: weblocks | Version: pre-0.1
Keywords: lazy initialization session |
-----------------------------------------+----------------------------------
Currently when a session is initialized in 'init-user-session', all
widgets are instantiated at once. We should make this process lazy and
instantiate widgets as necessary (perhaps via hooks from the navigation
widget?) Additionally, we should consider freeing hidden widgets for
garbage collecting.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/22>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#6: Handling and reporting errors
------------------------------------+---------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: medium | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: error handling failure |
------------------------------------+---------------------------------------
Currently when errors occur on AJAX requests (in both debug and release)
there is a simple !JavaScript popup. When errors occur on regular requests
(in release) there is a plain old error 500 page.
We need to show debug information on AJAX requests in debug mode. Should
we modify the popup (perhaps redirect to error page) when an error occurs
on AJAX requests in release? For regular requests we need a prettier error
page.
We also need special handling of session timeout errors. When a session
times out we should probably refresh the page and show a popup/flash
saying a new session has been created.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/6>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#21: Allow multiple search tokens in grid searchbar
--------------------------------------------+-------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: low | Milestone: 0.2
Component: weblocks | Version: pre-0.1
Keywords: grid searchbar tokens multiple |
--------------------------------------------+-------------------------------
Currently it's possible to search for only one token in the searchbar. The
search mechanism should be made more intelligent. It should be possible to
separate tokens with delimiters, use quotes to turn off delimiting tokens,
etc.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/21>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#50: Automatically diff actual and expected output in deftest-html
-------------------------+--------------------------------------------------
Reporter: anonymous | Owner: sakhmechet
Type: enhancement | Status: new
Priority: low | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: |
-------------------------+--------------------------------------------------
Currently when unit tests that are defined with deftest-html macro fail,
it's very hard to tell the difference between actual and expected HTML,
especially if the output is long. It's usually necessary to invoke ediff-
buffers in Emacs (or some other diff utility).
Automatically diffing actual and expected output and presenting the diff
as a result of a failed test would significantly ease debugging. This
could be done with CL-HTML-DIFF or CL-DIFFLIB library.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/50>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#28: Rename 'datagrid' widget to 'grid'
----------------------------------+-----------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: defect | Status: new
Priority: low | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: rename datagrid grid |
----------------------------------+-----------------------------------------
There is no reason to call datagrid widget 'datagrid'. 'Grid' is a much
better name. We should rename the widget.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/28>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#23: Create renderers for lists of items
--------------------------------------------+-------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: medium | Milestone: 0.2
Component: weblocks | Version: pre-0.1
Keywords: renderers snippets lists items |
--------------------------------------------+-------------------------------
We should create renderers (or snippets?) to render lists of items
(ordered, unordered, etc.) as this is a fairly common operation.
We should consider rewriting current widgets that use lists to take
advantage of this functionality.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/23>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#44: ajax isearch will sometimes drop a callback in Firefox.
-------------------------------+--------------------------------------------
Reporter: anonymous | Owner: sakhmechet
Type: defect | Status: new
Priority: critical | Milestone:
Component: weblocks | Version:
Keywords: prototype firefox |
-------------------------------+--------------------------------------------
Sometimes, at least when a table is populated with more data than in the
default example (try creating a table with 30 rows), an exception will be
trown by Firefox because the "status" element in an nsIXMLHttpRequest is
being accessed.
How to reproduce:
Add a longer list of employees to the grid1 in application.lisp:
{{{
(list employee1 employee2 employee3 employee1 employee2 ...<30 more>)
}}}
Reduce the latency to 0.1 seconds in isearch.lisp, line 31.
{{{
(with-javascript "~
new Form.Element.DelayedObserver('~A', 0.1, function(elem, value) {~
initiateFormAction('~A', $('~A'), '~A');
});"
}}}
Install firebug, and set a brakepoint at roughly line 1114 in prototype.js
{{{
} catch (e) {
1114 this.dispatchException(e); <--- breakpoint on this line.
1115 }
}}}
After playing around with the isearch, you will see the following
exception being thrown (really by the nearby success() function):
{{{
[Exception... "Component returned failure code: 0x80040111
(NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]" nsresult: "0x80040111
(NS_ERROR_NOT_AVAILABLE)" location: "JS frame ::
http://foo.org:8090/pub/scripts/prototype.js :: anonymous :: line 1109"
data: no]
columnNumber
0
data
null
filename
"http://foo.org:8090/pub/scripts/prototype.js"
inner
null
lineNumber
1109
location
JS frame :: http://foo.org:8090/pub/scripts/prototype.js ::
anonymous :: line 1109 language=2 languageName=JavaScript
message
"Component returned failure code: 0x80040111
(NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]"
name
"NS_ERROR_NOT_AVAILABLE"
result
2147746065
QueryInterface
QueryInterface()
initialize
initialize()
}}}
From what I understand from random readings on the web, this can be caused
by reading the nxIXMLHttpRequest.status in an onError handler (which does
not seem to happen in this case), or it can happen if the ajax request is
being aborted.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/44>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#42: Sorting and regex filtering should be refactored out of datagrid
-----------------------------------------------------------------+----------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: medium | Milestone: 0.2
Component: weblocks | Version: pre-0.1
Keywords: sorting filtering searching regex refactor datagrid |
-----------------------------------------------------------------+----------
Currently sorting and regex filtering/searching mechanisms are specific to
the datagrid. It seems like these mechanisms could be used in other
widgets. We should refactor these components and make them generic for use
by other widgets.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/42>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#68: Object-visible-slots should look at declared type for NULL values
------------------------+---------------------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: defect | Status: new
Priority: medium | Milestone: 0.2
Component: weblocks | Version: pre-0.1
Keywords: renderer |
------------------------+---------------------------------------------------
When an inline slot is rendered and slot-value is nil, object-visible-
slots should try obtain inline slots from the declared typespec.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/68>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#69: Implement one-of and render-as facilities
------------------------------+---------------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: critical | Milestone: 0.2
Component: weblocks | Version: pre-0.1
Keywords: one-of render-as |
------------------------------+---------------------------------------------
We should implement one-of type to complement foreign-key rendering
mechanism. Additionally, some form of render-as facility needs to be
introduced to allow rendering as dropdowns or as suggest widgets depending
on the context. Render-as should also be generic enough be used in other
cases.
We should also consider converting us-states to one-of/render-as
implementation.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/69>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#67: Make slot references default and require inline (mixins) to be explicit
----------------------------+-----------------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: defect | Status: new
Priority: medium | Milestone: 0.2
Component: weblocks | Version: pre-0.1
Keywords: renderer mixin |
----------------------------+-----------------------------------------------
Currently in order to consider slots as a reference one must add -ref to
their name. Slots should be treated as a reference by default. Instead, to
treat them as inline, one should add -mixin.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/67>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#8: Back button rules should be respected
---------------------------------+------------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: defect | Status: new
Priority: low | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: back button history |
---------------------------------+------------------------------------------
We should consider improving the consequences of hitting the back button.
Currently only navigation control actions are recorded in the browser's
history. We can get around this by updating AJAX actions with an anchor at
the end of the URL and support proper back button this way. Is this the
right thing to do?
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/8>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#7: Widgets should be able to optionally expose state on the URL
----------------------------------+-----------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: medium | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: navigation state URL |
----------------------------------+-----------------------------------------
Currently the only widget that can expose state on the URL is Navigation.
Widgets like Grid cannot expose state. This makes the user run into very
annoying issues similar to the ones common to Expedia/Travelocity -
someone sends a link to a hotel to a friend, but the friend sees a
completely different page.
As an example, grid controls should be able to optionally expose which
column they're sorted on.
People should be able to navigate to a product page by product name/id on
the URL.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/7>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#52: Refreshing POST requests causes gridedit item addition related issues
-----------------------------------+----------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: defect | Status: new
Priority: low | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: refresh POST gridedit |
-----------------------------------+----------------------------------------
Refreshing a page when !JavaScript is disabled after item has been added
to gridedit causes the same instace of an item to be added to the data
twice. If one item of the added ones is selected and delete is pressed,
all items added during the refresh will be deleted.
'gridedit-add-item' should be modified not to add two instances of the
same object.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/52>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#20: Offer user an option to turn off AJAX and other effects when unsupported
browsers are detected
-------------------------------------------------------------+--------------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: critical | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: simple HTML unsupported browsers degrade option |
-------------------------------------------------------------+--------------
When weblocks detects an unsupported browser it should cooperate with the
application to give the user an option to turn off advanced effects or to
proceed at their own risk. We could do this via a flash widget or a modal
dialog widget.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/20>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#33: Refactor, document, and unit test 'handle-client-request'
----------------------------------------------+-----------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: defect | Status: new
Priority: medium | Milestone: 0.2
Component: weblocks | Version: pre-0.1
Keywords: refactor 'handle-client-request' |
----------------------------------------------+-----------------------------
Currently 'handle-client-request' is a complex function that's somewhat
poorly tested and documented. We should refactor it into more manageable
pieces, provide better tests and document its behavior more therally.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/33>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#35: Take advantage of ASDF operations to test, document, and release packages
-----------------------------------------------------------+----------------
Reporter: sakhmechet | Owner: sakhmechet
Type: defect | Status: new
Priority: low | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: asdf operations test release document scripts |
-----------------------------------------------------------+----------------
Currently weblocks related scripts are scattered and not standard. ASDF
provides standard facilities (via operations) to perform scripted tasks.
We should convert our scripts to hook into ASDF ops.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/35>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#54: Integrate weblocks-demo into weblocks source tree under examples directory
---------------------------+------------------------------------------------
Reporter: anonymous | Owner: sakhmechet
Type: enhancement | Status: new
Priority: low | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: examples demo |
---------------------------+------------------------------------------------
Weblocks-demo should be integrated into weblocks under /examples
directory. We should develop ways to unit test the application code, not
just component code, and ensure that unit tests of future example projects
run as part of weblocks-test suite. This should probably be done after
ticket #35.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/54>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#13: Consider redoing flash and dataform widgets with coroutine control flow
functionality
----------------------------------------+-----------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: low | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: modal flow control widgets |
----------------------------------------+-----------------------------------
Once a modal control flow mechanism is in place (#3), we should consider
removing ad hoc state machines from current widgets and implementing them
via the new mechanism. Flash and dataform seem like a good place to start.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/13>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#4: Create a modal dialog widget
---------------------------------+------------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: high | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: modal dialog widget |
---------------------------------+------------------------------------------
Create a widget that would act as a modal dialog. This widget can be used
for confirmations, data input, etc.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/4>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#3: Create a modal control flow mechanism to eliminate adhoc state machines
-----------------------------------------------------------------+----------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: high | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: continuations coroutines control flow state machine |
-----------------------------------------------------------------+----------
Currently control flow is managed by creating adhoc state machines
throughout widgets. A system needs to be designed that allows managing
control flow more effectively. Coroutines seem like a perfect candidate
for the job (as an alternative for full-blown continuations).
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/3>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#9: Consider redirecting the browser to hide all non user-friendly actions on
non-ajax requests
---------------------------------------+------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: enhancement | Status: new
Priority: low | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: non-AJAX request redirect |
---------------------------------------+------------------------------------
When JavaScript is turned off on the client and AJAX isn't available, all
actions end up showing on the URL. This breaks expected behavior - users
can't bookmark URLs, send them to friends, etc. We should consider sending
a redirect request to the browser on every action in case AJAX is turned
off to clean up the URL.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/9>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks
#25: Refactor flash widget styling
---------------------------+------------------------------------------------
Reporter: sakhmechet | Owner: sakhmechet
Type: defect | Status: new
Priority: low | Milestone: 0.1
Component: weblocks | Version: pre-0.1
Keywords: flash styling |
---------------------------+------------------------------------------------
Currently the default style for the flash widget is set to the one that
can generally be used on the "main" page. The style that will probably be
more commonly used is specialized to datagrid. We should refactor
stylesheets to make the more common style regular and the less common
style specialized.
--
Ticket URL: <http://trac.common-lisp.net/cl-weblocks/ticket/25>
cl-weblocks <http://common-lisp.net/project/cl-weblocks>
cl-weblocks