From ed4c150eee1c72c0cbf517099dd3dc6ff94a6dec Mon Sep 17 00:00:00 2001 From: jomae Date: Wed, 5 Feb 2025 12:13:06 +0000 Subject: [PATCH] 1.6.1dev: use the inline style element in prefs/pygments panel in order to prevent many requests on page load (closes #13864) git-svn-id: http://trac.edgewall.org/intertrac/log:/branches/1.6-stable@17878 af82e41b-90c4-0310-8c96-b1721e28e2e2 --- trac/mimeview/pygments.py | 24 ++++++++++++----- trac/mimeview/templates/prefs_pygments.html | 29 ++++++++++----------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/trac/mimeview/pygments.py b/trac/mimeview/pygments.py index 290a17f9bc..c3fa038346 100644 --- a/trac/mimeview/pygments.py +++ b/trac/mimeview/pygments.py @@ -154,7 +154,7 @@ def get_preference_panels(self, req): yield 'pygments', _('Syntax Highlighting') def render_preference_panel(self, req, panel): - styles = list(get_all_styles()) + styles = set(get_all_styles()) if req.method == 'POST': style = req.args.get('style') @@ -165,15 +165,25 @@ def render_preference_panel(self, req, panel): add_notice(req, _("Your preferences have been saved.")) req.redirect(req.href.prefs(panel or None)) - for style in sorted(styles): - add_stylesheet(req, '/pygments/%s.css' % style, title=style.title()) + def style_defs(style): + cls = get_style_by_name(style) + selector = '.trac-pygments-%s div.code pre' % style + return _get_style_defs(cls, selector) + + default_style = self.default_style + if default_style not in styles: + default_style = 'trac' + selection = req.session.get('pygments_style') + if selection not in styles: + selection = default_style output = self._generate('html', self.EXAMPLE) - add_script_data(req, default_style=self.default_style.title()) + add_script_data(req, default_style=default_style, selection=selection) return 'prefs_pygments.html', { 'output': output, - 'selection': req.session.get('pygments_style'), - 'default_style': self.default_style, - 'styles': styles + 'selection': selection, + 'default_style': default_style, + 'styles': sorted(styles), + 'style_defs': style_defs, } # IRequestHandler methods diff --git a/trac/mimeview/templates/prefs_pygments.html b/trac/mimeview/templates/prefs_pygments.html index 8221a1bcdb..7794fcb2d2 100644 --- a/trac/mimeview/templates/prefs_pygments.html +++ b/trac/mimeview/templates/prefs_pygments.html @@ -24,22 +24,21 @@ div.code pre { border: 1px solid #999; font-size: 90%; margin: 1em 2em; padding: 5px; width: 60%; } + # for style_ in styles: + ${- style_defs(style_)|safe} + # endfor @@ -48,12 +47,12 @@ # block prefpanel -
+