web/component.py
branchstable
changeset 6248 3f89bf00e8ce
parent 5940 0e3ae19b181a
child 6265 27417b8b94ed
equal deleted inserted replaced
6247:f7cb092d2296 6248:3f89bf00e8ce
    25 from logilab.common.deprecation import class_renamed
    25 from logilab.common.deprecation import class_renamed
    26 from logilab.mtconverter import xml_escape
    26 from logilab.mtconverter import xml_escape
    27 
    27 
    28 from cubicweb import role
    28 from cubicweb import role
    29 from cubicweb.utils import json_dumps
    29 from cubicweb.utils import json_dumps
       
    30 from cubicweb.uilib import js
    30 from cubicweb.view import Component
    31 from cubicweb.view import Component
    31 from cubicweb.selectors import (
    32 from cubicweb.selectors import (
    32     paginated_rset, one_line_rset, primary_view, match_context_prop,
    33     paginated_rset, one_line_rset, primary_view, match_context_prop,
    33     partial_has_related_entities)
    34     partial_has_related_entities)
    34 
    35 
   141             params[self.stop_param] = stop
   142             params[self.stop_param] = stop
   142         view = self.cw_extra_kwargs.get('view')
   143         view = self.cw_extra_kwargs.get('view')
   143         if view is not None and hasattr(view, 'page_navigation_url'):
   144         if view is not None and hasattr(view, 'page_navigation_url'):
   144             url = view.page_navigation_url(self, path, params)
   145             url = view.page_navigation_url(self, path, params)
   145         elif path == 'json':
   146         elif path == 'json':
   146             rql = params.pop('rql', self.cw_rset.printable_rql())
   147             url = self.ajax_page_url(**params)
   147             # latest 'true' used for 'swap' mode
       
   148             url = 'javascript: replacePageChunk(%s, %s, %s, %s, true)' % (
       
   149                 json_dumps(params.get('divid', 'pageContent')),
       
   150                 json_dumps(rql), json_dumps(params.pop('vid', None)),
       
   151                 json_dumps(params))
       
   152         else:
   148         else:
   153             url = self._cw.build_url(path, **params)
   149             url = self._cw.build_url(path, **params)
   154         return url
   150         return url
   155 
   151 
       
   152     def ajax_page_url(self, **params):
       
   153         divid = params.setdefault('divid', 'pageContent')
       
   154         params.setdefault('rql', self.cw_rset.printable_rql())
       
   155         return "javascript: $(%s).loadxhtml('json', %s, 'get', 'swap')" % (
       
   156             json_dumps('#'+divid), js.ajaxFuncArgs('view', params))
       
   157 
   156     def page_link(self, path, params, start, stop, content):
   158     def page_link(self, path, params, start, stop, content):
   157         url = xml_escape(self.page_url(path, params, start, stop))
   159         url = xml_escape(self.page_url(path, params, start, stop))
       
   160         # XXX hack to avoid opening a new page containing the evaluation of the
       
   161         # js expression on ajax call
       
   162         if url.startswith('javascript:'):
       
   163             url += '; noop();'
   158         if start == self.starting_from:
   164         if start == self.starting_from:
   159             return self.selected_page_link_templ % (url, content, content)
   165             return self.selected_page_link_templ % (url, content, content)
   160         return self.page_link_templ % (url, content, content)
   166         return self.page_link_templ % (url, content, content)
   161 
   167 
   162     def previous_link(self, path, params, content='<<', title=_('previous_results')):
   168     def previous_link(self, path, params, content='<<', title=_('previous_results')):