# HG changeset patch # User Aurelien Campeas # Date 1234374374 -3600 # Node ID e85042d18b488db20a1ee352243630b661a907b4 # Parent 18c6c31bbaf4228e4f50fe7011e59fd7dccdfb95 [preferences] preferences sections will now remember their collapsed/open status diff -r 18c6c31bbaf4 -r e85042d18b48 web/data/cubicweb.preferences.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/data/cubicweb.preferences.js Wed Feb 11 18:46:14 2009 +0100 @@ -0,0 +1,10 @@ +/* toggle visibility of an element by its id + * & set current visibility status in a cookie + * XXX whenever used outside of preferences, don't forget to + * move me in a more appropriate place + */ +function toggle_and_remember_visibility(elemId, cookiename) { + jqNode(elemId).toggleClass('hidden'); + async_remote_exec('set_cookie', cookiename, + jQuery('#' + elemId).attr('class')); +} diff -r 18c6c31bbaf4 -r e85042d18b48 web/views/management.py --- a/web/views/management.py Wed Feb 11 18:43:32 2009 +0100 +++ b/web/views/management.py Wed Feb 11 18:46:14 2009 +0100 @@ -13,11 +13,10 @@ from cubicweb.common.utils import UStringIO from cubicweb.common.view import AnyRsetView, StartupView, EntityView -from cubicweb.common.uilib import (html_traceback, rest_traceback, html_escape, - toggle_link) +from cubicweb.common.uilib import html_traceback, rest_traceback from cubicweb.common.selectors import (yes, one_line_rset, - accept_rset, none_rset, - chainfirst, chainall) + accept_rset, none_rset, + chainfirst, chainall) from cubicweb.web import INTERNAL_FIELD_VALUE, eid_param, stdmsgs from cubicweb.web.widgets import StaticComboBoxWidget from cubicweb.web.form import FormMixIn @@ -284,6 +283,13 @@ _('components') _('contentnavigation') + +def make_togglable_link(nodeid, label, cookiename, cookievalue): + """builds a HTML link that switches the visibility & remembers it""" + action = u"javascript: toggle_and_remember_visibility('%s', '%s', '%s')" % \ + (nodeid, cookiename, cookievalue) + return u'%s' % (action, label) + class SystemEpropertiesForm(FormMixIn, StartupView): controller = 'edit' id = 'systemepropertiesform' @@ -298,9 +304,24 @@ """return the url associated with this view. We can omit rql here""" return self.build_url('view', vid=self.id) + def _cookie_name_from_group(self, group): + return str('%s_property_%s' % (self.config.appid, group)) + + def _group_status(self, group, default=u'hidden'): + cookies = self.req.get_cookie() + cookiename = self._cookie_name_from_group(group) + cookie = cookies.get(cookiename) + if cookie is None: + cookies[cookiename] = default + self.req.set_cookie(cookies, cookiename, maxage=None) + status = default + else: + status = cookie.value + return status + def call(self, **kwargs): """The default view representing the application's index""" - self.req.add_js('cubicweb.edition.js') + self.req.add_js(('cubicweb.edition.js', 'cubicweb.preferences.js')) self.req.add_css('cubicweb.preferences.css') vreg = self.vreg values = self.defined_keys @@ -330,17 +351,23 @@ w(self.error_message()) for label, group, form in sorted((_(g), g, f) for g, f in mainopts.iteritems()): + status = self._group_status(group) #hidden, or not ? w(u'

%s

\n' % - (toggle_link('fieldset_' + group, label))) - w(u'