
Known problems
--------------

Safari 3.1 fails to run with KSS. The problem is with base2,
that fails selecting any selector that contains capital letters.

Example for header of browser version that experiences the problem::

    User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_2; en-us) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13


Old cssQuery.js works for this browser, so a workaround is to ensure
that Safari 3.1 gets the cssQuery.js resource and not the base2.

For example, in ResourceRegistries, the following changes are needed:

Resource: cssQuery.js

- Enable
- Change condition to: here/@@kss_devel_mode/needs_old_cssquery

Resource: ++resource++base2-dom-fp.js

- Change condition to: not: here/@@kss_devel_mode/needs_old_cssquery

This enables the correct behaviour, since KSS always uses the
library it founds (in the priority of base2 and the old cssquery).


Deprecated in kss 1.4
---------------------

form() and currentForm() in normal value providers
""""""""""""""""""""""""""""""""""""""""""""""""""

currentForm()
'''''''''''''

 
You must change rules that use currentForm() in a normal value provider::

    action-server:                     myServerAction;
    myServerAction-data:               currentForm();

to::

    action-server:                     myServerAction currentForm();

Or, if you want to keep compatibility with kss 1.2::

    action-server:                     myServerAction;
    myServerAction-kssSubmitForm:      currentForm();


form()
''''''

Similarly, for form(), you must change the following::

    action-server:                     myServerAction;
    myServerAction-data:               form();

to::

    action-server:                     myServerAction form();

Or, if you want to keep compatibility with kss 1.2::

    action-server:                     myServerAction;
    myServerAction-kssSubmitForm:      form();


Necessary server side changes
'''''''''''''''''''''''''''''

On the server side, the method that received the form as a dictionary in one
parameter, must define the values directly in the method signature, or access
them from the form directly.

So the following old code::

    def method(self, data):
        field1 = data['field1']
        field2 = data.get('field2', None)

must be changed in one of the two ways shown in the following examples::

    def method(self, field1, field2=None):
        ...

An alternate way is to get them from the request::

    def method(self):
        request = self.request 
        field1 = request.form['field1']
        field2 = request.form.get('field2', None)


New in kss 1.4
--------------

- Major code refactoring, for better readibility and speedups.

- Lots and lots of ecma unittests and selenium tests that test kss.core 
  and the core plugin, are added. All are checkable from a single click 
  from any browser.

- New and improved demos

- Base2 is used for css selection, instead of the original cssQuery (if 
  present). Significantly faster page load.

- multiple selectors in the same rule are allowed, ie.::

      selector1:click selector2:click { ... }
      
  or even::

      selector1:keyup selector2:keydown { ... }

- Value providers can be recursive, ie.::

      nodeAttr(kssAttr(blah)) 

  is allowed.

- added url() special value provider, the first is alternate syntax for::

      action-server: blah;
      blah-kssUrl: "http://foo.bar/blahblah";

  you can now say in one line::

      action-server: blah url(http://foo.bar/blahblah);

  This may be handy if you want to call @@ url-s.
      
- added alias() special value provider, this enables using more client 
  actions on the same node::

      action-client: setAttribute;
      setAttribute-key: foo;
      setAttribute-value: bar;
      action-client: setAttribute alias(other);
      other-key: foo2;
      other-value: bar2; 

- enable node selection in the same line as the action specification, ie. 
  instead of::

      action-client: foo;
      foo-kssSelector: css(div.klass);

  you can also say::

      action-client: foo css(div.klass);

- enable full form submits in the same line as the action specification, 
  ie. instead of::

      action-server: foo;
      foo-kssSubmitForm: currentForm();

  you can also say::

      action-server: foo currentForm();

- Value providers can be used also in the "event binder id", eg.
  instead of the static binder id::

      xxxxx:click(blah) { ... } 

  a dynamic binder id can also be used::

      xxxxx:click(kssAttr(blah)) { ... } 

  This feature is needed for upcoming use cases like drag and drop.

- Remove previously deprecated form() and
  currentForm() value providers from normal
  action parameters (remark: they should now
  be used with xxx-kssSelector or directly on the action-client line as 
  described above, and they properly support Zope multiform
  fields like :list, :record, :records.)

- Demos and selenium tests are removed from kss.demo and are now placed 
  together with the plugin in kss.core. This means, all 3rdparty plugins
  should now have a zope-only demo page with a selenium test, if the 
  plugin is loaded the demo appears in the index and the test is run 
  together with all tests. (Demos can be viewed and tested by kss.demo.) 
  We also have kss.template that creates a skeleton kss plugin with
  all bells and whistles.

- Implement loglevels based on cookies (also backported to 1.2.)

- Other fixes (also backported to 1.2):

   - Fix error fallback handling

   - Fix multiple selection form fields marshalling on Safari and IE

   - Fix setKssAttribute action and command

   - fix action-cancel


