From andrewm at object-craft.com.au Wed Aug 14 14:09:35 2002 From: andrewm at object-craft.com.au (Andrew McNamara) Date: Wed, 14 Aug 2002 14:09:35 +1000 Subject: [albatross-users] thoughts Message-ID: <20020814040935.2DDB73900D@coffee.object-craft.com.au> I'm currently using an table in the popview application when displaying mime messages - we look up the mime type to get to appropriate rendering method. The problem is, there are a bunch of mime types that share a common rendering method. I could have a dict that mapped from mime type to rendering method, but it would seem to be more sensible to have some way of representing this in the template. One thought that occured to me is that if the returned a list, we could add each list item to the lookup dictionary: ... It might also be useful to be able to do things like this: ... We'll obviously have to iterate, rather than using a dictionary in cases like that. And my suggested syntax needs more thought. -- Andrew McNamara, Senior Developer, Object Craft http://www.object-craft.com.au/ From djc at object-craft.com.au Thu Aug 15 13:00:01 2002 From: djc at object-craft.com.au (Dave Cole) Date: 15 Aug 2002 13:00:01 +1000 Subject: [albatross-users] Re: thoughts In-Reply-To: <20020814040935.2DDB73900D@coffee.object-craft.com.au> References: <20020814040935.2DDB73900D@coffee.object-craft.com.au> Message-ID: >>>>> "Andrew" == Andrew McNamara writes: Andrew> I'm currently using an table in the popview Andrew> application when displaying mime messages - we look up the Andrew> mime type to get to appropriate rendering method. Andrew> The problem is, there are a bunch of mime types that share a Andrew> common rendering method. I could have a dict that mapped from Andrew> mime type to rendering method, but it would seem to be more Andrew> sensible to have some way of representing this in the Andrew> template. Andrew> One thought that occured to me is that if the expr="..."> returned a list, we could add each list item to Andrew> the lookup dictionary: Andrew> Andrew> ... That would probably be a good thing. The alternative is to have presentation logic bleed into the application and have the MIME type pre-evaluated inside the application so compress a list to a single value. Andrew> It might also be useful to be able to do things like this: Andrew> expr="foo.startswith('image/')"> ... Andrew> We'll obviously have to iterate, rather than using a Andrew> dictionary in cases like that. And my suggested syntax needs Andrew> more thought. I suppose that could be done by doing the static dictionary lookup first then following up with an iteration of eval style options. It might be a good idea to explicitly distinguish between static and dynamic expressions though (via different attribute). Currently the static "switch labels" are expressions which are evaluated and the result is then placed into a dictionary. - Dave -- http://www.object-craft.com.au From johanfo at ohman.no Fri Aug 16 09:35:11 2002 From: johanfo at ohman.no (=?iso-8859-1?Q?Johan_Fredrik_=D8hman?=) Date: Fri, 16 Aug 2002 01:35:11 +0200 Subject: [albatross-users] Status on Albatross Message-ID: <001701c244b4$661c06b0$c167f081@matrisen> Hi there, I'm looking into Albatross as a possible framework for my next web project, however, I'm a little concerned about the apparent development freeze ? Has Albatross become abandonware, or is it still in development ? -- Johan Fredrik ?hman -------------- next part -------------- An HTML attachment was scrubbed... URL: From djc at object-craft.com.au Fri Aug 16 10:18:57 2002 From: djc at object-craft.com.au (Dave Cole) Date: 16 Aug 2002 10:18:57 +1000 Subject: [albatross-users] Status on Albatross In-Reply-To: <001701c244b4$661c06b0$c167f081@matrisen> References: <001701c244b4$661c06b0$c167f081@matrisen> Message-ID: >>>>> "Johan" == Johan Fredrik ?hman writes: Johan> Hi there, I'm looking into Albatross as a possible framework Johan> for my next web project, however, I'm a little concerned about Johan> the apparent development freeze ? Has Albatross become Johan> abandonware, or is it still in development ? We are still working on Albatross. The big obstacle to the next release is getting our documentation changes finalised. I am the major culprit here (blush). We feel that Albatross is our most important free software project and the company plan is to continually invest time and money in the maintenance and enhancement of Albatross. - Dave -- http://www.object-craft.com.au From andrewm at object-craft.com.au Fri Aug 16 10:52:46 2002 From: andrewm at object-craft.com.au (Andrew McNamara) Date: Fri, 16 Aug 2002 10:52:46 +1000 Subject: [albatross-users] Status on Albatross In-Reply-To: Message from Dave Cole of "16 Aug 2002 10:18:57 +1000." References: <001701c244b4$661c06b0$c167f081@matrisen> Message-ID: <20020816005246.090AD3C49F@coffee.object-craft.com.au> >Johan> Hi there, I'm looking into Albatross as a possible framework >Johan> for my next web project, however, I'm a little concerned about >Johan> the apparent development freeze ? Has Albatross become >Johan> abandonware, or is it still in development ? [...] >We feel that Albatross is our most important free software project and >the company plan is to continually invest time and money in the >maintenance and enhancement of Albatross. To add to what Dave says, we are also using Albatross in several of our ongoing consulting jobs, so it definitely will not be abandoned. We hope to be able to do a new release next week. As a teaser, here's the part of the release notice that deals with changes: * PageModuleError is raised when a page module is loaded which does not define one of page_enter(), page_leave(), page_process() or page_display(). * Application merge_request() method now defers browser request merging to the execution context. This allows the RecorderMixin class to define the correct request merging process. * Include filename in template load errors - when templates are loaded by any means other than , the filename was often not in the traceback. * When you use FormRecorderMixin you must now specify LIST attribute on and tags if more than one field in a form has the same name. This also causes the request merging to always place those input values into a list in the local namespace regardless of how many values were sent by the browser. FieldTypeError is raised when LIST attribute value is inconsistent with multiple/singular instances of an input field in a form. * Replaced all relative module imports with absolute imports to avoid namespace clashes. * Several SessionFileAppMixin portability fixes - use "rb" and "wb" mode on open of session files for windows portability, and improvements to handling of platforms without /dev/urandom. * albatross.random module renamed to albatross.randompage. * SessionFileAppMixin now checks that the session-id returned from the browser does not contain any filesystem path components that could be used to access files outside the session file directory. * Tag constructors are now passed the execution context as the first argument, which makes them consistent with other methods, and allows greater flexibility in code placement. * Macros are now registered at load time, rather than execution (to_html) - this allows forward references, and other tricks. * New "ellipsis" mode for tree iterator, which are a variant of lazy trees where nodes at shallower levels are progressively collapsed into ellipses as the user opens deeper nodes. The user can reopen the collapsed nodes by selecting an ellipsis * TreeIterators now support get_open_aliases(), get_selected_aliases(), set_open_aliases(), set_selected_aliases() methods to set and get open and selected nodes for the TreeIterator. This allows you to enter a page with tree nodes already open or selected, and also to save the state of the tree for future use. * Added a basic /etc/init.d style rc script for the TCP session server. The session server script is now installed to you scripts directory (typically /usr/local/bin). Session server component modules simpleserver and pidfile are now installed into the albatross module directory, along with the rest of albatross. -- Andrew McNamara, Senior Developer, Object Craft http://www.object-craft.com.au/ From tchur at optushome.com.au Sat Aug 17 05:34:18 2002 From: tchur at optushome.com.au (Tim Churches) Date: Sat, 17 Aug 2002 05:34:18 +1000 Subject: [albatross-users] Status on Albatross References: <001701c244b4$661c06b0$c167f081@matrisen> <20020816005246.090AD3C49F@coffee.object-craft.com.au> Message-ID: <3D5D53BA.5080206@optushome.com.au> Andrew McNamara wrote: >We hope to be able to do a new release next week. > >As a teaser, here's the part of the release notice that deals with changes: > > > ------8<----snip-----8<------ >* New "ellipsis" mode for tree iterator, which are a variant of lazy trees > where nodes at shallower levels are progressively collapsed into > ellipses as the user opens deeper nodes. The user can reopen the > collapsed nodes by selecting an ellipsis > >* TreeIterators now support get_open_aliases(), > get_selected_aliases(), set_open_aliases(), set_selected_aliases() > methods to set and get open and selected nodes for the > TreeIterator. This allows you to enter a page with tree nodes already > open or selected, and also to save the state of the tree for future use. > > I can confirm that these new features work very well (they were developed for an Albatross-based project I am managing, and have now been rolled back into the main Albatross distribution - something we are pleased to see happen). Specifically, users can now navigate their way through the entire International Classification of Diseases (ICD) Versions 8, 9 and 10 code lists (i.e. hierarchical alphanumeric codes plus associated text descriptions, typically 40 to 100 bytes long). There are about 4000, 6000 and 8000 distinct codes respectively in these code sets, and the Albatross "ellipsis" lazy trees allow the user to find their way through them using minimal browser screen real estate (constant up-and-down scrolling is unnecessary), and no client-side scripting (hooray!) and the performance is great (served from a very ordinary 866 MHz Pentium III box running Linux). The only thing preventing Object Craft from putting up a demo of these lazy ellipsis trees is the copyright status of the ICD codesets, which are published by WHO. The latest set is copyright, but we think that ICD-8 and ICD-9 are not (no answer yet from Geneva on that, guys), so they may be able to host an example using those, or some other (preferrably large) tree of codes or desriptions from some other problem domain. Tim C From mike at daboyz.org Sun Aug 18 18:07:49 2002 From: mike at daboyz.org (Mike Barrett) Date: Sun, 18 Aug 2002 01:07:49 -0700 Subject: [albatross-users] Finding Saved Values in Sessions Message-ID: <20020818080749.GB21815@daboyz.org> Howdy. I'm trying to use albatross for a web application that I'm writing. I'm just starting to get into it however, and I already have a question: How can I check to see if a value is stored in a session? For example when someone logs in to my application I have it store the loginName in the session. What I want to do is have the application check to see if that key/value is stored in the session. I tried doing it this way: ctx.locals.isAuthenticated = ctx.decode_session(ctx.app.get_session(ctx.sesid())).kas_key('loginName') But it doesn't seem to work. Some other things: # This seems to work, it returns the session id. ctx.locals.sesid = ctx.sesid() # This doesn't seem to work. It returns 'None' ctx.locals.blah = ctx.app.get_session(ctx.sesid()) Any idea how I can make this work? I'm using the ModularSessionFileApp and SessionFileAppContext modules. Thanks for any help you can give me. :) -- ________________________________________________________________________ Mike Barrett | "I used to read, now I go to raves." mike at daboyz.org | -- Random MUNI Rider, speaking www.daboyz.org | to my friend Allison. ------------------------+----------------------------------------------- From mike at daboyz.org Sun Aug 18 18:27:46 2002 From: mike at daboyz.org (Mike Barrett) Date: Sun, 18 Aug 2002 01:27:46 -0700 Subject: [albatross-users] Finding Saved Values in Sessions In-Reply-To: <20020818080749.GB21815@daboyz.org> References: <20020818080749.GB21815@daboyz.org> Message-ID: <20020818082746.GA21946@daboyz.org> I just realized that my code samples below aren't all that useful without some sort of context. Here's a bit larger snippet of the code: class AppContext(SessionFileAppContext): def isAuthenticated(self): self.locals.isAuthenticated = 0 # This returns None (the session file exists in the directory # I specified though) self.locals.blah = self.app.get_session(self.sesid()) # This returns the appropriate session id self.locals.sesid = self.sesid() #self.locals.isAuthenticated = self.decode_session(self.app.get_session(self.sesid())).has_key('LoginName') === I hope this makes more sense of what I'm seeing. On Sun, Aug 18, 2002 at 01:07:49AM -0700, Mike Barrett wrote: > Howdy. I'm trying to use albatross for a web application that I'm writing. > I'm just starting to get into it however, and I already have a question: > > How can I check to see if a value is stored in a session? For example when > someone logs in to my application I have it store the loginName in the session. > > What I want to do is have the application check to see if that key/value is > stored in the session. I tried doing it this way: > > ctx.locals.isAuthenticated = ctx.decode_session(ctx.app.get_session(ctx.sesid())).kas_key('loginName') > > But it doesn't seem to work. Some other things: > > # This seems to work, it returns the session id. > ctx.locals.sesid = ctx.sesid() > > # This doesn't seem to work. It returns 'None' > ctx.locals.blah = ctx.app.get_session(ctx.sesid()) > > > Any idea how I can make this work? I'm using the ModularSessionFileApp and > SessionFileAppContext modules. > > Thanks for any help you can give me. :) > > -- > ________________________________________________________________________ > Mike Barrett | "I used to read, now I go to raves." > mike at daboyz.org | -- Random MUNI Rider, speaking > www.daboyz.org | to my friend Allison. > ------------------------+----------------------------------------------- > _______________________________________________ > Albatross-users mailing list > Albatross-users at object-craft.com.au > https://www.object-craft.com.au/cgi-bin/mailman/listinfo/albatross-users -- ________________________________________________________________________ Mike Barrett | "I used to read, now I go to raves." mike at daboyz.org | -- Random MUNI Rider, speaking www.daboyz.org | to my friend Allison. ------------------------+----------------------------------------------- From djc at object-craft.com.au Sun Aug 18 19:49:28 2002 From: djc at object-craft.com.au (Dave Cole) Date: 18 Aug 2002 19:49:28 +1000 Subject: [albatross-users] Finding Saved Values in Sessions In-Reply-To: <20020818080749.GB21815@daboyz.org> References: <20020818080749.GB21815@daboyz.org> Message-ID: > Howdy. I'm trying to use albatross for a web application that > I'm writing. I'm just starting to get into it however, and I > already have a question: > > How can I check to see if a value is stored in a session? For > example when someone logs in to my application I have it store the > loginName in the session. > > What I want to do is have the application check to see if that > key/value is stored in the session. I tried doing it this way: > > ctx.locals.isAuthenticated = ctx.decode_session(ctx.app.get_session(ctx.sesid())).kas_key('loginName') In a session based application the loading of sessions happens automatically. By the time your page_enter(), page_leave(), page_process(), or page_display() is executed the session has been loaded into ctx.locals. This means that all you really need to do is something like the following: ctx.locals.isAuthenticated = hasattr(ctx.locals, 'loginName') > But it doesn't seem to work. The problem is that decode_session() does not return a decoded session, it decodes the session into ctx.locals and then returns None. > Some other things: > > # This seems to work, it returns the session id. > ctx.locals.sesid = ctx.sesid() > > # This doesn't seem to work. It returns 'None' > ctx.locals.blah = ctx.app.get_session(ctx.sesid()) None should only be returned when the session does not exist. This will happen either the first time that the browser accesses the application, or when an exception is raised in the application. To be defensive, the Application run() method deletes a session if it catches an exception. This prevents nasty situations where a browser gets trapped in an exception hole. > Any idea how I can make this work? I'm using the > ModularSessionFileApp and SessionFileAppContext modules. Try the suggestion above. - Dave -- http://www.object-craft.com.au From mike at daboyz.org Mon Aug 19 05:19:01 2002 From: mike at daboyz.org (Mike Barrett) Date: Sun, 18 Aug 2002 12:19:01 -0700 Subject: [albatross-users] Finding Saved Values in Sessions In-Reply-To: References: <20020818080749.GB21815@daboyz.org> Message-ID: <20020818191901.GA23791@daboyz.org> Cool, thank you for the fast response. I have a question though: What would be the best way about discovering if something is saved in the session object? If I look in locals for isAuthenticated, then can't someone just provide a GET request with something like http://site/blah.py?isAuthenticated=1 and it will be in the locals namespace? Also, one more question: Is there anyway to make use the POST method rather than GET? Thanks for all your help. On Sun, Aug 18, 2002 at 07:49:28PM +1000, Dave Cole wrote: > In a session based application the loading of sessions happens > automatically. By the time your page_enter(), page_leave(), > page_process(), or page_display() is executed the session has been > loaded into ctx.locals. This means that all you really need to do is > something like the following: > > ctx.locals.isAuthenticated = hasattr(ctx.locals, 'loginName') > > > But it doesn't seem to work. > > The problem is that decode_session() does not return a decoded > session, it decodes the session into ctx.locals and then returns None. > > None should only be returned when the session does not exist. This > will happen either the first time that the browser accesses the > application, or when an exception is raised in the application. To be > defensive, the Application run() method deletes a session if it > catches an exception. This prevents nasty situations where a browser > gets trapped in an exception hole. > > Try the suggestion above. > > - Dave > > -- > http://www.object-craft.com.au > > _______________________________________________ > Albatross-users mailing list > Albatross-users at object-craft.com.au > https://www.object-craft.com.au/cgi-bin/mailman/listinfo/albatross-users -- ________________________________________________________________________ Mike Barrett | "I used to read, now I go to raves." mike at daboyz.org | -- Random MUNI Rider, speaking www.daboyz.org | to my friend Allison. ------------------------+----------------------------------------------- From djc at object-craft.com.au Mon Aug 19 10:27:05 2002 From: djc at object-craft.com.au (Dave Cole) Date: 19 Aug 2002 10:27:05 +1000 Subject: [albatross-users] Finding Saved Values in Sessions In-Reply-To: <20020818191901.GA23791@daboyz.org> References: <20020818080749.GB21815@daboyz.org> <20020818191901.GA23791@daboyz.org> Message-ID: >>>>> "Mike" == Mike Barrett writes: Mike> Cool, thank you for the fast response. I have a question Mike> though: What would be the best way about discovering if Mike> something is saved in the session object? If I look in locals Mike> for isAuthenticated, then can't someone just provide a GET Mike> request with something like Mike> http://site/blah.py?isAuthenticated=1 and it will be in the Mike> locals namespace? Unfortunately yes. The only "easy" way around this is to store the userid and password in the session and revalidate every request. I suppose it would be nice if there was a way to protect some values in the local namespace from modification by request merging. Mike> Also, one more question: Is there anyway to make use Mike> the POST method rather than GET? Mike> Thanks for all your help. My pleasure. - Dave -- http://www.object-craft.com.au From mike at daboyz.org Mon Aug 19 14:28:13 2002 From: mike at daboyz.org (Mike Barrett) Date: Sun, 18 Aug 2002 21:28:13 -0700 Subject: [albatross-users] Accessing pages via URLs Message-ID: <20020819042813.GA26018@daboyz.org> Hi, I was just curious if there's a way to access individual pages in an application using page modules via direct links? Like say I have two pages in my application, one called 'main' and the other called 'preferences'. If start_page is set to main, is there any way I can access the prferences page via an external link instead of having to go to the main page first? Thanks for all your help. -- ________________________________________________________________________ Mike Barrett | "I used to read, now I go to raves." mike at daboyz.org | -- Random MUNI Rider, speaking www.daboyz.org | to my friend Allison. ------------------------+----------------------------------------------- From djc at object-craft.com.au Mon Aug 19 14:48:18 2002 From: djc at object-craft.com.au (Dave Cole) Date: 19 Aug 2002 14:48:18 +1000 Subject: [albatross-users] Accessing pages via URLs In-Reply-To: <20020819042813.GA26018@daboyz.org> References: <20020819042813.GA26018@daboyz.org> Message-ID: >>>>> "Mike" == Mike Barrett writes: Mike> Hi, I was just curious if there's a way to access individual Mike> pages in an application using page modules via direct links? Mike> Like say I have two pages in my application, one called 'main' Mike> and the other called 'preferences'. If start_page is set to Mike> main, is there any way I can access the prferences page via an Mike> external link instead of having to go to the main page first? Have a look at the RandomModularApp and RandomModularSessionApp classes. These determine which page to serve from the request URL. Have a look at the samples/random directory. This program is explained in section 4.7 (Guide to Building Applications / Random Access Applications) on page 54 in release 0.06. The HTML documentation is here: http://www.object-craft.com.au/projects/albatross/albatross/node35.html The application is installed here: http://www.object-craft.com.au/cgi-bin/alsamp/random/random.py - Dave -- http://www.object-craft.com.au From djc at object-craft.com.au Tue Aug 20 22:53:57 2002 From: djc at object-craft.com.au (Dave Cole) Date: 20 Aug 2002 22:53:57 +1000 Subject: [albatross-users] Albatross 1.00 released Message-ID: OVERVIEW Albatross is a small toolkit for developing highly stateful web applications. The toolkit has been designed to take a lot of the pain out of constructing intranet applications although you can also use Albatross for deploying publicly accessed web applications. In slightly more than 2600 lines of Python (according to pycount) you get the following: * An extensible HTML templating system similar to DTML including tags for: - Conditional processing. - Macro definition and expansion. - Sequence iteration and pagination. - Tree browsing. - Lookup tables to translate Python values to arbitrary template text. * Application classes which offer the following features: - Optional server side or browser side sessions. - The ability to place Python code for each page in a dynamically loaded module, or to place all page processing code in a single mainline. * The ability to deploy applications either as CGI or via mod_python by changing less than 10 lines of code. The toolkit application functionality is defined by a collection of fine grained mixin classes. Nine different application types and five different execution contexts are prepackaged, you are able to define your own drop in replacements for any of the mixins to alter any aspect of the toolkit semantics. Application deployment is controlled by your choice of either cgi or mod_python Request class. It should be possible to develop a Request class for FastCGI or Medusa to allow applications to be deployed on those platforms with minimal changes. Albatross comes with over 130 pages of documentation. HTML, PDF and PostScript formatted documentation is available from the toolkit homepage. The toolkit homepage: http://www.object-craft.com.au/projects/albatross/ The Albatross mailing list subscription and archives: http://object-craft.com.au/cgi-bin/mailman/listinfo/albatross-users INCOMPATIBLE CHANGES * When you use FormRecorderMixin you must now specify LIST attribute on and tags if more than one field in a form has the same name. This also causes the request merging to always place those input values into a list in the local namespace regardless of how many values were sent by the browser. FieldTypeError is raised when LIST attribute value is inconsistent with multiple/singular instances of an input field in a form. * Tag constructors are now passed the execution context as the first argument, which makes them consistent with other methods, and allows greater flexibility in code placement. DETAILED CHANGE LIST * PageModuleError is raised when a page module is loaded which does not define one of page_enter(), page_leave(), page_process() or page_display(). * Application merge_request() method now defers browser request merging to the execution context. This allows the RecorderMixin class to define the correct request merging process. * Include filename in template load errors - when templates are loaded by any means other than , the filename was often not in the traceback. * When you use FormRecorderMixin you must now specify LIST attribute on and tags if more than one field in a form has the same name. This also causes the request merging to always place those input values into a list in the local namespace regardless of how many values were sent by the browser. FieldTypeError is raised when LIST attribute value is inconsistent with multiple/singular instances of an input field in a form. * Replaced all relative module imports with absolute imports to avoid namespace clashes. * Several SessionFileAppMixin portability fixes - use "rb" and "wb" mode on open of session files for windows portability, and improvements to handling of platforms without /dev/urandom. * albatross.random module renamed to albatross.randompage. * SessionFileAppMixin now checks that the session-id returned from the browser does not contain any filesystem path components that could be used to access files outside the session file directory. * Tag constructors are now passed the execution context as the first argument, which makes them consistent with other methods, and allows greater flexibility in code placement. * Macros are now registered at load time, rather than execution (to_html) - this allows forward references, and other tricks. * New "ellipsis" mode for tree iterator, which are a variant of lazy trees where nodes at shallower levels are progressively collapsed into ellipses as the user opens deeper nodes. The user can reopen the collapsed nodes by selecting an ellipsis * TreeIterators now support get_open_aliases(), get_selected_aliases(), set_open_aliases(), set_selected_aliases() methods to set and get open and selected nodes for the TreeIterator. This allows you to enter a page with tree nodes already open or selected, and also to save the state of the tree for future use. * Added a basic /etc/init.d style rc script for the TCP session server. The session server script is now installed to you scripts directory (typically /usr/local/bin). Session server component modules simpleserver and pidfile are now installed into the albatross module directory, along with the rest of albatross. -- http://www.object-craft.com.au From mxr at itga.com.au Wed Aug 21 17:20:03 2002 From: mxr at itga.com.au (Michael Rembach) Date: Wed, 21 Aug 2002 17:20:03 +1000 Subject: [albatross-users] Albatross Message-ID: <3D633F23.A0D26A25@itga.com.au> Hi there, Now we all know that you can use albatross to do pagination, in the table form, but is there a way to say create a tabbed notebook style of pagination, where each page is a different set of results ?? -- Michael Rembach ITG Australia From djc at object-craft.com.au Thu Aug 22 20:40:47 2002 From: djc at object-craft.com.au (Dave Cole) Date: 22 Aug 2002 20:40:47 +1000 Subject: [albatross-users] Albatross In-Reply-To: <3D633F23.A0D26A25@itga.com.au> References: <3D633F23.A0D26A25@itga.com.au> Message-ID: >>>>> "Michael" == Michael Rembach writes: Michael> Hi there, Now we all know that you can use albatross to do Michael> pagination, in the table form, but is there a way to say Michael> create a tabbed notebook style of pagination, where each page Michael> is a different set of results ?? Can you explain what you mean by "tabbed notebook"? If you can supply a URL to an example that would probably be best. - Dave -- http://www.object-craft.com.au From andrewm at object-craft.com.au Fri Aug 23 19:22:38 2002 From: andrewm at object-craft.com.au (Andrew McNamara) Date: Fri, 23 Aug 2002 19:22:38 +1000 Subject: [albatross-users] Albatross In-Reply-To: Message from Dave Cole of "22 Aug 2002 20:40:47 +1000." References: <3D633F23.A0D26A25@itga.com.au> Message-ID: <20020823092238.93F953C8FF@coffee.object-craft.com.au> >Michael> Hi there, Now we all know that you can use albatross to do >Michael> pagination, in the table form, but is there a way to say >Michael> create a tabbed notebook style of pagination, where each page >Michael> is a different set of results ?? > >Can you explain what you mean by "tabbed notebook"? If you can supply >a URL to an example that would probably be best. I suspect he means tabbed like google's "Web/Images/Groups/Directory" line. I think this would be doable, although it's not functionality that is built into Albatross. -- Andrew McNamara, Senior Developer, Object Craft http://www.object-craft.com.au/ From mxr at itga.com.au Mon Aug 26 08:52:35 2002 From: mxr at itga.com.au (Michael Rembach) Date: Mon, 26 Aug 2002 08:52:35 +1000 Subject: [albatross-users] Albatross References: <3D633F23.A0D26A25@itga.com.au> <20020823092238.93F953C8FF@coffee.object-craft.com.au> Message-ID: <3D695FB3.CAB4462A@itga.com.au> Hi Andrew, That is exactly what I mean. Andrew McNamara wrote: > >Michael> Hi there, Now we all know that you can use albatross to do > >Michael> pagination, in the table form, but is there a way to say > >Michael> create a tabbed notebook style of pagination, where each page > >Michael> is a different set of results ?? > > > >Can you explain what you mean by "tabbed notebook"? If you can supply > >a URL to an example that would probably be best. > > I suspect he means tabbed like google's "Web/Images/Groups/Directory" > line. I think this would be doable, although it's not functionality that > is built into Albatross. > > -- > Andrew McNamara, Senior Developer, Object Craft > http://www.object-craft.com.au/ From djc at object-craft.com.au Tue Aug 27 10:00:10 2002 From: djc at object-craft.com.au (Dave Cole) Date: 27 Aug 2002 10:00:10 +1000 Subject: [albatross-users] Albatross In-Reply-To: <3D695FB3.CAB4462A@itga.com.au> References: <3D633F23.A0D26A25@itga.com.au> <20020823092238.93F953C8FF@coffee.object-craft.com.au> <3D695FB3.CAB4462A@itga.com.au> Message-ID: >>>>> "Michael" == Michael Rembach writes: Michael> Hi Andrew, That is exactly what I mean. >> >Can you explain what you mean by "tabbed notebook"? If you can >> >supply a URL to an example that would probably be best. >> >> I suspect he means tabbed like google's >> "Web/Images/Groups/Directory" line. I think this would be doable, >> although it's not functionality that is built into Albatross. Ben had a different idea - he said that Michael might have being referring to the fact that the pagination is currently only able to do prev/next page. The reason for only looking one page ahead is to avoid having to retrieve all elements from a sequence in order to count the length of the sequence. Some sequences (like database cursors) are not able to provide a length - so determining the length can take a long time. Thinking out loud: It occurs to me that we might be able to extend the ListIterator and tag to allow it to handle sequences where the length is known. In these cases it would be possible to provide a sequence of page bookmarks (via the ListIterator). The page bookmark sequence could be iterated over to display URL's which jump to specific pages. A bit like the page URL's on google search results. - Dave -- http://www.object-craft.com.au From mxr at itga.com.au Tue Aug 27 10:12:12 2002 From: mxr at itga.com.au (Michael Rembach) Date: Tue, 27 Aug 2002 10:12:12 +1000 Subject: [albatross-users] Albatross References: <3D633F23.A0D26A25@itga.com.au> <20020823092238.93F953C8FF@coffee.object-craft.com.au> <3D695FB3.CAB4462A@itga.com.au> Message-ID: <3D6AC3DC.857F72B9@itga.com.au> Hi all, For simple pagination the prev / next model works well. What I had in mind for the tabbed notebook is that when you submit the form, it goes to the server and retrieves say, 2 tables of information, for example client info and product info and the tabbed notebook can be able to switch from one to the other without having to go back to the server. > Ben had a different idea - he said that Michael might have being > referring to the fact that the pagination is currently only able to do > prev/next page. > > The reason for only looking one page ahead is to avoid having to > retrieve all elements from a sequence in order to count the length of > the sequence. Some sequences (like database cursors) are not able to > provide a length - so determining the length can take a long time. > > Thinking out loud: > > It occurs to me that we might be able to extend the ListIterator and > tag to allow it to handle sequences where the length is > known. In these cases it would be possible to provide a sequence of > page bookmarks (via the ListIterator). The page bookmark sequence > could be iterated over to display URL's which jump to specific pages. > A bit like the page URL's on google search results. > > - Dave > > -- > http://www.object-craft.com.au -- Michael Rembach From tchur at optushome.com.au Wed Aug 28 05:23:33 2002 From: tchur at optushome.com.au (Tim Churches) Date: Wed, 28 Aug 2002 05:23:33 +1000 Subject: [albatross-users] Albatross References: <3D633F23.A0D26A25@itga.com.au> <20020823092238.93F953C8FF@coffee.object-craft.com.au> <3D695FB3.CAB4462A@itga.com.au> <3D6AC3DC.857F72B9@itga.com.au> Message-ID: <00aa01c24dff$3bcec100$8600a8c0@carlnfd1.nsw.optushome.com.au> From: "Michael Rembach" To: "Dave Cole" Cc: "Andrew McNamara" ; Sent: Tuesday, August 27, 2002 10:12 AM Subject: Re: [albatross-users] Albatross > Hi all, > > For simple pagination the prev / next model works well. > > What I had in mind for the tabbed notebook is that when you submit the > form, it goes to the server and retrieves say, 2 tables of information, > for example client info and product info and the tabbed notebook can be > able to switch from one to the other without having to go back to the > server. Generalising this a bit further, what Albatross (and just about all open source Web app frameworks which I have seen) needs is a means of handling master/detail data eg display information about a customer as well as information about that customers orders. Of course, doing this with plain HTML is a real challenge, and most commercial Web app frameworks which address this problem resort to various non-portable or browser-specific JavaScript tricks, DTHML, ActiveX or other jiggery-pokery. I know that the Albatross developers try to steer away from such client-side hocus-pocus, with good reason. Tim C From djc at object-craft.com.au Wed Aug 28 09:33:09 2002 From: djc at object-craft.com.au (Dave Cole) Date: 28 Aug 2002 09:33:09 +1000 Subject: [albatross-users] Albatross In-Reply-To: <00aa01c24dff$3bcec100$8600a8c0@carlnfd1.nsw.optushome.com.au> References: <3D633F23.A0D26A25@itga.com.au> <20020823092238.93F953C8FF@coffee.object-craft.com.au> <3D695FB3.CAB4462A@itga.com.au> <3D6AC3DC.857F72B9@itga.com.au> <00aa01c24dff$3bcec100$8600a8c0@carlnfd1.nsw.optushome.com.au> Message-ID: >>>>> "Tim" == Tim Churches writes: >> For simple pagination the prev / next model works well. >> >> What I had in mind for the tabbed notebook is that when you submit >> the form, it goes to the server and retrieves say, 2 tables of >> information, for example client info and product info and the >> tabbed notebook can be able to switch from one to the other without >> having to go back to the server. Tim> Generalising this a bit further, what Albatross (and just about Tim> all open source Web app frameworks which I have seen) needs is a Tim> means of handling master/detail data eg display information about Tim> a customer as well as information about that customers orders. Of Tim> course, doing this with plain HTML is a real challenge, and most Tim> commercial Web app frameworks which address this problem resort Tim> to various non-portable or browser-specific JavaScript tricks, Tim> DTHML, ActiveX or other jiggery-pokery. I know that the Albatross Tim> developers try to steer away from such client-side hocus-pocus, Tim> with good reason. The templating system should be able to construct Javascript just as easily as it does HTML. The burden of course is on the application developer. I imagine that many of the DHTML books out there will contain examples of how to do this. Tim is correct in saying that we have tried to keep away from implicit support of browser side tricks since we are want to limit the scope of the problem we are trying to solve. - Dave -- http://www.object-craft.com.au From andrewm at object-craft.com.au Fri Aug 30 14:00:51 2002 From: andrewm at object-craft.com.au (Andrew McNamara) Date: Fri, 30 Aug 2002 14:00:51 +1000 Subject: [albatross-users] FreeBSD "port" now available Message-ID: <20020830040051.ADD4E3C9AE@coffee.object-craft.com.au> Thanks to Gregory Bond, a FreeBSD "port" for Albatross is now available: http://www.object-craft.com.au/projects/albatross/download/albatross-port.shar -- Andrew McNamara, Senior Developer, Object Craft http://www.object-craft.com.au/