Author: gotcha
Date: Tue Dec 25 17:49:51 2007
New Revision: 50098
Added:
kukit/kss.core/trunk/docs/
kukit/kss.core/trunk/docs/HISTORY.txt
- copied unchanged from r50097,
kukit/kss.core/trunk/kss/core/docs/HISTORY.txt
kukit/kss.core/trunk/docs/INSTALL.txt
- copied unchanged from r50097,
kukit/kss.core/trunk/kss/core/docs/INSTALL.txt
kukit/kss.core/trunk/docs/LICENSE.txt
- copied unchanged from r50097,
kukit/kss.core/trunk/kss/core/docs/LICENSE.txt
kukit/kss.core/trunk/docs/TODO.txt
- copied unchanged from r50097,
kukit/kss.core/trunk/kss/core/docs/TODO.txt
kukit/kss.core/trunk/docs/tutorial_part2.rst
- copied unchanged from r50097,
kukit/kss.core/trunk/kss/core/docs/tutorial_part2.rst
Removed:
kukit/kss.core/trunk/kss/core/docs/HISTORY.txt
kukit/kss.core/trunk/kss/core/docs/INSTALL.txt
kukit/kss.core/trunk/kss/core/docs/LICENSE.txt
kukit/kss.core/trunk/kss/core/docs/TODO.txt
kukit/kss.core/trunk/kss/core/docs/tutorial_part2.rst
Log:
undo move of files
Deleted: /kukit/kss.core/trunk/kss/core/docs/HISTORY.txt
==============================================================================
--- /kukit/kss.core/trunk/kss/core/docs/HISTORY.txt Tue Dec 25 17:49:51 2007
+++ (empty file)
@@ -1,134 +0,0 @@
-Changelog for kss.core
-
- (name of developer listed in brackets)
-
-kss.core - 1.4dev Unreleased
-
- - ...
-
- - Fix multiple selection form fields
- marshalling on Safari
- (fixes #22 in kssproject)
- and on IE.
- [ree]
-
- - Fix error fallback handling
- [ree]
-
- - Implement loglevels based on cookies
- Add handling of log levels to the kss mode view
- [ree]
-
- - Moved the core demos to this package from kss.demo.
- They are now located under the core plugin.
- [ree]
-
- - Implement event binding based on the ids fetched
- dynamically from the dom, by value providers.
- [ree]
-
- - Changed kukit payload to encode HTML content of CDATA.
- This was necessary because us a supposed bug in FF, that
- prevented us to use base2 (xpath selection did not work
- on inserted elements, due to namespace issues.)
- Get rid of forceToDom, make sure all plugins accept html
- parameters as strings.
- [ree]
-
-kss.core - 1.2 Released 2007-08-17
-
- - Refactored js code.
- [gotcha]
-
-kss.core - 1.2-rc2 Released 2007-07-27
-
- - Prepare for release.
- [ree]
-
- - when attrname is kssattr:xxx, IE chokes on certain nodes
- [gotcha]
-
- - fix form marshalling
- [gotcha]
-
-kss.core - 1.2-rc1.1
-
- - Prepare for release.
- Identical with 1.2-rc1, just created for consistent versions.
- [ree]
-
-kss.core - 1.2-rc1
-
- - Deprecated addClassName, removeClassName actions and
- commands in favour of addClass and removeClass.
- Deprecated "name" and "classname" parameter in addClass,
- removeClass, toggleClass actions and commands in favour of
- "value".
- [ree]
-
- - implement new packing directives and two disctint
- versions of the javascript (development and production),
- this is achieved from javascript with the ;;; marker
- Also add the @@kss_devel_mode/ui view for changing
- the development mode from the browser.
- [ree]
-
- - Add the passnode selector that can be used to access
- the value of a default parm passed programmatically
- from the event (via makeActionOper)
- [ree]
-
- - Add action moveNodeAsLastChild
- [ree]
-
- - Death to Azax (... long live KSS)!
- Removing last traces of the old name from the sources
- [gotcha]
-
- - Changed querying for css selectors to base2 instead of
- cssQuery. Base2 is supposed to be a lot faster than
- the old cssQuery. Usage is alternating, if base2 is
- present that one is used, otherwise it uses the old
- cssQuery code which stays the default.
- [jvloothuis, ree]
-
- - Add moveNodeBefore action (presumably missing)
- [ree]
-
- - Refactor load event, separate iload and load events.
- The new event binder handles both events together. A
- new parameter, evt-iload-autodetect is introduced, if
- this is false we don't use detection but the iframe
- must cooperate on telling us wnen we are done. There
- is deprecation warning issued for the load events, if
- bound on an iframe, in which case an iload event must
- be used.
- [ree]
-
- - refactor event binding to allow different iterators to bind
- events in a binder instance, matching the need of the events.
- [ree]
-
-kss.core - 1.2-beta2
-
- - Make the binding of the nodes together in one batch
- [ree]
-
- - added kssSubmitForm action parameter
- and deprecation
- [ree]
-
-kss.core - 1.2-beta1
-
- - Prepare for release
- [ree]
-
-kss.core - 1.2-alpha2
-
- - Merge in Philikon's refactorization
- Move docs to doc/
- [ree]
-
- - Initial package structure.
- [zopeskel]
-
Deleted: /kukit/kss.core/trunk/kss/core/docs/INSTALL.txt
==============================================================================
--- /kukit/kss.core/trunk/kss/core/docs/INSTALL.txt Tue Dec 25 17:49:51 2007
+++ (empty file)
@@ -1,13 +0,0 @@
-kss.core Installation
-=====================
-
- * When you're reading this you have probably already run
- ``easy_install kss.core``. Find out how to install setuptools
- (and EasyInstall) here:
- http://peak.telecommunity.com/DevCenter/EasyInstall
-
- * Copy the files called ``kss/core/kss.core-configure.zcml``
- and ``kss/core/kss.core-meta.zcml`` in the
- ``/path/to/instance/etc/package-includes`` directory.
- *You do not need to do this if you use kss with Plone.*
-
Deleted: /kukit/kss.core/trunk/kss/core/docs/LICENSE.txt
==============================================================================
--- /kukit/kss.core/trunk/kss/core/docs/LICENSE.txt Tue Dec 25 17:49:51 2007
+++ (empty file)
@@ -1,24 +0,0 @@
- kss.core is copyright KSS Project Contributors
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; version 2 of the License.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- MA 02111-1307 USA.
-
-
-
-
- Third party modules come with different licenses, see individual files
-
- BeautifulSoup.py is licensed with PSF, Copyright (c) 2004-2006 Leonard
Richardson
-
- Firebug Lite is licensed under Mozilla Public License 1.1
Deleted: /kukit/kss.core/trunk/kss/core/docs/TODO.txt
==============================================================================
--- /kukit/kss.core/trunk/kss/core/docs/TODO.txt Tue Dec 25 17:49:51 2007
+++ (empty file)
@@ -1,2 +0,0 @@
-
-
Deleted: /kukit/kss.core/trunk/kss/core/docs/tutorial_part2.rst
==============================================================================
--- /kukit/kss.core/trunk/kss/core/docs/tutorial_part2.rst Tue Dec 25
17:49:51 2007
+++ (empty file)
@@ -1,383 +0,0 @@
-This tutorial is the direct continuation of the `first part`_. We will
-learn how to specify server side actions and finally complete our first useful
-AJAX example.
-
-.. _first part: http://kukit.org/documentation/tutorials/begin-with-kss
-
-Creating a server action
-------------------------
-
-Until now, we called a client action (alert) from our event. This was good to
-test if our event was triggered. However, in a typical AJAX pattern, we want to
-call a server action.
-
-Server actions are implemented as methods on the server. They could be any kind
-of callable methods, including python scripts, and this is what we will do
-first. Besides doing whatever is necessary for the business
-logic, the task of the server method is to assemble a sequence of commands.
-These commands are marshalled back to the client to be executed there. A
-command is a call to DOM manipulation client code. A command can (in most
-cases, should) have a selector, to set the scope of nodes on which the command
-is executed, and a set of parameters for execution.
-
-Although existing components come with implemented server action methods, it is
-easy to create a custom one since it requires only python skills. Let's create
-a python script (`response1`) in the custom skin :
-
-::
-
- # import Through-The-Web(TTW) API
- from kss.core.ttwapi import startKSSCommands
- from kss.core.ttwapi import getKSSCommandSet
- from kss.core.ttwapi import renderKSSCommands
-
- # start a view for commands
- startKSSCommands(context, context.REQUEST)
-
- # add a command
- core = getKSSCommandSet('core')
- core.replaceInnerHTML('#portal-siteactions', '<h1>We did it!</h1>')
-
- # render the commands
- return renderKSSCommands()
-
-After the imports, we initialize the view that will hold the KSS commands that
-we want to send back to the client.
-
-Then we add a command. The name of the command is `replaceInnerHTML`. This is
-one of our most useful commands : it simply replaces the contents of the
-selected html nodes with some html string.
-
-To specify which nodes will be selected, the command also needs a selector: in
-this example, a standard CSS selector. We choose to replace the portal actions
-of a Plone portal that are on the top of the page - but we could choose any
-other element as well.
-
-The `replaceInnerHTML` method is accessed through a command set. Since we have
-a pluggable system, we need to refer to the component that defines the methods,
-in this case, the `'core'` command set.
-
-In the last line, the `renderKSSCommands` call is mandatory : it will generate
-the response payload from the accumulated commands. To look at this payload,
-let's access this method directly from the browser :
-`http://localhost:8080/plone/front-page/response1`.
-We will see "We did it!" on the screen, but let's have a more careful look at
-the source of the response :
-
-::
- <?xml version="1.0" ?>
- <kukit xmlns="http://www.kukit.org/commands/1.0"
- xmlns:tal="http://xml.zope.org/namespaces/tal"
- xmlns:metal="http://xml.zope.org/namespaces/metal">
- <commands>
- <command selector="#portal-siteactions"
- name="replaceInnerHTML" selectorType="">
- <param name="html"><![CDATA[<h1>We did it!</h1>]]></param>
- </command>
- </commands>
- </kukit><
-
-This is an XML response, where we can see how commands and parameters are
-actually marshalled. When the response is interpreted by the kss engine, it
-will execute the commands with the given parameters.
-
-Calling the server action
--------------------------
-
-Now, we have finished to build our server action; we want to call it from our
-kss style sheet. We replace our previous kss event rule with the following
-one :
-
-::
-
- a.navTreeCurrentItem:click {
- evt-click-preventdefault: True;
- action-server: response1;
- }
-
-The `action-server` line specifies the name of the remote method to call :
-`response1` (since this is how we named our python script). The script will be
-called on the context url of the page we are at.
-
-Let's reload the page so that the new kss comes into effect. Open the
-loggingpane. Then press the "Home" line in the navtree portlet. It works! We
-can see the site actions replaced with our text. Also notice that a few things
-have been logged to the loggingpane :
-
-::
-
- ...
- DEBUG: RequestManager Notify server
http://localhost:8080/plone/front-page/response1, rid=0 (RQ: 1 OUT, 0 WAI)
- DEBUG: RequestManager Received result with rid=0 (RQ: 0 OUT, 0 WAI)
- INFO: Parse commands
- DEBUG: Number of commands: 1
- DEBUG: Selector type: default (css), selector : "#portal-siteactions",
selected nodes:1
- DEBUG: Command Name: replaceInnerHTML
- ...
-
-This gives a lot of information about what happened in the client :
-
-- the server is notified,
-- the response is received,
-- it is parsed successfully,
-- it contains one command,
-- the command selects 1 node to act on.
-
-Now let's change our command response in the following way :
-
-::
-
- ...
- from DateTime import DateTime
-
- # add a command
- core = getKSSCommandSet('core')
- content = '<h1>We did it!</h1><span>%s</span>' % DateTime()
- core.replaceInnerHTML('#portal-siteactions', content)
- ...
-
-This way, the current time is sent back by the server on each click and we can
-see that something happens.
-
-It is interesting to note that we did not need to reload the page in order to
-see the effect of this change. Because we only made changes on the server, we
-did not need to load anything new on the client side. So we can continue to
-debug from the already loaded page and this will work even through server
-restarts.
-
-What happens if the server-side script has an error, or the client does not get
-a correct response for some reason ? In this case, we will see this in the
-loggingpane :
-
-::
-
- DEBUG: RequestManager Notify server
http://localhost:8080/tutorial/front-page/response1, rid=3 (RQ: 1 OUT, 0 WAI)
- DEBUG: RequestManager Received result with rid=3 (RQ: 0 OUT, 0 WAI)
- ERROR: Request failed at url
http://localhost:8080/tutorial/front-page/response1, rid=3
-
-The error `Request failed` indicates that we have to turn to the server to
-debug the problem. Our best friend, the zope error log will tell us about the
-actual problem.
-
-Server action parameters
-------------------------
-
-Like client actions, server actions can also accept parameters. The parameters
-will be sent to the server as form variables. Zope publisher can then pass them
-as usual keyword parameters to our python script. Let's render a parameter
-coming from the client. We add parameter `mymessage` to the python script. Then
-modify the script :
-
-::
-
- ...
- # add a command
- core = getKSSCommandSet('core')
- content = '<h1>We did it!</h1><span><b>%s</b> at %s</span>' %
(mymessage, DateTime()))
- core.replaceInnerHTML('#portal-siteactions', content)
- ...
-
-
-We modify our kss rule to actually send the parameter from the client :
-
-::
-
- a.navTreeCurrentItem:click {
- evt-click-preventdefault: True;
- action-server: response1;
- response1-mymessage: "Hello Plone!";
- }
-
-The key `response1-mymessage` is built identically to how we did it with the
-client action. We use the name of the action first and then, following the
-dash, the name of the parameter. This time, because we change the stylesheet,
-we need to reload the page before testing by clicking on the bound node.
-
-To understand better how all this is working, let's enter a second rule in the
-kss :
-
-::
-
- ul#portal-globalnav li a:click {
- evt-click-preventdefault: True;
- action-server: response1;
- response1-mymessage: "clicked on global nav";
- }
-
-This shows some new things. First, you can see that you can use any css
-selector in a rule. In this case, the selector will select all globalnav tab
-links. If you reload the page, you will notice that if you click on any of
-those links, different content is replaced because different parameter are
-passed to the server.
-
-If you take a look at the loggingpane after the page reload, you can see
-something like this :
-
-::
-
- INFO: Initializing kss
- ...
- INFO: Count of KSS links: 1
- INFO: Start loading and processing
http://localhost:8080/plone/portal_css/Plone%20Default/tutor-cachekey9967.kss
resource type kss
- DEBUG: EventRule #0: a.navTreeCurrentItem EVENT=click
- DEBUG: EventRule #1: ul#portal-globalnav li a EVENT=click
- INFO: Finished loading and processing
http://localhost:8080/plone/portal_css/Plone%20Default/tutor-cachekey9967.kss
resource type kss in 35 + 29 ms
- INFO: Starting setting up events for document
- DEBUG: EventRule #0 mergeid @@0@@click selected 1 nodes
- DEBUG: EventRule #1 mergeid @@0@@click selected 4 nodes
- DEBUG: Binding 0 special rules in grand total
- DEBUG: instantiating event id=@@0, classname=0, namespace=null
- DEBUG: Binding to 5 nodes in grand total
- ...
-
-This shows that the second rule is also in effect now. Moreover, it has
-selected 4 nodes (or however many globalnav tabs you have). A lot of other
-information is also logged, it should not worry you at the moment.
-
-Different command selector
---------------------------
-
-Until now, in our command, we used the default css selector. It is possible to
-use other types of selectors, like a html id selector. Let's modify our command
-in the following way :
-
-::
-
- ...
- # add a command
- core = getKSSCommandSet('core')
- content = '<h1>We did it!</h1><span><b>%s</b> at %s</span>' %
(mymessage, DateTime()))
- selector = core.getHtmlIdSelector('portal-personaltools'),
- core.replaceInnerHTML(selector, content)
- ...
-
-What an HTML id selector selects should be obvious. Reload the page and
-exercise...
-
-Commands can also select multiple nodes :
-
-::
-
- ...
- # add a command
- core = getKSSCommandSet('core')
- content = '<h1>We did it!</h1><span><b>%s</b> at %s</span>' %
(mymessage, DateTime()))
- selector = core.getCssSelector('dt.portletHeader a'),
- core.replaceInnerHTML(selector, content)
- ...
-
-The css selector `dt.portletHeader a` selects all portlet headers in the page,
-so the replacement will be executed not on one node but on many nodes (as can
-also be seen in the loggingpane). Try clicking the `Home` link in the navtree,
-or any of the globalnav tabs to see the effect.
-
-You can also add multiple commands : each of them will be executed, in the
-order they have within the payload.
-
-One thing is important to note. If a command selects no nodes, it is not an
-error : the behaviour designed in this case is that nothing happens. This is in
-line with the usual logic of css selectors in style sheets.
-
-Using a different event
------------------------
-
-So far we have only used the `click` event: let's try with another one,
-`timeout`. The `timeout` event does not directly map to a browser event but it
-is a (conceptual) kss event. This shows that in kss anything can be an event
-and how an event binds itself is freely implementable.
-
-Let's add the following rule to the end of our kss file (altogether we will
-have 3 rules then) :
-
-::
-
- document:timeout {
- evt-timeout-delay: 8000;
- action-server: response1;
- response1-mymessage: "from timeout";
- }
-
-The `timeout` event implements a recurring timeout tick. It has a `delay`
-parameter that specifies the time in milliseconds. In this case, the event will
-be triggered each 8 seconds over and over again. The event calls the server
-action that we already have but with a different parameter.
-
-The `timeout` event does not really need a node as binding scope. This is why
-we use `document` instead of a css selector as we did until now. This is a
-special kss selector that is an extension to css and simply means : bind this
-event exactly once when the document loads, with a scope of no nodes but the
-document itself.
-
-If you reload the page you will notice that clicks work as before, however,
-every 8 seconds, the timeout event will trigger and do a replacement on the
-required nodes.
-
-There are some more advanced issues that this example opens and we will show
-more about them in the next tutorials.
-
-*Congratulations!*
-
-You have completed your first kss tutorial, learned the basics and now you are
-able to start some experimentation on your own. Or, just sit back and relax.
-
-Server-side commands - the zope3 way
-------------------------------------
-
-A python script may not be the most proper implementation of a server method.
-Plone community is moving towards zope3 style development : the suggested way
-is to use a browser view (multiadapter). Previously, you have created a demo
-product, now create a python module `demoview.py` in the product root directory
-on the filesystem :
-
-::
-
- from kss.core import KSSView
- from datetime import datetime
-
- class DemoView(KSSView):
-
- def response1(self, mymessage):
- # build HTML
- content = '<h1>We did it!</h1><p><b>%s</b> at %s</p>'
- date = str(datetime.now())
- content = content % (mymessage, date)
-
- # KSS specific calls
- core = self.getCommandSet('core')
- core.replaceInnerHTML('#portal-siteactions', content)
- return self.render()
-
-We inherit our view from `KSSView`. It inherits from Five's `BrowserView`.
-
-It is maybe time to explain how the `ttwapi` uses those views.
-
-- `startKSSCommands` does the instantiation of a `KSSView`.
-- `getKSSCommandSet` is the call equivalent to `self.getCommandSet`.
-- `renderKSSCommands` calls `self.render`.
-
-To be able to use the method, you need to add the following to your
-`configure.zcml` file :
-
-::
-
- <browser:page
- for="plone.app.kss.interfaces.IPortalObject"
- class=".demoview.DemoView"
- attribute="response1"
- name="response1"
- permission="zope2.View"
- />
-
-The interface that the view is bound to is one setup by `kss.core` on all
-portal objects. You could also use directly the interfaces defined by Plone 2.5
-directly, however that would not work on Plone 2.1 so we offer a few "wrapper
-interfaces" like the one in this example.
-
-If you still have the `response1` python script from the begin of this
-tutorial, do not forget to rename it. Now it is time to restart Zope. If
-everything goes well, the page functions as previously but you can see from the
-replacement message that the new method is operating on your page.
-
-Remember, when you are working with browser views, you must restart Zope each
-time you want to test the changes made in the view code.
-
_______________________________________________
Kukit-checkins mailing list
[email protected]
http://codespeak.net/mailman/listinfo/kukit-checkins