This is an automated email from the ASF dual-hosted git repository. brondsem pushed a commit to branch db/8388 in repository https://gitbox.apache.org/repos/asf/allura.git
commit cbe0cbdff7316678807b730d8d508eb5bdfd98d7 Author: Dave Brondsema <[email protected]> AuthorDate: Wed May 19 18:04:14 2021 -0400 [#8388] consolidate markdown_syntax and markdown_syntax_dialog URLs --- Allura/allura/controllers/repository.py | 5 --- Allura/allura/controllers/static.py | 12 ++++- Allura/allura/templates/jinja_master/lib.html | 3 +- Allura/allura/templates/markdown_syntax.html | 6 ++- .../allura/templates/markdown_syntax_dialog.html | 2 + Allura/allura/templates/widgets/markdown_edit.html | 2 +- Allura/allura/tests/functional/test_newforge.py | 52 ++++++++++++++++++++++ Allura/allura/tests/functional/test_root.py | 15 ------- Allura/docs/getting_started/using.rst | 2 +- ForgeBlog/forgeblog/main.py | 6 --- .../forgediscussion/controllers/root.py | 13 ++---- ForgeDiscussion/forgediscussion/forum_main.py | 2 +- .../forgediscussion/tests/functional/test_forum.py | 8 +--- .../forgegit/tests/functional/test_controllers.py | 4 -- .../forgetracker/tests/functional/test_root.py | 4 -- ForgeTracker/forgetracker/tracker_main.py | 15 ++----- ForgeWiki/forgewiki/tests/functional/test_root.py | 4 +- ForgeWiki/forgewiki/wiki_main.py | 24 ++-------- 18 files changed, 87 insertions(+), 92 deletions(-) diff --git a/Allura/allura/controllers/repository.py b/Allura/allura/controllers/repository.py index 2b34847..54b762e 100644 --- a/Allura/allura/controllers/repository.py +++ b/Allura/allura/controllers/repository.py @@ -86,11 +86,6 @@ class RepoRootController(BaseController, FeedController): def _check_security(self): require_access(c.app, 'read') - @expose('jinja:allura:templates/markdown_syntax_dialog.html') - def markdown_syntax_dialog(self, **kw): - """Static page explaining markdown.""" - return dict() - @with_trailing_slash @expose() def index(self, offset=0, branch=None, **kw): diff --git a/Allura/allura/controllers/static.py b/Allura/allura/controllers/static.py index 720ef77..fa0148b 100644 --- a/Allura/allura/controllers/static.py +++ b/Allura/allura/controllers/static.py @@ -21,7 +21,7 @@ from io import BytesIO import six from tg import expose -from tg.decorators import without_trailing_slash +from tg.decorators import without_trailing_slash, with_trailing_slash from webob import exc from tg import app_globals as g @@ -57,3 +57,13 @@ class NewForgeController(object): css, md5 = g.tool_icon_css return utils.serve_file( BytesIO(six.ensure_binary(css)), 'tool_icon_css', 'text/css', etag=md5) + + @expose('jinja:allura:templates/markdown_syntax.html') + def markdown_syntax(self, **kw): + 'Static page explaining markdown.' + return dict() + + @expose('jinja:allura:templates/markdown_syntax_dialog.html') + def markdown_syntax_dialog(self, **kw): + 'Static dialog page about how to use markdown.' + return dict() diff --git a/Allura/allura/templates/jinja_master/lib.html b/Allura/allura/templates/jinja_master/lib.html index f879def..d69d8a6 100644 --- a/Allura/allura/templates/jinja_master/lib.html +++ b/Allura/allura/templates/jinja_master/lib.html @@ -230,10 +230,9 @@ {% macro markdown_syntax(id='') %} <a class="markdown_syntax_toc_crumb" href="#md_ex_toc{{id}}">Back</a> -<h1>Markdown Syntax Guide</h1> <div class="markdown_syntax_section md_ex_toc{{id}}"> -<p>{{config.site_name}} uses markdown syntax everywhere to allow you to create rich<br>text markup, and extends markdown in several ways to allow for quick linking<br>to other artifacts in your project. </p> +<p>{{config.site_name}} uses markdown syntax everywhere to allow you to create rich text markup, and extends markdown in several ways to allow for quick linking to other artifacts in your project. </p> <p>Markdown was created to be easy to read, easy to write, and still readable in plain text format.</p> <ul class="markdown_syntax_toc"> diff --git a/Allura/allura/templates/markdown_syntax.html b/Allura/allura/templates/markdown_syntax.html index ffba5aa..d974b01 100644 --- a/Allura/allura/templates/markdown_syntax.html +++ b/Allura/allura/templates/markdown_syntax.html @@ -18,9 +18,11 @@ -#} {% extends g.theme.master %} -{% block title %}{{c.project.name}} / {{c.app.config.options.mount_label}} / Markdown Syntax{% endblock %} +{% block title %}{{config['site_name']}} Markdown Syntax{% endblock %} -{% block header %}Markdown Syntax{% endblock %} +{% block header %}Markdown Syntax Guide{% endblock %} + +{% set hide_left_bar = True %} {% block content %} {{lib.markdown_syntax()}} diff --git a/Allura/allura/templates/markdown_syntax_dialog.html b/Allura/allura/templates/markdown_syntax_dialog.html index 9675a53..7c49e76 100644 --- a/Allura/allura/templates/markdown_syntax_dialog.html +++ b/Allura/allura/templates/markdown_syntax_dialog.html @@ -18,4 +18,6 @@ -#} <!DOCTYPE html> {% import 'allura:templates/jinja_master/lib.html' as lib with context %} +<h1>Markdown Syntax Guide</h1> +<hr> {{lib.markdown_syntax()}} diff --git a/Allura/allura/templates/widgets/markdown_edit.html b/Allura/allura/templates/widgets/markdown_edit.html index 1af3df9..48b1806 100644 --- a/Allura/allura/templates/widgets/markdown_edit.html +++ b/Allura/allura/templates/widgets/markdown_edit.html @@ -21,7 +21,7 @@ <textarea id="{{id or rendered_name}}" name="{{rendered_name}}" class="{{widget.css_class}}" {{widget.j2_attrs(attrs)}}>{{value or ''}}</textarea> <div class="modal lightmodal markdown_help" style="display:none"> {{ g.icons['close'].render(extra_css='close') }} - <div class="markdown_help_contents" data-url="{{c.app.url}}markdown_syntax_dialog"></div> + <div class="markdown_help_contents" data-url="/nf/markdown_syntax_dialog"></div> </div> <input type="hidden" class="markdown_project" value="{{c.project.shortname}}"> <input type="hidden" class="markdown_neighborhood" value="{{c.project.neighborhood._id}}"> diff --git a/Allura/allura/tests/functional/test_newforge.py b/Allura/allura/tests/functional/test_newforge.py new file mode 100644 index 0000000..cb4a20f --- /dev/null +++ b/Allura/allura/tests/functional/test_newforge.py @@ -0,0 +1,52 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +from __future__ import unicode_literals +from __future__ import absolute_import + +from six.moves.urllib.parse import quote + +from allura.tests import TestController +from allura.tests import decorators as td +from allura import model as M + + +class TestNewForgeController(TestController): + + @td.with_wiki + def test_markdown_to_html(self): + n = M.Neighborhood.query.get(name='Projects') + r = self.app.get( + '/nf/markdown_to_html?markdown=*aaa*bb[wiki:Home]&project=test&app=bugs&neighborhood=%s' % n._id, validate_chunk=True) + assert '<p><em>aaa</em>bb<a class="alink" href="/p/test/wiki/Home/">[wiki:Home]</a></p>' in r, r + + # this happens to trigger an error + bad_markdown = '<foo {bar}>' + r = self.app.get('/nf/markdown_to_html?markdown=%s&project=test&app=bugs&neighborhood=%s' % + (quote(bad_markdown), n._id)) + r.mustcontain('The markdown supplied could not be parsed correctly.') + r.mustcontain('<pre><foo {bar}></pre>') + + def test_markdown_syntax(self): + r = self.app.get('/nf/markdown_syntax') + r.mustcontain('Markdown Syntax') + r.mustcontain('href="http://someurl"') + + def test_markdown_syntax_dialog(self): + r = self.app.get('/nf/markdown_syntax_dialog') + r.mustcontain('<h1>Markdown Syntax Guide</h1>') + r.mustcontain('href="http://someurl"') diff --git a/Allura/allura/tests/functional/test_root.py b/Allura/allura/tests/functional/test_root.py index beb49de..3caf217 100644 --- a/Allura/allura/tests/functional/test_root.py +++ b/Allura/allura/tests/functional/test_root.py @@ -33,7 +33,6 @@ from __future__ import absolute_import import os import six -from six.moves.urllib.parse import quote from tg import tmpl_context as c from alluratest.tools import assert_equal, assert_in @@ -174,20 +173,6 @@ class TestRootController(TestController): assert len( response.html.findAll('a', {'href': '/adobe/adobe-2/'})) == 1 - @td.with_wiki - def test_markdown_to_html(self): - n = M.Neighborhood.query.get(name='Projects') - r = self.app.get( - '/nf/markdown_to_html?markdown=*aaa*bb[wiki:Home]&project=test&app=bugs&neighborhood=%s' % n._id, validate_chunk=True) - assert '<p><em>aaa</em>bb<a class="alink" href="/p/test/wiki/Home/">[wiki:Home]</a></p>' in r, r - - # this happens to trigger an error - bad_markdown = '<foo {bar}>' - r = self.app.get('/nf/markdown_to_html?markdown=%s&project=test&app=bugs&neighborhood=%s' % - (quote(bad_markdown), n._id)) - r.mustcontain('The markdown supplied could not be parsed correctly.') - r.mustcontain('<pre><foo {bar}></pre>') - def test_slash_redirect(self): self.app.get('/p', status=301) self.app.get('/p/', status=302) diff --git a/Allura/docs/getting_started/using.rst b/Allura/docs/getting_started/using.rst index b8fb6f3..c77c01c 100644 --- a/Allura/docs/getting_started/using.rst +++ b/Allura/docs/getting_started/using.rst @@ -160,4 +160,4 @@ Using markdown syntax Everything in Allura uses Markdown formatting, with several customizations and macros specifically for Allura. There are "Formatting Help" buttons throughout Allura for -easy reference to the Markdown syntax. One such page is https://forge-allura.apache.org/p/allura/wiki/markdown_syntax/ +easy reference to the Markdown syntax. One such page is https://forge-allura.apache.org/nf/markdown_syntax diff --git a/ForgeBlog/forgeblog/main.py b/ForgeBlog/forgeblog/main.py index 2d86e2f..ced04ba 100644 --- a/ForgeBlog/forgeblog/main.py +++ b/ForgeBlog/forgeblog/main.py @@ -324,12 +324,6 @@ class RootController(BaseController, FeedController): notification_tasks.send_usermentions_notification.post(post.index_id(), kw['text']) redirect(h.urlquote(h.really_unicode(post.url()))) - @with_trailing_slash - @expose('jinja:allura:templates/markdown_syntax_dialog.html') - def markdown_syntax_dialog(self, **kw): - 'Static dialog page about how to use markdown.' - return dict() - @expose() def _lookup(self, year=None, month=None, name=None, *rest): if year is None or month is None or name is None: diff --git a/ForgeDiscussion/forgediscussion/controllers/root.py b/ForgeDiscussion/forgediscussion/controllers/root.py index b636f7c..29266fc 100644 --- a/ForgeDiscussion/forgediscussion/controllers/root.py +++ b/ForgeDiscussion/forgediscussion/controllers/root.py @@ -39,7 +39,7 @@ from allura.lib.security import require_access, has_access, require_authenticate from allura.lib.search import search_app from allura.lib import helpers as h from allura.lib import validators as v -from allura.lib.utils import AntiSpam +from allura.lib.utils import AntiSpam, permanent_redirect from allura.lib.decorators import require_post, memorable_forget from allura.controllers import BaseController, DispatchIndex from allura.controllers.rest import AppRestControllerMixin @@ -175,16 +175,9 @@ class RootController(BaseController, DispatchIndex, FeedController): d['search_comments_disable'] = True return d - @expose('jinja:allura:templates/markdown_syntax.html') + @expose() def markdown_syntax(self, **kw): - 'Static page explaining markdown.' - return dict() - - @with_trailing_slash - @expose('jinja:allura:templates/markdown_syntax_dialog.html') - def markdown_syntax_dialog(self, **kw): - 'Static dialog page about how to use markdown.' - return dict() + permanent_redirect('/nf/markdown_syntax') @expose() def _lookup(self, id=None, *remainder): diff --git a/ForgeDiscussion/forgediscussion/forum_main.py b/ForgeDiscussion/forgediscussion/forum_main.py index d48919f..0bf6043 100644 --- a/ForgeDiscussion/forgediscussion/forum_main.py +++ b/ForgeDiscussion/forgediscussion/forum_main.py @@ -197,7 +197,7 @@ class ForgeDiscussionApp(Application): l = l + forum_links l.append(SitemapEntry('Help')) l.append( - SitemapEntry('Formatting Help', c.app.url + 'markdown_syntax')) + SitemapEntry('Formatting Help', '/nf/markdown_syntax', extra_html_attrs={'target': '_blank'})) return l except Exception: # pragma no cover log.exception('sidebar_menu') diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py index 3788a7f..2fe9ccf 100644 --- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py +++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum.py @@ -379,10 +379,6 @@ class TestForum(TestController): self.app.get('/discussion/search') self.app.get('/discussion/search', params=dict(q='foo')) - def test_render_markdown_syntax(self): - r = self.app.get('/discussion/markdown_syntax') - assert 'Markdown Syntax' in r - def test_forum_index(self): self.app.get('/discussion/testforum/') self.app.get('/discussion/testforum/childforum/') @@ -927,7 +923,7 @@ class TestForum(TestController): assert_in("/p/test/discussion/create_topic/", sidebar_links) assert_in("/p/test/discussion/new_forum", sidebar_links) assert_in('<h3 class="">Help</h3>', sidebar_menu) - assert_in("/p/test/discussion/markdown_syntax", sidebar_links) + assert_in("/nf/markdown_syntax", sidebar_links) assert_not_in("flag_as_spam", sidebar_links) r = self.app.get('/discussion/create_topic/') f = r.html.find('form', {'action': '/p/test/discussion/save_new_topic'}) @@ -951,7 +947,7 @@ class TestForum(TestController): assert_in("/p/test/discussion/create_topic/", sidebar_links) assert_in("/p/test/discussion/new_forum", sidebar_links) assert_in('<h3 class="">Help</h3>', sidebar_menu) - assert_in("/p/test/discussion/markdown_syntax", sidebar_links) + assert_in("/nf/markdown_syntax", sidebar_links) assert_not_in("flag_as_spam", sidebar_menu) r = self.app.get('/discussion/create_topic/') f = r.html.find('form', {'action': '/p/test/discussion/save_new_topic'}) diff --git a/ForgeGit/forgegit/tests/functional/test_controllers.py b/ForgeGit/forgegit/tests/functional/test_controllers.py index d8680c2..3a5a474 100644 --- a/ForgeGit/forgegit/tests/functional/test_controllers.py +++ b/ForgeGit/forgegit/tests/functional/test_controllers.py @@ -547,10 +547,6 @@ class TestRootController(_TestCase): assert_equal(app_config.options['external_checkout_url'], 'http://foo.bar/baz') assert_equal(app_config.options['merge_disabled'], True) - def test_markdown_syntax_dialog(self): - r = self.app.get('/p/test/src-git/markdown_syntax_dialog') - assert_in('<h1>Markdown Syntax Guide</h1>', r) - def test_refresh(self): r = self.app.get('/p/test/src-git/refresh') assert_in('refresh queued', r) diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py index d403d59..d4b325a 100644 --- a/ForgeTracker/forgetracker/tests/functional/test_root.py +++ b/ForgeTracker/forgetracker/tests/functional/test_root.py @@ -798,10 +798,6 @@ class TestFunctionalController(TrackerTestController): create_button = r.html.find('a', attrs={'href': '/p/test/bugs/new/'}) assert_equal(create_button['class'], ['icon', 'sidebar-disabled']) - def test_render_markdown_syntax(self): - r = self.app.get('/bugs/markdown_syntax') - assert_true('Markdown Syntax' in r) - @patch.dict('allura.lib.app_globals.config', markdown_cache_threshold='0') def test_cached_convert(self): from allura.model.session import artifact_orm_session diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py index 0604cd5..71073fa 100644 --- a/ForgeTracker/forgetracker/tracker_main.py +++ b/ForgeTracker/forgetracker/tracker_main.py @@ -20,14 +20,12 @@ from __future__ import absolute_import import logging import re from datetime import datetime, timedelta -from functools import partial from six.moves.urllib.parse import urlencode, unquote from webob import exc import json import os # Non-stdlib imports -import pkg_resources from tg import expose, validate, redirect, flash, url, jsonify from tg.decorators import with_trailing_slash, without_trailing_slash from paste.deploy.converters import aslist @@ -64,6 +62,7 @@ from allura.lib.security import (require_access, has_access, require, require_authenticated) from allura.lib import widgets as w from allura.lib import validators as V +from allura.lib.utils import permanent_redirect from allura.lib.widgets import form_fields as ffw from allura.lib.widgets.subscriptions import SubscribeForm from allura.lib.plugin import ImportIdConverter @@ -380,7 +379,7 @@ class ForgeTrackerApp(Application): links = links + search_bins links.append(SitemapEntry('Help')) links.append( - SitemapEntry('Formatting Help', self.config.url() + 'markdown_syntax')) + SitemapEntry('Formatting Help', '/nf/markdown_syntax', extra_html_attrs={'target': '_blank'})) return links def sidebar_menu_js(self): @@ -905,15 +904,9 @@ class RootController(BaseController, FeedController): subscribed_to_tool=M.Mailbox.subscribed(), ) - @expose('jinja:allura:templates/markdown_syntax.html') + @expose() def markdown_syntax(self, **kw): - """Static page explaining markdown.""" - return dict() - - @expose('jinja:allura:templates/markdown_syntax_dialog.html') - def markdown_syntax_dialog(self, **kw): - """Static page explaining markdown.""" - return dict() + permanent_redirect('/nf/markdown_syntax') @memorable_forget() @expose() diff --git a/ForgeWiki/forgewiki/tests/functional/test_root.py b/ForgeWiki/forgewiki/tests/functional/test_root.py index 4c4f284..5b98fbc 100644 --- a/ForgeWiki/forgewiki/tests/functional/test_root.py +++ b/ForgeWiki/forgewiki/tests/functional/test_root.py @@ -73,8 +73,8 @@ class TestRootController(TestController): assert 'Create page' in r.text def test_root_markdown_syntax(self): - response = self.app.get('/wiki/markdown_syntax/') - assert 'Markdown Syntax' in response + response = self.app.get('/wiki/markdown_syntax/', status=301) + assert response.location.endswith('/nf/markdown_syntax') def test_root_browse_tags(self): response = self.app.get('/wiki/browse_tags/') diff --git a/ForgeWiki/forgewiki/wiki_main.py b/ForgeWiki/forgewiki/wiki_main.py index 4d47311..3b8af16 100644 --- a/ForgeWiki/forgewiki/wiki_main.py +++ b/ForgeWiki/forgewiki/wiki_main.py @@ -278,7 +278,7 @@ The wiki uses [Markdown](%s) syntax. links.append(SitemapEntry(subscribe_title, subscribe_url, ui_icon=g.icons['mail'])) if not admin_menu: links += [SitemapEntry(''), - SitemapEntry('Formatting Help', self.url + 'markdown_syntax/')] + SitemapEntry('Formatting Help', '/nf/markdown_syntax', extra_html_attrs={'target': '_blank'})] return links def admin_menu(self, skip_common_menu=False): @@ -519,17 +519,9 @@ class RootController(BaseController, DispatchIndex, FeedController): def create_wiki_page(self, **kw): return {} - @with_trailing_slash - @expose('jinja:allura:templates/markdown_syntax.html') + @expose() def markdown_syntax(self, **kw): - 'Display a page about how to use markdown.' - return dict(example=MARKDOWN_EXAMPLE) - - @with_trailing_slash - @expose('jinja:allura:templates/markdown_syntax_dialog.html') - def markdown_syntax_dialog(self, **kw): - 'Display a page about how to use markdown.' - return dict(example=MARKDOWN_EXAMPLE) + permanent_redirect('/nf/markdown_syntax') @expose() @require_post() @@ -839,16 +831,6 @@ class WikiAttachmentsController(ac.AttachmentsController): AttachmentControllerClass = WikiAttachmentController -MARKDOWN_EXAMPLE = ''' -# First-level heading - -Some *emphasized* and **strong** text - -#### Fourth-level heading - -''' - - class RootRestController(BaseController, AppRestControllerMixin): def __init__(self):
