diff --git a/fstools b/fstools index c10e879..9237f6f 160000 --- a/fstools +++ b/fstools @@ -1 +1 @@ -Subproject commit c10e8792abb05671dab6de51cdadda3bf8ead50f +Subproject commit 9237f6f7f77eed79b8163077c1b4d87189193fbe diff --git a/pages/context.py b/pages/context.py index 14bf948..0efb57d 100644 --- a/pages/context.py +++ b/pages/context.py @@ -54,6 +54,28 @@ def navigationbar(context, request, caller_name, **kwargs): finalise_bar(request, bar) +def menubar(context, request, caller_name, **kwargs): + bar = context[context.MENUBAR] + menubar_users(bar, request) + add_help_menu(request, bar, "current_help_page" in kwargs) + add_index_menu(request, bar, kwargs.get("rel_path", '')) + finalise_bar(request, bar) + + +def actionbar(context, request, caller_name, **kwargs): + bar = context[context.ACTIONBAR] + if caller_name == 'page': + if access.write_page(request, kwargs["rel_path"]): + add_edit_menu(request, bar, kwargs["rel_path"]) + if access.modify_attachment(request, kwargs["rel_path"]): + add_manageupload_menu(request, bar, kwargs['upload_path']) + if access.read_page(request, kwargs["rel_path"]): + add_meta_menu(request, bar, kwargs["rel_path"]) + elif caller_name == 'helpview': + actionbar_add_help(context, request, **kwargs) + finalise_bar(request, bar) + + def add_back_menu(request, bar): bar.append_entry( BACK_UID, # uid @@ -76,14 +98,6 @@ def navigation_entry_parameters(request, path): ) -def menubar(context, request, caller_name, **kwargs): - bar = context[context.MENUBAR] - menubar_users(bar, request) - add_help_menu(request, bar, "current_help_page" in kwargs) - add_index_menu(request, bar, kwargs.get("rel_path", '')) - finalise_bar(request, bar) - - def add_help_menu(request, bar, active): bar.append_entry( HELP_UID, # uid @@ -106,20 +120,6 @@ def add_index_menu(request, bar, rel_path): ) -def actionbar(context, request, caller_name, **kwargs): - bar = context[context.ACTIONBAR] - if caller_name == 'page': - if access.write_page(request, kwargs["rel_path"]): - add_edit_menu(request, bar, kwargs["rel_path"]) - if access.modify_attachment(request, kwargs["rel_path"]): - add_manageupload_menu(request, bar, kwargs['upload_path']) - if access.read_page(request, kwargs["rel_path"]): - add_meta_menu(request, bar, kwargs["rel_path"]) - elif caller_name == 'helpview': - actionbar_add_help(context, request, **kwargs) - finalise_bar(request, bar) - - def add_edit_menu(request, bar, rel_path): bar.append_entry( EDIT_UID, # uid diff --git a/pages/page.py b/pages/page.py index 1bd143e..5c74220 100644 --- a/pages/page.py +++ b/pages/page.py @@ -197,39 +197,57 @@ class creole_page(base_page): pass params = kwargs.get('', '') - startname = '' + filter_str = '' depth = parse_depth(params) if depth is None: params = params.split(",") depth = parse_depth(params[0]) if len(params) == 2: - startname = params[1] + filter_str = params[1] elif depth is None: - startname = params[0] - if depth is None: - depth = 9999 + filter_str = params[0] # rv = "" - # create a rel_path list - pathlist = [base_page(path).rel_path for path in fstools.dirlist(settings.PAGES_ROOT, rekursive=False)] - # sort basename - pathlist.sort(key=os.path.basename) + # create a page_list + if allpages: + expression = "*" + parent_rel_path = "" + else: + expression = os.path.basename(self._path) + 2 * self.SPLITCHAR + "*" + parent_rel_path = self.rel_path + pl = page_list( + self._request, + [creole_page(self._request, path) for path in fstools.dirlist(settings.PAGES_ROOT, expression=expression, rekursive=False)] + ) + return pl.html_list(depth=depth, filter_str=filter_str, parent_rel_path=parent_rel_path) + +class page_list(list): + def __init__(self, request, *args, **kwargs): + self._request = request + return super().__init__(*args, **kwargs) + + def sort_basename(self): + return list.sort(self, key=lambda x: os.path.basename(x.rel_path)) + + def creole_list(self, depth=None, filter_str='', parent_rel_path=''): + self.sort_basename() + depth = depth or 9999 # set a random high value if None + # + parent_rel_path = parent_rel_path + "/" if len(parent_rel_path) > 0 else "" + # + rv = "" last_char = None - for contentname in pathlist: - # - if (contentname.startswith(self.rel_path) or allpages) and contentname != self.rel_path: - if allpages: - name = contentname - else: - name = contentname[len(self.rel_path)+1:] - if name.count('/') < depth and name.startswith(startname): - if last_char != os.path.basename(name)[0].upper(): - last_char = os.path.basename(name)[0].upper() - if last_char is not None: - rv += "\n" - rv += f'