Skip to content

Commit 6b8e6cc

Browse files
committed
feat: add show_line_numbers config option, remove anchor line numbers, fix caching, fix double request with htmx, refactor
1 parent 9adb35f commit 6b8e6cc

21 files changed

Lines changed: 189 additions & 102 deletions

ckanext/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# encoding: utf-8
2-
31
# this is a namespace package
42
try:
53
import pkg_resources

ckanext/pygments/assets/css/pygments.css

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,6 @@
88
gap: 0.5rem;
99
}
1010

11-
12-
.pygments-highlight h2 {
13-
display: none;
14-
}
15-
1611
#pygments-spinner {
1712
gap: 0.25rem;
1813
display: none;
@@ -28,7 +23,25 @@ body.pygments-request-pending {
2823

2924
}
3025

31-
.pygments_highlight {
26+
.ckanext-datapreview .pgh {
3227
max-height: 700px;
3328
overflow: auto;
3429
}
30+
31+
.ckanext-datapreview[disabled] {
32+
pointer-events: none;
33+
opacity: 0.5;
34+
}
35+
36+
.pgh {
37+
width: 100%;
38+
}
39+
40+
.pgh pre {
41+
font-size: 1em;
42+
line-height: 1.4;
43+
}
44+
45+
.pgh .linenos a {
46+
color: inherit !important;
47+
}

ckanext/pygments/assets/js/pygment-line-highlight.js

Lines changed: 0 additions & 24 deletions
This file was deleted.

ckanext/pygments/assets/webassets.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ pygments-js:
33
output: ckanext-pygments/%(version)s-pygments.js
44
contents:
55
- js/pygment-global.js
6-
- js/pygment-line-highlight.js
76
extra:
87
preload:
98
- base/main

ckanext/pygments/cache.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ def set_data(
4545
cache_ttl,
4646
data,
4747
)
48-
except Exception as e:
49-
log.exception("Pygments: failed to save data to Redis: %s", e)
48+
except Exception:
49+
log.exception("Pygments: failed to save data to Redis")
5050

5151
def invalidate(self, resource_id: str, resource_view_id: str | None = None) -> None:
5252
"""Invalidate cache by key"""

ckanext/pygments/config.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
CONF_DEFAULT_VIEW_NAME = "ckanext.pygments.default.view_name"
1616
CONF_DEFAULT_DESCRIPTION = "ckanext.pygments.default.description"
17+
CONF_DEFAULT_SHOW_LINE_NUMBERS = "ckanext.pygments.default.show_line_numbers"
1718

1819

1920
def is_format_supported(fmt: str) -> bool:
@@ -63,3 +64,8 @@ def get_default_view_name() -> str:
6364
def get_default_description() -> str:
6465
"""Get the default description"""
6566
return tk.config[CONF_DEFAULT_DESCRIPTION]
67+
68+
69+
def get_default_show_line_numbers() -> bool:
70+
"""Get the default setting for showing line numbers."""
71+
return tk.asbool(tk.config[CONF_DEFAULT_SHOW_LINE_NUMBERS])

ckanext/pygments/config_declaration.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,9 @@ groups:
6161
description: Default description
6262
default: ""
6363
editable: true
64+
65+
- key: ckanext.pygments.default.show_line_numbers
66+
description: Show Line Numbers by Default
67+
default: false
68+
type: bool
69+
editable: true

ckanext/pygments/config_schema.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,13 @@ fields:
7676
- field_name: ckanext.pygments.default.description
7777
label: Default description
7878
form_display: text.html
79+
80+
- field_name: ckanext.pygments.default.show_line_numbers
81+
label: Show Line Numbers by Default
82+
preset: select
83+
required: true
84+
choices:
85+
- value: true
86+
label: Yes
87+
- value: false
88+
label: No

ckanext/pygments/logic/schema.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
from __future__ import annotations
22

3-
from typing import Any, Dict
4-
53
from ckan.logic.schema import validator_args
4+
from ckan import types
65

76
import ckanext.pygments.config as pygment_config
87
from ckanext.pygments.utils import get_list_of_themes
98

10-
Schema = Dict[str, Any]
11-
129

1310
@validator_args
1411
def get_preview_schema(
@@ -19,7 +16,8 @@ def get_preview_schema(
1916
one_of,
2017
int_validator,
2118
pygment_max_size,
22-
) -> Schema:
19+
boolean_validator,
20+
) -> types.Schema:
2321
return {
2422
"file_url": [ignore_empty, unicode_safe, url_validator],
2523
"theme": [
@@ -32,4 +30,8 @@ def get_preview_schema(
3230
int_validator,
3331
pygment_max_size,
3432
],
33+
"show_line_numbers": [
34+
default(pygment_config.get_default_show_line_numbers()),
35+
boolean_validator,
36+
],
3537
}

ckanext/pygments/plugin.py

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44

55
import ckan.plugins as p
66
import ckan.plugins.toolkit as tk
7-
import ckan.types as types
7+
from ckan import types
8+
from ckan.common import CKANConfig
89
from ckan.types import Context, DataDict
910

1011
import ckanext.pygments.cache as pygment_cache
@@ -25,7 +26,7 @@ class PygmentsPlugin(p.SingletonPlugin):
2526

2627
# IConfigurer
2728

28-
def update_config(self, config_):
29+
def update_config(self, config_: CKANConfig) -> None:
2930
tk.add_template_directory(config_, "templates")
3031
tk.add_resource("assets", "pygments")
3132

@@ -43,9 +44,7 @@ def info(self) -> dict[str, Any]:
4344
}
4445

4546
def can_view(self, data_dict: DataDict) -> bool:
46-
return pygment_config.is_format_supported(
47-
data_dict["resource"].get("format", "").lower()
48-
)
47+
return pygment_config.is_format_supported(data_dict["resource"].get("format", "").lower())
4948

5049
def view_template(self, context: Context, data_dict: DataDict) -> str:
5150
return "pygments/pygment_preview.html"
@@ -54,12 +53,9 @@ def form_template(self, context: Context, data_dict: DataDict) -> str:
5453
return "pygments/pygment_form.html"
5554

5655
def setup_template_variables(self, context: Context, data_dict: DataDict) -> None:
57-
data_dict["resource_view"].setdefault(
58-
"title", pygment_config.get_default_view_name()
59-
)
60-
data_dict["resource_view"].setdefault(
61-
"description", pygment_config.get_default_description()
62-
)
56+
data_dict["resource_view"].setdefault("title", pygment_config.get_default_view_name())
57+
data_dict["resource_view"].setdefault("description", pygment_config.get_default_description())
58+
data_dict["resource_view"].setdefault("show_line_numbers", pygment_config.get_default_show_line_numbers())
6359

6460
# IResourceController
6561

0 commit comments

Comments
 (0)