Skip to content

Commit 2d37698

Browse files
committed
Org: Adds a preview field for short links
TYPE: Feature LINK: OGC-3259
1 parent 75a7995 commit 2d37698

6 files changed

Lines changed: 68 additions & 15 deletions

File tree

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ repos:
4242
- id: eslint
4343
files: '^src/.*\.jsx?$'
4444
additional_dependencies:
45-
- eslint-react
45+
- eslint-plugin-react
4646
- repo: https://github.com/PyCQA/bandit
4747
rev: 1.9.4
4848
hooks:

src/onegov/form/assets/js/preview-widget.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ var PreviewWidgetHandler = function(el) {
6969
field.addEventListener('click', submit, false);
7070
},
7171
'type': function(field) {
72-
field.addEventListener('keypress', debounce(function() {
72+
field.addEventListener('keyup', debounce(function() {
7373
submit();
7474
}, 250));
7575
},

src/onegov/org/forms/settings.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,16 @@ class LinksSettingsForm(Form):
535535
render_kw={'rows': 10}
536536
)
537537

538+
preview = PreviewField(
539+
label=_('Preview'),
540+
fields=('short_links',),
541+
events=('change', 'type'),
542+
url=lambda meta: meta.request.link(
543+
meta.request.app.org,
544+
name='link-settings-preview'
545+
)
546+
)
547+
538548
def validate_short_links(self, field: TextAreaField) -> None:
539549
if not field.data:
540550
return

src/onegov/org/theme/styles/org.scss

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2422,11 +2422,13 @@ div#redactor-droparea {
24222422
}
24232423
}
24242424

2425-
.form-preview-widget .holidays {
2426-
display: block;
2427-
font-size: .875rem;
2428-
list-style: none;
2429-
margin: 0 0 1rem;
2425+
.form-preview-widget {
2426+
.holidays, .short-links {
2427+
display: block;
2428+
font-size: .875rem;
2429+
list-style: none;
2430+
margin: 0 0 1rem;
2431+
}
24302432
}
24312433

24322434
.danger-zone {

src/onegov/org/views/settings.py

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@
66
from dectate import Query
77
from markupsafe import Markup
88
from webob.exc import HTTPForbidden
9+
from onegov.api.models import ApiKey
910
from onegov.core.elements import Link, Confirm, Intercooler, BackLink
1011
from onegov.core.security import Secret
1112
from onegov.core.templates import render_macro
1213
from onegov.form import Form
1314
from onegov.org import _
15+
from onegov.org.app import OrgApp
1416
from onegov.org.forms import AnalyticsSettingsForm
1517
from onegov.org.forms import FooterSettingsForm
1618
from onegov.org.forms import AppearanceSettingsForm
@@ -25,14 +27,13 @@
2527
GeverSettingsForm, OneGovApiSettingsForm, DataRetentionPolicyForm,
2628
VATSettingsForm, EventSettingsForm, KabaSettingsForm,
2729
ResourceSettingsForm)
28-
from onegov.org.management import LinkHealthCheck
2930
from onegov.org.layout import DefaultLayout
3031
from onegov.org.layout import SettingsLayout
32+
from onegov.org.management import LinkHealthCheck
3133
from onegov.org.management import LinkMigration
3234
from onegov.org.models import Organisation
3335
from onegov.org.models import SwissHolidays
34-
from onegov.api.models import ApiKey
35-
from onegov.org.app import OrgApp
36+
from onegov.org.path import ShortLink
3637
from uuid import uuid4
3738

3839

@@ -502,6 +503,44 @@ def preview_holiday_settings(
502503
)
503504

504505

506+
@OrgApp.form(model=Organisation, name='link-settings-preview',
507+
permission=Secret, form=LinksSettingsForm)
508+
def preview_link_settings(
509+
self: Organisation,
510+
request: OrgRequest,
511+
form: LinksSettingsForm,
512+
layout: DefaultLayout | None = None
513+
) -> str:
514+
515+
layout = layout or DefaultLayout(self, request)
516+
link_names = [
517+
parts[0]
518+
for line in (form.short_links.data or '').splitlines()
519+
if len(parts := line.split(':', 1)) == 2
520+
]
521+
522+
if not link_names:
523+
msg = request.translate(_('No short links defined'))
524+
return f'<i class="short-links">{msg}</i>'
525+
526+
return Markup('<ul class="short-links">{}</ul>').format(
527+
Markup('').join(
528+
Markup(
529+
'<li><a href="{0}" target="_blank">{0}</a></li>'
530+
).format(
531+
request.class_link(
532+
ShortLink,
533+
{'name': name}
534+
# NOTE: Even though @ is reserved, it's safe to use
535+
# in the position we're using it in, browsers
536+
# will automatically convert them.
537+
).replace('/%40', '/@'),
538+
)
539+
for name in link_names
540+
)
541+
)
542+
543+
505544
@OrgApp.form(
506545
model=Organisation, name='migrate-links', template='form.pt',
507546
permission=Secret, form=LinkMigrationForm, setting=_('Link Migration'),

src/onegov/town6/theme/styles/org-settings.scss

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,13 @@
4747
margin-left: -1em;
4848
}
4949

50-
.form-preview-widget .holidays {
51-
display: block;
52-
font-size: .875rem;
53-
list-style: none;
54-
margin: 0 0 1rem;
50+
.form-preview-widget {
51+
.holidays, .short-links {
52+
display: block;
53+
font-size: .875rem;
54+
list-style: none;
55+
margin: 0 0 1rem;
56+
}
5557
}
5658

5759
#header_links {

0 commit comments

Comments
 (0)