Annotation of kupu/doc/OLDBROWSERS.txt, revision 1.1.1.1
1.1 dwinter 1: Old browsers and Kupu
2: =====================
3:
4: Written by: Guido Wesdorp
5: Email: guido@infrae.com
6: Valid for: Kupu 1.0.2
7:
8: Partially supporting other browsers in Kupu
9: -------------------------------------------
10:
11: When the client is using a browser that is not supported in Kupu, currently
12: the results are unpredictable, but quite certainly not graceful. Kupu does
13: *not* try to degrade in older browsers, it will just not work. The reason
14: nothing has been added to Kupu to make it for instance show a textarea where
15: the iframe would have been, is that it's almost impossible to write a good
16: solution using the JavaScript techniques Kupu uses, since in Kupu' setup
17: (where the HTML contains part of the editor, unlike systems where the editor
18: pane isn't configurable and is added to the document using document.write)
19: it would mean elements should be removed from the page, which may not be
20: possible using JavaScript or CSS since those technologies may not even be
21: available.
22:
23: What to do then?
24: ----------------
25:
26: The only proper solution to create a feel of 'graceful degradation' is by
27: serving different pages according to the HTTP UserAgent header. A script
28: on the server should try to figure out what browser the client is using (well
29: actually it just needs to know if it's one of the browsers supported by Kupu)
30: and if it's an Kupu capable one send the Kupu page, and if it's not, it should
31: serve a page containing some fallback form or so. Since this process differs
32: a *lot* from server to server, we will not provide a sample implementation,
33: but instead we will try to tell how to create one yourself.
34:
35: First step: is the client Kupu capable?
36: ---------------------------------------
37:
38: When you're going to write a script to serve different pages to different
39: clients, you will probably want to examine the HTTP 'UserAgent' header. This
40: is a header the client sends along with the request, that contains information
41: about the user agent (browser) the client is using. The browser is supported
42: if:
43:
44: - the string starts with 'Mozilla'
45: - the string contains one of the following elements: 'IE 5.5', 'IE 6' (the
46: part after 'IE ' should be higher than 5.5 after a convertion to
47: float) for Internet Explorer or one of: 'rv:1.3.1', 'rv:1.4', 'rv:1.5',
48: 'rv:1.6' (the part after 'rv:' should be higher than 1.3.1 after
49: conversion to float) for Mozilla and Netscape Navigator.
50:
51: If the UserAgent string matches those criteria, the browser is supported. Note
52: that that doesn't necessarily mean that Kupu will work: the client must have
53: JavaScript enabled as well, and the supported browsers all allow the client to
54: turn it off. However, Kupu will (XXX currently *should*!) provide some feedback
55: to the client about what can be done to get Kupu to work.
56:
57: Second step: create a response
58: ------------------------------
59:
60: The second step will be to create a response suitable for the client's user
61: agent. In most cases there will be 1 response for Kupu capable browsers (the
62: Kupu page) and 1 for non-capable ones. The one for non-supported browsers will
63: probably contain a form and send the contents of some textarea that contains
64: the HTML that would normally be edited in the Kupu iframe to a script on the
65: server that cleans it up (since Kupu is not available the server should do the
66: cleanup by itself!) and saves it. The page will probably be a normal HTML form
67: without too much fancy stuff, since the client's browser may well be one that
68: doesn't know how to display fancy stuff anyway.
69:
70: Third step: process the response
71: --------------------------------
72:
73: The last step will involve writing a script to process the data coming from
74: the form. The script will have to receive its data in a POST request, since
75: plain HTML forms don't provide PUT support. The script will probably look a
76: lot different from the one that saves Kupu' output, so it's advised to not use
77: the same script for handling both form output and Kupu, but instead to write
78: a new one that handles only one task. The goal of both scripts will be the
79: same, however: make the content ready for storage and store it.
80:
81: And that's it
82: -------------
83:
84: And basically that's it: now if a non-capable browser requests a page, it will
85: receive something it can handle, the page will (probably) contain only the
86: most basic HTML elements, and it will use one of the most basic ways of
87: sending data to the client, HTTP POST. The proposed way is not easy to
88: implement, since it requires a lot of effort from integrators of Kupu compared
89: to other systems, but it will allow flexibility and configurability without
90: making concessions in flexibility and technologies chosen (Kupu won't have to
91: resort to document.write and customization can be done in the HTML rather than
92: having to hack background colors, button images etc. in the JavaScript).
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>