Moved page list creation to new class page_list. Usage of this class for search results

This commit is contained in:
Dirk Alders 2024-10-11 09:47:07 +02:00
parent 859d073a7e
commit dd21345eb7
5 changed files with 72 additions and 56 deletions

@ -1 +1 @@
Subproject commit c10e8792abb05671dab6de51cdadda3bf8ead50f
Subproject commit 9237f6f7f77eed79b8163077c1b4d87189193fbe

View File

@ -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

View File

@ -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 += "</ul>\n"
rv += f'<h3>{last_char}</h3>\n<ul>\n'
rv += f' <li><a href="{url_page(self._request, contentname)}">{name}</a></li>\n'
if len(rv) > 0:
rv += "</ul>\n"
for page in self:
name = page.rel_path[len(parent_rel_path):]
if name.startswith(filter_str) and name != filter_str:
if name.count('/') < depth:
first_char = os.path.basename(name)[0].upper()
if last_char != first_char:
last_char = first_char
rv += f"=== {first_char}\n"
rv += f"* [[{url_page(self._request, page.rel_path)} | {name} ]]\n"
return rv
def html_list(self, depth=9999, filter_str='', parent_rel_path=''):
return mycreole.render_simple(self.creole_list(depth, filter_str, parent_rel_path))

View File

@ -15,7 +15,7 @@ from .context import context_adaption
from .forms import EditForm
from .help import help_pages
import mycreole
from .page import creole_page
from .page import creole_page, page_list
from .search import whoosh_search
from themes import Context
@ -110,15 +110,13 @@ def search(request):
if sr is None:
django_messages.error(request, _('Invalid search pattern: %s') % repr(search_txt))
sr = []
page_content = "= Searchresults\n"
for rel_path in sr:
p = creole_page(request, rel_path)
page_content += f"[[/page/{rel_path}|{p.title}]]\n"
pl = page_list(request, [creole_page(request, rel_path) for rel_path in sr])
#
context_adaption(
context,
request,
page_content=mycreole.render_simple(page_content)
title=_("Searchresults"),
page_content=mycreole.render_simple(pl.creole_list())
)
return render(request, 'pages/page.html', context=context)

View File

@ -176,14 +176,14 @@ for property_name in USER_CONFIG_DEFAULTS:
if SECRET_KEY is None:
chars = 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)'
s_key = ''.join([random.choice(chars) for n in range(50)])
secret_key_warning = "You need to create a config.py file including at least a SECRET_KEY definition (e.g.: --> %s <--). " % repr(s_key)
secret_key_warning = "You need to create a config.py file including at least a SECRET_KEY definition (e.g.: --> %s <--)." % repr(s_key)
raise KeyError(secret_key_warning)
# Logging Configuration
#
ROOT_LOGGER_NAME = os.path.basename(os.path.dirname(__file__))
default_handler = ['socket'] if DEBUG else ['console']
default_handler = ['socket', 'console'] if DEBUG else ['console']
class DjangoSocketHandler(_SocketHandler):